Ignore certain Vim windows (e.g. quickfix)

I think it would be a nice feature to allow for skipping/ignoring some Vim windows like quickfix/location lists, i.e. when navigating down and it would switch to a quickfix window in Vim, it would go back in Vim, but switch the tmux pane instead.
Code for this should go here then: https://github.com/christoomey/vim-tmux-navigator/blob/daae735fbb0fc10e51cfe0e9cba01de53c19417d/plugin/tmux_navigator.vim#L92.
What do you think?
My use case is that I usually am skipping over quickfix windows when using vim-tmux-navigator's mappings (i.e. have to use them twice).

OTOH, I like the consistency of being able to use the same mappings regardless of the window type or pane boundary - which I feel is the selling point of this plugin, including to switch to a quickfix window, for instance.  That said, I do see some value in being able to skip window types under certain circumstances.  I'd suggest such a feature if added be made optional and user configurable.

Hi @blueyed, I've done a bit of thinking on this and I've concluded that I'd rather not support this distinction in the plugin proper. I personally rely on the navigation being consistent between all windows, including quickfix and others. I'm generally very wary of adding any additional code paths or complexity to the core functions of the plugin, and this feels like something that would add a non-trivial amount of code.


added glob host matching - fixes #163

Hi, I've added some code to support a fix for #163. - Pre warning this is my first bit of golang.
I updated the lookup() method in the Table class, that:

If no host defined, searches just paths (existing functionality)
If a host is defined then does a direct match (existing functionality)
If neither, then does a glob search against hosts, then does path matching for each host

I wasn't sure the best way to implement it, but this seems to work
Considering it won't affect existing functionality, I didn't add any additional configuration options, and 'go test' passed.
Also since it's my first attempt at go, I'm not sure whether it is the 'best (go) way of doing' things, or that my function and variable names are right.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.

Cool. I'll have a look later

Thanks, I also think the iterating in the glob matching would slow it down with many hosts and some sort of index cache would have been good, but just didn't have enough time on this first iteration.

I can foresee some problems when matching routes based on order - because I think in the code the ordering is based on the path, not the domain.
So ideally the code should find all the matching hosts and paths, and return the most restrictive result.

I think there is more to it also, say you have 2 routes:

urlprefix-*.abc.com/myurl
urlprefix-foo.abc.com/myurl

A request to foo.abc.com/myurl would need to match against route 2, my hacky code doesn't take this into account.

Yep that was the original problem I had, totally agree it can be done better, but I didn't want to dig too much into it without more experience with go.  I'll look into the code a bit more tomorrow.

hi all,
the feature looks interesting, any progress on it?

@osigida, unfortunately no, my fork is actually working but it is not the best way of doing it, so it needs a rewrite

Let me have another look
Frank Schröder

On 15 Feb 2017, at 15:16, Mariusz<EMAIL_ADDRESS>wrote:
@osigida, unfortunately no, my fork is actually working but it is not the best way of doing it, so it needs a rewrite
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

I took a stab at this in #163 Please have a look.

I'm going to close this PR since a change for #163 has been merged to master. Please open new tickets with a reference to #163 if there are issues with the provided implementation.

Thanks @magiconair


Is it supported to upgrade from 1.13.x to 2.2.2 ？

currently, I am running version 1.13.x due to issues with 1.14
I haven't seen the documentation for upgrading from 1.13.x to 2.2.2 from the official documentation
Is there any way to solve my problem please?

As per the documentation you pointed to, it is not possible to upgrade from 1.13.x to 2.x without downtime.

@alexgervais is it possible if you set up a second LB, then switch DNS?  Or is there an issue with clashing API versions?

It might work given your setup, or apiext might somehow implode because of CRD differences. We don't officially support migrating from 1.13, but @kflynn might have attempted this migration path and might have suggestions.

Supported migration paths are noted here.  If you'd be interested in a live session on migration, please sign up here.


Update deep-source.yml

:white_check_mark: Build GuiStracini.HolidayAPI 3.3.312 completed (commit https://github.com/guibranco/GuiStracini.HolidayAPI/commit/6b8b172bf0 by @guibranco)


Is --autoreload parameter recommended for production usage?

Hi there,
We have a project running with django-hurricane setup, however we are wondering if the --autoreload parameter is something that could somehow interfere with the proper work in the production setup?
We are experiencing some issues with grpc clients and investigating any potential bottlenecks and hotspots.

Hi @viginti23, the --autoreload flag might influence a production setup. It is mainly intended for development environments, where it is convenient to have the app server reload when there are code changes. This is not a use case we see in a production setup.
Do you have this case, is autoreloading a requirement you have for a production setup? If not, we would recommend to remove the flag in production.

Thank you for the info, we removed the flag and saved a ton of CPU. :)


STT0044: Create a google sheet to maintain hours of data from each department uploaded.

Description
Create a google sheet that shows the monthly uploaded data hours to each department in stt pecha tools.
Completion Criteria
A sheet with monthly stats of data uploaded, total hours of data available, and total hours uploaded.
Implementation
Subtask

[x] Create a google sheet that has structure to show the required stats
[ ] update the google sheet of each department with dates column and fill uploaded date
[ ] after uploading update the monthly stats sheet of respective department.

Can we get the google sheet sample.

add audio duration to stt pc,

adjust time format of each department catalog


compiling SBE

Hello, I'm getting this when I try :
./gradlew
......
Could not resolve all dependencies for configuration ':runtime'.

Could not find uk.co.real-logic:Agrona:0.2.1-SNAPSHOT.
Searched in the following locations:
file:/home/cme/.m2/repository/uk/co/real-logic/Agrona/0.2.1-SNAPSHOT/maven-metadata.xml
file:/home/cme/.m2/repository/uk/co/real-logic/Agrona/0.2.1-SNAPSHOT/Agrona-0.2.1-SNAPSHOT.pom
file:/home/cme/.m2/repository/uk/co/real-logic/Agrona/0.2.1-SNAPSHOT/Agrona-0.2.1-SNAPSHOT.jar
https://repo1.maven.org/maven2/uk/co/real-logic/Agrona/0.2.1-SNAPSHOT/maven-metadata.xml
https://repo1.maven.org/maven2/uk/co/real-logic/Agrona/0.2.1-SNAPSHOT/Agrona-0.2.1-SNAPSHOT.pom
https://repo1.maven.org/maven2/uk/co/real-logic/Agrona/0.2.1-SNAPSHOT/Agrona-0.2.1-SNAPSHOT.jar
Required by:
uk.co.real-logic:sbe:1.0.4-RC2-SNAPSHOT

Thanks

You need to have Agrona build local as a dependence. I've updated the project to pull the latest Agrona 0.3 from Maven Central.

Yes, I did the same modifying build.gradle.
Now, how do I compile cpp (it was ant cpp  / ant cpp:test etc.)
I'm a bit lost, is there some docs somewhere to go through the build process ?
thanks!

The build process is a bit in transition and needs a little love and documentation. I'll leave @tmontgomery to update on how to best do that.

C++ is now entirely cmake based build. I've updated things to make them work for me on Mac. As well as update the README. Will need some more checks for other platforms as I have time.

Do you plan to modify ant build as well to support Argona dependency?

@asinitsyn Not at this time. The current plan is to go forward with gradle and CMake.
Is ant your preferred build? Or just curious?

Our main build tool is ant and I don't have gradle installed. Not a big deal. Will install gradle.
I am more concerned with Java 7 support. Also do you plan to continue deploying latest version to maven repository? The last one was 1.0.3-RC2 back in Sept 2014. Tnx

When the build gets to a good point in the migration, definitely will push a new release. Also, we are looking at Java 7 vs. 8 as well from #244
BTW, the gradle wrapper should download automatically. So, it shouldn't need to be pre-installed.

I'm going to close this issue for now. We have an action to remove the old Ant build and are discussing if Java 7 should be supported for future releases. RC2 can be fetch from Maven. It is likely an future support that would cover RC3 would be Java 8 or greater now that Java 7 is end of life.


Includes All Operator Performs includes all Logic on wrong side of expression

Cypher DSL Version: 2023.7.0 (experienced with earlier versions as well)
Sample Code:
        var node = Cypher.node("Test").named("testNode");
        var builder = Cypher.match(node)
                .where(node.property("listProp").includesAll(Cypher.literalOf(List.of("string 1", "string 2"))))
                .returning(node);
        log.info(builder.build().getCypher());

Sample Data:
create (t:Test {listProp: ["string 1", "string 2", "string 3"]})
The above code generates the following cypher:
MATCH (testNode:Test) WHERE all(x IN testNode.listProp WHERE x IN ['string 1', 'string 2']) RETURN testNode which incorrectly checks if all node's listProp values are in the inputted list value and does not return the sample node (even though the sample node contains all the inputted values)
According to the documentation:
	/**
	 * Creates a condition that checks whether this {@code expression} includes all elements of {@code rhs}.
	 *
	 * @param rhs The other collection to compare to, must evaluate into a list during runtime.
	 * @return A new condition
	 * @since 2022.7.0
	 */
	@NotNull @Contract(pure = true)
	default Condition includesAll(Expression rhs) {
		return Conditions.includesAll(this, rhs);
	}

It should be checking the node property list (lhs) contains all the values of the inputted list (rhs). The logic performed is backwards.
The includesAny call has the same 'problem' although because it's an any the logic performed is accurate as it's looking only for commonalities between the lists, there may be edge cases with empty lists where the logic performed is bizarre and incorrect.

The Conditions.includesAll and includesAny just need to flip around the lhs and the rhs to get proper behavior.
Old:
	static Condition includesAll(Expression lhs, Expression rhs) {
		SymbolicName x = SymbolicName.of("x");
		return Predicates.all(x).in(lhs).where(x.in(rhs));
	}

	static Condition includesAny(Expression lhs, Expression rhs) {
		SymbolicName x = SymbolicName.of("x");
		return Predicates.any(x).in(lhs).where(x.in(rhs));
	}

Adjusted:
	static Condition includesAll(Expression lhs, Expression rhs) {
		SymbolicName x = SymbolicName.of("x");
		return Predicates.all(x).in(rhs).where(x.in(lhs));
	}

	static Condition includesAny(Expression lhs, Expression rhs) {
		SymbolicName x = SymbolicName.of("x");
		return Predicates.any(x).in(rhs).where(x.in(lhs));
	}

I tried opening up a pull request but not authorized to push to the repo.

Thanks, @jrsperry for both the issue and the attempt to PR, much appreciated.
I'll have a look today.
WRT PR: Just fork the repo and create a PR in the future. Pushes to this repo are only for contributors and maintainers.

Introduced in #374 and I did oversee this. Sorry.

awesome.


non_max_suppression GPU version not working on TF 1.15

Getting the following error on trying to place non_max_suppression() on GPU.
  File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/python/framework/ops.py", line 5407, in _eval_using_default_session
    return session.run(tensors, feed_dict)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/python/client/session.py", line 956, in run
    run_metadata_ptr)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/python/client/session.py", line 1180, in _run
    feed_dict_tensor, options, run_metadata)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/python/client/session.py", line 1359, in _do_run
    run_metadata)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/python/client/session.py", line 1384, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot assign a device for operation non_max_suppression/NonMaxSuppressionV3: node non_max_suppression/NonMaxSuppressionV3 (defined at /usr/local/lib/python2.7/dist-packages/tensorflow_core/python/framework/ops.py:1748)  was explicitly assigned to /device:GPU:0 but available devices are [ /job:localhost/replica:0/task:0/device:CPU:0, /job:localhost/replica:0/task:0/device:XLA_CPU:0 ]. Make sure the device specification refers to a valid device.
         [[non_max_suppression/NonMaxSuppressionV3]]

System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow):
OS Platform and Distribution (e.g., Linux Ubuntu 16.04): 18.04
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device:
TensorFlow installed from (source or binary): binary
TensorFlow version (use command below): 1.15
Python version: 2.7
Bazel version (if compiling from source):
GCC/Compiler version (if compiling from source):
CUDA/cuDNN version: 10.0
GPU model and memory: T4

You can collect some of this information using our environment capture
script
You can also obtain the TensorFlow version with: 1. TF 1.0: python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)" 2. TF 2.0: python -c "import tensorflow as tf; print(tf.version.GIT_VERSION, tf.version.VERSION)"
Describe the current behavior
Get the above error on  placing the op in GPU.
Describe the expected behavior
Not see that error.
Code to reproduce the issue
import tensorflow as tf
import numpy as np
import os

import time
from tensorflow.python.ops import gen_image_ops

def yolo_non_max_suppression(scores, boxes, classes, sess, max_boxes = 10, iou_threshold = 0.5):
    """
    Applies Non-max suppression (NMS) to set of boxes

    Arguments:
    scores -- tensor of shape (None,), output of yolo_filter_boxes()
    boxes -- tensor of shape (None, 4), output of yolo_filter_boxes() that have been scaled to the image size (see later)
    classes -- tensor of shape (None,), output of yolo_filter_boxes()
    max_boxes -- integer, maximum number of predicted boxes you'd like
    iou_threshold -- real value, "intersection over union" threshold used for NMS filtering

    Returns:
    scores -- tensor of shape (, None), predicted score for each box
    boxes -- tensor of shape (4, None), predicted box coordinates
    classes -- tensor of shape (, None), predicted class for each box

    Note: The "None" dimension of the output tensors has obviously to be less than max_boxes. Note also that this
    function will transpose the shapes of scores, boxes, classes. This is made for convenience.
    """

    init_val_np = np.array ( [max_boxes], dtype=np.int32)
    max_boxes_tensor = tf.Variable(max_boxes,  dtype='int32')     # tensor to be used in tf.image.non_max_suppression()
    sess.run(tf.variables_initializer([max_boxes_tensor])) # initialize variable max_boxes_tensor

    # Use tf.image.non_max_suppression() to get the list of indices corresponding to boxes you keep
    ### START CODE HERE ### (~ 1 line)
    with tf.device("gpu:0"):
        boxes_np = boxes.eval()
        time0 = time.time()
        score_threshold = 0.1
        soft_nms_sigma=0.0
        pad_to_max_output_size=False
        for i in range(1,2):
            nms_indices = tf.image.non_max_suppression(boxes, scores, max_boxes_tensor, iou_threshold=iou_threshold)
            #nms_indices = nms(boxes_np, 0.5)
            #nms_indices = gen_image_ops.non_max_suppression_v2(boxes, scores, max_boxes_tensor, iou_threshold, )
            #nms_indices = gen_image_ops.non_max_suppression_v3(boxes, scores, max_boxes_tensor, iou_threshold, score_threshold)
            #nms_indices = gen_image_ops.non_max_suppression_v4(boxes, scores, max_boxes_tensor, iou_threshold, score_threshold, pad_to_max_output_size)
            #nms_indices = gen_image_ops.non_max_suppression_v5(boxes, scores, max_boxes_tensor, iou_threshold, score_threshold, soft_nms_sigma)
            if i%100 == 0:
                print (i, (time.time() - time0)/i )
        ### END CODE HERE ###

        ### START CODE HERE ### (~ 3 lines)
        scores = tf.gather(scores, nms_indices)
        boxes = tf.gather(boxes, nms_indices)
        classes = tf.gather(classes, nms_indices)
        summary_writer = tf.summary.FileWriter(os.getenv('TENSORBOARD_DIR'), sess.graph)
        ### END CODE HERE ###

    return scores, boxes, classes

def test_yolo_non_max_suppression():
    with tf.device("cpu:0"):
        with tf.Session() as test_b:
            scores = tf.random_normal([54,], mean=1, stddev=4, seed = 1)
            boxes = tf.random_normal([54, 4], mean=1, stddev=4, seed = 1)
            classes = tf.random_normal([54,], mean=1, stddev=4, seed = 1)
            scores, boxes, classes = yolo_non_max_suppression(scores, boxes, classes, test_b)
            #scores, boxes, classes = yolo_non_max_suppression0(scores, boxes, classes)
            print("scores[2] = " + str(scores[2].eval()))
            print("boxes[2] = " + str(boxes[2].eval()))
            print("classes[2] = " + str(classes[2].eval()))
            print("scores.shape = " + str(scores.eval().shape))
            print("boxes.shape = " + str(boxes.eval().shape))
            print("classes.shape = " + str(classes.eval().shape))

test_yolo_non_max_suppression()

Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.

@sgambient,
Couldn't reproduce the Error in Google Colab with Python Version 2.7 and with Runtime Type as GPU. Here is the Gist.
One probable solution, as per this Stack Overflow Issue is to change/add the Data Type to tf.float32.
Can you please try replacing the code,
scores = tf.random_normal([54,], mean=1, stddev=4, seed = 1)
boxes = tf.random_normal([54, 4], mean=1, stddev=4, seed = 1)
classes = tf.random_normal([54,], mean=1, stddev=4, seed = 1)

with below code and let us know how it goes. Thanks!
scores = tf.random_normal([54,], mean=1, dtype = tf.float32, stddev=4, seed = 1)
boxes = tf.random_normal([54, 4], mean=1, dtype = tf.float32, stddev=4, seed = 1)
classes = tf.random_normal([54,], mean=1, dtype = tf.float32, stddev=4, seed = 1)

I've created a minimal reproducing example for this but it does not use the Colab environment:
"""Minimum reproducing example.

Device specs:
    GPU: NVIDIA RTX 2080
    TF version: 1.15 (tensorflow/tensorflow:1.15.0-gpu-py3 container)
    Python version: 3.6.8
    Host driver: 418.56
    CUDA version: 10.1
"""
import numpy as np
import tensorflow as tf
from tensorflow.python.ops import gen_image_ops

# Use placeholder to guarantee that we are feeding floats
boxes = tf.placeholder(tf.float32, [5, 4])
scores = tf.placeholder(tf.float32, [5])
with tf.device('gpu:0'):
    # Try out all 5 of the NMS options, tf.image.non_max_suppression uses V3
    # behind the scenes.
    indices1 = tf.image.non_max_suppression(
        boxes=boxes, scores=scores, max_output_size=2, iou_threshold=0.5)
    indices2 = gen_image_ops.non_max_suppression_v2(
        boxes=boxes, scores=scores, max_output_size=2, iou_threshold=0.5)
    indices3 = gen_image_ops.non_max_suppression_v3(
        boxes=boxes, scores=scores, max_output_size=2, iou_threshold=0.5,
        score_threshold=0.5)
    indices4 = gen_image_ops.non_max_suppression_v4(
        boxes=boxes, scores=scores, max_output_size=2, iou_threshold=0.5,
        score_threshold=0.5, pad_to_max_output_size=False)
    # V5 doesn't exist in TF1.15 yet
    #indices5 = gen_image_ops.non_max_suppression_v5(
    #    boxes=boxes, scores=scores, max_output_size=2, iou_threshold=0.5,
    #    score_threshold=0.5, soft_nms_sigma=0.0, pad_to_max_output_size=False)

# Log device placement to see if NMS op is placed on GPU
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

# None of these 5 work
try:
    sess.run(indices1, feed_dict={
        boxes: np.random.random([5, 4]),
        scores: np.random.random([5])})
except Exception as e:
    print('tf.image.non_max_suppression failed: ', e)

try:
    sess.run(indices2, feed_dict={
        boxes: np.random.random([5, 4]),
        scores: np.random.random([5])})
except Exception as e:
    print('gen_image_ops.non_max_suppression_v2 failed: ', e)

try:
    sess.run(indices3, feed_dict={
        boxes: np.random.random([5, 4]),
        scores: np.random.random([5])})
except Exception as e:
    print('gen_image_ops.non_max_suppression_v3 failed: ', e)

try:
    sess.run(indices4, feed_dict={
        boxes: np.random.random([5, 4]),
        scores: np.random.random([5])})
except Exception as e:
    print('gen_image_ops.non_max_suppression_v4 failed: ', e)

#try:
#    sess.run(indices5, feed_dict={
#        boxes: np.random.random([5, 4]),
#        scores: np.random.random([5])})
#except Exception as e:
#    print('gen_image_ops.non_max_suppression_v5 failed: ', e)

All of the NMS options fail with the same error, which includes the error log:
Root Member(assigned_device_name_index_=-1 requested_device_name_='/device:GPU:0' assigned_device_name_='' resource_device_name_='' supported_device_types_=[
CPU] possible_devices_=[]
NonMaxSuppressionV3: CPU

Colocation members, user-requested devices, and framework assigned devices, if any:
  non_max_suppression/NonMaxSuppressionV3 (NonMaxSuppressionV3) /device:GPU:0

Op: NonMaxSuppressionV3
Node attrs: T=DT_FLOAT
Registered kernels:
  device='CPU'; T in [DT_HALF]
  device='CPU'; T in [DT_FLOAT]

         [[node non_max_suppression/NonMaxSuppressionV3 (defined at nms.py:20) ]]

Removing tf.device('gpu:0') works but the device placement shows that the op is always placed on CPU.
It seems that the GPU kernel does not exist? I see the registered kernel here however: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/non_max_suppression_op.cc#L913
Is it possible that this is not built into the TF1.15 release?

I used the  TF 1.15 container from "docker pull tensorflow/tensorflow:1.15.0-gpu ".  Is that different from what Colab runs ?

I used the TF 1.15 container from "docker pull tensorflow/tensorflow:1.15.0-gpu ". Is that different from what Colab TF 1.15 version ?

It is equivalent to using tensorflow-gpu-1.15.0 on colab
@sgambient The error states that you are trying to do an operation that can’t be done on a GPU.
If this is the case, you can either manually change the device to a CPU for this operation, or set TensorFlow to automatically change the device in this case. To do this, set allow_soft_placement tp True in the configuration, done as part of creating the session. The prototype looks like this:
with tf.Session(config=tf.ConfigProto(allow_soft_placement=True)):
    # Run your graph here

For more info you can refer to the following link

A quick update. Looks like the cause was   "docker pull tensorflow/tensorflow:1.15.0-gpu" container  needs to be started with  nvidia-docker for the gpu ops to be visible.   But the  bigger issue I see now is that the gpu version is almost 3x slower !!  Have added my test to the same Gist .

@sgambient Please create a new issue regarding the performance issue. This would help us track the issue separately. Thanks!


Update and pin mypy to 1.9

Summary of changes

pin mypy version so a new version doesn't suddenly cause the CI to fail
Fix new failures in 1.9
Explain why we're not running mypy on Python 3.12 in the CI yet

Pull Request Checklist

[x] Changes have tests (these are test fixes)
[x] News fragment added in newsfragments/. (no user facing changes)
(See documentation for details)

cygwin failure is unrelated:
HTTP status 404 fetching http://mirrors.kernel.org/sourceware/cygwin/x86_64/setup.ini.sig
mbox note: Unable to get http://mirrors.kernel.org/sourceware/cygwin/x86_64/setup.ini.sig from <http://mirrors.kernel.org/sourceware/cygwin/>
unattended_mode is set at mbox: returning default value
mbox note: Unable to get setup from <http://mirrors.kernel.org/sourceware/cygwin/>
unattended_mode is set at mbox: returning default value

https://mirrors.kernel.org/sourceware/cygwin/x86_64/setup.bz2.sig


Response.buffer() sometimes hangs forever when iframe loading is cancelled

Steps to reproduce

Puppeteer version: puppeteer-8.0.0
Platform / OS version: Linux
URLs (if applicable): https://chireiden.torlan.ru/1d424954-f285-43e4-8230-a9751c9e8d2e.html
Node.js version: v14.16.0

What steps will reproduce the problem?

Have a Puppeteer script that does page.on('response', ...), and retrieves all the bodies with await res.buffer()
Have a web pages that has iframes, and removes them from DOM, resulting in cancelled load.

The script below removes the element right inside the response handler. This is not necessary to trigger the problem (i.e. page itself might remove the element at the right moment), but the bug is hard to reliably reproduce without it. Some pages in the wild do this stuff accidentally, so this problem is not really artificial.
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  const pendingBodies = {};

  const promises = [];

  function watchPromise(f) {
    return function(res) {
     const promise = f(res);
     promises.push(promise);
     return promise;
    };
  };

  page.on('response', watchPromise(async function(res) {
    if (res.url() === "https://www.youtube.com/embed/ojk-YRMXSdc") {
        await page.evaluate(() => {
            document.getElementById("foobar").remove();
        });
    }
    pendingBodies[res.request()._requestId] = res.url();
    console.log(`${res.url()}`);
    try {
        const data = await res.buffer();
        console.log(`${res.url()} len=${data.length}`);
    } catch (e) {
        console.log(`${res.url()} e=${e}`);
    } finally {
        delete pendingBodies[res.request()._requestId];
    }
  }));

  let stopChecking = false;
  (async function() {
    while (!stopChecking) {
      await new Promise(resolve => setTimeout(resolve, 1000));
      for (let x in pendingBodies) {
        console.log(`${x} ${pendingBodies[x]}`);
      }
    }
  })();

  await page.goto("https://chireiden.torlan.ru/1d424954-f285-43e4-8230-a9751c9e8d2e.html", {waitUntil: "networkidle0"});
  console.log("networkidle0");
  await Promise.all(promises);
  console.log("awaited");
  await browser.close();
  console.log("closed");
  stopChecking = true;
})();

What is the expected result?
res.buffer() either returns success or at least an error.
What happens instead?
res.buffer() hangs forever.
res.buffer() waits for either Network.loadingFinished, Network.loadingFailed or redirect request before attempting to call Network.getResponseBody. In some circumstances, neither of them is emitted after Network.responseReceived.
I've initially encountered this bug with https://github.com/pyppeteer/pyppeteer, but the code for retrieving bodies is pretty much the same.

Relevant debug trace
  puppeteer:protocol:RECV ◀ {"method":"Network.responseReceived","params":{"requestId":"28D9422EAB71B3C4120E9F9B969253E7","loaderId":"28D9422EAB71B3C4120E9F9B969253E7","timestamp":1185833.533735,"type":"Document","response":{"url":"https://www.youtube.com/embed/ojk-YRMXSdc","status":200,"statusText":"","headers":{"content-type":"text/html; charset=utf-8","x-content-type-options":"nosniff","cache-control":"no-cache, no-store, max-age=0, must-revalidate","pragma":"no-cache","expires":"Mon, 01 Jan 1990 00:00:00 GMT","date":"Fri, 16 Apr 2021 18:15:17 GMT","strict-transport-security":"max-age=31536000","p3p":"CP=\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl=en for more info.\"","content-encoding":"br","server":"ESF","x-xss-protection":"0","set-cookie":"YSC=6fC8eo0jxtU; Domain=.youtube.com; Path=/; Secure; HttpOnly; SameSite=none\nVISITOR_INFO1_LIVE=Vj-W8hEGhEI; Domain=.youtube.com; Expires=Wed, 13-Oct-2021 18:15:17 GMT; Path=/; Secure; HttpOnly; SameSite=none","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""},"mimeType":"text/html","requestHeaders":{":method":"GET",":authority":"www.youtube.com",":scheme":"https",":path":"/embed/ojk-YRMXSdc","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/90.0.4427.0 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","sec-fetch-site":"cross-site","sec-fetch-mode":"navigate","sec-fetch-dest":"iframe","referer":"https://chireiden.torlan.ru/","accept-encoding":"gzip, deflate, br","accept-language":"en-US"},"connectionReused":false,"connectionId":23,"remoteIPAddress":"[2a00:1450:4010:c08::c6]","remotePort":443,"fromDiskCache":false,"fromServiceWorker":false,"fromPrefetchCache":false,"encodedDataLength":583,"timing":{"requestTime":1185833.426036,"proxyStart":-1,"proxyEnd":-1,"dnsStart":0.162,"dnsEnd":0.81,"connectStart":0.81,"connectEnd":37.358,"sslStart":17.89,"sslEnd":37.345,"workerStart":-1,"workerReady":-1,"workerFetchStart":-1,"workerRespondWithSettled":-1,"sendStart":37.485,"sendEnd":37.59,"pushStart":0,"pushEnd":0,"receiveHeadersEnd":106.574},"responseTime":1.618596917864091e+12,"protocol":"h2","securityState":"secure","securityDetails":{"protocol":"TLS 1.3","keyExchange":"","keyExchangeGroup":"X25519","cipher":"AES_128_GCM","certificateId":0,"subjectName":"*.google.com","sanList":["*.google.com","*.android.com","*.appengine.google.com","*.bdn.dev","*.cloud.google.com","*.crowdsource.google.com","*.datacompute.google.com","*.flash.android.com","*.g.co","*.gcp.gvt2.com","*.gcpcdn.gvt1.com","*.ggpht.cn","*.gkecnapps.cn","*.google-analytics.com","*.google.ca","*.google.cl","*.google.co.in","*.google.co.jp","*.google.co.uk","*.google.com.ar","*.google.com.au","*.google.com.br","*.google.com.co","*.google.com.mx","*.google.com.tr","*.google.com.vn","*.google.de","*.google.es","*.google.fr","*.google.hu","*.google.it","*.google.nl","*.google.pl","*.google.pt","*.googleadapis.com","*.googleapis.cn","*.googlecnapps.cn","*.googlecommerce.com","*.googledownloads.cn","*.googlevideo.com","*.gstatic.cn","*.gstatic.com","*.gstaticcnapps.cn","*.gvt1.com","*.gvt2.com","*.metric.gstatic.com","*.urchin.com","*.url.google.com","*.youtube-nocookie.com","*.youtube.com","*.youtubeeducation.com","*.youtubekids.com","*.yt.be","*.ytimg.com","android.clients.google.com","android.com","developer.android.google.cn","developers.android.google.cn","g.co","ggpht.cn","gkecnapps.cn","goo.gl","google-analytics.com","google.com","googlecnapps.cn","googlecommerce.com","googledownloads.cn","source.android.google.cn","urchin.com","www.goo.gl","youtu.be","youtube.com","youtubeeducation.com","youtubekids.com","yt.be"],"issuer":"GTS CA 1O1","validFrom":1616487539,"validTo":1623745138,"signedCertificateTimestampList":[],"certificateTransparencyCompliance":"unknown"}},"frameId":"09228164839F42AF6D1709628737A091"},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +1ms
  puppeteer:protocol:SEND ► {"sessionId":"F6F83D71A7A26D12CCC9E25F65716552","method":"Runtime.callFunctionOn","params":{"functionDeclaration":"() => {\n            document.getElementById(\"foobar\").remove();\n        }\n//# sourceURL=__puppeteer_evaluation_script__\n","executionContextId":3,"arguments":[],"returnByValue":true,"awaitPromise":true,"userGesture":true},"id":18} +111ms
  puppeteer:protocol:RECV ◀ {"method":"Page.lifecycleEvent","params":{"frameId":"09228164839F42AF6D1709628737A091","loaderId":"28D9422EAB71B3C4120E9F9B969253E7","name":"init","timestamp":1185833.535555},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +2ms
  puppeteer:protocol:RECV ◀ {"method":"Page.frameNavigated","params":{"frame":{"id":"09228164839F42AF6D1709628737A091","parentId":"3DB3C951B873CF5F62F936966C0F5360","loaderId":"28D9422EAB71B3C4120E9F9B969253E7","name":"foobar","url":"https://www.youtube.com/embed/ojk-YRMXSdc","domainAndRegistry":"youtube.com","securityOrigin":"https://www.youtube.com","mimeType":"text/html","adFrameType":"none","secureContextType":"Secure","crossOriginIsolatedContextType":"NotIsolatedFeatureDisabled","gatedAPIFeatures":["SharedArrayBuffers","SharedArrayBuffersTransferAllowed"]}},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +5ms
  puppeteer:protocol:RECV ◀ {"method":"Runtime.executionContextCreated","params":{"context":{"id":5,"origin":"https://www.youtube.com","name":"","uniqueId":"-3470353198193415282.4846020058663448686","auxData":{"isDefault":true,"type":"default","frameId":"09228164839F42AF6D1709628737A091"}}},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Runtime.executionContextCreated","params":{"context":{"id":6,"origin":"","name":"__puppeteer_utility_world__","uniqueId":"-7457019959222532897.4966961672162945572","auxData":{"isDefault":false,"type":"isolated","frameId":"09228164839F42AF6D1709628737A091"}}},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Page.frameStoppedLoading","params":{"frameId":"09228164839F42AF6D1709628737A091"},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +1ms
  puppeteer:protocol:RECV ◀ {"method":"Page.loadEventFired","params":{"timestamp":1185833.541904},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Page.lifecycleEvent","params":{"frameId":"3DB3C951B873CF5F62F936966C0F5360","loaderId":"7492201769F87E4845E56AB86E699859","name":"load","timestamp":1185833.541904},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Page.frameStoppedLoading","params":{"frameId":"3DB3C951B873CF5F62F936966C0F5360"},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +1ms
  puppeteer:protocol:RECV ◀ {"method":"Page.frameDetached","params":{"frameId":"09228164839F42AF6D1709628737A091","reason":"remove"},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Runtime.executionContextDestroyed","params":{"executionContextId":5},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Runtime.executionContextDestroyed","params":{"executionContextId":6},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +1ms
  puppeteer:protocol:RECV ◀ {"id":18,"result":{"result":{"type":"undefined"}},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +0ms
https://www.youtube.com/embed/ojk-YRMXSdc
28D9422EAB71B3C4120E9F9B969253E7 https://www.youtube.com/embed/ojk-YRMXSdc
  puppeteer:protocol:RECV ◀ {"method":"Page.lifecycleEvent","params":{"frameId":"3DB3C951B873CF5F62F936966C0F5360","loaderId":"7492201769F87E4845E56AB86E699859","name":"networkAlmostIdle","timestamp":1185833.425906},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +874ms
  puppeteer:protocol:RECV ◀ {"method":"Page.lifecycleEvent","params":{"frameId":"3DB3C951B873CF5F62F936966C0F5360","loaderId":"7492201769F87E4845E56AB86E699859","name":"networkIdle","timestamp":1185833.425906},"sessionId":"F6F83D71A7A26D12CCC9E25F65716552"} +0ms
networkidle0

No, this is stil the same as of "puppeteer": "^19.4.0".


How to organize the naming convention guides according to different models/approaches.

Hi guys,
I was thinking to contribute to the Git naming conventions. In the majority of my projects I've use this model (https://nvie.com/posts/a-successful-git-branching-model/) . This branching model encourage certain naming conventions. I am aware that every developer in the community reshapes this model to his own workflow and needs. But I think worth to described the guideline as it was described in first place.
For me this is not a standard, it is just a well know naming convention guideline and I am not sure what is the best way to organice this in the guideline.
If you guys want to integrate cases like this, I would say to add  one section to the main Git section with the name Known models or Common cases  where we can explain in there which naming conventions this case encourage (keeping the same format as the main README).
What do you think?

Hi César, Thanks a lot for your question. Actually it's one of the biggest challenges that we're facing. There are many models and tastes out there and our goal for the moment is to keep it as general as possible and only list the naming conventions which are widely accepted and being used by all developers. That might come with a cost, for instance we might loose an opportunity to list something which is better than the current generally accepted naming convention, however, in order to not overwhelmed the visitors with tons of different types of information and models, we would like to keep it limited to just one taste/model per topic and technology.
This might change in the future, once we find a better way of representing different models and tastes in each section. For instance, we're planning to change Gitbook template to allow nested section under sub-section and in those case we could add the other models as sub-section.
For now, since we're sticking to the very general accepted approach, is there any thing which you can add from the model above to our current git naming conventions as an improvement?

Hi @farbodsaraf , thanks a lot for answering. :smiley:
Yes, I think I have an improvement. If we are using Feature git flow and Gitflow we can suggest to encourage the following branching naming conventions:
Branches

Branch develop: current development branch
Branch master: production code
Branches with prefix feature: branches that only include new features
Branches with prefix hotfix: branches checkout from master and only include production fixes
Usual conventions for hotfix branches: hotfix/{new-deploy-version}

Tags
If we use Semantic versioning and gitflow, may encouraged use the version number for the tag:
git tag -a {X.Y.Z} or git tag -a v{X.Y.Z}
Commits
For commit messages I would like to suggest the conventions of [Convetional Commits] https://www.conventionalcommits.org/en/v1.0.0-beta.3/
Makes sense? :no_mouth:

Hi @cesiztel, many thank again for your suggestions.
Regarding your branch suggestions, you can add all except the usual convention for hotfix branches cause our own suggested branching format which I listed below covers that as well, doesn't it?
{work type e.g.}/{2-3 word summary}/{story or ticket id}
The Tags section is missing so please feel free to add Tags to the git part.
Regarding commits, the format looks good, but you need to merge the conventional commits format with what we already have to make a very comprehensive one. Would that be possible?
Let me know your thoughts. Thanks.

Hi @farbodsaraf ,
I am preparing the PR for the tagging and another one for the commits. I think is possible add Conventional commits to it.
Thanks. I will close this issue and we can discuss over the PR's


Terminal sometimes freezes after unlocking Windows

Windows Terminal version
1.11.3471.0
Windows build number
10.0.19042.1466
Other Software
No response
Steps to reproduce
Here's what happens:
I'm in an ssh session in Windows Terminal (Version: 1.11.3471.0, Windows 10 20H2).
I need to step away from my machine, so I lock it by typing Windows-L.
When I come back, usually after an hour or so, and unlock the machine, the tab with the ssh session in it is completely non-responsive. By that I mean that it doesn't respond to keyboard input at all. It's not that I've been logged out of the remote, just dead. No errors or anything in the terminal.
I know that the machine wasn't asleep because the monitor was displaying a pretty picture when I logged in to find the situation I described above. However, it's possible that it tried to go to sleep while I was away.
This happens fairly often, maybe every time I lock the machine for a while.
Any ideas as to why that's happening and how I might prevent it?
Thanks!
Expected Behavior
Sometimes the ssh session is preserved. That's the ideal behavior.
Actual Behavior
The Terminal is frozen.

@ultrablue Which ssh are you using? ssh.exe that ships with Windows? ssh from a WSL distro? Or some other ssh? And which version of ssh?
Does the issue repro in the vintage console host (conhost.exe) as well? Or only when sshing from the Terminal?

@zadjii-msft:
Hi, Mike:
Thanks for asking for clarification.
I hope this answers your questions:
$ ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.2, OpenSSL 1.1.1f  31 Mar 2020

And:
C:\Users\xxxxx>ssh -V
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2

I hope that's useful. Please let me know if there's anything else I can provide.
I haven't been able to reproduce the issue consistently. I left ssh sessions open in both WSL and the vintage console host yesterday, and when I came in this morning, both sessions had terminated (which is expected):
WSL:
$ client_loop: send disconnect: Broken pipe
And the vintage console host:
$ client_loop: send disconnect: Connection reset
I'm sorry I'm not able to be more informative. It's an annoyance-level issue for me, but really annoying.
Thanks,
Greg

While it's possible that this is an issue with Windows Terminal, I faintly remember this being a thing on any OS with ssh.
Is this maybe relevant to your issue? https://superuser.com/questions/468584/ssh-connected-terminal-windows-hang-in-vm-after-waking-host-from-sleep

Leonard:
Huh, ok. Thanks for the info.
I'll try to remember the suggestions and the next time it happens, I'll give them a try.
Greg

I'm gonna close this as answered - if that doesn't end up helping, we can always reopen it ☺

Just a quick follow up.
@lhecker's suggestion above was helpful. Typing Enter  ~ . did unstick the session.
Something else I noticed is that in the frozen state, the cursor was blinking. That just in case someone else comes across this.
Thanks again for your help! It's been helpful.


Sign-In Functionality Not Working; Suggest Adding "Sign in with Google" Option

🐛 Bug Report: Sign-In Functionality Broken
Description:
The sign-in functionality on the website does not work as expected. Clicking on the sign-in button does not log the user in, and there is no response or error message to indicate what went wrong. This issue is affecting both regular sign-ins and third-party authentication methods.
Steps to Reproduce:
Go to the sign-in page of the invoice-generator website.
Enter valid login credentials or try to sign in with Google.
Click the Sign In button.
Observe that nothing happens, and the user is not logged in.
Expected Behavior:
When a user clicks the Sign In button with valid credentials or opts to sign in via Google, they should be authenticated and redirected to the dashboard.
Screenshot:

Environment:
Browser: Chrome, Safari, Firefox, etc.
Device: Desktop, Mobile
OS: Windows, macOS, Android, iOS
Additional Notes:
Please look into adding "Sign in with Google" as an additional option to enhance the user experience.

Can add this feature quickly (recently worked on Google OAuth 2.0)

@Ncode-93, after reviewing your profiles, I've decided to assign this issue to @VanshChitransh. Please note that the user sign-in function is not part of our current development plans. We'll be implementing this feature in a future update.

@ypratham Should i work on this issue? or you guy's will be doing it in future?

@VanshChitransh we'll be doing this in near future

@ypratham Please do ping me whenever you guy's will be doing this, thanku.

@ypratham Please close the issue


Java Access Bridge does not work

Can you help me please?
I formatted my PC and now I can no longer activate the "Java Access Bridge".
Now the "Java" option in Options > OS is disabled.
Do you know why this is?

Is Java 64-bit installed? The button is disabled when it isn't installed.


Update email_signature_template.html

Fixed one image URL that was still relative

(Looks like this might be working off an outdated version of master, but did cause me to catch this issue, so thank you- https://github.com/covid19risk/website/commit/e65619c7f2cdd4f61c947f9f66377d2bd63289c6!)


Need to close and re-open Gold Chessboard to change turns in single-player

This seems familiar. I think it works in SMP and I just did something grungy which breaks it for single-player.
Check which versions still have this bug. It appears that not all of them do. I think it happened as of 1.17 or 1.18. I've labeled this issue with those I've confirmed have the bug.

[x] Check for bug in 1.18.2-0.616
[x] Check for bug in 1.17.1-0.616

1.19 and 1.20 definitely have and 1.14/15/16 do not appear to have it.

[ ] Fix for bug in 1.20.1-0.616
[ ] Fix for bug in 1.19.2-0.616
[ ] Fix for bug in 1.18.2-0.616
[ ] Fix for bug in 1.17.1-0.616

1.17 has the bug.

1.18 has the bug.

1.17  is fixed.

1.20 is fixed.


If an active effect modifies a dice scale value or any of its specific properties (.number or .faces) by appending a string, the remaining properties are completely lost

For example, if you have a scale value @scale.steve.dice, and an active effect with system.scale.steve.dice.faces | Add | min2, then you can no longer refer to its number, i.e., @scale.steve.dice.number. It seems like the full derived scale value on the actor is replaced with just a string.
Note: numbers work fine, this seems to only be an issue with strings such as min2 or r<3, etc.

I wasn't even aware that these fields were targetable by active effects. I'll tentatively mark it as a bug, but it seems like it could be tricky to resolve.

To be able to modify (dice) scale values is an intended feature and was implemented here: https://github.com/foundryvtt/dnd5e/pull/2011


Make Gulp errors more detailed & like NPM ones

I feel like it would read better/follow convention as
ERROR: invalid property name in /Users/tombyers/…/_single-question-page.scss:11
``

Well the convention I was trying to follow was that of NPM (swapping out NPM for Gulp) so once you've got that pattern you recognise it:

Thinking about this, I've lowercased the 'gulp' to cause a bit less friction.

The NPM ones are kind of icky, but convention wins, :+1:


Fix deprecation notice

Fixes this notice: The default value of "$usePutenv" argument of "Symfony\Component\Dotenv\Dotenv::__construct" will be changed from "true" to "false" in Symfony 5.0. You should define its value explicitly.

Thanks, Joachim! :1st_place_medal:

Could you also update Sylius-Standard and Sylius (or create an issue for that)? :)

https://github.com/Sylius/Sylius-Standard/pull/350
https://github.com/Sylius/Sylius/pull/10453


{AKS} Vendor 2022-07-02-preview for aks-preview

This checklist is used to make sure that common guidelines for a pull request are followed.

For new extensions:

[ ] My extension description/summary conforms to the Extension Summary Guidelines.

About Extension Publish
There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update src/index.json automatically.
The precondition is to put your code inside this repository and upgrade the version in the pull request but do not modify src/index.json.

AKS

Waiting for swagger release.

/azp run

/azp run

/azp run

/azp run


Order tests ascending

Tests are now always ordered ascending and grouped by class.

public class A
{
    [Test]
    [NotInParallel(Order = 1)]
    public async Task A1() { }

    [Test]
    [NotInParallel(Order = 2)]
    public async Task A2() { }

    [Test]
    [NotInParallel(Order = 3)]
    public async Task A3() { }
}
public class B
{
    [Test]
    [NotInParallel(Order = 1)]
    public async Task B1() { }

    [Test]
    [NotInParallel(Order = 2)]
    public async Task B2() { }

    [Test]
    [NotInParallel(Order = 3)]
    public async Task B3() { }
}

Would execute like this:

A1
A2
A3
B1
B2
B3

public class A
{
    [Test]
    [NotInParallel("shared", Order = 1)]
    public async Task A1() { }

    [Test]
    [NotInParallel("shared", Order = 2)]
    public async Task A2() { }

    [Test]
    [NotInParallel("shared", Order = 3)]
    public async Task A3() { }
}
public class B
{
    [Test]
    [NotInParallel("shared", Order = 1)]
    public async Task B1() { }

    [Test]
    [NotInParallel("shared", Order = 2)]
    public async Task B2() { }

    [Test]
    [NotInParallel("shared", Order = 3)]
    public async Task B3() { }
}

Would execute like this:

A1
A2
A3
B1
B2
B3

public class A
{
    [Test]
    [NotInParallel("a", Order = 1)]
    public async Task A1() { }

    [Test]
    [NotInParallel("a", Order = 2)]
    public async Task A2() { }

    [Test]
    [NotInParallel("a", Order = 3)]
    public async Task A3() { }
}
public class B
{
    [Test]
    [NotInParallel("b", Order = 1)]
    public async Task B1() { }

    [Test]
    [NotInParallel("b", Order = 2)]
    public async Task B2() { }

    [Test]
    [NotInParallel("b", Order = 3)]
    public async Task B3() { }
}

Would execute in parallel like this:

A1
B1
A2
B2
A3
B3

Fixes #1033

Thanks again @campersau


go: Add key manager worker status to node status

Task
Currently the key manager worker does not report any status as part of the GetStatus node control gRPC API call. It should provide some useful information about the operation of the key manager node.
Test
Tested locally using default fixture, simple-keymanager and minimal-runtime:

Key manager status is shown only for keymanager nodes and not for compute, client and validator nodes.
Status changes to ready once consensus is synced and key manager is registered.
Client runtimes and access list populates with a short delay.
Private peers are shown if we set them using the worker.keymanager.private_peer_pub_keys flag.

Also do squash the two commits as the second one actually fixes an issue introduced by the first one :)


New queue event and displaying your position in queue

Closes #165
New event 'queue' shows how many players connected to the game
and your position in players queue
Frontend shows you hints if you have to wait for second player
or wait for other players to leave

Waiting for my front review

Conflicts resolving needed


Create a VSCode extension version of this

Feature suggestion.
if we can have a VSCode extension version of this. Goland IDE has this by default VSCode doesn't.
It would be really nice to have.

It seems that someone has already implemented a plugin for VSCode: JSON to Go.


monster battle

Win the game when you kill the monster blob

Thanks for the PR shadee! I think you've got the start of a game here but not quite a full one. There needs to be some sort of way to lose or mechanism to motivate the player to destroy the blobs. I think also having an indication of how much life each blob has (perhaps by changing the sprite color) would be a nice piece of feedback to provide the player.
One version of this game I could imagine is the player trying to smash blobs before a monster catches them. Or perhaps as you smash different blobs you can destroy other types or attach things with more power. Then the game becomes figuring out the right order to hit blobs.
It's a nice start! We need a bit more work before we add it to the gallery though.

Thanks for the PR shadee! I think you've got the start of a game here but not quite a full one. There needs to be some sort of way to lose or mechanism to motivate the player to destroy the blobs. I think also having an indication of how much life each blob has (perhaps by changing the sprite color) would be a nice piece of feedback to provide the player.
One version of this game I could imagine is the player trying to smash blobs before a monster catches them. Or perhaps as you smash different blobs you can destroy other types or attach things with more power. Then the game becomes figuring out the right order to hit blobs.
It's a nice start! We need a bit more work before we add it to the gallery though.

Hi leom. It is my first programming assignment i have had since I took robotics in middle school. I have tried to add some more functionalities and health bar for the boss. It is a slight puzzle in the sense that the powerup will dissapear if you dont get it first. And if you get it then you will take big damage over the spikes and lose the fight. If you do not you will barely win the fight. Added slight animations Let me know what you think

Thanks for the PR shadee! I think you've got the start of a game here but not quite a full one. There needs to be some sort of way to lose or mechanism to motivate the player to destroy the blobs. I think also having an indication of how much life each blob has (perhaps by changing the sprite color) would be a nice piece of feedback to provide the player.
One version of this game I could imagine is the player trying to smash blobs before a monster catches them. Or perhaps as you smash different blobs you can destroy other types or attach things with more power. Then the game becomes figuring out the right order to hit blobs.
It's a nice start! We need a bit more work before we add it to the gallery though.

Hi waiting on an update on this

Nice improvements. The mechanics are starting to get there but you still need more levels. Try to make a level where you have to get power-ups and kill monsters in a certain order. If you want to get some help and feedback while you build you could go to the #sprig channel in the Hack Club Slack.
Keep at it!

By the time I figure out how to create even more levels the event will be
over. I wasn't aware there is a minimum type of game. I added what you
asked powerup, a fail condition, and damage animation
On Tue, Sep 13, 2022, 1:51 PM leomcelroy @.***> wrote:

Nice improvements. The mechanics are starting to get there but you still
need more levels. Try to make a level where you have to get power-ups and
kill monsters in a certain order. If you want to get some help and feedback
while you build you could go to the #sprig channel in the Hack Club Slack
https://hackclub.com/slack/?continent=North America.
Keep at it!
—
Reply to this email directly, view it on GitHub
https://github.com/hackclub/sprig/pull/310#issuecomment-1245755578, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/A26SATXIHF3UH4A557OK6RTV6C5LVANCNFSM6AAAAAAQHCQQDA
.
You are receiving this because you authored the thread.Message ID:
@.***>

Yes please point me in the right direction. Would be much appreciated!
On Wed, Sep 14, 2022, 10:43 AM leomcelroy @.***> wrote:

Don't worry about missing out on the Sprigs! You're well on your way to
getting one and I'll make sure we have one for you when the game is ready.
I see that much of your game is hardcoded, would it be helpful if I took a
pass at generalizing some of the code so it's easier to make more levels?
It should still feel like your game but sometimes when learning it's
helpful to see how others might do things.
—
Reply to this email directly, view it on GitHub
https://github.com/hackclub/sprig/pull/310#issuecomment-1246875143, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/A26SATTL2K6YBKDP65BJH6LV6HQCBANCNFSM6AAAAAAQHCQQDA
.
You are receiving this because you authored the thread.Message ID:
@.***>

Alright here's my interpretation at generalizing things a bit, let me know if you want help understanding why it is the way it is. One key change I made is defining the legend only once. It's a little tricky to figure out where to store the monster health when you want to have multiple monsters. I ordered the sprite types in an array and use that to derive their health number value from the index.
Try to add some new levels. I think the objective of this game is to figure out the order to fight monsters and get power ups.
/*
@title: moded: monster battle
@author: shadee & leo
*/

const player = "p";
const monster5 = "5";
const monster4 = "4";
const monster3 = "3";
const monster2 = "2";
const monster1 = "1";
const spikes = "s";
const armor = "a";
const powerup = "u";
const dead = "d";

setLegend(
  [ player, bitmap`
................
.....8888...7...
....88...8..7...
....88...8..7...
.....8888...7...
......888...7...
......8...77777.
.....88888..7...
.....88..8887...
....888.....7...
...88.8....7....
..8...88........
.....8.8........
....8...88......
....8....8......
...8............`],
  [ monster5, bitmap`
............777.
............7...
............777.
....444444....7.
...44....44.777.
...4.0...04.....
...4.00..0.4....
...4.00..004....
...400....000...
...44......40...
....4......4....
....44....44....
.....444444.....
................
................
................`],
  [ monster4, bitmap`
............7.7.
............7.7.
............777.
....444444....7.
...44....44...7.
...4.0...04.....
...4.00..0.4....
...4.00..004....
...400....000...
...44......40...
....4......4....
....44....44....
.....444444.....
................
................
................`],
  [ monster3, bitmap`
............777.
..............7.
.............77.
....444444....7.
...44....44.777.
...4.0...04.....
...4.00..0.4....
...4.00..004....
...400....000...
...44......40...
....4......4....
....44....44....
.....444444.....
................
................
................`],
  [ monster2, bitmap`
............777.
..............7.
LL.......
......L66L......
.....L6666L.....
....L666666L....
...L66666666L...
....LLL66LLL....
......L66L......
......L66L......
......L66L......
......L66L......
.......LL.......
................
................`],
  [ dead, bitmap`
................
................
................
................
................
................
................
......7.........
......7.........
...7777777777...
88...87.........
.88..87888......
..888888.88.....
.88..8.8.88.....
.8...8..88......
.....8..........`]
);

let level = 0;

let playerHealth = 8;
let attackPower = 1;

const levels = [
  map`
us.p.5`,
  map`
.5su..
us.p.5
...2..`,
];

const setLevel = (level) => {
  playerHealth = 8;
  attackPower = 1;
  clearText();
  const currentLevel = levels[level];
  setMap(currentLevel);
  addText(`Health: ${playerHealth}`, { x: 0, y: 0, color: [255, 0, 0]})
  addText(`Power: ${attackPower}`, { x: 0, y: 1, color: [255, 56, 0]})
}

setLevel(level);

setSolids([player, monster5, monster4, monster3, monster2, monster1]);

const monsters = [monster1, monster2, monster3, monster4, monster5];

const tileHasMonster = (x, y) => getTile(x, y)
  .some(s => monsters.includes(s.type));

const getMonster = (x, y) => getTile(x, y)
  .find(s => monsters.includes(s.type));

const encounterMonster = (x, y) => {
    playerHealth -= 1;
    const m = getMonster(x, y);
    const monsterHealth = monsters.indexOf(m.type) + 1;
    const newMonsterHealth = monsterHealth - attackPower;
    if (newMonsterHealth > 0) m.type = monsters[newMonsterHealth-1];
    else m.remove();
}

onInput("d", () => {
  const p = getFirst(player);
  if (!p) return;

  if (tileHasMonster(p.x+1, p.y)) {
    encounterMonster(p.x+1, p.y);
  }

  p.x += 1;
});

onInput("a", () => {
  const p = getFirst(player);
  if (!p) return;

  if (tileHasMonster(p.x-1, p.y)) {
    encounterMonster(p.x-1, p.y);
  }

  p.x -= 1;
});

onInput("w", () => {
  const p = getFirst(player);
  if (!p) return;

  if (tileHasMonster(p.x, p.y-1)) {
    encounterMonster(p.x, p.y-1);
  }

  p.y -= 1;
})

onInput("s", () => {
  const p = getFirst(player);
  if (!p) return;

  if (tileHasMonster(p.x, p.y+1)) {
    encounterMonster(p.x, p.y+1);
  }

  p.y += 1;
})

afterInput(() => {
  if (tilesWith(player, spikes).length > 0) {
    playerHealth -= 3;
  }

  tilesWith(player, powerup).forEach(tile => {
    attackPower += 1;
    tile.forEach(sprite => {
      if (sprite.type === powerup) sprite.remove();
    })
  })

  if (monsters.every(monster => tilesWith(monster).length === 0)) {
    level += 1;
    console.log(level, levels.length);
    if (level < levels.length) setLevel(level);
    else {
      clearText();
      addText(`You Win!`, { y: 5, color: [255, 0, 0]});
      return;
    }
  }

  clearText();
  addText(`Health: ${playerHealth}`, { x: 0, y: 0, color: [255, 0, 0]})
  addText(`Power: ${attackPower}`, { x: 0, y: 1, color: [255, 56, 0]})

  if (playerHealth <= 0) {
    addText(`You Lose!`, { y: 5, color: [255, 0, 0]});
    const p = getFirst(player);
    if (!p) return;
    addSprite(p.x, p.y, dead);
    p.remove();
  }

});

Hey @BShadee !

We hope to see you here again :)

Hey Lucas,
Yes I have not given up. I had to go on vacation. Will start back up Monday!
Can't let your help go in vain
Thank you
On Sat, Sep 24, 2022, 9:08 PM Lucas @.***> wrote:

Hey @BShadee https://github.com/BShadee !

We hope to see you here again :)
—
Reply to this email directly, view it on GitHub
https://github.com/hackclub/sprig/pull/310#issuecomment-1257094659, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/A26SATUEA3DSECVJMKRWD7LV76QZHANCNFSM6AAAAAAQHCQQDA
.
You are receiving this because you were mentioned.Message ID:
@.***>

Hey @BShadee !
time is flying! Don't forget the Sprig!

I'm going to close this PR for now. Feel free to reopen if you want to continue working on your game.


add position_ids

Some models like gpt2 and llama have "position_ids" in their generation inputs. We can add "position_ids" in the model's config to fix it.
@echarlaix @fxmarty Would you please help to review it? Thanks!

Hi @jiqing-feng , just to be sure, is this concerning the ONNX export or ONNX Runtime integration? Or both? In the ONNX export, we should give the option, yes.

Currently position_ids is ignored during ORT inference for causal LM https://github.com/huggingface/optimum/blob/v1.8.2/optimum/onnxruntime/modeling_decoder.py#L683, so when enabling it as inputs for the ONNX export we should enable it for ORTModelForCausalLM as well

Hi @echarlaix @fxmarty thanks for your comments. I have added position_ids on ORTModelForCausalLM. Would you please help to review it? Thanks.

Hi @jiqing-feng , could you comment a bit on your use case? I'm not sure what's the benefit of this in the ORT integration.
While attention_mask is updated in _update_model_kwargs_for_generation, position_ids is not. Thus, in my understanding, if we are to pass a position_ids to the generate() method, it would be kept as a constant at each prepare_inputs_for_generation call in the generation, e.g. here. Which is something we don't wish.
Am I misunderstanding something @gante ?

@fxmarty What I write next is from a transformers point of view :)
At the moment, position_ids is a required input to support left padding. For legacy reasons, we consider it an optional input the same way attention_mask is an optional input -- if not passed, we assume all tokens are valid, and position_ids is a torch.arange. In .generate(), we delegate its creation to the model's prepare_inputs_for_generation, where it is computed from the attention_mask (e.g. here).
This means that while position_ids is never passed into .generate(), is is passed from .generate() to the model and is updated at each iteration.

In .generate(), we delegate its creation to the model's prepare_inputs_for_generation, where it is computed from the attention_mask (e.g. here).

So this means that executing this controlflow is absolutely necessary, right?

Hi @jiqing-feng , could you comment a bit on your use case? I'm not sure what's the benefit of this in the ORT integration.
While attention_mask is updated in _update_model_kwargs_for_generation, position_ids is not. Thus, in my understanding, if we are to pass a position_ids to the generate() method, it would be kept as a constant at each prepare_inputs_for_generation call in the generation, e.g. here (since we'd go into this piece of controlflow). Which is something we don't wish.
Am I misunderstanding something @gante ?

@fxmarty Yeah, I was about to request for exactly the same feature. As @gante mentioned above, the position_ids (along with attention_mask) are necessary inputs to transformer based models like gpt2 to deal with left-padded input.  More specifically, my feature request comes from the context described in https://github.com/huggingface/optimum/issues/972.

In .generate(), we delegate its creation to the model's prepare_inputs_for_generation, where it is computed from the attention_mask (e.g. here).

So this means that executing this controlflow is absolutely necessary, right?

I don't think the controlflow of computing the position_ids from attention_mask is necessary, if this is what you referred to. As long as the traced transformer model (*.onnx) can take position_ids as an effective input, it should be good enough.

cc @echarlaix @michaelbenayoun

Hi @michaelbenayoun  , thanks for your comment. I have updated position_ids in ORTdecoder forward. Could you please review it? Thanks! cc @fxmarty @gante

The docs for this PR live here. All of your documentation changes will be reflected on that endpoint.

Hi everyone, @jiqing-feng @fxmarty @gante is there any updates on this feature?

cc @michaelbenayoun

@jiqing-feng @KexinFeng I now realize I misunderstood your argument and motivation for the PR. This appears to me to be a major bug in Optimum which should be fixed ASAP.


how to set .next in another folder?

Hello,
I have my pages folder in folder A and would like .next folder in folder B. I see that next build only accepts one arg. Is it possible to do this?

Can you elaborate on the usecase please ?

I have a project with the following structure:

whereby I place pages folder under ./src/web. Ideally, I would like to place .next folder under ./web

Unfortunately, there is no way to that unless you manually move it, like mv src/web/.next web/.next.
I'm not sure if we should support the setting since maybe it would be just a problem of preferences ?

I have changed my pages directory to src/pages and now the .next directory is created within src.
Is there still no option to keep it at root?

Wouldn't recommend it. But you can use distDir

Thank you very much.
You would not recommend moving pages/ elsewhere? If I should not do it, I will not do it.

Well you're not moving pages, you're moving the Next.js root itself, hence the .next ending up in src

Well, I just would like to have my pages/ within my src/ directory.
Is that not possible / not recommended, too?

It's not possible indeed. We're not planning on changing that 👍

I think the only thing missing is a way to specify the lookup folder when building the pages. The distDir and dir (from custom server config) props are not enough to allow us to take the pages out from src and bundle them in the ../src folder.


Factor out ProcessCommit() and add a test

The test ensures that a commit where the author and committer are different in a
particular aspect (such as the email address used) can still be considered valid
(thus ensuring that they're checked independetly.
This also incrementally reduces the complexity of the extremely large function
ProcessOrgRepo() which was due for refactoring anyway.

@DiSiqueira – please take a look at this PR if you have a chance.

👍


Redirecting to login

*ubuntu
command
instaloader --no-compress-json --no-metadata-json --no-captions --dirname-pattern=/django/instaloader/static/downloads/{profile} --filename-pattern={shortcode} -- -CJPM6GKJI_a
error
HTTP redirect from https://www.instagram.com/graphql/query to https://www.instagram.com/accounts/login/
-CJPM6GKJI_a: Redirected to login page. Use --login.

Errors or warnings occurred:
-CJPM6GKJI_a: Redirected to login page. Use --login.

In case you try to access public account and don't want to log in, try clean residential proxy or https://rapidapi.com/restyler/api/instagram40 which uses proxy network balancer and response health checks.


[v2] Postgres: date/time field value out of range

I've added Postgres as the database adapter. When I try to log in with an OAuth provider I get the error below. The user and account records are created without errors only the session is missing.
Create session for user User {
  name: 'Sproettiemao',
  email<EMAIL_ADDRESS>  image: null,
  id: 1
}
(node:2317) UnhandledPromiseRejectionWarning: QueryFailedError: date/time field value out of range: "1591612180339"
    at new QueryFailedError (/home/lori/dev/my-eui-starter/node_modules/typeorm/error/QueryFailedError.js:11:28)
    at Query.callback (/home/lori/dev/my-eui-starter/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:176:38)
    at Query.handleError (/home/lori/dev/my-eui-starter/node_modules/pg/lib/query.js:146:19)
    at Connection.connectedErrorMessageHandler (/home/lori/dev/my-eui-starter/node_modules/pg/lib/client.js:236:17)
    at Connection.emit (events.js:315:20)
    at Socket.<anonymous> (/home/lori/dev/my-eui-starter/node_modules/pg/lib/connection.js:121:12)
    at Socket.emit (events.js:315:20)
    at addChunk (_stream_readable.js:297:12)
    at readableAddChunk (_stream_readable.js:273:9)
    at Socket.Readable.push (_stream_readable.js:214:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)
(node:2317) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 4)

Thanks for raising this! That is really helpful info about what works and what doesn't, especially I haven't tried it with Postgres yet.
I'm actually expecting to run into problems with the date/time values, which is why I've left adding in session and token expiry / updating till now!
I think I'll need to fire it up with a few local adapters (I'm thinking MySQL, Postgres, MongoDB) and work out the best common date storage method to use that works well across a range of database (or see if I need to do something add a method to convert the date/time fields).
In the short term, as you have a fork already, you could try editing next-auth/src/models/session.js and commenting out the accessTokenExpires and expires fields:
import { randomBytes } from 'crypto'

export class Session {
  constructor(userId) {
    const date = new Date()
    const sessionExpiryInDays = 30
    const accessTokenExpiryInDays = 30

    this.id = randomBytes(32).toString('hex')
    this.userId = userId
    this.accessToken = randomBytes(32).toString('hex')
    this.accessTokenExpires = date.setDate(date.getDate() + accessTokenExpiryInDays)
    this.expires = date.setDate(date.getDate() + sessionExpiryInDays)
  }
}

export const SessionSchema = {
  name: 'Session',
  target: Session,
  columns: {
    id: {
      type: 'varchar',
      primary: true,
      unique: true
    },
    userId: {
      type: 'int'
    },
    accessToken: {
      type: 'varchar',
      unique: true
    },
    accessTokenExpires: {
      type: 'date', // change to: type: 'varchar',
    },
    expires: {
      type: 'date' // change to: type: 'varchar',
    }
  }
}

…and then doing something like npm install https://github.com/LoriKarikari/next-auth#next-auth-2 to install your version instead, to see if it works until I address this.
Obviously this is is dumb and wrong and not how tokens should be store, but I assume it will work if you just want to be able to get on trying it for now. :-)
If I'm lucky, the real fix will just be for it to set proper date / time values (instead of the timestamps it's currently returning for these fields) and it will just work.

Update: I just wrote a quick contributing guide if it's helpful!
I struggled for about 3 hours with the React linking issue when I first ran into it 🙄 so I thought it might be helpful to document it somewhere.

I think this might be addressed in beta 13 which was just pushed to next-auth@beta.
If you try it out would appreciate any feedback!

Yes, it works now 🎉. I wanted to take a look at it but didn't really have any time today. But I was thinking of going the ISOString route too.

Oh brilliant, that's great, thanks for letting me know!


Show last typed character briefly in TextField when obscureText is true

This request came in from Posse.
iOS and Android password fields both support this I believe?

@Hixie


Add uint test for marshalling zap level encoder

Codecov Report

Merging #2 (f16fec6) into master (41bf2a4) will increase coverage by 45.46%.
The diff coverage is 100.00%.

:exclamation: Current head f16fec6 differs from pull request most recent head 3da8982. Consider uploading reports for the commit 3da8982 to get more accurate results

@@             Coverage Diff             @@
##           master       #2       +/-   ##
===========================================
+ Coverage   48.26%   93.72%   +45.46%
===========================================
  Files           1        1
  Lines         288      287        -1
===========================================
+ Hits          139      269      +130
+ Misses        135        8      -127
+ Partials       14       10        -4

Impacted Files
Coverage Δ

initializer.go
93.72% <100.00%> (+45.46%)
:arrow_up:

Continue to review full report at Codecov.

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


Compile for iOS ARMV7

When I build openblas for ios armv7, some errors coming up.
I use the following commands to build openblas.
TOOLCHAIN_PATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
SYSROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.0.sdk
make clean
make TARGET=ARMV7 BINARY=64 HOSTCC=clang CC="$TOOLCHAIN_PATH/clang -isysroot $SYSROOT_PATH -arch armv7 -miphoneos-version-min=8.0 -O2" NOFORTRAN=1 libs
The following file is the log.
err.log

@martin-frbg Could you please take a look at this?

Indeed looks a lot like #1531 - my patch there was for ARMV8 only, and it could be that ARMV7 needs more and different changes besides replacing the nrm2 functions with their C equivalents. Could you try how much further you get when you replace the four NRM2 entries like we did in #1531 ?

The question is I have no idea about the replacement of nrm2_vfpv3.S

If you just comment out the four lines in KERNEL.ARMV7, it should pick up nrm2.c (for SNRM2 and DNRM2) and znrm2.c (for C/ZNRM2) from the basic KERNEL file in kernel/arm.

IphoneOS 11.0 does not run on armv7 processors. It is safe to make it armv8

Looks like he is targeting iOS 8.0 though:
miphoneos-version-min=8.0

Yes, we need to support IOS 8.0

One more question:
make TARGET=ARMV7 BINARY=64 HOSTCC=clang CC="$TOOLCHAIN_PATH/clang -isysroot $SYSROOT_PATH -arch armv7 -miphoneos-version-min=8.0 -O2" NOFORTRAN=1 libs
TARGET=ARMV7 is this right?

Yes, that is correct for general ARMv7 cpu support. (Cortex A9 and A15 targets use the same KERNEL.ARMV7 file but have individual settings for cache sizes etc.)

I got it. Thanks

@martin-frbg 32bit support goes away in iOS11

Should not affect building for earlier versions as seems to be intended here, or does it ? (Not sure what having 64bit support in IOS8 has to do with it)

All phones targeted are ARMv8, just that. Latest ones will not run 32bit binary if they get connected to wifi sometimes....

To be honest I never target iOS because that platform has a built in BLAS implementation called Accelerate. Saves a lot of headache.

It seems in armv8, there is no definition of _scopy_k
armv7:

armv8

error:

Is there any solutions? Thanks

Did you see any errors in the build log ? If the IOS compiler did not like the assembly implementation in copy.S, you will need to replace the xCOPYKERNEL entries in KERNEL.ARMV8 with the corresponding C functions from ../arm like we did with NRM2. (And it looks as if this continues with xAXPY and xGER)

Did you make any progress ? (I notice the problems you saw with scopy_k etc. never came up in #1531, which makes me wonder if something else got broken in your build)

I had changed OpenBlas to Accelerate.

I see. So this can be closed if you are not going to continue with OpenBLAS on IOS ?


Disabling QUIC-go retransmission

Hi,
I am actually working in a setup where I am encapsulating another data stream inside the QUIC stream, and this encapsulated stream has its own retransmission module implemented. However, I suspect that the two retransmission modules are interfering with each other / slowing each other down, so I would like to do some tests where one of the two is disabled. Due to the nature of the system, I cannot change / disable the retransmission module of the encapsulated stream, so I would like to see if I can boost the performance of my implementation by disabling the quic-go retransmission and letting the other data stream handle the retransmission for now.
I tried removing calls to the retransmission module (i.e. all refrences to queueretransmission and *sendStream.retransmissionQueue in send_stream.go), but I noticed no performance increase for now. Do you know if I can easily check whether the retransmission in quic-go is correctly disabled now, and if not, where I could disable it? Thanks in advance!
Originally posted by @YRoelvink in https://github.com/quic-go/quic-go/issues/3296#issuecomment-1375362606

There's no way to disable retransmissions for stream data, unless streams are reset. Please refer to RFC 9000 for the rules on how frames are retransmitted.
If you want to send unreliable data, that's what DATAGRAM frames (RFC 9221) are there for. quic-go exposes an API to send and receive datagram frames.

Ok perfect, I will have a look at the datagrams frames in that case! Thanks a lot


feat: improve checking of module version

Tried to improve the tests but tried to avoid using git directly (not entirely convinced it is a good idea)

Actually we are also missing double checking the module name =P...there could be a bug where the wrong module is downloaded, will add later.


PowerDNS Admin Losing API Key?

PDA version
0.4.1
Python version
3.9
Steps to Reproduce

I've noticed from time to time power-dns admin seems to stop working. To fix it I go to settings -> server and re-enter the API key and it resumes working. But certainly having to do this repeatedly is not normal.
My API key is very long (65 characters long). Is there any limit to the length of the API key. Also are there any restrictions to the characters in the API key. So upper, lower alpha, numeric, are symbols allowed?

Expected Behavior
API key shouldn't have to be re-entered
Observed Behavior
API key has to be re-entered or powerdns-admin can't communicate with powerdns.

It would be nice to know if there is a maximum API key size and what the maximum is but I changed my key and this seems to have stopped happening. For others my key size is ~60 characters long - alpha numeric.

I was too quick to dismiss this. It's still happening. Perodically our key no longer works and we have to re-enter it.
Its a quick fix but super annoying it keeps happening.
If the issue is with my API key length I can shorten it but the question is how short do I have to make it.
I don't want to make it too simple and thus make it easy to crack but I may have err'd towards making it too long.

@bab5470 you will have to do further work to prove and locate the issue. Fortunately, I've never heard of this issue and have never seen it in all the years of running multiple deployments of PDA. If you can locate an actual bug and provide enough details to reproduce, then I would be more than happy to consider addressing it. It's just not common so this is not a priority for the project to potentially hunt a ghost.


please disable autoupdate per default

Your bash script is well written, good work!!
The only thing right now i don't like, is that autoupdate is enabled by default, which is a pure backdoor to any NAS, where this feature is enabled.
I know sure you don't have any bad intentions, but consider your Github account will get hacked. or access token get stolen.
You can put a disclaimer behind the autoupdate feature to inform users, what this means, if they enable this feature.
Maybe you just put the signature (hexstring) in an own config and autoupdate is just updating this config.
ok, you will be then able to DOS any NAS user using this feature with a corrupt libhwcontrol.so.1, but injecting code into libhwcontrol.so.1 should be very hard :)

Auto update is an option. If the script is not run with --autoupdate=# it will ask the user if they want to update. It they don't answer the [y/n] prompt it times out after the 30 seconds and the script continues without updating itself.
I actually hardened the script against GitHub account hacking just 2 days ago in response to issue #129
https://github.com/007revad/Synology_enable_M2_volume/releases/tag/v1.1.13
v1.1.13

Changed to avoid downloading malicious file if GitHub account is hacked:

Now only downloads bc if bc is not found in PATH or in script location.
Now asks to download bc if --autoupdate option not used.
Now checks md5 hash of downloaded bc file.

Your xargs code replaced 160 lines of code with 2 lines. Nice.


Mersenne Twister - License missing!

From matthewfeickert in openjournals/joss-reviews#3174 on 04/29/21:

The repo has an OSI approved license (MIT), but vendors the Msersenne Twister prime algorithm without any LICENSE, which is a problem. All vendored software must be properly licensed. It is also unclear why this is even needed as the Mersenne Twister 19937 generator is in the C++ Standard Library.

Description: No license is provided for Mersenne Twister, which is vendored.
Solution: Either fix the license issue by providing a separate license for MT, or use the standard C++ MT library.
Testing: N/A (License issue)

Due to another issue:
From matthewfeickert in openjournals/joss-reviews#3174 on 04/29/21:

make will succeed with a large number of warnings from the vendored distribution of the Mersenne prime algorithm.

The ideal solution is likely to use the standard MT algorithm provided with C++ 11 or newer. However, previously this code has been used with very old versions of C++ (10 or older), so switching methods would be a breaking change. For the time being, the oldest version of gcc known to work has been specified in the README (commit 33340efbfc311a2eeb17466330e2124d8955c1e9 on release/1.0.4) so it will hopefully be clear, once the change is made, why it was a breaking change.
Assigning @villaa because he is more familiar with the vendored MT implementation as well as myself as I am more familiar with the standard C++ implementation.

For now we are going to resolve this by adding the license; we can make the transition to the C++ 11 implementation later.

Resolved by #13.