OpenAt crash if IOPOLL feature is enabled

Hi, we are buiding a data-intensive application on top of I/O Uring. Our IO threads are following thread-per-core paradigm, which reuiqres all IO ops are async.  Also, we are using IOPOLL feature to avoid context switches.
We then find out that once IOPOLL feature is enabled, OpenAt would crash the process.
Here is a sample code that can reproduce the issue with latest io-uring crate(v0.5.12):
use std::{error::Error, ffi::CString};

use io_uring::{opcode, register, types, IoUring};

fn main() -> Result<(), Box<dyn Error>> {
    let mut uring = IoUring::builder()
        .dontfork()
        .setup_iopoll() // Commenting out this line to disable feature: IOPOLL will fixes core dump issue.
        .setup_sqpoll(2000)
        .setup_sqpoll_cpu(1)
        .setup_r_disabled()
        .build(1024)?;

    let mut probe = register::Probe::new();
    uring.submitter().register_probe(&mut probe)?;
    uring.submitter().register_iowq_max_workers(&mut [2, 2])?;
    uring.submitter().register_enable_rings()?;

    let file_name = "/tmp/sample.txt".to_string();

    if !probe.is_supported(opcode::OpenAt::CODE) {
        eprintln!("OpenAt is not supported");
        return Ok(());
    }

    let sqe = opcode::OpenAt::new(types::Fd(libc::AT_FDCWD), file_name.as_ptr() as *const i8)
        .flags(libc::O_CREAT | libc::O_RDWR | libc::O_DIRECT)
        .mode(libc::S_IRWXU | libc::S_IRWXG)
        .build()
        .user_data(1);

    unsafe { uring.submission().push(&sqe)? };

    uring.submit_and_wait(1)?;

    let mut cq = uring.completion();
    if let Some(cqe) = cq.next() {
        println!("{cqe:#?}");
        if cqe.result() < 0 {
            let ptr = unsafe { libc::strerror(-cqe.result()) };
            match unsafe { CString::from_raw(ptr) }.into_string() {
                Ok(s) => {
                    eprintln!("{}", s);
                }
                Err(e) => {
                    eprintln!("Failed to convert CString to String: {:?}", e);
                }
            };
        }
    }
    cq.sync();

    Ok(())
}

Crash output are:
Entry {
    result: -22,
    user_data: 1,
    flags: 0,
}
Invalid argument
munmap_chunk(): invalid pointer
Aborted (core dumped)

OS/Kernel info:
ubuntu@ip-172-31-39-78:/data/elastic-storage$ uname -a
Linux ip-172-31-39-78 5.15.0-1028-aws #32-Ubuntu SMP Mon Jan 9 12:28:07 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

So the io_uring command doesn't really crash does it? Isn't what you are seeing is an abort from the line trying to print what you created without unsafe code? When you don't use iopoll, the cqe result is probably zero. When you do use iopoll, the io_uring device is telling you there was something invalid about the request, so it is returning -22, that's -EINVAL.
So the crash here maybe that you are misusing unsafe, libc or it's ability to create a string at line 40.
And why is the io_uring instance returning the EINVAL error for your openat?
Maybe you aren't providing the environment that iopoll needs. It seems pretty specific. From the io_uring_setup(2)
   IORING_SETUP_IOPOLL
          Perform busy-waiting for an I/O completion, as opposed to getting notifi‐
          cations via an asynchronous IRQ (Interrupt Request).  The file system (if
          any) and block device must support polling in order  for  this  to  work.
          Busy-waiting  provides  lower latency, but may consume more CPU resources
          than interrupt driven I/O.  Currently, this feature is usable only  on  a
          file  descriptor opened using the O_DIRECT flag.  When a read or write is
          submitted to a polled context, the application must poll for  completions
          on  the  CQ  ring by calling io_uring_enter(2).  It is illegal to mix and
          match polled and non-polled I/O on an io_uring instance.

          This is only applicable for storage devices for now, and the storage  de‐
          vice must be configured for polling. How to do that depends on the device
          type in question. For NVMe devices, the nvme driver must be  loaded  with
          the  poll_queues  parameter  set to the desired number of polling queues.
          The polling queues will be shared appropriately between the CPUs  in  the
          system, if the number is less than the number of online CPU threads.

Here's a working version that doesn't abort. I looked into CStr vs CString.

use std::{error::Error, ffi::CStr};

use io_uring::{opcode, register, types, IoUring};

fn main() -> Result<(), Box<dyn Error>> {
    let mut uring = IoUring::builder()
        .dontfork()
        .setup_iopoll() // Commenting out this line to disable feature: IOPOLL will fixes core dump issue.
        .setup_sqpoll(2000)
        .setup_sqpoll_cpu(1)
        .setup_r_disabled()
        .build(1024)?;

    let mut probe = register::Probe::new();
    uring.submitter().register_probe(&mut probe)?;
    uring.submitter().register_iowq_max_workers(&mut [2, 2])?;
    uring.submitter().register_enable_rings()?;

    let file_name = "/tmp/sample.txt".to_string();

    if !probe.is_supported(opcode::OpenAt::CODE) {
        eprintln!("OpenAt is not supported");
        return Ok(());
    }

    let sqe = opcode::OpenAt::new(types::Fd(libc::AT_FDCWD), file_name.as_ptr() as *const i8)
        .flags(libc::O_CREAT | libc::O_RDWR | libc::O_DIRECT)
        .mode(libc::S_IRWXU | libc::S_IRWXG)
        .build()
        .user_data(1);

    unsafe { uring.submission().push(&sqe)? };

    uring.submit_and_wait(1)?;

    let mut cq = uring.completion();
    if let Some(cqe) = cq.next() {
        println!("{cqe:#?}");
        if cqe.result() < 0 {
            let ptr = unsafe { libc::strerror(-cqe.result()) };

            // From https://stackoverflow.com/questions/24145823/how-do-i-convert-a-c-string-into-a-rust-string-and-back-via-ffi
            let c_str: &CStr = unsafe { CStr::from_ptr(ptr) };
            let str_slice: &str = c_str.to_str().unwrap();
            let str_buf: String = str_slice.to_owned();
            eprintln!("reported error: {}", str_buf);
        }
    }
    cq.sync();

    Ok(())
}

results in
Entry {
    result: -22,
    user_data: 1,
    flags: 0,
}
reported error: Invalid argument

If this answers your question, would you mind changing the title of the issue so future readers don't think IOPOLL or OpenAt causes crashes - if you agree?
Good luck with monoio. It's interesting.

Thanks @FrankReh I see the cause of crash.
 Currently, this feature is usable only  on  a file  descriptor opened using the O_DIRECT flag.

We do not have a FD yet. So things won't work in this way.

Thanks @FrankReh I see the cause of crash.
 Currently, this feature is usable only  on  a file  descriptor opened using the O_DIRECT flag.

We do not have a FD yet. So things won't work in this way.

i want to make sure you see there were two problems. Your crash was caused by your incorrect use of CString.
Only your returned result was caused by using IOPOLL incorrectly. I'm going to change the title a little bit more.

It's true the core dump is caused by the incorrect use of CString. But the core part of this issue is that I/O Uring is pretty restricted when IOPOLL is involved, even if all ops are device-related.
If you do not mind, IMHO, keeping OpenAT, IOPOLL incompatible info in the title might be helpful to other developers.

Okay. Please rename it. But don't put crash in the title. In the future, I would recommend ascertaining the line the stack trace indicates is crashing, or use println's to figure it out. Also I would recommend just printing the result integer, no need to see a string at all. It's easy to look up what errno 22 means.
Are you going to make it something to the effect that IOPOLL only works on files opened with O_DIRECT?

Are you going to make it something to the effect that IOPOLL only works on files opened with O_DIRECT?

Yes, as a specific example of Currently, this feature is usable only  on  a file  descriptor opened using the O_DIRECT flag.
One more thing, though it is not the right place, errno 22 Invalid argument is less accurate than errno 95 Operation not supported in this context.

One more thing, though it is not the right place, errno 22 Invalid argument is less accurate than errno 95 Operation not supported in this context.

Oh, maybe you haven't dug into where that error comes from. This crate, io-uring does not generate that. It comes from the driver in the Linux kernel. Maybe that's why you think people will come to this crate to learn what can or can't be done. This isn't the crate setting those rules. The actual functionality is added to the kernel by a team that also supports a C library, liburing.
If you think someone will change the errno code for this situation, it is that team you should be addressing, not this one.

Thanks for your reply, but take it easy... Already said though it is not the right place, just stating the fact uring/liburing is not picking up the most accurate error number.


Add becquerel to the data tools list

Becquerel is an OSS python package (on pypi 😄) our team at LBL and UC Berkeley have been developing for several year. We are excited to expand our audience, gain more users and hopefully see some PR's.

Excellent! Happy to contribute and see this knowledge repository grow 😁


[Bug]: Intercepting the request cannot find the host in the headers

Minimal, reproducible example
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: false, devtools: true });
  const page = await browser.newPage();

  // 监听请求事件
  page.on('request', request => {
    const headers = request.headers();
    console.log(headers)
    if (headers['host']) {
      console.log('Request URL:', request.url());
      console.log('Request Headers:', headers);
    } else {
      console.log('Host header not found in the request to:', request.url());
    }
  });

  // 导航到一个页面
  await page.goto('http://<IP_ADDRESS>/');

  await browser.close();
})();

Background
When I intercept the request, I cannot find the host in the headers, but I can see it after devtools is opened.

Expectation
I hope that host and other information can be written in the headers when intercepting the request.
Reality
Intercepting the request cannot find the host in the headers
Puppeteer configuration file (if used)
No response
Puppeteer version
22.8.1
Node version
v20.13.1
Package manager
npm
Package manager version
10.5.2
Operating system
Windows

Host header is in the requestWillBeSentExtraInfo event and Puppeteer does not extract it.

As far as I understand, requestWillBeSentExtraInfo is an additional event that is not available on all requests... so we can't exactly wait around until receiving requestWillBeSentExtraInfo to send the request details. I suspect what we could do is add an additional PageEvent of 'requestWithExtraInfo' that forwards the extra info... and then let the user marry the two on their own?

requestWillBeSentExtraInfo is emitted if the request actually reaches the network service and some headers can only be known at that stage (due to security concerns and probably due to availability of the data, e.g., host is probably only resolved once the request is really going to the wire).


Add inject_primitives: false to macro_spec

This patch adds inject_primitves: false to the semantic specs in spec/compiler/semantic/macro_spec.cr. I picked this specs file at random. Lots of compiler specs don't need primitives injected. Ideally, most of them should always be fully self-contained and not rely on an external prelude.
In the same motion, I transformed percent string literals to heredocs in order to improve readability and clearly associate the arguments following the code sample to the call to assert_type and assert_error.
Two or three examples in this file still require primitives because they use methods like + and ==. I think they can and should be refactored to be self-contained but I tried to avoid semantical changes to the example codes for now.
The performance impact of spec execution is quite significant:
Without this patch, the 107 examples execute in 11.54 seconds
With this patch, they execute in 1.05 seconds.
Other compiler specs can certainly be improved in a similar way.

inject_primitves: false is a great addition, replacing percent literals with heredoc strings though IMO makes the examples way harder to read - before the expected result would be just a line below the call site, now it's at the top, forcing the eyes to jump back-and-forth between the expected result and the call site.

Instead of:
assert_type(<<-CR, inject_primitives: false) { int32 }
  macro foo
    1
  end
  foo
  CR

This is also possible:
assert_type(<<-CR,
  macro foo
    1
  end
  foo
  CR
  inject_primitives: false) { int32 }

But the main benefit of using heredocs is that if those tests fail, the exceptions thrown from them will have more comprehensible error locations than before because there are no leading spaces or indentation in those code literals.

I disagree. Previously, you would have all components of the method call distributed across lines before and after the sample code. With heredocs, the method call is clean and concise. The code follows afterwards.
Heredocs are in general a much better tool for such code samples because of the whitespace handling. With the percent string literals spread over multiple lines, there is a weird empty first line and indents in the sample code according to the indent of the call.

@straight-shoota heredocs are fine in general, it's just this eye-ping-pong that bothers me ;)


proposal: support indentmini.nvim

Did you read the Contributing Guide?

[X] I have read the Contributing Guide

Description
i started using indentmini.nvim
i would add highlights for indentmini.nvim
how it look out of the box:

there should be a highlight for the the scope the cursor in, and a highlight for the scope the cursor in not in.
Link
No response
Additional context
No response

There are two highlights:
IndentLine
IndentLineCurrent
i will make a pull request as soon as possible!

i set IndentLineCurrent to lack, and IndentLine to gray4

so what do you think?

I just played with your pr and made a variation thats dimmer grays #77
I've been trying to keep non code highlights darker grays, and less colorful more and more the longer I've worked on lackluster, I think it helps create a visual separation from code and UI, while allowing the code to be in focus and the UI to be visible enough to be useful if you need to pay attention to it :) Not sure if that makes sence, my goal is for code to stand out and UI to sort of fade into the background, but still be usefull :)
Thanks for the PR!

I've been trying to keep the non-code highlights (UI) darker gray and less colorful more and more as i continue working on lackluster. I think it helps create a visual separation between code and UI, allowing the code to be in focus by being brighter and the UI to be darker but visible enough to be useful if you need to pay attention to it :) Not sure if that makes sense, my goal is for code to stand out and UI to sort of fade into the background, but still be usefull :)

i like it! but many be you could add

keep the non-code highlights (UI) darker gray and less colorful

to the CONTRIBUTING guide in the lackluster goals section. no pressure :)

closing this issue


Feature request: Add support for reversing the encoder direction as global

To support a wider range of encoders, it would be helpful to have support for reversing the encoder direction in a global setting.

Thats what the hardware configs are for. Flash once to the proper setting of your hardware and never care again!

Thanks!. I didn't realize there's separate .hex for h/w config info.


Support CDDL bareword member key syntax for maps

It appears that the CDDL parser can only identify member keys of maps in CDDL when they have double quotes. The spec document section linked below allows for member keys without double quotes followed by a colon.
https://cbor-wg.github.io/cddl/draft-ietf-cbor-cddl.html#structs

Thanks for the report, it's now tracked internally. In the meantime, the workaround is (as you are probably aware) to use quotes and =>:
{
    "literal_tstr_key" => my_value
}

@adpjhu Bareword support is in PR #292. You're welcome to leave a review.


feature request: patch validator

Thanks for this project.
A nice feature would be to validate that a patch document is a valid patch doc. This would allow users to pre-validate that the client sent a valid patch document before the server uses it.
Something like:
jsonpatch.isValid(patch); //true = valid, false = invalid
Or you could return errors, but that might be difficult. Ultimately, if a client sends a bad patch, we're just going to return an http bad request.

I have pushed to master my take on this, which is a generalised version of changes proposed by @joshua-mcginnis, @sonnyp and others.
Please share your thoughts. Below is the description of the new method (excerpt from README.md)

Validating a sequence of patches:
var obj = {user: {firstName: "Albert"}};
var patches = [{op: "replace", path: "/user/firstName", value: "Albert"}, {op: "replace", path: "/user/lastName", value: "Einstein"}];
var errors = jsonpatch.validate(patches, obj);
if (errors.length == 0) {
 //there are no errors!
}
else {
  for (var i=0; i<errors.length; i++) {
    if (!errors[i]) {
      console.log("Valid patch at index", i, patches[i]);
    }
    else {
      console.error("Invalid patch at index", i, errors[i], patches[i]);
    }
  }
}

jsonpatch.validate (patches Array, tree Object (optional)) : errors Array
Available in json-patch-duplex.js
Validates a sequence of operations. If tree parameter is provided, the sequence is additionally validated against the object tree.
If there are errors, returns an array with error codes located at the array index of the operation. If there are no errors, returns an empty array (length 0).
Possible errors:

Error code
Description

SEQUENCE_NOT_AN_ARRAY
Sequence of operations is not an array

OPERATION_NOT_AN_OBJECT
Operation is not an object

OPERATION_OP_INVALID
Operation op property is not one of operations defined in RFC-6902

OPERATION_PATH_INVALID
Operation path property is not a string

OPERATION_FROM_REQUIRED
Operation from property is not present (applicable in move and copy operations)

OPERATION_VALUE_REQUIRED
Operation value property is not present (applicable in add, replace and test operations)

OPERATION_PATH_ALREADY_EXISTS
Cannot perform an add operation at a path that already exists

OPERATION_PATH_UNRESOLVABLE
Cannot perform a replace, remove, move or copy operation at a path that doesn't exist

@warpech cool.
However I think the initial multiple option from my PR remains useful. User might not be interested in errors and might want break validation after first error.

@sonnyp, you are right about the add operation:

If the target location specifies an object member that does exist,
that member's value is replaced.

I will fix that.
My motivation for removing the multiple option was to have only one behaviour that suits all needs. If you just want to know if there are no errors, check errors.length === 0. Otherwise you can iterate over the array to use the detailed information about what and where is the error. I think providing a wider range of options would make it both harder to learn (for users) and maintain (for me).
Thanks for mentioning git rebase, of course I know it but did not want to mess with the merge. My changes are in these commits:

https://github.com/Starcounter-Jack/Fast-JSON-Patch/commit/46162f49070793e28776d18335fdad2c248f09ee (changes over your code)
https://github.com/Starcounter-Jack/Fast-JSON-Patch/commit/55132946d72166f532d373453a1e535ff46f7284 (validate the patch against an object tree)

@warpech the use case is to stop validation after first error, so removing multiple doesn't suit my needs.
What's wrong with returning an array of length 1 if multiple is set to false?
"both harder to learn " just a flag
"and maintain (for me)" how hard is it to maintainif (options.multiple === false) ... break; plus I wrote tests

I appreciate your contribution so I want to reflect your needs. Could you describe your use case a little bit more?
For me, invalid patches are rare and fatal errors, so the efficiency of returning just the first error is irrelevant.

If you accept incoming patches from untrusted source it allow to prevent process from blocking if a large faulty patch is being validated.

I start to get the point. So I guess you are using it on server? Is it in Redbooth?
I think we can:

add a stopOnFirstError boolean parameter
expose _validate method so you can overwrite it if you want to add custom validations (I find it useful for myself)

@warpech we don't currently use it at redbooth. Yes I use it server side.
Sounds good, thanks. Would you like me to do the PR?

No worries, I will do it and let you do the testing :)

@sonnyp Pushed. Would you take a look at the commit https://github.com/Starcounter-Jack/Fast-JSON-Patch/commit/b64474b889ced52f8b64b477e0e143448d0a48f8 and share your thoughts?

I have reworked the validation. The result is a faster and simpler API.
Summary of changes:

jsonpatch.validate returns and error object now
jsonpatch.apply with third parameter set to true throws an error if it encounters an invalid patch

This should please @sonnyp - only the first error is returned now.
See the changes at branch https://github.com/Starcounter-Jack/JSON-Patch/tree/issue-29-simplified
(last 2 commits)
The intention is to release it soon as version 0.6.0

Merged to master

Released in 0.5.1.
See https://github.com/Starcounter-Jack/JSON-Patch/blob/master/README.md for API and tests for examples

:+1:


v3: equivalents of show_trailing_blankline_indent, show_end_of_line, context_patterns

What are the equivalents of show_trailing_blankline_indent, show_end_of_line, context_patterns? (Couldn't find clearly in h ibl.config)
Config:
{
  "lukas-reineke/indent-blankline.nvim",
    main = "ibl",
    opts = {
      indent = { char = "│" },
      show_trailing_blankline_indent = false,
      show_end_of_line = true,
      context_patterns = {
        "class", "return", "function", "method", "^if", "^while", "jsx_element", "^for", "^object",
        "^table", "block", "arguments", "if_statement", "else_clause", "jsx_element",
        "jsx_self_closing_element", "try_statement", "catch_clause", "import_statement",
        "operation_type"
      },
    },
},

All of them have been removed


PHOENIX-7237 Pherf unit tests PherfTest and ResourceTest are failing

I don't like this, as this is very brittle, and we will have the same problem again soon. (The previous patch has the same problem)
The real problem is that pherf seems to try to load its test config from anywhere on the classpath.
I would prefer that the logic in getResourcesPath is fixed so that it does not recursively search the whole classpath.
https://github.com/apache/phoenix/blob/bc1e2e7bea40c7d03940748e8f1d9f6b23339867/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/util/ResourceList.java#L103

I don't like this, as this is very brittle, and we will have the same problem again soon. (The previous patch has the same problem)
The real problem is that pherf seems to try to load its test config from anywhere on the classpath.
I would prefer that the logic in getResourcesPath is fixed so that it does not recursively search the whole classpath.
https://github.com/apache/phoenix/blob/bc1e2e7bea40c7d03940748e8f1d9f6b23339867/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/util/ResourceList.java#L103
Thanks @stoty for reviewing and opinion, I'll try to fix it.


Breaking change in 0.1.8

https://github.com/szeged/blurz/commit/88b8b492cda058bf105a24b6da36156a3d79d102 is a breaking change.
Please yank 0.1.8 and release 0.2 instead.

Done


Create Maintainers.md documentation that should entail how Issues should be triaged and labeled and how PRs should be reviewed.

suggestion
use https://github.com/actions/labeler to automatically label prs based on the changed files this will make our lives easier.

I love it!

just created a separate issue #847 for the auto labeler as i won't be able to create the maintainers.md too


Feature/junit report

Jenkins junit plugin now displays test packages correctly.

I am interested in merging your changed into the OSS Index fork of this project. I certainly do not want to steal your thunder, and would ensure that everyone who contributed to your fork is appropriately mentioned in the readme and elsewhere. Do you have any concerns with this?

Sounds good to me! I'll open up another pull request when I'm done.

Awesome. I'll clone your fork in the meanwhile sometime in the next couple of days, I'm quite interested in trying it out.


rtsp operation not supported - but no errors in log - Sorted, thanks

Describe the bug
I was using camera ui to get my Tapo 320WS camera working with rtsp stream. Config fine, run, no error, but when I select my camera in the camera ui, I get an error "RTSP stream exited with error! (null) - rtsp://[username]:[password]@[IP]:554/stream1: Operation not permitted"
No error in the log
Working fine in VLC
Need help?
To Reproduce
Steps to reproduce the behavior
Expected behavior
Looking for camera streaming view
Logs
nothing in the logs:
[15/05/2024, 09:25:35] [CameraUI] Front Door View: Configuring unbridged accessory...
[15/05/2024, 09:25:35] [CameraUI] Front Door View: Setting up accessory...
[15/05/2024, 09:25:36] [CameraUI] Accessories refreshed and config.json saved!
[15/05/2024, 09:25:36] Homebridge v1.8.1 (HAP v0.12.0) (Homebridge 0BA0) is running on port 51594.
[15/05/2024, 09:25:36] Front Door View F2BD is running on port 39447.
[15/05/2024, 09:25:36] Please add [Front Door View F2BD] manually in Home app. Setup Code: 710-95-488
[15/05/2024, 09:25:47] [CameraUI] Front Door View: Setting up camera, please be patient...
[15/05/2024, 09:25:50] [CameraUI] camera.ui v5.0.27 is listening on port 8082 (http)
[15/05/2024, 09:29:11] [CameraUI] Initializing CameraUI platform...
[15/05/2024, 09:29:11] [CameraUI] Config changed through interface, saving...
Setup Payload:
X-HM://0024N9DQ8GNF7
Enter this code with your HomeKit app on your iOS device to pair with Homebridge:
┌────────────┐
│ 710-95-488 │
└────────────┘

[15/05/2024, 09:29:11] [CameraUI] Front Door View: Configuring unbridged accessory...
[15/05/2024, 09:29:11] [CameraUI] Front Door View: Setting up accessory...
[15/05/2024, 09:29:12] [CameraUI] Accessories refreshed and config.json saved!
[15/05/2024, 09:29:12] Homebridge v1.8.1 (HAP v0.12.0) (Homebridge 0BA0) is running on port 51594.
[15/05/2024, 09:29:12] Front Door View F2BD is running on port 38507.
[15/05/2024, 09:29:12] Please add [Front Door View F2BD] manually in Home app. Setup Code: 710-95-488
[15/05/2024, 09:29:23] [CameraUI] Front Door View: Setting up camera, please be patient...
[15/05/2024, 09:29:26] [CameraUI] camera.ui v5.0.27 is listening on port 8082 (http)
Screenshots
If applicable, add screenshots to help explain your problem.

Red square briefly with "RTSP stream exited with error! (null) - rtsp://[username]:[password]@[IP]:554/stream1: Operation not permitted"
Environment

Node.js Version: v20.12.2
Homebridge Version: vX.X
Camera UI Version: v5.0.27
Operating System: Debian GNU/Linux Bookworm (12)
Browser: Safari

🎉 A new version of camera.ui
A new version of camera.ui is currently under active development. An initial alpha/beta release and previews are coming soon. Stay tuned for exciting updates: https://github.com/seydx/camera.ui/issues/448 .
This version will no longer be developed / fixed. The new version contains many novelties and fixes (most important is for HKSV recording).


M> The management and promotion of QQ group in China

After several months of development, China's QQ group has more than 300 people and is still increasing, and our goal is 1000. At present, QQ group in China has become the most important place for Chinese people to discuss RChain. At present, the group is responsible for the Etan (Chinese name 江南梅). The management and promotion of QQ group every month have become a more time-consuming thing.
Apply for a certain monthly fund to the QQ management staff.
Welcome to visit QQ group in China. QQ group number: 530718666

I support this and will vote for a budget for the work @sportshark , Ethan ,  Mao Zhuang zhuang and the rest are doing to build up the Chinese RChain Community

@Mervyn853 Thank you very much! You do a lot of work for RChain ,Your work has greatly promoted the development of RChain in the world.

I think this issue should be integrated with issue #173 or with issue #115  because it won't be efficient to set a budget for every social media platform and also to avoid redundant budgeting because roles can easily overlap.
@sportshark, you've been of great help in bootstrapping the Chinese community please invite more of your friends to join the coop as the Chinese community is key in our expansion and growth.
Cheers.

@sportshark is a real example to newer collaborators like myself.

While I agree with @Ojimadu on the inefficiencies of setting up a budget for every platform, I feel that issue #115 is too broad to provide an accurate % of work done seeing that there are so many channels to cover.
I'm personally managing both the telegram channels with @kitblake and @Ojimadu , while also building the community on Reddit and Bitcointalk together with several others. All of which help build awareness for the RChain project and drive membership numbers organically.
@lapin7 Perhaps we could do a sheet similar to what Georgi has done in issue #198 to track the moderators of various community channels to give fair and equal weights to the contributions by different members in all the various channels.
This would help ensure @sportshark and the chinese moderators get a fair share of maintaining the Chinese QQ community.

@Mervyn853 @Ojimadu I think you are right!

@sportshark would you please create an initial post following the NEW ISSUE template:

@AyAyRon-P the QQ group is growing to 1800 people and it is a maintain job which is long time work.We keep this issue open just for the monthly rewards for it.

Hi @zsluedem
I'll add the title ONGOING so we're aware that this issue has no definitive end.

#794

I'm going to close this issue, and moving forward for #794 and the ones after it to claim your maintenance bounty simply reference this issue 202.

When you reply, Chinese time is at midnight @AyAyRon-P
1.After several months of development, China's QQ group has more than 2500 people and is still increasing, A group discusses technology（Num:492114454）, and a group discusses non-technical topics(Num:530718666),In order to manage such a large number of people, we have hired 10 administrators to manage the QQ group, and assign RHOC according to the administrator's contribution.
2.At present, the Chinese community we organize is very active. We successfully organized a meetup. A video of the party you can see from this link. https://www.youtube.com/watch?v=wxqOlYXny7c&feature=youtu.be
3.We also reached an agreement with Bixin (https://bixin.com/) and Hchain labs (http://www.hchain.com). In the later period, they will vigorously promote RChain's promotion and popularization activities in China. Including contact with the exchange, building community, translation of technical articles, Meetup, and so on.
4.I believe that the current RChain fans will grow into China's effective force and promote the development of RChain in China.


Refactor/first

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: wstam88 sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


Updating platform sdk to v103

@diemenschmaschine92 Apologies, had to do one more update and it brought in a few more knowledge api changes. I highlighted them, they're very simple


Build fails with java 1.8_u60

Motivation:
The alpn / npn dependency versions are dependent on java version. If a java version 1.8+ is used that is not explicitly listed in the pom file then ALPN tests will fail because the java 1.7 version of alpn will be loaded by out pom file.
Modifications:

Ensure there is a latest version to fall back up for npn 1.7+
Ensure there is a latest version to fall back upon from alpn 1.8+

Result:
Build can complete despite having a newer jdk which is not listed in our pom file.

@trustin @normanmaurer - FYI

@Scottmitch looks good

LGTM

Cherry-picked 4.0 (b629b50) 4.1 (48662bf) master (5eb41f8)


New tile icon update

This pull request is just to add the new battery icon to all DTHs, the new humidity icon to both Temp/Humidity sensor DTHs, and the new pressure icon to the Aqara Temp/Humidity sensor DTH.
The three icons have already been uploaded to bspranger/Xiaomi/images.
Version will be updated to 1.1 for all DTHs.

I forgot to mention that this update also includes a reorder of the first three 4x4 tiles of the Aqara Temp / Humidity sensor DTH to battery, pressure, & humidity.
Here's what all the new icons look like for iOS (on left) and Android (on @foz333's phone, right):

Please try out the code from at least one of the DTHs to make sure it displays for you (especially @tmleafs - I want to make sure it looks good!!)

yeah - these three icons are amazing - particularly impressed how they work cross-platform!

Should I merge?

@bspranger code looks good to me. It's been tested on a couple devices, i think @veeceeoh wants @tmleafs to check on his device first as they had hammered away at this for a while.  If you dont hear back in a day push it to genPop and we should get a definiative answer soon enough.

Yes, I think we should get feedback from at least one other Android user, if not more.
It would be really bad to make the update official and then the icons look bad for some portion of Android users!

Android user here, all icons ok


[feature] add onFocusChange in ListTile

Use case
On desktop (or in AndroidTV) when we have ListTile in ListView and the user navigates the items using Arrow Down or Arrow Up buttons it would be nice to have onFocusChange callback so we can change the state based on focus.
Currently the same can be achieved by adding a listener to focusNode but then we had to manage it and dispose it which is not really nice for 100 list items.
Also, it's so common for (almost 9 out of 10) flutter apps having ListTile in ListView. So this will be so convenient.
Proposal
Current Implementation
class MyWidget extends StatefulWidget {
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final List<FocusNode> _nodes = [];
  final StreamController<int> _activeIndex = StreamController();

  @override
  void dispose() {
    for (var n in _nodes) {
      n.dispose();
    }
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ListView.builder(
          itemCount: 100,
          itemBuilder: (context, index) {
            var _focusNode = FocusNode();
            _focusNode.addListener(() {
              if (_focusNode.hasFocus) {
                _activeIndex.sink.add(index);
              }
            });
            _nodes.add(_focusNode);
            return ListTile(
               focusNode: _focusNode,
               title: Text("Item $index"),
            );
          },
        ),
        // Do stuff with focused item
      ],
    );
  }
}

Proposal
class MyWidget extends StatefulWidget {
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final StreamController<int> _activeIndex = StreamController();

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ListView.builder(
          itemCount: 100,
          itemBuilder: (context, index) {
            return ListTile(
               onFocusChange: (hasFocus) => hasFocus ? _activeIndex.sink.add(index) : null,
               title: Text("Item $index"),
            );
          },
        ),
        // Do stuff with focused item
      ],
    );
  }
}

I will work on it.


Personalizations

Bots can share features through using Talents, but a concept of Personalizations can be derived from this.
If both bots share a Ping command, for example, it should be easy to customize the output of the command without necessarily touching the code at all.
Main idea for this is to add the possibility of setting a Tag to text that you output. This tag concept will be linked to a file that you can add to your bot's folder called strings or texts or labels or personalizations or something, where all tags will be found and personalizations can be added.

OOF.


Flickering problem appearing at 1904 causes a problem with the detection

Preparation

[X] I tested the latest release
[X] I looked at other issues (even the closed ones)
[X] I read the Troubleshooting Guide

FGO server
NA, JP
FGA build number
1904
Describe the bug
There is a screen flickering, which causes it to detect it again. It was good before(I forgot the build number but probably 1850 or something) but after updating to 1904 the problem started to appear.
In the example video after screen flickering in the wave 2, fga did a detection again and click the support skadi. Originally from the script it supposed to use her s3 before clicking the plugsuit.
The problem with this, is that it is consistent. Every time I started a new automation the problem would start again at wave 2.
To a smaller extent, my NA is also suffering from this
I use the https://github.com/Genymobile/scrcpy#recording for the recording
The older build used to not have this kind of flickering problem
Video
NA(forgot to turn on debug)
https://www.youtube.com/watch?v=cDjCRnDR77k
JP(forgot to turn on debug)
https://www.youtube.com/watch?v=TExWR0Md-qY
JP(With debug on) but shows the problem is consistent
https://www.youtube.com/watch?v=WrXwHMGb1e0
Device model
Pocophone f1
Android version
10
Screen size
2240x1080
RAM
6gb

thanks, it solved the problem


Usbutils mods

Changes to usb_testutils to support further testing and porting of TinyUSB device stack

Separation of IN and OUT endpoints, required for higher layers, including TinyUSB device stack; I suspect this was always intended but not previously implemented

Endpoint removal and finalization, required for usbdev_pincfg_test and others; this is a t-l test that cycles the usbdev through each permutation of pins/bus configuration in turn, checking differential vs single-ended, swapped vs unswapped etc. It removes the endpoints, finalizes the usb_testutils layer/DIF and then resets the usbdev IP block before starting anew

Support larger data stages; required for more complex configuration descriptors such as usbdev_stream_test when it is
streaming to/from all endpoints concurrently.

Introduce usb_testutils_buffer_send() which supports the sending of larger buffers, with usb_testutils splitting the data stage across multiple packets, optionally including support for Zero Length Packets when the host does not know in advance how much data shall be sent.

_buffer_send() functionality also permits the use of double-buffering for increased IN throughput by removing the RAM->CPU->usbdev data transfer from the pkt_sent interrupt response time; with a second usbdev buffer already preloaded with data, it becomes possible to supply the new buffer much more promptly.

Measurements on CW310 FPGA with 10MHz Ibex yield around 550KiB/s sustained IN data rate to the host under ideal conditions (no other interrupt handlers/delays in responding to usbdev interrupt state register, no heavy CPU load required to generate the packet data; this is just streaming pre-existing data from SRAM). This is a little shy of double what's previously been attained without double-buffering, and estimates suggest that we're sending 8-9 packets of 64 bytes apiece per one millisecond bus frame, so although we're definitely not achieving back-to-back IN performance and are NAKing requests, the host controller (Lenovo laptop) must be retrying at least fairly keenly.

Please assign to others if appropriate; there are half a dozen top-level USB tests waiting on these changes to the 'usb_testutils' device software.

To unblock CI, I think all this needs is a rebase and push.

Closing and reopening to trigger CI.


Support extended syntax for reading proto sources

I added a new syntax - "USING BINARY SCHEMA" to denote paths to
.pb message descriptor sets and have only added this for
CREATE SOURCE so far

I am dumb - I need to also take a message name argument

travis ci has been broken with unrelated errors anyway - these changes were tested with a branch of materialize and everything seems fine :)


Form Payload size

Description
When submitting a form with a payload above a certain size (aprox. 1MB) the __superform_json serialized object gets trimmed and the parsing and validation fail.

This should be fixed now in v0.8, I had to split the serialized string in chunks before sending it to the server. Can you confirm that it works?

@ciscoheat unfortunatelly I can still reproduce using 0.8.1

The payload seems incomplete, it looks like it starts in the middle of the serialized string.

I really hope this is fixed now with v0.8.2, just released.

I really hope this is fixed now with v0.8.2, just released.

WORKS 👍

Finally! Closing this now :)


All templates suddenly lost (on multiple disconnected computers!)

This plugin saves us a lot of typing when communicating. We have been using it for about a month, and it worked like a charm.
Yesterday, suddenly, all my 20-25 templates disappeared. I can't auto-complete, and when I open the config dialog it shows zero templates. It is really frustrating.
Environment: Ubuntu, Chrome, Gmail
I initially thought that I may have deleted them accidentally, but I have another laptop at home, also installed with the plugin and just the same day the templates disappeared on that as well?!! Gorgias is NOT auto-synched between them, but the general syncing (bookmarks, plugins, etc.) via Google login is turned on (never caused any problem).
Is this a general problem that may be caused by an auto-upgrade of Chrome or the Gorgias plugin?

@arongombas Sorry about this, but don't worry, your templates are not lost.
I have migrated from webSQL to chrome.storage in the latest update so it maybe related. Could first check that the version you are using is 2.5.5 and if that's the case could you click on inspect view and see if there are any errors here (might need to enable developer mode first):

It is 2.5.5, yes. (At least on my home laptop.)
In the console 2 warnings and 2 errors! These are the errors:
One
TypeError: Cannot read property 'subject' of undefined
at chrome-extension://lmcngpkjkplipamgflhioabnhnopeabf/background/js/background.js:59364:59
at processQueue (chrome-extension://lmcngpkjkplipamgflhioabnhnopeabf/background/js/background.js:33749:27)
at chrome-extension://lmcngpkjkplipamgflhioabnhnopeabf/background/js/background.js:33765:27
at Scope.$eval (chrome-extension://lmcngpkjkplipamgflhioabnhnopeabf/background/js/background.js:34961:28)
at Scope.$digest (chrome-extension://lmcngpkjkplipamgflhioabnhnopeabf/background/js/background.js:34777:31)
at chrome-extension://lmcngpkjkplipamgflhioabnhnopeabf/background/js/background.js:35000:26
at completeOutstandingRequest (chrome-extension://lmcngpkjkplipamgflhioabnhnopeabf/background/js/background.js:25465:10)
at chrome-extension://lmcngpkjkplipamgflhioabnhnopeabf/background/js/background.js:25845:7 undefined
Two
https://app.getsentry.com/api/30379/store/?sentry_version=4&sentry_client=r…222.5.5"}%2C"event_id"%3A"b4ba63bbf36b4062b8e60b4abb0215fe"} Failed to load resource: the server responded with a status of 414 (Request-URI Too Large)

Thank you @arongombas I published an update just now 2.5.6 that should fix the issue. Usually it takes about 30m to 1h to update. Could you check back then and see if it works?

Hmmm, after the previous comment I came to the office and on my work laptop the templates appeared again! AWESOME!
But, when I look at the "Extension" list, it still shows the 2.5.5 version number. WTF?

Have you updated your Settings in the extension on your work laptop? It might explain fixing the issue. I've put some more checks in the last update to make sure it works. It should have worked before and the only explanation I have is that Google Chrome Sync didn't work as expected.
Good to know it fixed your problem though.

Honestly, I don't think I did anything related to Chrome or its extensions. Ubuntu will not invisibly upgrade the browser, but I don't know what Chrome does or doesn't do under the hood...
Anyway, now with this working again, I'm a happy camper.

Chrome Sync is a Google service which I use to save the Settings of the extension. One field was missing and it should have been there. Since it was not I blame Chrome Sync not doing it's job (connection issues, write conflicts, etc..), but really I should have put additional checks to make sure the variable is present.
Closing this for now and let me know if you have any other issues.


Update bio-rdf-validator.imjoy.html

Should fix: https://github.com/bioimage-io/core-bioimage-io-python/issues/303

changes from 0.4.6 include (from https://github.com/bioimage-io/spec-bioimage-io#changelog):

Breaking changes that are fully auto-convertible

name field may not include '/' or '' (conversion removes these)

Non-breaking changes

cite field is now optional

add simple forward compatibility by treating future format versions as latest known (for the respective resource type)

add axes and eps to scale_mean_var


relation ships are now saved after the record itself

solve #327, save record and then save relationships, which allows for rules to be applied ( generally rules are using record data, not relationship data).

I signed it!

Seems like the last commit did not trigger a rebuild :(, @tstirrat any chance you can help or should I just push a dummy commit ?
I also found why I needed to reload some records after saving it happens when you create a record with relationship belongsTo -> hasMany relationship, and save the belongsTo ( parent ) first. Ember data has some bad code that check if the relationship element is "new" and is so push it again in the "hasMany" relationship. I have filled a bug at ember data, but you can fix it by saving the child before the parent ( in some case it it is not possible ).

for reference: emberjs/data#4149

I tried to kick off the build again but it runs on the second to last commit, sorry

Submitted à pullrequest to ember data for the fix as well as test for repro & proof of fix

Then I'm going to submit a dummy

@tstirrat any more comment ?

Thanks for this PR, btw. I appreciate all the help I can get!
One final nitpick: arrow functions blocks should be on the same line:
method.then(() => {
  // ...
});

no problem, I just dont like to wait for things to happen :). If my PR is validated for ember-data, that would be cool for emberfire as well ( and probably other adapter/serializer ).

so. we could reduce the number of saves to exactly 2 by using a multi-path update for the relationships
writing something like this:
rootReference.child('posts').child(postId).update({
  // ignore unchanged comment links
  'comments/comment_5': null, // deleted
  'comments/comment_6': true, // added
  'comments/comment_7': true, // added
});

yes  I think it should be easily feasible, the code is pretty much already
there. that would also greatly reduce the risk of errors
On Thu, Feb 11, 2016 at 8:47 PM, Tim Stirrat<EMAIL_ADDRESS>wrote:

so. we could reduce the number of saves to exactly 2 by using a multi-path
update for the relationships
writing something like this:
rootReference.child('posts').child(postId).update({
// ignore unchanged comment links
'comments/comment_5': null, // deleted
'comments/comment_6': true, // added
'comments/comment_7': true, // added
});
—
Reply to this email directly or view it on GitHub
https://github.com/firebase/emberfire/pull/365#issuecomment-183033599.

Actually, we could probably reduce it to 1, with an update like this:
rootReference.child('posts').update({
  // model attributes:
  'post_1/title': 'Title',
  'post_1/body': 'Body here',

  // relationships:
  // ignore unchanged comment links
  'post_1/comments/comment_5': null, // deleted
  'post_1/comments/comment_6': true, // added
  'post_1/comments/comment_7': true, // added
});

yep that make sense ( trying to figure out if something is wrong with either my app or the change I commited )

if you find out its an edge case, or a slight bug.. please write a test that exposes it

it was working before the change I have made ( catch, etc. ) so I'm
guessing something is not working as it should.
On Thu, Feb 11, 2016 at 8:55 PM, Tim Stirrat<EMAIL_ADDRESS>wrote:

if you find out its an edge case, or a slight bug.. please write a test
that exposes it
—
Reply to this email directly or view it on GitHub
https://github.com/firebase/emberfire/pull/365#issuecomment-183036395.

The more I think about this, the more I wonder if we can take the other atomic save branch, take the serialized json hash, convert it to a multi-path update with only changed attributes.. and we solve both problems.
e.g.
if the serializer returns only changed attributes:
{
  title: 'New title',
  comments: {
    comment_1: null, // deleted
    comment_5: true, // added
  }
}

we can convert this to a multi-path update:
{
  'post_1/title': 'New title',
  'post_1/comment_1': null, // deleted
  'post_1/comment_5': true, // added
}

Well that would definitly solve the problem :) can you try ?
On Thu, Feb 11, 2016 at 9:04 PM, Tim Stirrat<EMAIL_ADDRESS>wrote:

The more I think about this, the more I wonder if we can take the other
atomic save branch, take the serialized json hash, convert it to a
multi-path update with only changed attributes.. and we solve both problems.
e.g.
if the serializer returns only changed attributes:
{
title: 'New title',
comments: {
comment_1: null, // deleted
comment_5: true, // added
}
}
we can convert this to a multi-path update:
{
'post_1/title': 'New title',
'post_1/comment_1': null, // deleted
'post_1/comment_5': true, // added
}
—
Reply to this email directly or view it on GitHub
https://github.com/firebase/emberfire/pull/365#issuecomment-183042380.

However this will cause problems with validation rules where say, "post must have a body".
So, an adapted version of this is that we could save all model attributes, and only the changed relationships..

yes, attributes are fine to overrides normally
On Thu, Feb 11, 2016 at 9:05 PM, Tim Stirrat<EMAIL_ADDRESS>wrote:

However this will cause problems with validation rules where say, "post
must have a body".
So, an adapted version of this is that we could save all model attributes,
and only the changed relationships..
—
Reply to this email directly or view it on GitHub
https://github.com/firebase/emberfire/pull/365#issuecomment-183043252.

I'll get better time to work on this over the weekend. Sadly wont get a chance today/tomorrow.

I can try to do it then, as I think it would be a very cool way of doing :)
On Thu, Feb 11, 2016 at 9:11 PM, Tim Stirrat<EMAIL_ADDRESS>wrote:

I'll get better time to work on this over the weekend. Sadly wont get a
chance today/tomorrow.
—
Reply to this email directly or view it on GitHub
https://github.com/firebase/emberfire/pull/365#issuecomment-183044640.

Got a first version that works, but does not handle embedded record, going
to submit inside my fork, but your branch
On Thu, Feb 11, 2016 at 9:11 PM, Olivier Chatry<EMAIL_ADDRESS>wrote:

I can try to do it then, as I think it would be a very cool way of doing :)
On Thu, Feb 11, 2016 at 9:11 PM, Tim Stirrat<EMAIL_ADDRESS>wrote:

I'll get better time to work on this over the weekend. Sadly wont get a
chance today/tomorrow.
—
Reply to this email directly or view it on GitHub
https://github.com/firebase/emberfire/pull/365#issuecomment-183044640.

For some odd reason, I cannot update your branch to my fork without getting
conflict ( weird as I did not do anything on it ), I'm always 33 commit
behinds :(. Any chance you would know anything about that ?
On Thu, Feb 11, 2016 at 10:54 PM, Olivier Chatry<EMAIL_ADDRESS>wrote:

Got a first version that works, but does not handle embedded record, going
to submit inside my fork, but your branch
On Thu, Feb 11, 2016 at 9:11 PM, Olivier Chatry<EMAIL_ADDRESS>wrote:

I can try to do it then, as I think it would be a very cool way of doing
:)
On Thu, Feb 11, 2016 at 9:11 PM, Tim Stirrat<EMAIL_ADDRESS>wrote:

I'll get better time to work on this over the weekend. Sadly wont get a
chance today/tomorrow.
—
Reply to this email directly or view it on GitHub
https://github.com/firebase/emberfire/pull/365#issuecomment-183044640.

ah, sorry. I rebased it, so your history and the remote one are out of sync.
delete the branch locally and then check it out again
git checkout master
git branch -D serialize-relationships-atomic
git checkout serialize-relationships-atomic

Nop, not working, I always endup with conflict one way or the other. I will
solve the conflict by taking what is last on the branch I guess.
On Thu, Feb 11, 2016 at 11:24 PM, Tim Stirrat<EMAIL_ADDRESS>wrote:

ah, sorry. I rebased it, so your history and the remote one are out of
sync.
delete the branch locally and then check it out again
git checkout master
git branch -D serialize-relationships-atomic
git checkout serialize-relationships-atomic
—
Reply to this email directly or view it on GitHub
https://github.com/firebase/emberfire/pull/365#issuecomment-183083912.

I think, if you think this branch is OK ( it looks and works OK at least in my software ), we should merge it and release a version before the multipath update is working.

squashed everything together.

done :) if you have time, take a look at https://github.com/firebase/emberfire/pull/366 :)


how to identify number of active subscribers by subscription in AppSync

Need to keep count of how many subscribers are connected with each subscription.
For UserA, UserB are connected with SubscriptionA : then 2 is the total subscribers
For UserA are connected with SubscriptionB : then 1 is the total subscribers
Can i know when UserA unsubscribes , subscribes, disconnects, reconnects from AppSync ?

Please take a look a tthis blog: https://aws.amazon.com/blogs/mobile/appsync-realtime/
specifically highlighted:

Furthermore with the new protocol support we’re also increasing visibility on WebSockets connections and GraphQL subscriptions activity with CloudWatch metrics on active connections and subscriptions, status, errors, message size and more.

and https://docs.aws.amazon.com/appsync/latest/devguide/monitoring.html#cw-metrics


Automated cherry pick of #11113

#11113 is needed on release-1.0 to fix #11111 there as well (though it doesn't seem to block cherry_pick_pull.sh for some reason, probably through the magic of merge commits, but would block ./hack-verify-gendocs.sh.)
Obviously feel free to keep cherry'ing more in for more doc changes, though.
cc @thockin

LGTM. I am afk, so you can self merge if you need it now.
On Jul 11, 2015 1:50 PM, "Zach Loafman"<EMAIL_ADDRESS>wrote:

#11113 https://github.com/GoogleCloudPlatform/kubernetes/pull/11113 is
needed on release-1.0 to fix #11111
https://github.com/GoogleCloudPlatform/kubernetes/issues/11111 there as
well (though it doesn't seem to block cherry_pick_pull.sh for some reason,
probably through the magic of merge commits, but would block
./hack-verify-gendocs.sh.)
Obviously feel free to keep cherry'ing more in for more doc changes,
though.
cc @thockin https://github.com/thockin
You can view, comment on, or merge this pull request online at:
https://github.com/GoogleCloudPlatform/kubernetes/pull/11116
Commit Summary

Fix mungedocs for absolute paths

File Changes

M cmd/mungedocs/mungedocs.go
https://github.com/GoogleCloudPlatform/kubernetes/pull/11116/files#diff-0
(12)

Patch Links:

https://github.com/GoogleCloudPlatform/kubernetes/pull/11116.patch
https://github.com/GoogleCloudPlatform/kubernetes/pull/11116.diff

—
Reply to this email directly or view it on GitHub
https://github.com/GoogleCloudPlatform/kubernetes/pull/11116.

Close/re-open to kick shippable.


Release v1.3.0

Summary
Cut release for Marketplace
Ticket Link
Fixes https://github.com/mattermost/mattermost-plugin-memes/issues/27

@DHaussermann Take your time to review this plugin. There is no need to rush it. This release should go into the Marketplace as Beta.

@hanzei I have smoke tested this plugin The functionality seems to be in order and auto-complete functionality has been added. No issues found.
However there do seem to be a couple issues with the build.

When I run make I get

env GO111MODULE=off /usr/local/go/bin/go get github.com/jteeuwen/go-bindata/...
/Users/dylanhaussermann/go/bin/go-bindata -o server/memelibrary/assets.go -pkg memelibrary -prefix server/memelibrary/assets/ -ignore '(^|/)\..*' server/memelibrary/assets/...

When I run make all I get

@@ -1894,4 +1895,3 @@
 	cannonicalName := strings.Replace(name, "\", "/", -1)
 	return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
 }
-
Gofmt failure
make: *** [gofmt] Error 1

Would it be appropriate to create follow-up issues for this rather than stopping the release? I'm not sure of the significance of this but, I'm assuming there is no impact on the compiled binary.

Gentle ping on this @hanzei I know you were away last week. Must these build issues ☝  be fixed before the release or, can this move forward to the market place?

@DHaussermann Both build issues are not critical for the release.

Good catch! I've submitted https://github.com/mattermost/mattermost-plugin-memes/pull/29 to fix this.
with the fix from #29 this issue should be encountered so often. I've filled https://github.com/mattermost/mattermost-plugin-memes/issues/30 as a HW.

I think we are ready to ship, right?

@hanzei yes,  correct.  Ready to ship.


Testing links in Quick Input Box: No underline

Testing #174700 in a simple test extension.
I can click on the link (which I've named link below), but it isn't underlined:

The toast displays the hyperlink in blue, but there is also no underline (though I think that's expected here):

This is the piece of code I added:
const result = vscode.window.showInputBox({
		value: 'abcdef',
		valueSelection: [2, 4],
		placeHolder: 'For example: fedcba. But not: 123',
		prompt: 'Please enter a value and [link](https://github.com)',
		validateInput: text => {
			vscode.window.showInformationMessage(`Validating [link](https://github.com): ${text}`);
			return text === '123' ? 'Not 123!' : null;
		}
	});
	vscode.window.showInformationMessage(`Got: ${result}`);

I also don't see a link when using vscode.window.createInputBox. Example of a clickable and tab-able link in the validation message, just no underline:

Code:
const inputBox = vscode.window.createInputBox();
inputBox.title = vscode.l10n.t('Create new title');
inputBox.placeholder = vscode.l10n.t('New placeholder');
inputBox.prompt = vscode.l10n.t('Please enter a value and [link](https://github.com)');
inputBox.validationMessage = vscode.l10n.t('This is my [link](https://github.com)');
inputBox.show();

It looks like there is a global stylesheet that gets applied when building the product. In any case, I have a fix out.


[Hub Generated] Review request for Microsoft.Devices to add version stable/2020-03-01

This is a PR generated at OpenAPI Hub. You can view your work branch via this link.
Changelog
Please ensure to add changelog with this PR by answering the following questions.

What's the purpose of the update?

[ ] new service onboarding
[ ] new API version
[ ] update existing version for new feature
[x] update existing version to fix swagger quality issue in s360
[ ] Other, please clarify

When you are targeting to deploy new service/feature to public regions? Please provide date, or month to public if date is not available yet.
When you expect to publish swagger? Please provide date, or month to public if date is not available yet.
If it's an update to existing version,  please select SDKs of specific language and CLIs that require refresh after swagger is published.

[ ] SDK of .NET (need service team to ensure code readiness)
[ ] SDK of Python
[ ] SDK of Java
[ ] SDK of Js
[ ] SDK of Go
[ ] PowerShell
[ ] CLI
[ ] Terraform
[ ] No, no need to refresh for updates in this PR

Contribution checklist:

[ ] I commit to follow the Breaking Change Policy of “no breaking changes
[ ] I have reviewed the documentation for the workflow.
[ ] Validation tools were run on swagger spec(s) and errors have all been fixed in this PR. How to fix?

If any further question about AME onboarding or validation tools, please view the FAQ.
ARM API Review Checklist

[ ] Ensure to check this box if one of the following scenarios meet updates in the PR, so that label “WaitForARMFeedback” will be added automatically to involve ARM API Review. Failure to comply may result in delays for manifest application. Note this does not apply to data plane APIs, all “removals” and “adding a new property” no more require ARM API review.

Adding new API(s)
Adding a new API version
Adding a new service

[ ] Please ensure you've reviewed following guidelines including ARM resource provider contract and REST guidelines. Estimated time (4 hours). This is required before you can request review from ARM API Review board.

[ ] If you are blocked on ARM review and want to get the PR merged with urgency, please get the ARM oncall for reviews (RP Manifest Approvers team under Azure Resource Manager service) from IcM and reach out to them.

Breaking Change Review Checklist
If there are following updates in the PR, ensure to request an approval from API Review Board as defined in the Breaking Change Policy.

[ ] Removing API(s) in stable version
[ ] Removing properties in stable version
[ ] Removing API version(s) in stable version
[ ] Updating API in stable version with Breaking Change Validation errors
[ ] Updating API(s) in preview over 1 year

Action: to initiate an evaluation of the breaking change, create a new intake using the template for breaking changes. Addition details on the process and office hours are on the Breaking change Wiki.
Please follow the link to find more details on PR review process.

@markcowl These changes with swagger spec and examples tries to bring the docs and spec in parity with existing api . There is nothing changed in api itself and just changing the spec to match the current code.Please let me know if any more info is required.

/azp run

validation results are here: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=734984&view=results

@markcowl  here are the issues:
https://portal.azure-devex-tools.com/amekpis/correctness/detail?errorId=F202734B-ADE6-447B-8976-324E71871F89
https://portal.azure-devex-tools.com/amekpis/correctness/detail?errorId=8FB88EC9-B53F-413E-900D-8B2C45D78355
https://portal.azure-devex-tools.com/amekpis/correctness/detail?errorId=FB45A8B9-F332-4D61-8B30-A755B6946BE3

@markcowl fixed the lintdiff and moving it to new version. can this be merged now?


resolve exports types config

Related Issues
#91

Description

fix ts(7016) error message.

There is any update on this? Looks like can be merged, right? It would be nice to have a properly type support with typescript 😄

@NaotoshiFujita do you plan to support this project?

I think the repo is no longer maintained, so I forked the repo to add typescript support and fixed some typescript errors, I also changed the build to include only the necessary files (.js and .d.ts) and not the typescript files
You can try it: npm install joris-gallot/vue-splide
https://github.com/joris-gallot/vue-splide


Refresh cloud parts before executing snapcraft

This update is now mandatory to get new cloud parts.

This change is

Comments from Reviewable


[C# Skype] Problem with SuggestedActions on Skype

Pre-flight checklist

[x] I have searched the existing issues before logging a new one.

System Information (Required)

SDK language (C#)
SDK version 3.5.9
Development environment - localhost Azure App Service

Issue Description
SuggestedActions don’t work for me on Skype. I tested with the newest sdk and skype version.
Example Code

IMessageActivity reply = context.MakeMessage();
List < CardAction> cardButtons = new List< CardAction>();
CardAction button1 = new CardAction()
{
Type = "imBack",
Title = buttonText1,
Value = buttonText1
};
CardAction button2 = new CardAction()
{
Type = "imBack",
Title = buttonText2,
Value = buttonText2
};
CardAction button3 = new CardAction()
{
Type = "imBack",
Title = buttonText3,
Value = buttonText3
};
CardAction button4 = new CardAction()
{
Type = "imBack",
Title = buttonText4,
Value = buttonText4
};
CardAction button5 = new CardAction()
{
Type = "imBack",
Title = "Cancel ❌",
Value = "Cancel ❌",
};
cardButtons.Add(button1);
cardButtons.Add(button2);
cardButtons.Add(button3);
cardButtons.Add(button4);
cardButtons.Add(button5);
reply.Text = text;
reply.SuggestedActions = new SuggestedActions(actions: cardButtons);

I closed #2706 because "You need to be on a recent version of Skype - https://web.skype.com/ supports suggested actions so please test there and let us know if you still see an issue." and "A new package with fix #2685 was just published (https://www.nuget.org/packages/Microsoft.Bot.Builder/3.5.9)"
I'm sorry if I closed it prematurely and you are still experiencing this issue with the latest sdk and Skype version.

No problem. It’s probably better this way, since #2706 was about two completely different issues and only the PromptDialog.Choice questions is answered.
This problem I experience with the latest SDK and Skype versions (windows 10 and webchat).

3.8.0 doesn't resolve this issue.

I can confirm that I am having this issue as well, SuggestedActions show in Skype (latest version) as "Sorry, my bot code is having an issue", they work with the emulator and webchat tester.

This is probably an exception, use ngrok to deploy your bot, change the URL in the Dev Portal to the ngrok One, now you can debug skype and see what exception is being thrown.
Michael
Sent from my Windows 10 phone
From: Edwin Huber
Sent: 05 June 2017 07:49
To: Microsoft/BotBuilder
Cc: Subscribed
Subject: Re: [Microsoft/BotBuilder] [C# Skype] Problem with SuggestedActionson Skype (#2712)
I can confirm that I am having this issue as well, SuggestedActions show in Skype (latest version) as "Sorry, my bot code is having an issue", they work with the emulator and webchat tester.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

Hi,
there is no exception, I have run it with a debugger attached.
The issue is only seen in Skype, so far I have not seen any exception being thrown.
The same code works fine in the web chat emulator.
I have hooked up ApplicationInsights to confirm that I am not missing an exception.
Code is simple:
var message = context.MakeMessage();
message.TextFormat = TextFormatTypes.Plain;
message.SuggestedActions = new SuggestedActions()
{
Actions = new List()
{
new CardAction(){ Title = TopQ, Type=ActionTypes.ImBack, Value=TopQText },
new CardAction(){ Title = Advisor, Type=ActionTypes.ImBack, Value=AdvisorText },
new CardAction(){ Title = Reading, Type=ActionTypes.ImBack, Value=ReadingText }
}
};
await context.PostAsync(message);
context.Wait(this.OnOptionSelected);

Hi Edwin,
I run your code and discovered that indeed an exception was being thrown, “Activity must include non empty 'text' field or at least 1 attachment".
I added the highlighted code to prevent the exception from being thrown. Basically if Skype replies with Sorry my bot code is having issues, it means it has experienced an unhandled exception.
var message = context.MakeMessage();
message.TextFormat = TextFormatTypes.Plain;
message.SuggestedActions = new SuggestedActions()
{
Actions = new List()
                {
                    new CardAction(){ Title = "TopQ", Type=ActionTypes.ImBack, Value="TopQText"},
                    new CardAction(){ Title = "Advisor", Type=ActionTypes.ImBack, Value="AdvisorText" },
                    new CardAction(){ Title = "Reading", Type=ActionTypes.ImBack, Value="ReadingText" }
                }
};
message.Text = "Test";
await context.PostAsync(message);
context.Wait(OnOptionSelected);
Michael
Sent from Mail for Windows 10
From: Edwin Huber
Sent: 06 June 2017 14:09
To: Microsoft/BotBuilder
Cc: michaelhutchful; Comment
Subject: Re: [Microsoft/BotBuilder] [C# Skype] Problem with SuggestedActionson Skype (#2712)
Hi,
there is no exception, I have run it with a debugger attached.
The issue is only seen in Skype, so far I have not seen any exception being thrown.
The same code works fine in the web chat emulator.
I have hooked up ApplicationInsights to confirm that I am not missing an exception.
Code is simple:
var message = context.MakeMessage();
message.TextFormat = TextFormatTypes.Plain;
message.SuggestedActions = new SuggestedActions()
{
Actions = new List()
{
new CardAction(){ Title = TopQ, Type=ActionTypes.ImBack, Value=TopQText },
new CardAction(){ Title = Advisor, Type=ActionTypes.ImBack, Value=AdvisorText },
new CardAction(){ Title = Reading, Type=ActionTypes.ImBack, Value=ReadingText }
}
};
await context.PostAsync(message);
context.Wait(this.OnOptionSelected);
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

Many thanks! I was looking at the wrong bot (doh) , and found the exceptions being listed in the botframework portal.
Having included the message in the activity (message.Text) I am at the same point as this issue, the exceptions are gone, but the SuggestedActions are not shown.

I am facing same issue with NodeJS Bot framework. Is there any update on this?
I simply copied this example code.
var msg = new builder.Message(session)
.text("Thank you for expressing interest in our premium golf shirt! What color of shirt would you like?")
.suggestedActions(
builder.SuggestedActions.create(
session, [
builder.CardAction.imBack(session, "productId=1&color=green", "Green"),
builder.CardAction.imBack(session, "productId=1&color=blue", "Blue"),
builder.CardAction.imBack(session, "productId=1&color=red", "Red")
]
));
session.send(msg);
Only text message shows up in skype. No suggested actions.

Having the same issue as @prasanna-bigreco with suggested actions not displaying in skype.

Just a short update: Suggested Actions now work on the latest Android version of Skype, but since there are still a lot of Skype versions which don’t show the buttons at all I won’t implement them.
It would be nice if suggested actions are simply rendered as KeyboardCard on all Skype version without support.

Is it possible to know the user's skype version or if it supports this feature?

What's the status for this one? I can only get it to work on Skype for Windows when following this hack -> https://github.com/Microsoft/BotBuilder/issues/3076 ->see Magic73's hack.

The documentation at https://docs.botframework.com/en-us/channel-inspector/channels/Skype?f=SuggestedActions&e=example1 indicates that Suggested Action only works on a card and looks to be the sample @prasanna-bigreco shows above.  Is this issue still occurring?

Closing the issue assuming it as resolved. Please reopen a new issue if it still persists.


added support for custom cURL options

Thanks for this but this is a very old project and personally I would recommend using guzzle http://docs.guzzlephp.org/en/latest/ for calling an API.


Display plain text request data in Multipart/form-data request, instead of byte gibberish with interceptor

With an interceptor one can typically see the plain text information in requests, but in Multipart/form-data post requests, that data is turned into byte data and not displayed in a meaningful or debuggable way, in the case that a server doesn't like the data format in the request
http://stackoverflow.com/questions/38563394/okhttp-loggin-interceptor-in-multipart

Thanks for asking on StackOverflow. Opening an issue here isn’t necessary.

@swankjesse I didn't ask that question, I found the same issue already posted on stackoverflow in the past.


[Feature]: Enhanced Product Categorization and Filtering

Describe the feature
Description: Enhance the user experience by implementing advanced product categorization and filtering options on the website.
• Category Segregation:
Create distinct categories for Men, Women, and Kids. Each category should have its own dedicated section on the website.
• Size Filtering:
Implement size filters within each category. Users should be able to filter products based on available sizes categories, colors, and prices (e.g., XS, S, M, L, XL).
• Color Filtering:
Add color filtering options, allowing users to select products based on their preferred available colors.
• Multiple Filter Combinations:
Ensure that users can apply multiple filters simultaneously while purchasing (e.g., Men’s T-shirts in size M and color blue).
Add ScreenShots

This Area Will Be Updated.

This Area Will Be  Updated.
Record

[X] I agree to follow this project's Code of Conduct
[X] I'm a GSSOC'24 contributor
[X] I'm a VSOC'24(Vinayasa Summer of Code) contributor
[X] I want to work on this issue

@Pratham-Vishwakarma All these features are already there.....check out https://indiekart-admin.vercel.app/


Git status Update

I've just installed your theme for .oh-my-zsh, I run it throught Babun and I got this error message everytime I browse a folder wich is a git repo :
g/uwamp/www
➔ cd ~/.oh-my-zsh/themes
spaceship_git_satus:24: command not found: git_current_branch

What is your environment?

I've made a small research: since you use Babun, I suppose you are on Windows, right? So, It's possible you just don't have git_current_branch command in your environment just.
This is where this functions is defined in oh-my-zsh. Please, check you installation of oh-my-zsh.

Did that help you?

I've just read your answer, thanks for being quick ! I should be able to test it tonight. I'll let you know !

Okay, will wait.

And I run Win10. Babun is a shell that expand the classic windows CMD.

So it's the root of the problem. Better to use this with Unix-based systems.

I'm having the same issue on a Mac. I've just updated zsh, and it's still throwing the error somehow.

@nWidart try to update to the latest version of Spaceship. There's not spaceship_git_status function since v2.0.0.

Hm I just downloaded the zip file of the repository like 15min ago.
I used the manual way using https://raw.githubusercontent.com/denysdovhan/spaceship-zsh-theme/master/spaceship.zsh , which is on master branch so should be up to date ?

The 2 errors I'm getting specifically:
spaceship_git_branch:5: command not found: git_current_branch
spaceship_git_status:16: command not found: git_prompt_status

@nWidart sorry, I'm misunderstood you.
Notice that Spaceship depends on Oh-My-Zsh. Have you installed OMZ?

Hm interesting, I though I did, because I have zsh installed. But it now looks like it's now the same thing.
I'm using YADR dotfiles which installs zsh, not sure if I can just run the oh-my-zsh installer w/o issues. 🤔

Looks like YADR installas prezto. Not sure about how much of YADR conf depends on prezto.

Oh okay, and prezto & ohmyzsh can't be installed together?

Prezto was actually a fork of OMZ and they diverged considerably. AFAIK you've to use either one of them.
spaceship-theme requires OMZ for some features and it doesn't currently support prezto.

It forces me to think about making Spaceship more standalone. OMZ has nice utils, however we should not force our users to use that.

@sfarzy  Damn that's too bad. I wasn't aware Prezto is a fork of OMZ. 😲
In would be nice indeed to allow both. Sadly I won't be able to use this nice theme b/c of this.
However it depends on how many people are in the same boat as me, I might just be an edge case.
Maybe those 2 functions could be brought onto this theme itself ? It depends how many other things depends on OMZ I guess.

I think the major (only?) dependency with OMZ would be the git indicators. @denysdovhan It would be great if spaceship-theme is independent of frameworks.

Hello,
No news on supporting prezto 😄  ?

We're working on it and will drop OMZ with #147 @nWidart 😊 . I hope spaceship wil work with prezto after that.

Nice! That's good news!

@CMYKpixels
You can change git_current_branch() to current_branch() only for babun oh-my-zsh.
Also to remove the extra line, in your .zshrc file, add this unsetopt PROMPT_SP
There will still be a problem with the font (for me at least), I'm working on it...


Image processing error / nothing to show

For some places, everything works just fine:

Now, if I query 6666 rue saint Urbain in Montreal, the following error is returned:

However, if I query 6666 rue saint Urbain and it is the FIRST address I am querying when logging into th website, the error is not returned, but no image is shown:

This seems to be working now. I think that this was an intermittent failure due to some other issues that were going on at the time of testing. In any case, thank you for the excellent issue, @melisandeteng!!


Support new delimiters in spring.config.location

Fixes #1895
Requires Boot 2.4.7

If back compatibility is an issue then you could pick the delimiter based on the presence of the ConfigDataLocation.split() method.

I think we are fine with not being compatible with releases prior to Boot 2.4.7.


Able to view created APIs in Store

When clicking on the View In Store options in API overview, API can be viewed in Store even if it is in CREATED state. We do not require View In Store for APIs that are not in PUBLISHED state.
APIs that are not Published / Prototyped, should not be able to viewed in Store

Fixed in https://github.com/wso2/carbon-apimgt/pull/6996


Getting note optimization

Try some optimization: when getting note from evernote try set second parameter to False (get without attachments) https://github.com/djudman/evernote-telegram-bot/blob/master/evernoterobot/ext/evernote/api.py#L78
May be in this case it will be faster

Optimization tried, but there are no effect


Update to only display one tag for each food

[x] Only one tag is displayed
[x] Only allow the following tags: Breakfast, Lunch, Dinner
[x] Add test cases

Closes #37

Codecov Report

Merging #57 (64adadc) into master (b90a3b5) will decrease coverage by 0.86%.
The diff coverage is 77.77%.

@@             Coverage Diff              @@
##             master      #57      +/-   ##
============================================
- Coverage     70.56%   69.70%   -0.87%
+ Complexity      395      393       -2
============================================
  Files            73       73
  Lines          1257     1241      -16
  Branches        117      111       -6
============================================
- Hits            887      865      -22
- Misses          329      338       +9
+ Partials         41       38       -3

Impacted Files
Coverage Δ

...va/seedu/nutrigoals/logic/commands/AddCommand.java
100.00% <ø> (ø)

src/main/java/seedu/nutrigoals/ui/FoodCard.java
0.00% <0.00%> (ø)

...va/seedu/nutrigoals/model/util/SampleDataUtil.java
7.69% <14.28%> (-12.31%)
:arrow_down:

...java/seedu/nutrigoals/storage/JsonAdaptedFood.java
85.18% <75.00%> (-5.14%)
:arrow_down:

...rc/main/java/seedu/nutrigoals/model/meal/Food.java
95.74% <92.30%> (-0.26%)
:arrow_down:

...a/seedu/nutrigoals/logic/commands/EditCommand.java
95.31% <100.00%> (-0.21%)
:arrow_down:

...eedu/nutrigoals/logic/parser/AddCommandParser.java
100.00% <100.00%> (ø)

...edu/nutrigoals/logic/parser/EditCommandParser.java
100.00% <100.00%> (+8.69%)
:arrow_up:

src/main/java/seedu/nutrigoals/model/tag/Tag.java
90.90% <100.00%> (+10.90%)
:arrow_up:

.../java/seedu/nutrigoals/storage/JsonAdaptedTag.java
0.00% <0.00%> (-100.00%)
:arrow_down:

... and 3 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

Might want to consider either setting all the tags to lowercase or all to uppercase, currently something like this is allowed which causes the order to be wrong as well, ie breakfast should be before lunch etc


Different input methods for different scales

For now, we are using min & max values for specification of an experiment variable. Depending on its type (nominal, interval, or metric) different input types can be shown to the user.

related with function to be applied as "aggregation"


Play-out sometimes does not start for live streams

Have you read the FAQ and checked for duplicate open issues?
Yes, and extensively read documentation as well.
What version of Shaka Player are you using?
2.5.6c
Please ask your question
In our react-native-web application, running as a Tizen smart web app on Samsung smart TVs, we use ShakaPlayer 2.5.6c to play DASH live streams.
The issue is that sometimes the stream does not start. The DRM license is received, segments are being fetched, but somehow the player does not show any frames. The player does not log any errors. Hours later the issue disappears. Also, the issue does not seem to affect all devices.
The live streams originate from a Halo packages that is being used for other clients as well (ExoPlayer, AVplayer & Chromecast ShakaPlayer), without any issue. We use titanium DRM license wrapping.
 The app registers player listeners for events abrstatuschanged, adaptation, buffering, drmsessionupdate, emsg, error, expirationupdated, largegap, loading, manifestparsed, onstatechange, onstateidle, streaming, unloading, and variantchanged. Additionally, every 2.5 seconds the playhead, current manifest & buffering info is written. For each segment fetch, the response date header is shown.
We have tried with a wide range of configurations, including different values for buffering parameters, defaultPresentationDelay jumpLargeGaps and videoRobustness. All with the same result.
The timeline below shows that the same segment is fetched multiple times. It looks like the player is retrying to fetch segments, although none fail.
At first it looks like there is a DRM issue, where the player is not able to decode video chunks. When play-out succeeds we see an extra 'expirationupdated: there is a change in the expiration times of an EME session' event right after a 'drmsessionupdate: the CDM has accepted the license response' event, which could support this theory. However, no error is thrown by the player.
What could be the cause of this behavior?   Could you post Shaka Player logs?  You can use a debug or uncompiled build and set log level with shaka.log.setLevel(shaka.log.Level.V1).  With the debug or uncompiled builds, could you also log player.drmEngine_.activeSessions_.forEach((v, k) => console.log(k)).

It is not reproducible on Desktop no. I'll collect extra logging and post it here.

The app with extra logging was not yet deployed on a Tizen 5 model where we originally saw the issue, but when checking verbose logs on a Chrome browser I already see a lot of "Assertion failed: SegmentReferences are incorrect" errors. On Chrome the stream just plays without other issues though.
It is probably best to look into this first. Could this be an indication for issues in the manifest? Note that on Android's Exoplayer we have no issues with the exact same streams. I also don't see any failed video/audio chunks being fetched. Below a sample of our MPD timeline:
<Period id="7462933" start="PT0S">
	...
	<SegmentTemplate timescale="90000" initialization="$RepresentationID$/Header.m4s" media="$RepresentationID$/$Time$.m4s" presentationTimeOffset="1364251342400">
		<SegmentTimeline>
			<S t="1436832201440" d="180000" r="14"/>
		</SegmentTimeline>
	</SegmentTemplate>
	...
</Period>

That log happens when the segment list changes in an incompatible way in a manifest update.  For example, the presentationTimeOffset changes, or the segment times don't match the old segments.  This content isn't supported, but may not be the cause of this problem.  If you could post a before and after segment list, I could give more info.

Weirdly enough I cannot reproduce it again right now. It looks like an intermittent issue, much like the one being reported on the Tizen device.
I will continue to monitor it, and meanwhile deployed a version on a remote Tizen device.
Many thanks already!

I got the following Level.V1 logging from a Tizen device, where I see a few "Stall detection" messages and a "Session expired":
18:21:31.326  onChooseStreams_
18:21:31.327  Found variant with audio and video content, so filtering out audio-only content in all periods.
18:21:31.327  codecs
18:21:31.327  Choosing new streams after period changed
18:21:31.327  init: completed initial Stream setup
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.328  Ignoring duplicate init data.
18:21:31.329  Ignoring duplicate init data.
18:21:31.329  Ignoring duplicate init data.
18:21:31.329  Ignoring duplicate init data.
18:21:31.329  Ignoring duplicate init data.
18:21:31.329  (audio:9)
18:21:31.330  (video:7)
18:21:31.331  (video:7)
18:21:31.331  (all) setting up Period 0
18:21:31.331  (all) Period 0 is being or has been set up
18:21:31.331  (all) Stream 9 is being or has been set up
18:21:31.332  (all) Stream 7 is being or has been set up
18:21:31.331  canSwitch_
18:21:31.331  Calling switch_(), bandwidth=1965 kbps
18:21:31.331  switch_
18:21:31.332  switch: switching to Stream (video:4)
18:21:31.331  (video:4)
18:21:31.331  switch: Stream (audio:9) already active
18:21:31.332  (video:4)
18:21:31.333  Calling switch_(), bandwidth=837 kbps
18:21:31.333  switch_
18:21:31.333  switch: switching to Stream (video:1)
18:21:31.333  (video:1)
18:21:31.333  switch: Stream (audio:9) already active
18:21:31.333  (video:1)
18:21:31.335  (all): seeked: buffered seek: presentationTime=1159580.140666
18:21:31.335  Calling switch_(), bandwidth=928 kbps
18:21:31.335  switch_
18:21:31.336  switch: Stream (video:1) already active
18:21:31.336  switch: Stream (audio:9) already active
18:21:31.336  Session has expired
18:21:31.337  Stall detected at 1159581.404 for 1.001000165939331 seconds. Seeking forward 0.1 seconds.
18:21:31.337  (all): seeked: buffered seek: presentationTime=1159581.504
18:21:31.337  (all): seeked: buffered seek: presentationTime=1159585.025666
18:21:31.338  Stall detected at 1159583.95 for 1.0149998664855957 seconds. Seeking forward 0.1 seconds.
18:21:31.337  (all): seeked: buffered seek: presentationTime=1159584.05
18:21:31.338  Stall detected at 1159583.95 for 1.121000051498413 seconds. Seeking forward 0.1 seconds.
18:21:31.338  (all): seeked: buffered seek: presentationTime=1159584.05
18:21:31.338  (all): seeked: buffered seek: presentationTime=1159588.988666

@TheModMaker any insights? I'll further check the code of lib_media_drm_engine.js for details on the session object.

I see that you referenced version 2.5.6 of Shaka Player in the original post.  We released v2.5.10 last week which includes some DRM-related fixes for older versions of Tizen.
Could you try updating to v2.5.10 and see if that changes things?  If you see the same issues, would you please try extending the Tizen 2 fix to all versions by editing lib/media/drm_engine.js and replacing isTizen2() with isTizen()?
I'm sorry we're not able to offer more at this time, but our only Tizen device is running Tizen 3 and is in a test lab that none of us have physical access to right now because of the COVID pandemic.

Thanks @joeyparrish ; I'll try with both v2.5.10, and a build that does not suppress the duplicate webkitneedkey events for all Tizen versions.

I tried play-out with both v2.5.10, and a patched version of 2.5.10 where I replaced isTizen2() with isTizen().
It seems to have effect, as both players are sometimes are to play when the original 2.5.6 version did not. But still, the fix is not consistent.
In the version where isTizen2 is replaced with isTizen I see it creates a lot of sessions that shortly after expire. The session list is then empty, but there is still one usable keyId. From thereon, the expiration time is reported to be 'Infinity' as there is no session left I guess.
	Apr 10, 2020 @ 10:06:03.736	network license request
	Apr 10, 2020 @ 10:06:03.735	network license request
	Apr 10, 2020 @ 10:06:03.736	network license request
	Apr 10, 2020 @ 10:06:03.740	network license request
	Apr 10, 2020 @ 10:06:03.739	network license request
	Apr 10, 2020 @ 10:06:03.739	network license request
	Apr 10, 2020 @ 10:06:03.739	network license request
	Apr 10, 2020 @ 10:06:03.739	network license request
	Apr 10, 2020 @ 10:06:03.736	network license request
	Apr 10, 2020 @ 10:06:03.740	network license request
	Apr 10, 2020 @ 10:06:03.739	network license request
	Apr 10, 2020 @ 10:06:03.739	network license request
	Apr 10, 2020 @ 10:06:03.739	network license request
	Apr 10, 2020 @ 10:06:03.739	network license request
	Apr 10, 2020 @ 10:06:03.736	network license request
        ...
	Apr 10, 2020 @ 10:06:03.740	network license response
	Apr 10, 2020 @ 10:06:03.739	network license response
	Apr 10, 2020 @ 10:06:03.739	network license response
	Apr 10, 2020 @ 10:06:03.737	network license response
	Apr 10, 2020 @ 10:06:03.740	network license response
	Apr 10, 2020 @ 10:06:03.739	network license response
	Apr 10, 2020 @ 10:06:03.739	network license response
	Apr 10, 2020 @ 10:06:03.739	network license response
        ...
       Apr 10, 2020 @ 10:06:03.740	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.738	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.740	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.739	expiration time	next expiration time for any EME session: 2020-04-09T00:32:45.000Z
	Apr 10, 2020 @ 10:06:03.739	session ids	["ksid9CFCBA60","ksid08AD0211","ksidC5622DCB","ksid9AB2C478","ksid8D210BDB","ksidDA089F6C","ksid870543EC","ksidC03CE403","ksid2BE9D800","ksid8651AB7A","ksidB67B3B47","ksidDAD6BB4B","ksidE89A1E93","ksidB72150B5","ksidA70F7AC4"]
	Apr 10, 2020 @ 10:06:03.739	keyIds	[]
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.738	verbose	"Updating manifest..."
	Apr 10, 2020 @ 10:06:03.740	expirationupdated	there is a change in the expiration times of an EME session
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.739	drmsessionupdate	the CDM has accepted the license response
	Apr 10, 2020 @ 10:06:03.738	verbose	"Session has expired" "ksid9CFCBA60"
	Apr 10, 2020 @ 10:06:03.740	verbose	"Session has expired" "ksid08AD0211"
	Apr 10, 2020 @ 10:06:03.739	network manifest	{"uri":"https://..."}
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksid9AB2C478"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksidC5622DCB"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksid870543EC"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksid8D210BDB"
	Apr 10, 2020 @ 10:06:03.740	verbose	"Session has expired" "ksidC03CE403"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksidDA089F6C"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksid2BE9D800"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksidB67B3B47"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksid8651AB7A"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksidB72150B5"
	Apr 10, 2020 @ 10:06:03.740	verbose	"Session has expired" "ksidE89A1E93"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksidDAD6BB4B"
	Apr 10, 2020 @ 10:06:03.739	verbose	"Session has expired" "ksidA70F7AC4"
        ...
        Apr 10, 2020 @ 10:06:03.740	expiration time	next expiration time for any EME session: Infinity
	Apr 10, 2020 @ 10:06:03.740	session ids	[]
	Apr 10, 2020 @ 10:06:03.740	keyIds	[["58c11f2039944d15950b39f38b7e3a23","usable"]]
	...
        Apr 10, 2020 @ 10:06:03.741	expiration time	next expiration time for any EME session: Infinity
	Apr 10, 2020 @ 10:06:03.740	session ids	[]
	Apr 10, 2020 @ 10:06:03.741	keyIds	[["58c11f2039944d15950b39f38b7e3a23","usable"]]

I'm not sure what the issue is, and we don't have access to a Tizen device at the moment.
From your logs, I would guess that the workaround where we have to create duplicate sessions may also be needed on Tizen 5, which is a real shame.  It's clearly a bug in Tizen's implementation of Widevine if that's needed at all, and I would have hoped Samsung could get it right by Tizen 5.
But something else strange is going on in that log, and it's not clear what.  Can you provide any details of your Widevine policy?  Key rotation periods, license durations, etc.  The more info you can provide, the better we may be able to guess at what's wrong.
Sadly, we still can't debug this directly.

@joeyparrish , some info on our Widevine policy:

There is no key rotation; the same key is used for both audio+video
The license valid for max. either 24 or 48 hours (or end of entitlement)

Hi, I've logged the session.expiration in drm_engine and it is 1 hour before actual date.

If the session expiration is in the past, then the session is expired and unusable.  There's nothing we can do to control this in JavaScript.  If the OS is doing the wrong thing with your license policy (such as misinterpreting the duration), you could try having your license server use a different policy for that OS to work around the bug.
The only other thing I can recommend is that you reach out to Samsung/Tizen for support to get them to fix the bug in their Widevine implementation.
Does this help?

Thank you for your quick response !
We are going to have a partnership with Samsung so we will work with them in order to address this issue. Unfortunately I'm not expecting any answer for TV models already on market.
I'll work with the team to find an other license policy.
However, patching drm_engine, by adding 1 hour to session.expiration works.

If that works, then it means the expiration time reported by the browser is not the actual expiration time understood by the CDM.  That's surprising, but perhaps it shouldn't be.  We've seen so many varied issues with Tizen's media and DRM implementations in each version of Tizen.
It's not possible for us to know that adding 1 hour will always be correct on Tizen 5.  For example, is it dependent on time zones?  Or Daylight Savings Time in the US and Summer Time in Europe?  Does it work this way for every policy, or only certain ones?  So I wouldn't feel confident about applying your workaround to all Tizen 5 devices for all applications.
However, expiration time is only one way we decide to close sessions for key rotation.  We also check for the "expired" key status.  Perhaps we could add a config to ignore the expiration time from EME.  You could configure Shaka Player this way on Tizen devices and avoid maintaining a fork.  Does that sound helpful?

Yes I totally agree we cannot arbitrary add one hour. We'll do more investigation and ask Samsung.
We'll let you know if we find a solution.
Adding an option to ignore expiration will not help that much as it will break our key rotation system.

How would it break key rotation?  Wouldn't we just close sessions based on the key status of 'expired'?

Oh ok, I'm not a DRM specialist. That could work then.
Issue #2252 is also requesting for a such option.

Ah, thanks.  I had forgotten about that issue.  Thanks!

If you're interested to contribute a PR for this, please let us know!
Since we have a plan to solve it through the new option, should we close this as a duplicate of #2252?

Yes you can close it.
We will let you know for a PR.

Thanks!


Install terminal-utilities as a dependency

I've tested it and it works

@yamboy1
Give me some hours, let me retry it once.
Cheers!

@yamboy1 I've tested it. It works fine now!
Merging it!
Cheers!


UDP streamer ignores socket write errors

The problem: Golang's json encoder stops encoding after a first Write() error. http://golang.org/src/encoding/json/stream.go?s=3688:3735#L156
In logspout case, this means that if a remote does not listen on the specified port, the stream will keep working, but will output nothing. The behavior of silently ignoring an error is basically bad. As a user I expect 2 possible scenarios:

ignore the errors: ignore socket write errors, and keep sending UDP datagrams anyway.
terminate the stream on error.

IMHO, the last scenario does not make much sense in case of UDP. If no one is listening on the other side, then just remove the route. But while the route is present, try to deliver the logs. So I've implemented the first one.

looks good, thanks!


Zend filter is a hard dependency

When calling PhpRenderer it cannot call render method for the https://github.com/zendframework/zend-view/blob/859542781565d582bb6d552f9a2ac8bca598ff61/src/Renderer/PhpRenderer.php#L519 have dependency on the Filter . The constructor doesn’t specifically mentions the Filter class is needed and throws error . https://github.com/zendframework/zend-view/blob/859542781565d582bb6d552f9a2ac8bca598ff61/src/Renderer/PhpRenderer.php#L145 .

Zend\Filter is not required when not using PhpRenderer. See https://github.com/zendframework/zend-view/pull/12 and https://github.com/zendframework/zend-view/issues/3#issuecomment-111167149

Closing for the rationale @danizord has stated.

To be frank I disagree with the statements expressed in the issues. It just brings frustration when people trying to integrate things. Sorry to say it.

@harikt I get your frustration; there's a reason the issue has been raised a number of times.
We're in an awkward position: if we don't have the dependency, we have some folks upset that it "does not work out of the box." If we add the dependency, we have some folks upset that they're forced to install a dependency they aren't using. We've chosen to err on the side of not providing as many dependencies, as we can document, "to use this, you must also require this in your project;" we cannot document removing a dependency, as it's not possible.

@harikt I think #25 fixes your issue.