Error Using Matrices For the Pallas Template Example

The Pallas Template example works fine with an input, x, of shape (1,). However, when attempting to generalise the pallas template example (as shown in the code below), it produces the following error,
    x = pl.load(x_ref, ())
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/primitives.py", line 477, in load
    idx = NDIndexer.from_indices_shape(idx, x_ref.shape)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/primitives.py", line 278, in from_indices_shape
    else i for i, s in zip(indices, shape))
ValueError: safe_zip() argument 2 is longer than argument 1

Minimal example:
from jax_triton import pallas as pl
import jax
import jax.numpy as jnp
import jax.random as jnr

def make_kernel(eltwise_kernel):
  def add(x_ref, y_ref, o_ref):
    x = pl.load(x_ref, ())
    y = pl.load(y_ref, ())
    pl.store(o_ref, (), eltwise_kernel(x + y))
  return add

kernel1 = make_kernel(lambda x: x * 2)
kernel2 = make_kernel(jnp.exp)

def main(unused_argv):
  # x = jnp.array(1.)

  key = jnr.PRNGKey(0)
  key, subkey = jnr.split(key)

  x = jnr.normal(key, (100, 100))
  y = jnr.normal(subkey, (100, 100))

  m, k = x.shape
  n, _ = y.shape
  out_shape = jax.ShapeDtypeStruct(shape=(m, n), dtype=x.dtype)

  block_size_m = 10
  block_size_n = 10
  grid = (m // block_size_m * n // block_size_n,)

  print(pl.pallas_call(kernel1, out_shape=out_shape, grid=grid)(x, y))
  print(pl.pallas_call(kernel2, out_shape=out_shape, grid=grid)(x, y))

if __name__ == "__main__":
  from absl import app
  app.run(main)

The full trace is as follows,
Traceback (most recent call last):
  File "/media/adam/shared_drive/PycharmProjects/triton_test/pallas_test.py", line 53, in <module>
    app.run(main)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/absl/app.py", line 308, in run
    _run_main(main, args)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/absl/app.py", line 254, in _run_main
    sys.exit(main(argv))
  File "/media/adam/shared_drive/PycharmProjects/triton_test/pallas_test.py", line 48, in main
    print(pl.pallas_call(kernel1, out_shape=out_shape, grid=grid)(x, y))
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/traceback_util.py", line 166, in reraise_with_filtered_traceback
    return fun(*args, **kwargs)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/pjit.py", line 250, in cache_miss
    outs, out_flat, out_tree, args_flat, jaxpr = _python_pjit_helper(
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/pjit.py", line 158, in _python_pjit_helper
    args_flat, _, params, in_tree, out_tree, _ = infer_params_fn(
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/api.py", line 300, in infer_params
    return pjit.common_infer_params(pjit_info_args, *args, **kwargs)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/pjit.py", line 499, in common_infer_params
    jaxpr, consts, canonicalized_out_shardings_flat = _pjit_jaxpr(
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/pjit.py", line 961, in _pjit_jaxpr
    jaxpr, final_consts, out_type = _create_pjit_jaxpr(
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/linear_util.py", line 345, in memoized_fun
    ans = call(fun, *args)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/pjit.py", line 914, in _create_pjit_jaxpr
    jaxpr, global_out_avals, consts = pe.trace_to_jaxpr_dynamic(
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/profiler.py", line 314, in wrapper
    return func(*args, **kwargs)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/interpreters/partial_eval.py", line 2155, in trace_to_jaxpr_dynamic
    jaxpr, out_avals, consts = trace_to_subjaxpr_dynamic(
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/interpreters/partial_eval.py", line 2177, in trace_to_subjaxpr_dynamic
    ans = fun.call_wrapped(*in_tracers_)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/linear_util.py", line 188, in call_wrapped
    ans = self.f(*args, **dict(self.params, **kwargs))
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/pallas_call.py", line 348, in wrapped
    jaxpr, consts, _ = _initial_style_open_jaxpr(f, jaxpr_in_tree,
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/pallas_call.py", line 308, in _initial_style_open_jaxpr
    jaxpr, _, consts = pe.trace_to_jaxpr_dynamic(wrapped_fun, in_avals, debug)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/profiler.py", line 314, in wrapper
    return func(*args, **kwargs)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/interpreters/partial_eval.py", line 2155, in trace_to_jaxpr_dynamic
    jaxpr, out_avals, consts = trace_to_subjaxpr_dynamic(
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/interpreters/partial_eval.py", line 2177, in trace_to_subjaxpr_dynamic
    ans = fun.call_wrapped(*in_tracers_)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax/_src/linear_util.py", line 188, in call_wrapped
    ans = self.f(*args, **dict(self.params, **kwargs))
  File "/media/adam/shared_drive/PycharmProjects/triton_test/pallas_test.py", line 22, in add
    x = pl.load(x_ref, ())
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/primitives.py", line 477, in load
    idx = NDIndexer.from_indices_shape(idx, x_ref.shape)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/primitives.py", line 278, in from_indices_shape
    else i for i, s in zip(indices, shape))
jax._src.traceback_util.UnfilteredStackTrace: ValueError: safe_zip() argument 2 is longer than argument 1
The stack trace below excludes JAX-internal frames.
The preceding is the original exception that occurred, unmodified.
--------------------
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/absl/app.py", line 308, in run
    _run_main(main, args)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/absl/app.py", line 254, in _run_main
    sys.exit(main(argv))
  File "/media/adam/shared_drive/PycharmProjects/triton_test/pallas_test.py", line 48, in main
    print(pl.pallas_call(kernel1, out_shape=out_shape, grid=grid)(x, y))
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/pallas_call.py", line 348, in wrapped
    jaxpr, consts, _ = _initial_style_open_jaxpr(f, jaxpr_in_tree,
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/pallas_call.py", line 308, in _initial_style_open_jaxpr
    jaxpr, _, consts = pe.trace_to_jaxpr_dynamic(wrapped_fun, in_avals, debug)
  File "/media/adam/shared_drive/PycharmProjects/triton_test/pallas_test.py", line 22, in add
    x = pl.load(x_ref, ())
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/primitives.py", line 477, in load
    idx = NDIndexer.from_indices_shape(idx, x_ref.shape)
  File "/home/adam/anaconda3/envs/triton_test/lib/python3.10/site-packages/jax_triton/pallas/primitives.py", line 278, in from_indices_shape
    else i for i, s in zip(indices, shape))
ValueError: safe_zip() argument 2 is longer than argument 1
python-BaseException

Sorry this is a bad error. However, for pl.load you need to explicitly specify an indexer for each dimension:
x = pl.load(x_ref, (slice(None), slice(None)))
y = pl.load(y_ref, (slice(None), slice(None)))

Does that fix the error? I'll keep this issue open since there's clear room for improvement on this.

def make_kernel(eltwise_kernel):
  def add(x_ref, y_ref, o_ref):
    x = pl.load(x_ref, (slice(None), slice(None)))
    y = pl.load(y_ref, (slice(None), slice(None)))
    pl.store(o_ref, (slice(None), slice(None)), eltwise_kernel(x + y))
  return add

This works as long as the input matrices X and Y are of size = (n^2, n^2) e.g. (32 x 32). And this is true no matter what block sizes I set.
 bm = 32
 bn = 16
 grid = (jt.cdiv(m, bm), jt.cdiv(n, bn))
 print(pl.pallas_call(kernel1, out_shape=out_shape, grid=grid)(x, y))
 print(pl.pallas_call(kernel2, out_shape=out_shape, grid=grid)(x, y))

So when you specify a grid you are specifying how many parallel instances of the kernel you are invoking. In this case you'll be invoking the same kernel (m // bm * n // bn) times. However, the kernel you've written does the full elementwise addition for the whole matrix, so each is doing the same exact computation.
What you want is to carve up the computation across these different kernel instances so that they are doing disjoint work. To do this, you have a couple options. You can modify your indexing logic to use the program_id to pick a block.
import jax
from jax_triton import pallas as pl
import jax.numpy as jnp

def make_kernel(eltwise_kernel, *, bm: int, bn: int):
  def add(x_ref, y_ref, o_ref):
    # What program instance are we in?
    i, j = pl.program_id(0), pl.program_id(1)
    # Let's select a block of the input matrices corresponding to our program id
    x = pl.load(x_ref, (pl.ds(i * bm, bm), pl.ds(j * bn, bn)))
    y = pl.load(y_ref, (pl.ds(i * bm, bm), pl.ds(j * bn, bn)))
    pl.store(o_ref, (pl.ds(i * bm, bm), pl.ds(j * bn, bn)), eltwise_kernel(x + y))
    o_ref[...] = eltwise_kernel(x_ref[...] + y_ref[...])
  return add

m, n = 256, 256
dtype = jnp.float32
out_shape = jax.ShapeDtypeStruct((m, n), dtype)
k1, k2 = jax.random.split(jax.random.PRNGKey(0))
x = jax.random.normal(k1, (m, n), dtype=dtype)
y = jax.random.normal(k2, (m, n), dtype=dtype)
bm = 32
bn = 16
kernel1 = make_kernel(lambda x: x * 2, bm=bm, bn=bn)
kernel2 = make_kernel(jnp.exp, bm=bm, bn=bn)
grid = (pl.cdiv(m, bm), pl.cdiv(n, bn))
print(pl.pallas_call(kernel1, out_shape=out_shape, grid=grid)(x, y))
print(pl.pallas_call(kernel2, out_shape=out_shape, grid=grid)(x, y))

OR, you can use pl.BlockSpec to specify how inputs/outputs are carved up.
import jax
from jax_triton import pallas as pl
import jax.numpy as jnp

def make_kernel(eltwise_kernel):
  def add(x_ref, y_ref, o_ref):
    o_ref[...] = eltwise_kernel(x_ref[...] + y_ref[...])
  return add

m, n = 256, 256
dtype = jnp.float32
out_shape = jax.ShapeDtypeStruct((m, n), dtype)
k1, k2 = jax.random.split(jax.random.PRNGKey(0))
x = jax.random.normal(k1, (m, n), dtype=dtype)
y = jax.random.normal(k2, (m, n), dtype=dtype)
bm = 32
bn = 16
kernel1 = make_kernel(lambda x: x * 2)
kernel2 = make_kernel(jnp.exp)
grid = (pl.cdiv(m, bm), pl.cdiv(n, bn))
spec = pl.BlockSpec(lambda i, j: (i, j), (bm, bn))
print(pl.pallas_call(kernel1, in_specs=[spec, spec], out_specs=[spec], out_shape=out_shape, grid=grid)(x, y))
print(pl.pallas_call(kernel2, in_specs=[spec, spec], out_specs=[spec], out_shape=out_shape, grid=grid)(x, y))

I apologise, I misunderstood the pallas capabilities. I was under the false impression that it was a wrapper around Triton that would handle carving up the data etc.

pl.BlockSpec does automatically do that for you

I apologise for my ignorance, but is pl.BlockSpec also suppose to handle when the data is not exact multiples of the block size? Because if that is the case it doesn't work.
However, the matmul example of pure triton code uses masking to handle this (as shown below). I presume you still need to use a pallas equivalent in order to correct handle any size input matrices?
@triton.jit
def matmul_kernel(
    # Pointers to matrices
    a_ptr, b_ptr, c_ptr,
    # Matrix dimensions
    M, N, K,
    # The stride variables represent how much to increase the ptr by when moving by 1
    # element in a particular dimension. E.g. `stride_am` is how much to increase `a_ptr`
    # by to get the element one row down (A has M rows).
    stride_am, stride_ak,
    stride_bk, stride_bn,
    stride_cm, stride_cn,
    # Meta-parameters
    block_size_m: tl.constexpr, block_size_n: tl.constexpr, block_size_k: tl.constexpr,
    group_size_m: tl.constexpr,
):
    """Kernel for computing the matmul C = A x B.
    A has shape (M, K), B has shape (K, N) and C has shape (M, N)
    """
    # -----------------------------------------------------------
    # Map program ids `pid` to the block of C it should compute.
    # This is done in a grouped ordering to promote L2 data reuse.
    # See above `L2 Cache Optimizations` section for details.
    pid = tl.program_id(axis=0)
    num_pid_m = tl.cdiv(M, block_size_m)
    num_pid_n = tl.cdiv(N, block_size_n)
    num_pid_in_group = group_size_m * num_pid_n
    group_id = pid // num_pid_in_group
    first_pid_m = group_id * group_size_m
    group_size_m = min(num_pid_m - first_pid_m, group_size_m)
    pid_m = first_pid_m + (pid % group_size_m)
    pid_n = (pid % num_pid_in_group) // group_size_m

    # ----------------------------------------------------------
    # Create pointers for the first blocks of A and B.
    # We will advance this pointer as we move in the K direction
    # and accumulate
    # `a_ptrs` is a block of [BLOCK_SIZE_M, BLOCK_SIZE_K] pointers
    # `b_ptrs` is a block of [BLOCK_SIZE_K, BLOCK_SIZE_N] pointers
    # See above `Pointer Arithmetics` section for details
    offs_am = (pid_m * block_size_m + tl.arange(0, block_size_m)) % M
    offs_bn = (pid_n * block_size_n + tl.arange(0, block_size_n)) % N
    offs_k = tl.arange(0, block_size_k)
    a_ptrs = a_ptr + (offs_am[:, None] * stride_am + offs_k[None, :] * stride_ak)
    b_ptrs = b_ptr + (offs_k[:, None] * stride_bk + offs_bn[None, :] * stride_bn)

    # -----------------------------------------------------------
    # Iterate to compute a block of the C matrix.
    # We accumulate into a `[BLOCK_SIZE_M, BLOCK_SIZE_N]` block
    # of fp32 values for higher accuracy.
    # `accumulator` will be converted back to fp16 after the loop.
    accumulator = tl.zeros((block_size_m, block_size_n), dtype=tl.float32)
    for k in range(0, tl.cdiv(K, block_size_k)):
        # Load the next block of A and B, generate a mask by checking the K dimension.
        # If it is out of bounds, set it to 0.
        a = tl.load(a_ptrs, mask=offs_k[None, :] < K - k * block_size_k, other=0.0)
        b = tl.load(b_ptrs, mask=offs_k[:, None] < K - k * block_size_k, other=0.0)
        # We accumulate along the K dimension.
        accumulator += tl.dot(a, b)

        # x_sum = tl.sum(a * a, axis=1)
        # y_sum = tl.sum(b * b, axis=0)
        # accumulator += x_sum[:, None] + y_sum[None, :] - 2.0 * tl.dot(a, b)

        # Advance the ptrs to the next K block.
        a_ptrs += block_size_k * stride_ak
        b_ptrs += block_size_k * stride_bk
    # You can fuse arbitrary activation functions here
    # while the accumulator is still in FP32!
    # if ACTIVATION == "leaky_relu":
    #     accumulator = leaky_relu(accumulator)
    c = accumulator.to(tl.float16)

    # -----------------------------------------------------------
    # Write back the block of the output matrix C with masks.
    offs_cm = pid_m * block_size_m + tl.arange(0, block_size_m)
    offs_cn = pid_n * block_size_n + tl.arange(0, block_size_n)
    c_ptrs = c_ptr + stride_cm * offs_cm[:, None] + stride_cn * offs_cn[None, :]
    c_mask = (offs_cm[:, None] < M) & (offs_cn[None, :] < N)
    tl.store(c_ptrs, c, mask=c_mask)

You'll need to use pl.load(..., mask=, other=...) to handle masking.
Sorry, Pallas isn't fully documented yet and I'm working on that actively.

FYI,
def make_kernel(eltwise_kernel, *, bm: int, bn: int):
  def add(x_ref, y_ref, o_ref):
    # What program instance are we in?
    i, j = pl.program_id(0), pl.program_id(1)
    # Let's select a block of the input matrices corresponding to our program id
    x = pl.load(x_ref, (pl.ds(i * bm, bm), pl.ds(j * bn, bn)))
    y = pl.load(y_ref, (pl.ds(i * bm, bm), pl.ds(j * bn, bn)))
    pl.store(o_ref, (pl.ds(i * bm, bm), pl.ds(j * bn, bn)), eltwise_kernel(x + y))
    -> o_ref[...] = eltwise_kernel(x_ref[...] + y_ref[...])
  return add

I believe in the example you gave above, the marked line isn't correct / necessary, as you are already storing the result of eltwise_kernel to o_ref in the line above.

Thanks for the catch, fixed.


[Bug] IJSUnmarshalledRuntime is obsolote in .NET 7

I have a .NET 7 project running blazor server side.
When initializing the JSRuntime, an exception is thrown:
await FFmpegFactory.Init(Runtime); // throws System.InvalidCastException: 'Unable to cast object of type 'Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime' to type 'Microsoft.JSInterop.IJSUnmarshalledRuntime'.'

I found this -> https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/blazor/javascript-interoperability/import-export-interop.md#obsolete-javascript-interop-api

Thanks for reporting this issue, I will be refactoring the interop code this weekend.

It also seems to be completely removed in .NET 9.

I will mostly rewrite the current js interop code after .NET 9 RC2 release, hopefully they have some news regarding .net wasm threads.

I've been roughly following where the new Blazor goes and I think they delayed multithreading once again (like they delay half of the features as usual), and looking deeper it is indeed the reality: https://github.com/dotnet/aspnetcore/issues/17730#issuecomment-2059602250

Closing this as I have removed IJSUnmarshalled API from source.


ingress: use SDS, remove preconfigured gateway

This makes some improvements to our Ingress support. First, we remove
the Gateway installed during install. Then we can fix the autogenerated
internal Gateway to "properly" select the correct gateway deployment.
This should be configurable, I will add this once we add support for
IngressClass.
Next, support multiple tls blocks, and use SDS to pass these. This
aligns great with the Ingress model, where we are pointing to Secrets
already.
I also had to fix the controller to properly trigger events on Gateway
changes.
I also extended the tests to include HTTPS calls.
I recommend we merge https://github.com/istio/istio/pull/22134 in before this so we can have better testing

@howardjohn: The following test failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

unit-tests_istio
0b1a1d1d790db74098c01b4019bbd2d5ee4c6173
link
/test unit-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@howardjohn do you know under which Istio version will this be released?

1.6
On Wed, May 13, 2020, 6:03 AM Guy Rombaut<EMAIL_ADDRESS>wrote:

@howardjohn https://github.com/howardjohn do you know under which Istio
version will this be released?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/istio/istio/pull/22227#issuecomment-627968830, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAEYGXJVZMY7WOSWR7ADTRLRRKLBLANCNFSM4LMWDWMA
.

Thanks @howardjohn
I am at the moment on 1.5.x Could we patch it into 1.5.3 as well (if there is such plan?) as at the moment it's fully breaking fresh installs.  Or would you consider it "safe" to upgrade from 1.5.x to 1.6 (which will be released next week)?  The release notes draft are not public, and I cannot really check for breaking changes.


Can't detect --

I'd like to pass everything after -- to another command, but can't seem to detect the --. For instance, this test fails:

#[test]
fn test_lexopt() {
    let mut p = lexopt::Parser::from_args(&["foo", "bar", "--", "baz"]);
    assert_eq!(
        p.next().unwrap(),
        Some(lexopt::Arg::Value(std::ffi::OsString::from("foo")))
    );
    assert_eq!(
        p.next().unwrap(),
        Some(lexopt::Arg::Value(std::ffi::OsString::from("bar")))
    );
    assert_eq!(
        p.next().unwrap(),
        Some(lexopt::Arg::Value(std::ffi::OsString::from("--")))
    );
}

thread 'test_lexopt' panicked:
assertion `left == right` failed
  left: Some(Value("baz"))
 right: Some(Value("--"))

How would I get all the arguments after --? Or break out of the parsing loop once -- is encountered, without parsing baz?

lexopt treats -- as a marker that says no more options are coming. This is the standard meaning. What you're trying to do may or may not fit with that, I'm not sure. There's probably a workaround one way or another but it depends on the details, particularly on the positional arguments before --.
Is there a specific existing program whose style you're imitating?

Yes, for example cargo test foo -- --nocapture would pass --nocapture to the underlying test binary, but test foo to cargo.
So this implies a way to know which arguments are before, vs. after the --

In that case foo is actually also passed to the test binary. cargo test -- foo --nocapture has the same meaning. All positional arguments are forwarded, and all arguments after -- are interpreted as positional arguments even if they otherwise look like options.
For example this command:
$ cargo test basic_fuzz --profile=dev -- --nocapture

Spawns this process:
$ pgrep -a lexopt
2991115 [...]/lexopt/target/debug/deps/lexopt-bb40919c31e6f7b5 basic_fuzz --nocapture

So with lexopt you'd just keep watching for for Arg::Values and build the arguments for the test binary from that.
fn main() {
    let mut p = lexopt::Parser::from_args(&["foo", "--", "--nocapture"]);
    assert_eq!(
        p.next().unwrap(),
        Some(lexopt::Arg::Value(std::ffi::OsString::from("foo")))
    );
    assert_eq!(
        p.next().unwrap(),
        Some(lexopt::Arg::Value(std::ffi::OsString::from("--nocapture")))
    );
}

Hmm I see, so I basically have to know when I'm done parsing Values in the main process, and pass the rest of the Values to the sub-process.

Exactly. If you have a known number of positional arguments you can use the is_none() trick:
Value(value) if arg1.is_none() => arg1 = Some(value),
Value(value) if arg2.is_none() => arg2 = Some(value),
Value(value) => subprocess_args.push(value),

Ok, good enough thanks :+1:


SP-Starter-Kit - Remove hub association still shows footer on the site

#282 ## Category

[] Question
[*] Bug
[ ] Enhancement

Expected or Desired Behavior

We have installed the sp-starter-kit on our tenant and after successful installation 3 site collections has been created(1 HUB and 2 Association Sites). When I try to remove the association for one site collection the Hub Header is removed as expected from the associated site collection and similar expectation for the Hub footer.

Observed Behavior
When I try to remove the association for one site collection the Hub Header is removed as expected from the associated site collection but not the Hub footer(Footer still remains on the site collection).
Steps to Reproduce

After successful provision of sp-starter-kit, select one site collection in SharePoint Admin center
Click on "Change Hub Association" from the "Hub" Menu
From the left Panel select None and click on "Save"
Open the Site collection and the "Footer" will still remain the same.

Please help us out to resolve this issue.
Thanks,

This is not a bug per say, rather a feature.
The footer you are seeing is a part of the collab footer ext. You can review documentation here: https://github.com/SharePoint/sp-starter-kit/blob/master/documentation/components/ext-collab-footer.md. Disassociating from a hub will not remove this extension, thus the footer will remain.

Closing as guidance has been provided.
Also a duplicate of #304


Will you add the User API？ I think it's useful

Will you add the User API？ I think it's useful

Sorry, we currently think User API should be corresponded in other API client because it is used in both kintone and garoon.
Thank you.

@youtr-s
Please create cybozu-js-sdk 😄


CC56863 Changing Link location

Hello, @maira,
This proposed file change comes from https://github.com/dotnet/docs.ru-ru/pull/75/files?utf8=✓&diff=split&w=1 .
Line #98
Could you review this contribution and help to merge if agreed?
Many thanks in advance.
Summary
Describe your changes here.
Fixes #Issue_Number (if available)

@mairaw Thank you a lot for your reply. But I'm confused, Should I makefurther changes?
@carolinacmoravia
BR

@gosali we can't accept this as-is. So please change the following sentence:
"You can see this relationship in the image above." to
"You can see this relationship in the following image."
You just have to click the pencil on the files view:

Hello, @gosali,
You'll need to make a new commit with the change requested by @mairaw.
Thanks in advance for your support. :)

@mairaw  Please see the last commit and help to merge.
Thank you a lot!


added missing Band "Dean Wake" to the program ;-).

there's a great band missing in your program!

Ha, thanks for the contribution!
I'll be sure to pass it along, hope to see you at Renée soon!

@njam didn't hear anything so far. Might it be possible to give me a contact (e.g phone number)?
For privacy reasons you might want to reply to<EMAIL_ADDRESS>


fix: bitbucket server edit url resolves correctly

Hey, I just made a Pull Request!

: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)

Closes #20042

This needs a changeset to get shipped.
The comment above states that there is no edit mode to link to. Is that not true?
Also, hm. The comment that got removed is interesting. I wonder if that impact is still relevant. Does perhaps @backstage/techdocs-maintainers know? Either way, that sounds like something that should be fixed in the TechDocs end rather than here.

Thanks @freben for your reply. The edit button in techdocs redirects you always to the master branch and not to the correct branch (the query params are cut also there), so it is another bug to be fixed.

Some what related: https://github.com/backstage/backstage/issues/12892
@pjungermann any feedback or thoughts on this one?

We could maybe keep only the at query param and remove the others (like mode)?

@fedy97 This change was done by another Bitbucket Server consciously in order to make "edit URL" work for Tech Docs. By removing the truncation of query parameters, you will break the "edit" button feature at Tech Docs.
I worked on a change at PR #16699 which will make it work without removing the query parameters, also for other systems like Bitbucket Cloud. However, it still requires some changes to mkdocs-techdocs-core and mkdocs-monorepo-plugin before it could be merged.

@fedy97 This change was done consciously by another Bitbucket Server user in order to make "edit URL" work for Tech Docs. By not removing the query parameters, you will break the "edit" button feature at Tech Docs.
The reason for this is mkdocs itself and how it supports edit_uri there.
I worked on a change at PR #16699 which will make it work without removing the query parameters, also for other systems like Bitbucket Cloud. However, it still requires some changes to mkdocs-techdocs-core and mkdocs-monorepo-plugin before it could be merged.

I am not able to reproduce the breaking of the edit button, it always redirect me to the index.md on master branch (not in edit mode). It seems there is no difference if query params are set or not. Maybe a specific query params breaks it?

I just found the original PR #12857 for context.

@omerfarukdogan as the original author of the aforementioned PR, maybe you can have a look at this change.

@fedy97 Which version of Backstage are you using? I have just tested on ours (1.13.0) and the edit button still works correctly. It opens the source of the current page (https://<host>/projects/<project>/repos/<repo>/browse/docs/sub-page.md)
Are you setting up techdocs-url like this?
"backstage.io/techdocs-ref": "url:https://<host>/projects/<project>/repos/<repo>/browse/"

@fedy97 Which version of Backstage are you using? I have just tested on ours (1.13.0) and the edit button still works correctly. It opens the source of the current page (https://<host>/projects/<project>/repos/<repo>/browse/docs/sub-page.md)
Are you setting up techdocs-url like this?
"backstage.io/techdocs-ref": "url:https://<host>/projects/<project>/repos/<repo>/browse/"

the issue is this #20042 : I have  this catalog info localhost:7990/projects/WIT/repos/test_dp_bitbucket/browse/catalog-info.yaml?at=release_5 which has backstage.io/techdocs-ref: dir:.. When I import it, the edit-url is wrong, it is missing the at query param that specifies the branch. The edit button always redirects to master doc.

@fedy97 I don't think the function you are modifying is related to the annotation (backstage.io/edit-url) you have an issue with. This is a function under techdocs plugin and it is executed during the document generation step. The annotation is not generated here and should not be affected by this change. The annotation is for editing the entity definition itself, not the document. Please correct me if I'm wrong @freben, @pjungermann.
On the other hand, the parameters on the document URL are indeed removed from the "edit document" button. Otherwise mkdocs generates an incorrect URL for editing (IIRC https://<host>/projects/<project>/repos/<repo>/browse/?at=release5/docs/sub-page.md instead of https://<host>/projects/<project>/repos/<repo>/browse/docs/sub-page.md?at=release5).

@fedy97 I don't think the function you are modifying is related to the annotation you have an issue with (backstage.io/edit-url). This is a function under techdocs plugin and it is executed during the document generation step. The annotation is not generated here and should not be affected by this change. The annotation is for editing the entity definition itself, not the document. Please correct me if I'm wrong @freben, @pjungermann.
On the other hand, the parameters on the document URL are indeed removed from the "edit document" button. Otherwise mkdocs generates an incorrect URL for editing (IIRC https://<host>/projects/<project>/repos/<repo>/browse/?at=release5/docs/sub-page.md instead of https://<host>/projects/<project>/repos/<repo>/browse/docs/sub-page.md?at=release5).

The change I made in this PR affects only the annotation backstage.io/edit-url and so if you go in the inspect entity you can see the entire url with the at query param. The problem to be fixed is the edit button that in this case will redirect me to http://localhost:7990/projects/WIT/repos/test_dp_bitbucket/browse/docs?at=release_5/index.md which is a wrong url, but with the actual code it would redirect me to http://localhost:7990/projects/WIT/repos/test_dp_bitbucket/browse/docs/index.md which is wrong too because I do not want to go to master branch

@fedy97 I would imagine most people to use the main branch for documentation so it wouldn't cause a problem for most cases. Our options are:

Generate a correct URL with a possibly incorrect branch
Generate an incorrect URL
Generate a correct URL (by making mkdocs handle the query parameters)

This PR is going with 2 (unless we also fix mkdocs), I would prefer 1 rather than 2, but it's up to the maintainers IMO.

@omerfarukdogan I fixed the edit button link, now it redirects always to master, but the annotation backstage.io/edit-url now points to the right url

@omerfarukdogan I've started to work on  option 3 at the PR I've referenced above. There is a way on newer mkdocs versions. However, still a few things to adjust at backstage's own plugins.


Vanilla PHP missing LaravelRay\Ray

Hi,
I am having an issue where I would like to use Ray on a legacy project with plain PHP. No framework is present. I've added Composer for certain parts of the app but mainly just old-fashioned PHP files.
macOS: Sonoma 14.5
PHP 8.3.8
using built-in php server (php -S localhost:8888)
Global ray is installed successfully.
I can see the auto prepend is added

When I attempt to use the Ray helper, it displays the following error message:
Class GlobalRay\Spatie\LaravelRay\Ray not found
I don't know what I am doing wrong, and I don't understand why it would want to look for LaravelRay.

Hi @szhorvath,
Does this issue still occur when you use a different web server vs the built-in one?

Hi @stevebauman,
Interestingly, I've just tried it in a docker container and added the spatie/ray package to the project to eliminate the nature of the global stuff. I am receiving the same Class Spatie\LaravelRay\Ray not found error but not a global namespace.
Here is my composer.json:
{
    "require": {
        "php": "^8.2",
        "ext-curl": "*",
        "vlucas/phpdotenv": "^5.6",
        "illuminate/collections": "^11.11",
        "spatie/ray": "^1.41"
    },
    "require-dev": {
        "symfony/var-dumper": "^6.4.8",
        "friendsofphp/php-cs-fixer": "^3.59.3"
    },
    "autoload": {
        "files": [
            "app/helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "scripts": {
        "fix-style": "vendor/bin/php-cs-fixer fix --allow-risky=yes",
        "check-style": "vendor/bin/php-cs-fixer fix --allow-risky=yes --dry-run"
    }
}

Many thanks for the help.


adding badges to README.md

added badges to README.md #50

Hello @UBA-GCOEN!
Thank you for submitting this pull request Your pull request will be reviewed by maintainers shortly. Meanwhile make sure you have referenced the respected issue in this pr Your pr will not be merged if it does not refer respected pr and have read our Contributing Guidelines https://github.com/UBA-GCOEN/StichHub/blob/main/CONTRIBUTING.md And Code of Conduct https://github.com/UBA-GCOEN/StichHub/blob/main/CODE_OF_CONDUCT.md


Fix flaky test in {yaml=ingest/70_bulk}

Description
Similar to https://github.com/opensearch-project/OpenSearch/pull/15162, there's also a flaky test org.opensearch.ingest.common.IngestCommonClientYamlTestSuiteIT.test {yaml=ingest/70_bulk/Test bulk upsert honors default_pipeline and final_pipeline when the auto-created index matches with the index template} , we need to add allowed_warnings for it.
Related Issues
https://github.com/opensearch-project/OpenSearch/issues/15161
Check List
- [ ] Functionality includes testing.
- [ ] API changes companion pull request created, if applicable.
- [ ] Public documentation issue/PR created, if applicable.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Needs https://github.com/opensearch-project/OpenSearch/pull/15160

@gaobinlong could you rebase please? thank you!


[mtl] support clear_attachments in MSAA-enabled passes

Fixes part of problem for running the Diligent Engine MSAA example on gfx-portability.
PR checklist:

[x] make succeeds (on *nix)
[ ] make reftests succeeds
[ ] tested examples with the following backends:

bors r+


:sparkles: add dependency location resolver and get code locations for XML, JSON files

Fixes #410
Fixes #254
There were two choices to do this:

Add a new optional field lineNumber to Dep type, and let the providers populate it at the time of dependency discovery. This is straight-forward and probably preferred, but requires a change in the output API.
Add a new interface like Snipper, that providers can implement for deps to get locations for a certain dependency.

I chose No. 2 because output API change not needed. But I am not fan of it as its complicated & perf penalty. Asking for your inputs on the approach. If we do go with 2, I think we should we should still remove it in later versions in favor of a new optional field on Dep. Even if we did add it now, it would be non-intrusive.

@shawn-hurley @fabianvf @djzager Let me know what you guys think of this approach

Looks good!


Fix wandb server test (regression suite)

Description
Fixes standalone test to support newest "wandb-service" api...
it is a bit raw, but it is what we have for now...  "inform_init" is needed to setup logging directories and other things before the run is created.
Testing
Manually run.
Release Notes
Below, please enter user-facing release notes as one or more bullet points.
If your change is not user-visible, write NO RELEASE NOTES instead, with no bullet points.

Approving as it is internal test file, but maybe we should think of automated way to test this?

It is automated, see:
https://github.com/wandb/wandb-testing/blob/master/regression/tests/main/wandb-git/client/standalone_tests/grpc_server/regression.yaml


📝 Fix rtkq selectFromResult example

name: :memo: Documentation Fix
about: Fixing a problem in an existing docs page
Checklist

[ ] Is there an existing issue for this PR?

No existing issue

[x] Have the files been linted and formatted?
Yes

What docs page needs to be fixed?

Section: Tutorials -> Redux Essentials
Page: RTK Query Advanced Patterns -> Selecting Values from Results

What is the problem?
In the example snippet, res.data will be undefined initially, before the query returns any data. Calling data.filter would result in a runtime error.
What changes does this PR make to fix the problem?
This PR alters the example snippet to account for data being undefined, and falls back to return an empty array in that case instead.

Thanks!


update example data to partial data of 2017

@atalyaalon do we really want to remove the old data? We seem to have less data for 2017 than we have for 2014

No we don't.
I'll update the pull request together with the update of the tests.
בתאריך 24 בפבר׳ 2018 17:16, "Roey Darwish Dror"<EMAIL_ADDRESS>כתב:

@atalyaalon https://github.com/atalyaalon do we really want to remove
the old data? We seem to have less data for 2017 than we have for 2014
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/hasadna/anyway/pull/849#issuecomment-368235140, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AUBScbHHPjCAjXG42QUYnaPix252g_sIks5tYCfQgaJpZM4SLGNu
.


[BEAM-3605] Use verification with timeout instead of Thread.sleep

Another approach to fixing flaky ShardReadersPoolTest which currently relies on Thread.sleep(). By using Mockito's verification with timeout we can avoid sleeping before making the assertions.
It also fixes BEAM-3598 and BEAM-3599

Follow this checklist to help us incorporate your contribution quickly and easily:

[x] Make sure there is a JIRA issue filed for the change (usually before you start working on it).  Trivial changes like typos do not require a JIRA issue.  Your pull request should address just this issue, without pulling in other changes.
[x] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue.
[x] Write a pull request description that is detailed enough to understand:

[x] What the pull request does
[x] Why it does it
[ ] How it does it
[ ] Why this approach

[x] Each commit in the pull request should have a meaningful subject line and body.
[x] Run mvn clean verify to make sure basic checks pass. A more thorough check will be performed on your pull request automatically.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

Hi @aromanenko-dev @kennknowles. During the review of PR-4661 I've discovered that Mockito has the ability to do verifications with timeouts. This way we can simply solve the flaky tests without adding too much logic. What do you think?

This also works for me - I'll leave it up to you two.

@pawel-kaczmarczyk  LGTM. In general, I'm ok with your solution since it contains less boilerplate and easy to understand. Though, it still relies on "timeout" approach which, potentially, leave some very small probability of instability. Probably, in the future, we need to rethink the way how to test multithreaded code in KinesisIO.
Thank you for fixing this!

@pawel-kaczmarczyk Btw, did you test it running multiple times these tests to make sure that they are not flakey anymore?

I've run it 100 times and it worked every time so 10s timeout seems to be enough for now. Thanks for your review.

Run Java Gradle PreCommit

Run Go Gradle PreCommit


the filename in the image will started with '' if the '-s' parameter not end with '/'

hi,
I am using the littlefs_create command to create an image. however, I found there is a small unexpected behavior.
if I using the command with parameter "-s ./abc", the filenames in the image will all be started a ''.
I changed the parameter to "-s ./abc/", then filenames is ok.
I think this might be cause by the code here:
https://github.com/vppillai/littlefs_tools/blob/602a9fb77b297be291ad142079d326349212f562/littlefs_tools/littlefs_tools.py#L235C20-
L235C20
the function remove_prefix not remove the prefix '' correctly.

What environment are you using?
I tried it on a Debian machine and the disk image seems to be fine.
ls test
test1  test2
littlefs_create -s ./test

Total Contents size = 0.0 B
Created `test.bin` of size [4.0 KiB x 64] = 256.0 KiB
littlefs_list -i test.bin
test.bin
  *---test1 (0.0 B)
  *---test2 (0.0 B)

closing due to inactivity


PHP PhantomJs - click on the item

Kind time of the day, I rummaged all http://jonnnnyw.github.io/php-phantomjs/ But I can not find how to click on the item on the page in PhantomJs In general, I need to click on the element on the page how to do it?

+1 Need that functionality

+1 Need!

Use puppeter, works perfect


Add streaming features and missing pre recorded features

Proposed changes
Add streaming features and support for pre-recorded features when streaming.
Note that this modifies some public enum's which are used internally but might need to be taken into account

Bumped the minor version but it might need a major bump?

Streaming Features

endpointing
utterance_end_ms
interim_results
no_delay
vad_events

Streaming Functions

keep_alive

New Streaming Message Types

Utterance End
Speech Started

Advanced Streaming Example

/examples/advanced_stream.rs

Pre-Recorded Features

encoding
smart_format
callback
callback_method
filler_words
paragraphs
diarize_version
dictation
measurements
extra

Pre-Recorded Audio Intelligence Features

detect_entities

sentiment

topics

summarize

intents

custom_intents

custom_intent_mode

topics

custom_topics

custom_topic_mode

Types of changes

[ ] Bugfix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[x] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[x] Documentation update or tests (if none of the other choices apply)

Checklist

[x] I have read the CONTRIBUTING.md doc
[x] I have added tests and/or examples that prove my fix is effective or that my feature works
[x] I have added necessary documentation (if appropriate)

Further comments
Also considered a different approach with a SerializeStreamingOptions and have the code still just in case but this followed existing patterns

To see the specific tasks where the Asana app for GitHub is being used, see below:

https://app.asana.com/0/0/1207792457320343

Closing and moving to a new PR


deps: update to Wasmtime 25 toolchain

Wasmtime has monthly releases on the 19th of the month, which the Jco toolchain aligns with.
In order to avoid toolchain dependency duplication, we align our wasm tools versions with the Wasmtime versions on these releases.
For the current ComponentizeJS release I've had to include two versions of wasmparser. With this PR updating to Wasmparser 217, this would resolve that divergence, which can be posted as a patch release for ComponentizeJS.
Overall it would be great if it might be possible to maintain some kind of release cadence like this with the Wasmtime version.

Just wanted to follow up on this. I believe it's a biweekly schedule for releases on ComponentizeJS right? We were thinking of setting up a GitHub actions that would create an issue every 2 weeks to update wasmparser versions. Does this work?

We align with the Wasmtime release schedule on or around the 19th of the month. Aligning with the toolchain versions there would be ideal. See eg https://crates.io/crates/wasmtime/25.0.1/dependencies.


The normal diagram does not work

Hello, with the current code the simpler diagram does not work. If I connect the vcc and ground to the normal Vcc and ground of the arduino then it works. The problem is that it does not "sleep", but at least works.
Regards

Any updates on this? when it starts the servo starts moving to one side a few times and stops, I changed the ground as well and same thing, It didn't work for me yet.


Fix the bug of incorrect model type identification

Signed-off-by: liangtao07<EMAIL_ADDRESS>Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes #810
Type of change
Please delete options that are not relevant and/or add your own.

Bug fix (non-breaking change which fixes an issue)

Checklist:

[x] My code follows the style guidelines of this project (You can use the linters)
[x] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas and hacks
[x] I have made corresponding changes to the documentation
[ ] I have added tests to verify my fix or my feature
[ ] New and existing unit tests pass locally with my changes

You can add the tests to test_api.py

Cool!, feature wise this looks good. To merge 1. Can you run the linter on your code? 2. I think it would be nice to add the Module Type detection to the test suite so this error will get caught in the future.

I run run_py_linter.py locally without any problems.

Cool!, feature wise this looks good. To merge 1. Can you run the linter on your code? 2. I think it would be nice to add the Module Type detection to the test suite so this error will get caught in the future.

For 2, done.


Map VisibleRegion.Radius changes every time

when i set the map region like
MyMap.MoveToRegion(MapSpan.FromCenterAndRadius(position, Distance.FromMeters(100)));
next time when i call MyMap.VisibleRegion.Radius , it get change like 124 meters.
how can get the previous zoom level, or can i get zoom changed event.

I have a plan to implements  GoogleMap.OnCameraMoveListener and CameraPosition in #7 .
Then you can subscribe zoom changed event.
Please wait for a while.

sure, thanks

I close issue because this is duplicate of #7 .
Please check #7 .


[Bug]: Error - this.driver.refreshData is not a function

What happened?
I am unable to configure this plugin after reinstalling - anytime I enter my email/password on the configuration screen, I get a red box popup at the lower right hand corder saying:
Error
this.driver.refreshData is not a function
Device Type
other (UnSupported)
Plugin Version
v1.0.x (Supported)
HomeBridge Version
v1.3.x (Supported)
NodeJS Version
v14 (Supported)
Operating System
Raspbian
Relevant log output
No response

Are you sure you're using the latest version ? 1.0.1 or latest beta ?

i can confirm this is happening with 1.0.0
 [EufySecurity] Error refreshing data from Eufy:  TypeError: client.refreshData is not a function
    at EufySecurityPlatform.refreshData (/homebridge/node_modules/homebridge-eufy-security/src/platform.ts:418:22)
    at Timeout._onTimeout (/homebridge/node_modules/homebridge-eufy-security/src/platform.ts:424:16)
    at listOnTimeout (internal/timers.js:555:17)
    at processTimers (internal/timers.js:498:7)

1.0.1 still not available on homebridge

FYI I just logged in and see an update available for 1.0.2 with a fix for this. Can confirm after updating that the fix resolved it.


Prerequisite check for ampadm doesn't work

adm-server well detect the prerequisite issue, but try to fix it in the container context.
To be fixed.

to be moved in the bootstrap agent, it's not a container and it's run as root


HttpServer: accept header is only ever '/' even though the browser (and other server stacks) report more

r31822
For a normal HttpServer impl, I check HttpRequest.headers[ACCEPT]
Only ever see '/'
Chrome reports sending: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
The same app written w/ Ruby/Rack reports: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8

HTTP_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.7'
HTTP_ACCEPT_ENCODING
'gzip'
HTTP_ACCEPT_LANGUAGE
'en-GB,en-US;q=0.9,en;q=0.8,bm;q=0.7'
HTTP_CDN_LOOP
'cloudflare'
HTTP_CF_CONNECTING_IP
'<IP_ADDRESS>'
HTTP_CF_IPCOUNTRY
'BD'
HTTP_CF_RAY
'84a9495458444834-SIN'
HTTP_CF_VISITOR
'{"scheme":"https"}'
HTTP_CONNECTION
'close'
HTTP_COOKIE
('csrftoken=CMLNXzM9ua8NgJ26qwMF9TIYSNYMwCBU; _ga=GA1.1.1334489069.1706109813; '
'_ga_D90HN1D2YB=GS1.1.17061098<IP_ADDRESS>61098<IP_ADDRESS>')
HTTP_HOST
'randomtools.io'
HTTP_REFERER
'https://randomtools.io/success/100093060232910/'
HTTP_SEC_CH_UA
'"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"'
HTTP_SEC_CH_UA_MOBILE
'?1'
HTTP_SEC_CH_UA_PLATFORM
'"Android"'
HTTP_SEC_FETCH_DEST
'document'
HTTP_SEC_FETCH_MODE
'navigate'
HTTP_SEC_FETCH_SITE
'same-origin'
HTTP_SEC_FETCH_USER
'?1'
HTTP_UPGRADE_INSECURE_REQUESTS
'1'
HTTP_USER_AGENT
('Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/<IP_ADDRESS> Mobile Safari/537.36')
HTTP_X_FORWARDED_FOR
'<IP_ADDRESS>'


Implement Plutus-IR typechecking

I ported the PlutusCore.TypeCheck and PLC.TypeError ADT to PIR.
I tried to reuse some code, but there is still more logic left to reuse.
Added the PIR type pos&neg tests.
What this PR does not include:

@effectfully 's proposal for not escaping types; i have the impl. stashed and will merge separately, per suggestion of @michaelpj
there is more type-normalization to be performed at pir->plc Compiler.hs . Not implemented yet.

You need to update the Nix files (see CONTRIBUTING).

@bezirg it would be much easier to review changes if you use separate commits instead of force-pushing, so I suggest to do that. We'll collapse everything in the end.

@bezirg sorry, ignore my previous comment, GitHub wasn't showing me any commits before I left that comment for some silly reason.

Also, it would have made things easier for you and for us to review to have done the generalization of the PLC type error over term in a separate PR. Good lesson there ;)


Hi, Can Is ask how this error can be fixed? Thanks a lot

TypeError: _max() got an unexpected keyword argument 'dim'
I got a torch.max op, and the converter throws me this error

Becase in caffe,there is no layer to supoort such pytorch max operator with dim input.


String and comments

Implemented both.

Comments are simply skipped by tokenizer. It yields separate whitespace tokens before and after the comment.
Strings are defined with double quotes (e.g. "hello") and may include backslash-escaped double quotes (\")

P.S. PR also includes changes from refactoring branch (rebased the code on them)


Made all notes available from nested subdirectories inside /data

Hi,
First of all amazing project, the moment i saw this i realized this is a perfect remote access solution for my current note system.
I understand that the goal of the project is for the application to be as simple as possible, however not being able to have deeper directory structure in /data is making this app unusable for users who are also managing their notes through git.
I've made a few simple changes which makes all of the markdown files available from any sub directory inside /data.
Please note that this does not clutter the front-end in any way, the titles are displayed as filename (without .md extension) in the web view, hence the simplicity aspect of the app is kept.
Fingers crossed for this to go through as i would finally have a note taking system that 100% fits my needs

Hi @Gedulis12, thanks for contributing. I appreciate that this change is aimed at keeping the simplicity in the front end. It does however add complexity to the back end so before I dig deeper into the changes, can I ask a couple of initial questions:

Could you please elaborate a little on how the subdirectory compatibility will help when using git.
If subdirectories are not exposed in the front end, how do the proposed changes deal with potential duplicate filenames (in different sub-directories)?

Hi @Gedulis12. If I'm honest, I'm not keen on either of the proposed solutions. They both feel like a hack around the flat nature of the app.
That's not to say that I don't want to try and help here though. I can imagine there are others who are in a similar position and would like to use flatnotes and it would be great to have a solution.
What I'm thinking is, perhaps there is a way to achieve a flattened shadow copy of a multi-tiered directory structure outside of flatnotes. And then just back flatnotes onto that.
As an example, in theory, you could use inotify to create and destroy symlinks in a flat directory to point to files in a hierarchical directory.
Or perhaps this is possible with something like mergerfs or UnionFS?

Hi @dullage , thanks for the feedback.
To be honest the proposed workarounds also seem very hacky in nature.
They would suggest that complexity which could be handled by the application would be shifted to be handled and maintained by the user himself. I personally would rather not use the application at all if i had dance around with symlinks, shadow copies or other additional layers.
On that note, do you think that there is any improvements that could be applied to address your concerns and make you accept the possibility to have notes accessible on nested directories?
In any case i'm prepared to maintain a forked version of the application, but i would rather have us reach a consensus :)

I did have another thought but I haven't yet worked out how it could be achieved or how much work would be involved.
What I'm thinking is, maybe flatnotes could support some kind of a bring-your-own-storage model where it would ship with a model to support the current functionality (a single flat directory in the local filesystem) but allow for other models to be used if wanted. Then, rather than maintaining a fork, you'd just need to maintain a plugin.
I'd have to separate out the logic a bit but the number of operations the plugin would need to support is minimal (list files, get a file, create a file etc).
The benefit of this is that it could potentially allow for other storage options such as S3 or GitHub.

Wouldn't my previous suggestion work in order to achieve something like this?

Also another thing i could suggest is that nested subdirectories could be not compatible by default, but could be enabled in docker-compose through an optional environment variable. That way any additional complexity would be disabled by default.

The additional functionality could be enabled only if some environment variable is set to true, for example NESTED_DIRECTORIES_ENABLED: true in docker-compose.yml. This way any additional functionality could be easily separated from the main default version of an app.

Sorry for the late reply. The difference in the plugin approach I mentioned is that the nested directories code would be external to this repo. Although the solution works, it is still a bit of a workaround and as such, not something I'd really like to support as a 1st party feature.

Just to let you know, I'm also very interrested by the support of existing folder structure .
It would be very great to use the very nice and clean interface of flatnotes with existing MD files folders without the need to rearrange the files
Thanks a lot for the project!

@benooye As a workaround i myself am currently using the forked version with support for subdirectories, you can use my version by changing the image in docker-compose.yml configuration to  gedulis12/flatnotes:latest

Are there any thoughts about making this an official feature? It's a common practice in documentation apps like Docusaurus for instance. Organizing notes within the file structure using a folder system is really helpful. Thanks for all your efforts on the project!

Hi @dullage , thanks for the feedback.
To answer your questions:
Could you please elaborate a little on how the subdirectory compatibility will help when using git.
Say i already have a note taking system in place where i use markdown files and manage them through git. I might already have directory structure imposed for example:
.
├── ideas.md
├── school
│   ├── curriculum1.md
│   ├── curriculum2.md
│   └── curriculum3.md
├── shortcut-cheatsheet.md
├── useful-links.md
├── quick-gists
│   ├── 20230217.md
│   ├── 20230221.md
│   ├── 20230224.md
│   └── 20230322.md
└── somerandomenote.md

so if flatnotes would be compatible with subdirectories, a user would be able to simply git clone their repository in /data folder and have all notes accessible to read/edit through the flatnotes web UI and do git pull, git push when needed.
If, on the other hand compatability for subdirectories is not enabled, the user would have to manually move notes to the root directory which would break the structure in their git repository, which is not ideal if one wants to keep notes somewhat organized.
If subdirectories are not exposed in the front end, how do the proposed changes deal with potential duplicate filenames (in different sub-directories)?
I have checked and confirmed that when creating new note through web UI, if a note with the same name already exists anywhere under /data, the error is handled gracefully with a pop-up:
Duplicate ✘
A note with this title already exists. Please try again with a new title.

If, however i try to create a new .md file with an already existing name manually, web-ui does display both notes, however the content of the note gets duplicated through both of the notes.
I believe this can be addressed in a few ways:

We could simply warn users about potential missbehaviour if multiple files exists with the same name;
We could modify the titles of those notes that have matching filenames, for e.g. let's say we have two notes /data/school/quicknote.md and /data/personal/quicknote.md, they could both be displayed as school → quicknote and personal → quicknote in web-ui. (i could work on a PR if you agree on the approach);

I would also argue that complexity is not necessarily added for those users who simply want plug and play solution and don't care about the availability of nested directory structure, as the app does not impose it by default. The bit of complexity gets added only when the user decides that he needs such additional functionality.
Also another thing i could suggest is that nested subdirectories could be not compatible by default, but could be enabled in docker-compose through an optional environment variable. That way any additional complexity would be disabled by default.
Please let me know what you think and whether you would like me to work on further changes to address the points mentioned above.

I gave your fork a try and it looks decent. However, there's still an issue with the organization on the flatnotes front end. It basically just lists all the .md files in all the folders without displaying the folders themselves or letting you navigate within them. Is there any way to better organize how this works on the front end? Maybe I am doing it wrong?

Are there any thoughts about making this an official feature? It's a common practice in documentation apps like Docusaurus for instance. Organizing notes within the file structure using a folder system is really helpful. Thanks for all your efforts on the project!

Unfortunately not. Really it's a different app entirely ("deepnotes"?). I understand that having just one big folder isn't everyone's cup of tea but it's one of the fundamental design decisions behind the app.

Hi @dullage , thanks for the feedback.
To answer your questions:
Could you please elaborate a little on how the subdirectory compatibility will help when using git.
Say i already have a note taking system in place where i use markdown files and manage them through git. I might already have directory structure imposed for example:
.
├── ideas.md
├── school
│   ├── curriculum1.md
│   ├── curriculum2.md
│   └── curriculum3.md
├── shortcut-cheatsheet.md
├── useful-links.md
├── quick-gists
│   ├── 20230217.md
│   ├── 20230221.md
│   ├── 20230224.md
│   └── 20230322.md
└── somerandomenote.md

so if flatnotes would be compatible with subdirectories, a user would be able to simply git clone their repository in /data folder and have all notes accessible to read/edit through the flatnotes web UI and do git pull, git push when needed.
If, on the other hand compatability for subdirectories is not enabled, the user would have to manually move notes to the root directory which would break the structure in their git repository, which is not ideal if one wants to keep notes somewhat organized.
If subdirectories are not exposed in the front end, how do the proposed changes deal with potential duplicate filenames (in different sub-directories)?
I have checked and confirmed that when creating new note through web UI, if a note with the same name already exists anywhere under /data, the error is handled gracefully with a pop-up:
Duplicate ✘
A note with this title already exists. Please try again with a new title.

If, however i try to create a new .md file with an already existing name manually, web-ui does display both notes, however the content of the note gets duplicated through both of the notes.
I believe this can be addressed in a few ways:

We could simply warn users about potential missbehaviour if multiple files exists with the same name;
We could modify the titles of those notes that have matching filenames, for e.g. let's say we have two notes /data/school/quicknote.md and /data/personal/quicknote.md, they could both be displayed as school → quicknote and personal → quicknote in web-ui. (i could work on a PR if you agree on the approach);

I would also argue that complexity is not necessarily added for those users who simply want plug and play solution and don't care about the availability of nested directory structure, as the app does not impose it by default. The bit of complexity gets added only when the user decides that he needs such additional functionality.
Also another thing i could suggest is that nested subdirectories could be not compatible by default, but could be enabled in docker-compose through an optional environment variable. That way any additional complexity would be disabled by default.
Please let me know what you think and whether you would like me to work on further changes to address the points mentioned above.

I gave your fork a try and it looks decent. However, there's still an issue with the organization on the flatnotes front end. It basically just lists all the .md files in all the folders without displaying the folders themselves or letting you navigate within them. Is there any way to better organize how this works on the front end? Maybe I am doing it wrong?

This was intentional, i was trying to implement the support for nested directory structure on the backend, without compromising the "flat" nature of the app on the frontend.

I'd also love to have directory support added to flatnotes.

Love this feature!

I think this would be great as well, so I can use flatnotes to search and edit existing notes and wikis.
It might make sense to keep the relative path to the notes in the title. That's what you'd get if you just list the files from a flat filesystem like S3.
This has the advantage that existing relative links work as expected, I can search on parts of a file path, and it's possible to create new notes within the subdirectories.
A poc is here https://github.com/dullage/flatnotes/compare/develop...danielmcmillan:flatnotes:notepaths
I did come across a few caveats when looking at this solution though..

requires some small adjustment to api routes and links since "/" is special
the rules for note titles are more complex as we need to check for things like empty path segments and "..", and (hopefully) prevent something like arbitrary filesystem access. Although there does anyway seem to be an existing issue with notes titled "." or "..".
someone might inadvertently create subdirectories by naturally putting / in their note title (though it would behave as expected)
deleting and renaming notes can leave behind empty directories
it would prevent being able to allow "/" as a normal character in note titles in future
references to attachments within nested note directories aren't going to work

If we replace the path separator with something else (like → as suggested earlier) then it avoids some of these issues, but also links wouldn't work.
Anyway I understand why there's reservations about such a change.
I also like the idea of being able to implement a plugin to provide the note storage.
Perhaps the plugin should also be able to customise the allowed note title characters to some extent.
And probably it should be able to provide attachment storage and retrieval.

... * the rules for note titles are more complex as we need to check for things like empty path segments and "..", and (hopefully) prevent something like arbitrary filesystem access. Although there does anyway seem to be an existing issue with notes titled "." or "..".

@danielmcmillan can you expand on the existing issue(s)? That maybe worth a new issue.
I was able to create a title in the public demo with the title
..%2F..%2Ftestdots

Without error but https://demo.flatnotes.io/note/..%252F..%252Ftestdots is not accessible nor https://demo.flatnotes.io/note/../../testdots
I've not setup an instance yet to see what the actual behavior on the filesystem is.

... * the rules for note titles are more complex as we need to check for things like empty path segments and "..", and (hopefully) prevent something like arbitrary filesystem access. Although there does anyway seem to be an existing issue with notes titled "." or "..".

@danielmcmillan can you expand on the existing issue(s)? That maybe worth a new issue.

@clach04 I didn't see any major issue, I don't think path traversal is possible. The only issue I found is the ability to create notes that cannot be accessed from the browser like what you have seen. Created https://github.com/dullage/flatnotes/issues/209


Bug in Aksha Fight

I am not sure what the bug is, but during the Aksha fight, Aksha casts Dark Veil a second time and the game freezes in the legendary action screen.
I get an error saying the Solasta mod is unstable.
Solasta version 1.4.32
Mod version <IP_ADDRESS>
IM_l5xQHgWmYEqhkaHfkFId4gA_1.txt
Player.log
Player-prev.log
CrashCheckFile.txt
Let me know, if you need any more information

Please properly zip and attach the save file. Cannot open once you rename to txt and upload.

IM_l5xQHgWmYEqhkaHfkFId4gM_1.zip
Here you go

We had this issue too but I reloaded a save and didn't have it happen a second time... I don't have a save from the first time it happened. :(

yep, I remember trying reproduce this one before without any luck. keep in mind it also happens on unmodded games. the message about a mod instability will always display on a game error, regardless if us or game developer. Not fair.
I tested this save twice and wasn't able to trigger the problem.

Foolishly, I was playing Ironman Mode and it crashes each time I try to reload.

SolastaUnfinishedBusiness.zip
damm! let me know if attached works for you.

donated to your cause.
Thanks!
On Thu, Jan 5, 2023 at 1:14 AM Paulo Monteiro @.***>
wrote:

SolastaUnfinishedBusiness.zip
https://github.com/SolastaMods/SolastaUnfinishedBusiness/files/10350123/SolastaUnfinishedBusiness.zip
damm! let me know if attached works for you.
—
Reply to this email directly, view it on GitHub
https://github.com/SolastaMods/SolastaUnfinishedBusiness/issues/2126#issuecomment-1371859710,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ANFONHEUWD25YT7YK72UYQDWQZYDRANCNFSM6AAAAAATRHWWW4
.
You are receiving this because you authored the thread.Message ID:
@.***>


Persist cache doesn't work when using webpack API, but wepack-cli works.

Bug report

What is the current behavior?
I use webpack by API, like:
// ./run.mjs
import webpack from 'webpack';

const compiler = webpack({
    mode: 'development',
    infrastructureLogging: {
        level: 'verbose'
    },
    cache: {
        type: 'filesystem'
    }
});

compiler.run((err, stats) => {
    if (err) {
        console.error(err);
    }
    console.log(stats.toString());
});

// run it:
// node run.mjs

But ./node_modules/.cache doesn't exsit. But it is works by webpack-cli using totally same configure object:
// webpack.config.mjs
export default {
    mode: 'development',
    infrastructureLogging: {
        level: 'verbose'
    },
    cache: {
        type: 'filesystem'
    }
};
// run it by:
// npx webpack --config ./webpack.config.mjs

Then ./node_modules/.cache will exists.
If the current behavior is a bug, please provide the steps to reproduce.
See the first example above.

What is the expected behavior?
It should generate .cache directory in ./node_modules

Other relevant information:
webpack version:  v5.69.0
Node.js version: v17.0.1
Operating System: Mac OS 12.2.1
Additional tools<EMAIL_ADDRESS>

@dexbol not sure, maybe you need to call compiler.close() in callback to store cache.

@dexbol not sure, maybe you need to call compiler.close() in callback to store cache.

It works 🎉 ! Much appreciated !


Unable to connect two SAP Hana DB Data Lake

Description
Hello,
i managed to sucessfully establish a connection two an SAP Hana DB cloud instance but not two the coresponding
SAP HANA DB data Lake.
I got the follwing Error message:
SAP DBTech JDBC: Cannot connect to jdbc:sap://3023f74f-249d-4325-8079-7b770216e54c.iq.hdl.trial-us10.hanacloud.ondemand.com:443 [Object is closed: com.sap.db.jdbc.SecureChannelSession@5d475444 3023f74f-249d-4325-8079-7b770216e54c.iq.hdl.trial-us10.hanacloud.ondemand.com:443 ConnectionID:0 SessionID:0 on sun.nio.ch.WindowsAsynchronousSocketChannelImpl[connected local=/[0:0:0:0:0:0:0:0]:59708 remote=3023f74f-249d-4325-8079-7b770216e54c.iq.hdl.trial-us10.hanacloud.ondemand.com/<IP_ADDRESS>:443]: w.x.y.z.z:59708 -> 3023f74f-249d-4325-8079-7b770216e54c.iq.hdl.trial-us10.hanacloud.ondemand.com:443 ConnectionID:0 SessionID:0].
Note: w.x.y.z.z = my local IP adress within our companies LAN
The SQL connection settings two db that works is like:

The connection that does not work to SAP Hana Cloud DB Data Lake

I asked myself what wen't wrong with connection to DATA LAke ?
Thanks in advance
DBeaver Version
Community Version <IP_ADDRESS>404071654
Operating System
Windows 10 22H2
Database and driver
No response
Steps to reproduce
No response
Additional context
No response

Probably, we don't support SAP HANA DB Data Lake connection

HANA Cloud Data Lake Relational Engine is based in SAP IQ (formerly known as Sybase IQ) technology.
Please look here to figure out the right ODBC or JDBC driver and here on how to configure in DBeaver.

@marcrupprath, did the suggested advice help you?

@E1izabeth : Yes i have gotten a Driver from a 3-rd party and it then works fine with DBeaver.


Track and log changes to settings

Adds functionality throughout the settings model to keep track of which settings have been set.
There are two entry points:

AppLogic.cpp: this is where we perform a settings reload by loading the JSON
MainPage.cpp: this is where the Save button is clicked in the settings UI

Both of these entry points call into CascadiaSettings::LogSettingChanges() where we aggregate the list of changes (specifically, which settings changed, not what their value is).
Just about all of the settings model objects now have a LogSettingChanges(std::set& changes, std::string_view context) on them.

changes is where we aggregate all of the changes to. In it being a set, we don't need to worry about duplicates and can do things like iterate across all of the profiles.
context prepends a string to the setting. This'll allow us to better identify where a setting was changes (i.e. "global.X" are global settings). We also use this to distinguish between settings set in the ~base layer~ profile defaults vs individual profiles.

The change log in each object is modified via two ways:

LayerJson() changes: this is useful for detecting JSON changes! All we're doing is checking if the setting has a value (due to inheritance, just about everything is an optional here!). If the value is set, we add the json key to the change log
INHERITABLE_SETTING_WITH_LOGGING in IInheritable.h: we already use this macro to define getters and setters. This new macro updates the setter to check if the value was set to something different. If so, log it!

Other notes:

We're not distinguishing between defaultAppearance and unfocusedAppearance
We are distinguishing between profileDefaults and profile (any other profile)
New Tab Menu Customization:

we really just care about the entry types. Handled in GlobalAppSettings

Font:

We still have support for legacy values here. We still want to track them, but just use the modern keys.

Theme:

We don't do inheritance here, so we have to approach it differently. During the JSON load, we log each setting. However, we don't have LayerJson! So instead, do the work in CascadiaSettings and store the changes there. Note that we don't track any changes made via setters. This is fine for now since themes aren't even in the settings UI, so we wouldn't get much use out of it anyways.

Actions:

Actions are weird because we can have nested and iterable actions too, but ActionsAndArgs as a whole add a ton of functionality. I handled it over in Command::LogSettingChanges and we generally just serialize it to JSON to get the keys. It's a lot easier than dealing with the object model.

Epic: #10000
Auto-Save (ish): #12424

Played around with the branch! Everything seems good except for this one thing - I tried deleting my settings file (so a fresh one would be generated) and I noticed this in the debug output:
JsonSettingsChanged - profile.commandline
JsonSettingsChanged - profile.hidden

I.e. these changes are being 'tracked' erroneously, it's a fresh file

Still a few more false-positives (try deleting the settings file, running Terminal, closing Terminal, then run it again):
global.copyFormatting and global.newTabMenu.remainingProfiles


feature/cplp 805 get all app

https://jira.catena-x.net/browse/CPLP-805

technically this PR is fine, but I cannot say whether it's doing what it is supposed to do:
@jjeroch just for clarification: 'all my company owned apps': is this referring to the apps that have been purchased by the current users company, or is this referring to the apps that are being provided by the current users company being the provider_company of the app?
(current implementation will return the apps that are provided by the current users company)

technically this PR is fine, but I cannot say whether it's doing what it is supposed to do:
@jjeroch just for clarification: 'all my company owned apps': is this referring to the apps that have been purchased by the current users company, or is this referring to the apps that are being provided by the current users company being the provider_company of the app?
(current implementation will return the apps that are provided by the current users company)

That sounds good. This API will be relevant for app providers to be able to manage all apps which they are offering on the marketplace. So we want to see all apps where my company is mentioned as app provider

@ntruchsess my findings are solved, I will approve from my side the pr. However would only merge when you are approving as well


[AKS] Change subnetPrefix to subnetCIDR

This addon is right now in Public Preview.
This PR changes parameter --appgw-subnet-prefix to --appgw-subnet-cidr in az aks create and az aks enable-addons commands.
This change was suggested by AKS PMs.

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 PR is merged into master branch, a new PR will be created to update src/index.json automatically.
The precondition is to put your code inside this repo and upgrade the version in the PR but do not modify src/index.json.

If this PR is for a new extension or change to an existing extension, use the following to try out the changes in this PR:
docker run -it mcr.microsoft.com/azure-cli:latest
export EXT=<NAME>
pip install --upgrade --target ~/.azure/cliextensions/$EXT "git+https://github.com/akshaysngupta/azure-cli-extensions.git@aksgupta/addon/subnetcidr#subdirectory=src/$EXT&egg=$EXT"

AKS

@gtracer can you help review ?

Hi @zqingqing1 , could you please help review this change and involve more related people ? Thanks

@arrownj added support for both with deprecation message for old

@akshaysngupta the version is not bumped, the change will not be released until next version bump. Just to confirm, is this by plan?

Should I bump the version in this PR?

Should I bump the version in this PR?

Yes if you plan to release the changes after the PR gets merged.


ENH: Add left sidebar end section to bottom

This adds an extra div to the bottom (called "end" in our classes etc) of the left sidebar. This means that by default, the ReadTheDocs "ethical ads" div will snap to the bottom of the page rather than coming just after the left navigation content.
It also makes this section extensible in the way others on the page are, via the left_sidebar_end key.
This is preferable for pages that have only a small amount of left sidebar content, because it'll mean that the ethical ads thing isn't in the middle of the page.
It's a bit hard to demo because ReadTheDocs doesn't show the ethical ads on PR previews, but if I manually increase the height of that div and show where it is, you get the idea:

(sorry for the red tint, that's not included in the PR 😅

It's a bit hard to demo because ReadTheDocs doesn't show the ethical ads on PR previews

It seems the ethical ads are lately also not working on the actual readthedocs site? -> https://pydata-sphinx-theme.readthedocs.io/en/latest/index.html

Generally +1 on the change, though!

@jorisvandenbossche the ads work on my computer - here's a screenshot for the current website

maybe you have an ad blocker that is blocking it?

maybe you have an ad blocker that is blocking it?

I can confirm I can see it even with an ad blocker 😉 .

(sorry for the red tint, that's not included in the PR 😅

You need to stop working at night!! 😴

It's indeed my ad blocker, should have thought of that! :)

thanks all!


Update clap to v4

Updating the clap crate to the just released v4.0. Am currently updating many of my own crates to v4 and found issue #496 as part of the Hacktoberfest event.
I tried to keep the implementation as much as-is as possible, but especially clap's help message styling changed a lot with v4.
You might wonder the AppSettings::DeriveDisplayOrder being removed, but it is not needed anymore, as this is the new default now. Besides that, I used the ValueEnum derive a lot to have the possible values of enums provided to clap. This may have invaded some modules with clap use statements, so just let me know if you don't want that, and I'll think of something else.
This is my first contribution to this project, so I just wanted to say: Thank you for this awesome project, I'm using it regularly for my project and love it 🚀.

bors r+

Thank you for the changes!


Refactor NOT to make directory templates

What's the issue?

Currently, it's necessary to template the whole directory to build a custom image. There should be better way to templating only the difference.
user-data.sh or/and
ansible

Definition of Done

Refactor the repo.

Initial thought:

Make base as template
create sub directory per TYPE, each sub directory has user-data.sh and playbook.yml
pass the path to the TYPE as a variable

Quang's comment:
Why not have different user-data.sh files based on type <type>.sh then pass TYPE variable into packer.json:
"scripts": [
     "shell/{{TYPE}}.sh"
]

ou can even use variables.json to store customizable variables.

Quang's suggestion seems reasonable ... we will take the path.


Update to MIT license

Please relicense this project to MIT - it is being used by Fresco & React-Native, whose licenses have already been changed from BSD + PATENTS to MIT.
Original issues:
https://github.com/facebook/fresco/issues/2242
https://github.com/facebook/react-native/issues/22260

Bolts-Android has been relicensed to MIT 👍

Thanks! Can you also relicense Bolts-ObjC to MIT?


parse live chats as they download

With this commit live chats don't need to be fully downloaded to be shown. However this doesn't perfectly add a solution for active streams because of the reason described in README.

I discovered a bug when using this for an active livestream. If load-chat runs more than once, you will start to get duplicate messages for every time it's run, only on messages that are downloaded after the last time load-chat was run. If that gets fixed, I'll happily merge this.
(also, there's a formatting issue on line 171 where you used a hard tab instead of spaces)


bitcoin: support inbound/outbound legacy P2PKH address format

Currently, only SegWit native (P2WPKH address) inbound/outbound transactions are supported to/from the TSS address.
Therefore the user must use a wallet with SegWit address (bc1xxxx) to call omni-chain smart contracts or deposit, and can only withdraw to such wallet address as well.
This is limiting as legacy P2PKH address is still in wide use.

Should we consider it for https://github.com/zeta-chain/node/issues/1035 @brewmaster012 ?

Ideally yes, but it's not the highest priority.


Security Audit of the app

Audit the security of the app, especially :

Access to private information
Possibility of injection of malicious javascript through html in petitions

See #183


RSA密码系统 - Distiny的博客 | 且听风吟

https://distiny-cool.github.io/2022/03/09/RSA密码系统/
Actions speak louder than words.

路过，重学RSA


[Feature Request] Splitting and Merging feature map on device

When I tried to perform ttnn.MaxPool2d operation on High-resolution feature map, the L1 memory ran out. So I instead split the feature map into four quarters and performed ttnn.MxPool2d on each of them, then combined their feature maps. But it is not possible to do the splitting and merging operations on device, hence I had to do them on host.
Alternative solution
import torch
import ttnn

from tests.tt_eager.python_api_testing.sweep_tests.comparison_funcs import comp_pcc, comp_allclose_and_pcc

batch_size = 1
in_channels = 64
input_height, input_width = 640,480  # Output of First Convolution layer (+BatchNorm2d+ReLU) of ResNet
image = torch.rand((batch_size,in_channels,input_height,input_width))

def max_pool_2d(x, dtype, device):
    pad = 1
    stride = 2
    kernel_size = 3
    MAX_POOL_SPLIT_CONSTANT = 2

    x = torch.nn.functional.pad(x, (1,1,1,1), "constant", 0)
    new_shape = [x.shape[-2],x.shape[-1]]

    output_shape = [(new_shape[0]-kernel_size)//stride+1,(new_shape[1]-kernel_size)//stride+1]
    output = torch.zeros((x.shape[0],x.shape[1],output_shape[-2],output_shape[-1])).bfloat16()

    max_pool = ttnn.MaxPool2d(
                                kernel_size=(kernel_size,kernel_size),
                                stride=(stride,stride),
                                padding=(0, 0),
                                dilation=(1, 1),
                                dtype=dtype,
                                device=device,
                                batch_size=1,
                                input_height=(output_shape[0]//MAX_POOL_SPLIT_CONSTANT*stride) + (kernel_size-stride),
                                input_width=(output_shape[1]//MAX_POOL_SPLIT_CONSTANT*stride) + (kernel_size-stride),
                                reader_patterns_cache={},
                            )

    for i in range(MAX_POOL_SPLIT_CONSTANT):
        for j in range(MAX_POOL_SPLIT_CONSTANT):
            window = [[i * output_shape[0]//MAX_POOL_SPLIT_CONSTANT*stride,
                            (i+1) * (output_shape[0]//MAX_POOL_SPLIT_CONSTANT*stride) + (kernel_size-stride)],
                      [j * output_shape[1]//MAX_POOL_SPLIT_CONSTANT*stride,
                            (j+1) * (output_shape[1]//MAX_POOL_SPLIT_CONSTANT*stride) + (kernel_size-stride)]]
            x_split = x[:,:,window[0][0]:window[0][1],window[1][0]:window[1][1]].permute(0,2,3,1)

            x_split = ttnn.from_torch(x_split, ttnn.bfloat16)
            x_split = max_pool.copy_input_to_device(x_split)
            x_split = max_pool(x_split)
            x_split = max_pool.copy_output_from_device(x_split)

            x_split = x_split.to_torch().permute(0,3,1,2)
            x_split = x_split.reshape(1,64,160,120)
            window = [[i*output_shape[0]//MAX_POOL_SPLIT_CONSTANT,
                        (i+1)*output_shape[0]//MAX_POOL_SPLIT_CONSTANT],
                      [j*output_shape[1]//MAX_POOL_SPLIT_CONSTANT,
                        (j+1)*output_shape[1]//MAX_POOL_SPLIT_CONSTANT]]
            output[:,:,window[0][0]:window[0][1],window[1][0]:window[1][1]] = x_split

    return output

if __name__ == "__main__":

    inputs = image.bfloat16()

    Nvidia_ResNet50 = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_resnet50', pretrained=True)
    parameters = Nvidia_ResNet50.state_dict()
    # for key, value in parameters.items():
    #     print(key)

    device_id = 2
    device = ttnn.open_device(device_id)
    dtype = ttnn.float32
    # dtype = ttnn.bfloat8_b
    # dtype = ttnn.bfloat16

    output = max_pool_2d(inputs, dtype, device)

    golden_maxpool = torch.nn.MaxPool2d(3,2,1)
    golden_output = golden_maxpool(inputs)

    pcc = 0.998
    passing_pcc, info = comp_pcc(output, golden_output, pcc=pcc)
    print("Info = ", info)

    ttnn.close_device(device)

Alternatives considered
Copying from and into a tensor slice would solve this issue, as described in Feature Request #7045. Copying from a tensor can be accomplished using slicing.

@jliangTT for the TM team to triage , this should be part of interleave2sharded ,  sharded2interleave work

fyi @tarafdarTT @yan-zaretskiy

@davorchap , should @athul-bos-semi use the partial sharding code like in https://github.com/tenstorrent/tt-metal/blob/main/tests/tt_eager/python_api_testing/unit_testing/misc/test_sharded.py#L764 ?


[D3D11] Star Wars Battlefront II crashed after launch with Proton with DXVK 2.3

Since releasing Proton-GE 8-14 and newer I encountered the following bug: when I try to install Star Wars Battlefront II and prefix with Proton with DXVK 2.3 onboard, the game launch, but instantly crashed. On Proton-GE 8-13 and older I cant reproduce this bug, and cant reproduce it with official Valve 8.0-3 Proton, that use DXVK 2.2, all fine.
I try to debug it with PROTON_LOG=1 and folks help me to find one interesting error message, that I think is problem:
err: D3D11: GetImage: BufferId > 0 not supported
I attach log file bellow (it's very huge)
Software information
Star Wars Battlefront II (2017)
System information

System: openSUSE Tumbleweed
GPU: RX6900XT
Driver: AMDGPU (Kernel 6.5.4)
Wine version:  Proton-GE since 8-14
DXVK version:  DXVK 2.3
Mesa: 23.1.7

Log files
steam-1237950.log

err: D3D11: GetImage: BufferId > 0 not supported

This has never been supported even on older DXVK versions.
Please try using DXVK 2.3 on top of Proton 8.0-3 to confirm it's not just some weird issue with GE.

err: D3D11: GetImage: BufferId > 0 not supported

This has never been supported even on older DXVK versions.
Please try using DXVK 2.3 on top of Proton 8.0-3 to confirm it's not just some weird issue with GE.

So I need to download DXVK 2.3 from Release page and copy DLLs to Star Wars Battlefront prefix and if something not ok, send logs with PROTON_LOG=1 again?

@tujhen do you hit the same issue with Proton 8.0-4 or Experimental?

@tujhen Friendly ping

@tujhen Friendly ping

Absolutely sorry, forgot about it. I think, we can close. Game works correctly without any issues after some updates. With Proton-8.0-4 and GE-25 exactly.


[build] Move to new Caddy build recommendations

Is this a BUG REPORT or FEATURE REQUEST?:
feature
https://github.com/mholt/caddy#build
We can remove our sourcecode grepping and replacing and move to a hardcoded file creating main() from within TXTDirect.

Something is wrong with blackfriday package which causes github.com/mholt/caddy/caddyhttp/markdown/summary build to fail.
# github.com/mholt/caddy/caddyhttp/markdown/summary
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddyhttp/markdown/summary/render.go:24:5: cannot use (*renderer)(nil) (type *renderer) as type blackfriday.Renderer in assignment:
	*renderer does not implement blackfriday.Renderer (missing RenderFooter method)
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddyhttp/markdown/summary/summary.go:26:44: too many arguments to conversion to blackfriday.Markdown: blackfriday.Markdown(input, renderer literal, 0)
# github.com/mholt/caddy/caddytls
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddytls/config.go:120:5: undefined: certmagic.DefaultStorage
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddytls/config.go:125:34: undefined: certmagic.DefaultStorage
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddytls/config.go:135:12: undefined: certmagic.NewWithCache
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddytls/handshake.go:45:35: undefined: certmagic.DefaultServerName
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddytls/setup.go:66:4: undefined: certmagic.DefaultStorage
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddytls/setup.go:174:28: cannot use value (type "github.com/xenolf/lego/certcrypto".KeyType) as type "github.com/go-acme/lego/certcrypto".KeyType in assignment
../../../../../pkg/mod/github.com/mholt/caddy@v0.11.5/caddytls/setup.go:354:4: cannot use config.Manager.KeyType (type "github.com/go-acme/lego/certcrypto".KeyType) as type "github.com/xenolf/lego/certcrypto".KeyType in field value

Will check it out tomorrow most likely.


Using UBI 8 OpenJDK-17 image as Runtime

Signed-off-by: Matthias Wessendorf<EMAIL_ADDRESS>as per title, use the UBI for our midstream runtime
/assign @pierDipi

/close


classgraph 4.8.128 (was 4.8.90)

Updates io.github.classgraph:classgraph from 4.8.90 to 4.8.128.
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "io.github.classgraph", artifactId = "classgraph" } ]

labels: library-update, semver-patch

Superseded by #201.


Document that set_deadline() uses absolute time.

Document that set_deadline() uses absolute time

[trickle] No significant performance differences

Objective-C binary sizes
*****************STATIC******************
  New size                      Old size
 1,964,802      Total (=)      1,964,802

 No significant differences in binary sizes

***************FRAMEWORKS****************
  New size                      Old size
10,887,467      Total (<)     10,887,474

 No significant differences in binary sizes

[microbenchmarks] No significant performance differences


Make SBOL objects sortable

In order to allow SBOL objects to be sortable I have found it useful to monkey-patch the following routine:
def identity_lt(self: sbol3.Identified, other: sbol3.Identified):
    return self.identity < other.identity
sbol3.Identified.__lt__ = identity_lt

Would it be generally a good idea to implement the ordering functions for Identified?

Instead of monkey patching, can you use the key argument to sorted or sort?
sorted(doc.objects, key=lambda x: x.identity)

I'm reluctant to make objects sortable by their identity because it seems an arbitrary field to choose, and it is very easy for applications to establish their own sort order using the standard Python sorting routines. I also think this makes the code that wants a sorted order more clear because it will explicitly state what the sort criteria is.
Can we make Identified objects sortable? Yes. Should we? For me the answer is no.

I hadn't noticed that I would give sorted an argument so compactly; let me try using that

Yes, that will work.


Security contact for vulnerability report

Hello,
The GitHub Security Lab team has found a potential vulnerability in your project. Please create a Security Advisory and invite me in to further disclose and discuss the vulnerability details and potential fix. Alternatively, please add a Security Policy containing a security email address to send the details to, and/or enable Public Vulnerability Reporting so we can submit the details.
If you prefer to contact us by email, please reach out to<EMAIL_ADDRESS>with reference to GHSL-2023-003.
Thank you,
GitHub Security Lab

I've enabled advisories.


Add React-Navigation test fixture to pipeline

Goal
To refactor the existing fixture build system to enable different test fixtures to be built using a single "base" app and multiple JS sets/installation scripts.
This change doesn't however add actual tests for those breadcrumbs, but once this is passing on CI I'll create a couple of sample feature files that can be edited at leisure.
Design
Maintaining multiple unique fixtures is a road I don't believe any of us wish to go down, so making the basic features complete skeletons and copying everything specific in at build time seems like the best solution.
By separating the JS files into sub-directories at a higher level we can in theory add as many different build setups as we'd like and simply change the JS_SCENARIO_DIR environment variable on different build steps to get a completely different test fixture.
Testing
Running locally appears to work, the real test will be ensuring it runs on CI.

I'm getting slightly dizzy thinking about all the combinations, but are we heading towards the following test fixtures:
On Android:

RN 0.60, no nav tracker
RN 0.63, no nav tracker
RN 0.60, React Navigation
RN 0.63, React Navigation
RN 0.60, React Native Navigation
RN 0.63, React Native Navigation
On iOS:
As the above, repeated (!)

And what about the test scenarios?  Do we now have two sets of feature files:

Those that already exist and run on the test fixtures with no navigation built in
"Navigation breadcrumb" features to be written and run on all test fixtures with navigation in?  If so, is it exactly the same set of tests run on each of these?


Fix slabs turning into Oak

Fix for the bug where Redwood and Fir slab blocks would convert themselves into Oak slabs when mined.

Looks good to me, thanks for this!


Fix Note formatting

@KalleOlaviNiemitalo, this addresses your Issue #853.
@jskeet. I think I broke the Word converter! At the end of 12.6.1, we have a very long "Note:" without an "end note", so I added one. However, the content of that Note is a multi-line table marked-up in HTML, which the Word converter needs to "recognize." The thing is that being inside a multi-line Note, I had to add a leading > to each table line, and my guess is the Word converter can't handle that.

Will try to look at the Word converter issue later this week. (Sorry, I've got a mountain of docs to review at the moment - and then I'm away again at the end of the week...)

I've added a commit that just puts the comment and the line before in block quotes - that appears to fix things (at least locally!).

(I haven't reviewed the rest of the change, but if @BillWagner is happy, so am I...)