feat: allow styling the IconStart/IconEnd of a FluentButton via the Color property

🙋 Feature Request
Using the following elements:
  <FluentButton Title="Sign in" Appearance="Appearance.Stealth">
      <FluentIcon Value="@(new Icons.Regular.Size20.ShieldLock())" Color="Color.Neutral" Title="Sign in" />
  </FluentButton>
  <FluentButton Title="Sign in" Appearance="Appearance.Stealth" Color="Color.Neutral"
                IconStart="@(new Icons.Regular.Size20.ShieldLock())">
  </FluentButton>

yields the following resut:

🤔 Expected Behavior
The Color property in the FluentButton using the IconStart does not change the color of the icon within. So in order to properly style the icon of any buttons, you actually need to use a full nested FluentIncon, making the usage of IconStart/IconEnd much less useful.
😯 Current Behavior
Icon is rendered with its default color?
🔦 Context
Perhaps a separate IconColor property is necessary?

FluentButton.Color is used to define the color of the button text,
but not the color of the icons. You can use WithColor(Color.Neutral) for this.
<FluentButton Title="Sign in" Appearance="Appearance.Stealth">
    <FluentIcon Value="@(new Icons.Regular.Size20.ShieldLock())" Color="Color.Neutral" Title="Sign in" />
</FluentButton>
<FluentButton Title="Sign in" Appearance="Appearance.Stealth" Color="Color.Neutral"
              IconStart="@(new Icons.Regular.Size20.ShieldLock().WithColor(Color.Neutral))">
                                                             // ^^^^^^^^^^^^^^^^^^^^^^^^^^
</FluentButton>


Missing LICENSE File

The source code refers to a LICENSE file in DisableCsrfExtension.php, however there is no LICENSE file in the repository.

Correction, license is here:
https://github.com/dunglas/DunglasAngularCsrfBundle/blob/master/Resources/meta/LICENSE


[Event Request] codeunit 378 "Transfer Extended Text" - OnDeleteJobPlanningLinesOnAfterSetFilters

Describe the request
Could you please add the following event?
local procedure DeleteJobPlanningLines(var JobPlanningLine: Record "Job Planning Line"): Boolean
var
    JobPlanningLine2: Record "Job Planning Line";
begin
    JobPlanningLine2.SetRange("Job No.", JobPlanningLine."Job No.");
    JobPlanningLine2.SetRange("Job Task No.", JobPlanningLine."Job Task No.");
    JobPlanningLine2.SetRange("Attached to Line No.", JobPlanningLine."Line No.");
    //>>Change for Event
    OnDeleteDeleteJobPlanningLinesOnAfterSetFilters(JobPlanningLine2, JobPlanningLine);
    //<<Change for Event
    JobPlanningLine2 := JobPlanningLine;
    if JobPlanningLine2.Find('>') then begin
        repeat
            JobPlanningLine2.Delete(true);
        until JobPlanningLine2.Next() = 0;
        exit(true);
    end;
end;

[IntegrationEvent(false, false)]
local procedure OnDeleteJobPlanningLinesOnAfterSetFilters(var ToJobPlanningLine: Record "Job Planning Line"; FromJobPlanningLine: Record "Job Planning Line")
begin
end;

Additional context
We need this event to delete custom records similiar to the event OnDeleteSalesLinesOnAfterSetFilters.
Internal work item: AB#535524

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 19932.


Unable to handle ratelimited

while True:
  try:
    response = send_slack_message(channel, message)
  except SlackApiError as e:
    if e.response["error"] == "ratelimited":
      # The `Retry-After` header will tell you how long to wait before retrying
      delay = int(e.response.headers['Retry-After'])
      print(f"Rate limited. Retrying in {delay} seconds")
      time.sleep(delay)
      response = send_slack_message(channel, message)
    else:
      # other errors
      raise e

This is helpless it seems,
**During handling of the above exception, another exception occurred:**

Traceback (most recent call last):
  File<EMAIL_ADDRESS>line 932, in _bootstrap_inner
    self.run()
  File<EMAIL_ADDRESS>line 870, in run
    self._target(*self._args, **self._kwargs)
  File "dpxbot.py", line 146, in process_message
    self.hello(message)
  File "dpxbot.py", line 189, in hello
    response = self.send_slack_message(message, slack_ts, user_id, channel_id)
  File "dpxbot.py", line 212, in send_slack_message
    rep = self.web_client.chat_postMessage(
  File "/usr/local/lib/python3.8/site-packages/slack/web/client.py", line 1041, in chat_postMessage
    return self.api_call("chat.postMessage", json=kwargs)
  File "/usr/local/lib/python3.8/site-packages/slack/web/base_client.py", line 150, in api_call
    return self._sync_send(api_url=api_url, req_args=req_args)
  File "/usr/local/lib/python3.8/site-packages/slack/web/base_client.py", line 241, in _sync_send
    return self._urllib_api_call(
  File "/usr/local/lib/python3.8/site-packages/slack/web/base_client.py", line 369, in _urllib_api_call
    return SlackResponse(
  File "/usr/local/lib/python3.8/site-packages/slack/web/slack_response.py", line 194, in validate
    raise e.SlackApiError(message=msg, response=self)
slack.errors.SlackApiError: The request to the Slack API failed.
The server responded with: {'ok': False, 'error': 'ratelimited'}

Any help would be appreciated.

According to the stacktrace, your code seems to be using threading. As ratelimited errors are raised per API endpoint per app per workspace, your app is unable to simultaneously call the same endpoint once after you’ve got the error. This means you app has to completely stop calling the API while waiting for the duration of retry-after. The example in the doc works only when you run it in a single thread.

@seratch Makes sense!
Any help in handling multithreading? We would like to test the clients with the maximum load (50 requests at a time for an instance) to design the scalable systems.

A common solution is to have a queue with a good consideration of rate limits. Java SDK’s async client has such a mechanism: https://slack.dev/java-slack-sdk/guides/web-api-basics#rate-limits

This block made us better to handle the issue,
attempt = 1
        for _ in range(0,2):
            while True:
                try:
                  print(f"Attempt: {attempt} --- " + str(message['payload']['event']['text']))
                  sleep(1)
                  response = self.send_slack_message(message, slack_ts, user_id, channel_id)
                  attempt += 1
                  break
                except SlackApiError as exception:
                    attempt += 1
                    # The `Retry-After` header will tell you how long to wait before retrying
                    wait_time = float(exception.response.headers["Retry-After"])
                    print(f"Rate limited. Retrying in {wait_time} seconds")
                    time.sleep(wait_time)
                    continue
            attempt = 1
            break

@rcsrao Would you mind closing this issue now? I think your question has been answered.

As I've already provided an answer here, please allow me to close this issue now. Feel free to write in or reopen as necessary.


Make a financial report

Make 2 financial reports: 1 for December 2022 and one for Jan, Feb, Mar 2023. Like this our financial reports will be in sync with common accounting quarters.
Also write a checklist in the wiki how to make a financial report.

Here is the last financial report: Finanicial Report Sep, Oct, Nov 2022 - report.pdf in https://github.com/maplibre/maplibre/discussions/146
I think we should publish the report on our website instead of in meeting notes.

Steps:

Copy excel file of last financial report
Go to https://opencollective.com/maplibre/transactions, click "Download CSV" on the right
Copy-paste the contents of the CSV into the all-transactions tab of the financial report spreadsheet
Select transactions that happened after the last financial report
Split transactions into income and expenses
Take the final balance of the General account of the last financial report and put it into the initial balance of the new financial report, same for balance of Bounties account.
Book income transactions to the general account, and to the bounties account where applicable according to the MapLibre Sponsorship Program
Book expenses to the general account. This includes all opencollective transfer fees. Only bounty payments should be booked on the bounties account as expenses.

More on expenses:
In the income tab, sum up the paymentProcessing column to find out how much we paid for payment processing. Book this to the general account as expenses.

Finanicial Report Nov, Dec 2022.xlsx
Finanicial Report Nov, Dec 2022 - report.pdf

The Q1 financial report starts on 2023-01-01 and ends on 2023-03-31. In principle, the March maintainer payments only get in on 2023-04-16, but it gets too complicated if we start tracking this. Instead, I propose to keep the payment date as the relevant date for the quarterly financial reports...

https://github.com/maplibre/maplibre.github.io/pull/157


Looks like "next export" creates/export static pages on the "out" folder and I want to deploy it to the nginx that's the right way to deploy it in the production server? or Am I missing anything here?, BTW we are using nodejs/mongodb for api/backend. I'm don't know why we have "next build" and what is the difference between "next export" and "next build".

Question about Next.js
Questions should be posted on https://spectrum.chat/next-js

See issue template posted 👍


Acer c710-2845 error in update

Hello, after trying to install the start-os of start9 in this device that ran for a long time with the dietpi, there was an error and the machine only starts via usb. I tried to fix this by updating the firmware, but got the following error:
...
Unable to read current firmware; cannot continue:
flashrom dc8caac9-dirty on Linux 6.2.8-arch1-1 (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
coreboot table found at 0xacf6a000.
Found chipset "Intel NM70".
Enabling flash write... Error accessing ICH RCRB, 0x4000 bytes at 0x00000000fed1c000
/dev/mem mmap failed: Operation not permitted
FAILED!
FATAL ERROR!
Error: Programmer initialization failed.

duplicate of #277 -- see the workaround listed there

don't work, i tried.

/dev/mem mmap failed: Operation not permitted

means your kernel is locked down / not allowing flashrom access. Boot a permissive kernel like Ubuntu and update from there using the WA in the linked issue

Thanks @MrChromebox , works fine now.
Congratulations on your brilliant project!


hashicorp vault

Could this in theory support Hashicorp Vault?

Yes it could!  We'd love a PR to add support :)

@bitsofinfo would you like to do a PR to add support for Vault?

I don't have the time currently, was just curious if it would be possible

Been working on this over here:  https://github.com/tunein/kubernetes-external-secrets/tree/vault-backend
Let me know if you want me to open up a PR to get some more eyes looking at this.  It's working but I'm sure some optimizations can be made.

Nice work @bboerst :clap: I think it'd be great to get this opened as an MR to get some traction and get people reviewing. Are there any particular points in your implementation you feel need extra scrutiny?
I've had a look over it, and it's looking good to me :ok_hand:

@bboerst please open a PR - we'd love to get this integrated


Define v1 Site map

We need to define what the initial set of pages for the mid-December launch will be and outline what content is needed for each.
In order to do this, we should:

[ ] Document the audience(s) we're catering for
[ ] Review previous research the team has done on DS site content & IA
[x] Research what other DS sites do
[ ] Document what we want people to do on our site
[x] Produce an initial sitemap for the team to review
[x] Run a workshop where the initial sitemap is presented to the team for review, tweaking (if needed) and approval

Relates to: #483

Adding a copy of my draft outline here for easier reference. These are some pages and content for each that I think we ought to consider. However, this is very much a starting point to spark discussions and be refined. (Items that are likely to be out of scope for the V1 website are ~stricken out~).
Homepage
Must clearly convey the following information to visitors:

What is this?

It's a design system for J.P. Morgan's (JPM) Corporate & Investment Banking (CIB) business. Enables accessible, coherent, on-brand user experiences. Faster time to market. etc. etc. - the usual DS spiel.

Who is this for?

It's for JPM staff and external partners who are designing and/or building digital experiences that will be JPM-branded and used by CIB staff or clients (double-check this is correct)

How do I use it?

Links to: Overview, getting started, components, support, etc.

Overview
High-level overview of what this DS provides and how it hangs together

The key parts (what does it give you)

This docs site
React component lib
Figma lib (will this be public by December? If not, maybe omit it for now or say "coming soon"

Features (why should you care?)

Small footprint (due to minimal 3rd party deps)
4x densities + light/dark modes
Striving for WCAG 2.1 AA compliance
Theming
Strong pedigree (see history) & battle-hardened design (since it's basically the same as UITK's design - see next point)

History (trust us, we know what we're doing!)

Successor to JPM's internal-only "JPM UI Toolkit" (aka "UITK") - 4.5yrs old & used across 1200 apps

Getting started

As a developer

Pre-requisites:

Know-how:
HTML, CSS & JS fundamentals.
React fundamentals.
Accessibility fundamentals.

Tech: Node vXX + your favourite IDE

Project setup
NPM packages to install
Setting up toolkit provider at root of your app
Example of importing some components and links to component docs for further reading

As a designer (unless this is just "coming soon")

Pre-requisites:

Familiarity with Figma
Interaction design fundamentals
Accessibility fundamentals

Library setup

How to find and use our library/-ies in Figma

~As a team~

~How to pitch using Odyssey to your superiors~
~Advice on how design & dev are expected to collaborate using Odyssey?~
~Advocate regularly upgrading as new Odyssey versions come out?~
~How to keep up-to-date? (do we need an RSS feed or a public mailing list perhaps?)~
~Where to get help, request features, make contributions, raise bugs, etc. → link to help page~

Components
Link over to Storybook for now.
We probably need to tidy up the IA in Storybook though so that it doesn't overlap / conflict with what's in this site
Support
How & where to:

Ask for help
Report bugs
Suggest features
Discuss contributions

Likely all of these will link to various places on Github (e.g. specialised issue templates)
~News~
~Some kind of feed for announcements (new releases, etc.) and blog posts. Could maybe use an external service like Medium for starters and integrate properly into our site at a later date?~

Need content for:

Universal principles

Workshop scheduled for Mon, 24 October to review initial sitemap mockup

James and Sion working on this to share for Monday's (24 Oct) regroup

v1 sitemap was agreed at a team workshop today. We will launch with the following 4 pages:

Homepage

Need to quickly convey what this site is about (i.e. it’s JPM’s design system)
Drive people towards the other sections of the site (getting started, components, etc.)
Needs to elaborate a bit more on what, exactly, the Odyssey DS provides and “sell” it a bit (make people want to use it or migrate to it)

Getting started

Needs to explain to designers and devs, what steps they each need to take in order to start using Odyssey for a project (e.g. for designers that might be the steps to find the relevant Figma libraries. For devs it might be the packages they need to install and any one-off boilerplate code/config they need to add like importing CSS and wrapping their app in a )
For now, we’re assuming this will be a single page. However, once the content’s been produced, if it’s too long for a single page, we may split it into 2 – one for design and one for dev

Components

We will include an overview page within our site listing out the available components (potentially as a table or something like that), each with:

Link to corresponding docs page in Storybook

We will however review the ordering and labelling of pages in Storybook’s left-hand nav and, if needed, tweak it so that users coming from the site can easily find the published components and not get lost in or confused by anything else

Status (e.g.: in core – ready to use, in labs – WIP, use at your own risk, not started)

This includes doc pages for non-UI “components” like
Actual per-component documentation (incl. per-component design documentation) will remain in Storybook for the time being. We’ll just be linking across for now

Contributing

Likely to mostly be links to specialised Github issue templates
Explain how to give feedback on Odyssey, where to raise bugs, request features etc.

Note: The page titles above are indicative for now. E.g. if the team decided that “How to contribute” is a more appropriate title than “Contributing”, we’d of course go with that.

The audience(s) we are catering for are:

Primary audiences: JPM CIB staff

UI designers
UI developers
Management roles involved in commissioning or creating apps

Secondary audiences: External people

Agencies / consultancies working on UIs for JPM CIB
Non-JPM organisations that are interested in using this DS for their own ends (e.g. as a basis for their own DS)
Design / dev practitioners looking for design system examples or inspiration

I think this is an solid overview.
On Primary Audiences - call out project/product managers (essentially...mgt roles as equates to influencing the backlog of work - which is where design system adoption needs to be prioritized).
We should also think a little about how we want people to...feel? As in creating enthusiasm and engagement.

Thanks for the feedback @shinytoyrobots. I've updated the 3rd bullet "primary audience" as you've suggested. Hope it's OK.


can you add a apprtc docker

Browsers and versions affected
Description
Steps to reproduce
Expected results
Actual results

rt

for test

That's definitely worth investigating. Cannot give you an ETA.

I also want this because the manual installations seem a bit complicated.
But there are already 3 apprtc docker images, this one being the latest one updated 9 months ago
https://hub.docker.com/r/benjamin94/apprtc-docker/
@izouxv have you tried this? is it not working?

Keep in mind AppRTC is meant to run on cloud hosted App Engine, not using dev_appserver.py on a VM (the hint is in the name that its not for production).


[opengl] build failure - Windows SDK path hardcoded

Host Environment

OS: Microsoft Windows 10 1903 (build: 18362.356)
Compiler: Microsoft Visual Studio 2019

To Reproduce
Steps to reproduce the behavior:
./vcpkg install opengl
Failure logs
Building package opengl[core]:x64-windows...
CMake Error at ports/opengl/portfile.cmake:20 (message):
  Cannot find Windows 10.0.17763.0 SDK.  File does not exist: C:\Program
  Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64\OpenGL32.Lib
Call Stack (most recent call first):
  scripts/ports.cmake:91 (include)

Error: Building package opengl:x64-windows failed with: BUILD_FAILED
Please ensure you're using the latest portfiles with `.\vcpkg update`, then
submit an issue at https://github.com/Microsoft/vcpkg/issues including:
  Package: opengl:x64-windows
  Vcpkg version: 2019.09.12-nohash

Additional context
The portfiles for OpenGL hardcode the Windows 8 and 10 SDK paths:
    vcpkg_get_program_files_32_bit(PROGRAM_FILES_32_BIT)
    vcpkg_get_windows_sdk(WINDOWS_SDK)

    if (WINDOWS_SDK MATCHES "10.")
        set(LIBGLFILEPATH  "${PROGRAM_FILES_32_BIT}\\Windows Kits\\10\\Lib\\${WINDOWS_SDK}\\um\\${TRIPLET_SYSTEM_ARCH}\\OpenGL32.Lib")
        set(LIBGLUFILEPATH "${PROGRAM_FILES_32_BIT}\\Windows Kits\\10\\Lib\\${WINDOWS_SDK}\\um\\${TRIPLET_SYSTEM_ARCH}\\GlU32.Lib")
        set(HEADERSPATH    "${PROGRAM_FILES_32_BIT}\\Windows Kits\\10\\Include\\${WINDOWS_SDK}\\um")
    elseif(WINDOWS_SDK MATCHES "8.")
        set(LIBGLFILEPATH  "${PROGRAM_FILES_32_BIT}\\Windows Kits\\8.1\\Lib\\winv6.3\\um\\${TRIPLET_SYSTEM_ARCH}\\OpenGL32.Lib")
        set(LIBGLUFILEPATH "${PROGRAM_FILES_32_BIT}\\Windows Kits\\8.1\\Lib\\winv6.3\\um\\${TRIPLET_SYSTEM_ARCH}\\GlU32.Lib")
        set(HEADERSPATH    "${PROGRAM_FILES_32_BIT}\\Windows Kits\\8.1\\Include\\um")
    else()
        message(FATAL_ERROR "Portfile not yet configured for Windows SDK with version: ${WINDOWS_SDK}")
    endif()

This assumes that the Windows SDK is always installed in the default path, which might not always be the case (on my machine, it was installed into D:\Program Files (x86)\Windows Kits\10, hence the error).
From a quick search, the issue seems to also affect the wincrypt and winsock2 ports.
A possible fix (at least for the Windows 10 SDK) would be to have CMake read the installation path from HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots (value name: KitsRoot10) and to use it instead of the hardcoded one - I can draft a PR if needed.

@AlessandroMenti, thanks for reporting this issue, could you summit a PR for this?

Do you also know how to solve it in qmake's syntax/*.prl files (#7675)

cmake
get_filename_component(WINDOWS_KIT_10_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot10]" ABSOLUTE CACHE)

C:\Program Files (x86)\Windows Kits\10\

get_filename_component(WINDOWS_KIT_81_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot81]" ABSOLUTE CACHE)
or
7.1
get_filename_component(WINDOWS_KIT_71_PATH "[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v7.1;InstallationFolder]" ABSOLUTE CACHE)
8.0
get_filename_component(WINDOWS_KIT_80_PATH "[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.0;InstallationFolder]" ABSOLUTE CACHE)
8.1
get_filename_component(WINDOWS_KIT_81_PATH "[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.1;InstallationFolder]" ABSOLUTE CACHE)
10.0
get_filename_component(WINDOWS_KIT_10_PATH "[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0;InstallationFolder]" ABSOLUTE CACHE)

C:\Program Files (x86)\Windows Kits\10\

to locate system libraries) CMAKE_STANDARD_LIBRARIES
it is enough to include them in the build system, in the CMAKE parameters
list(APPEND CMAKE_STANDARD_LIBRARIES ... ?

https://cmake.org/cmake/help/latest/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.html

set a CMAKE_WINDOWS_KITS_10_DIR environment variable

look for Windows 10 SDKs in a custom location

@PhoebeHui: of course!
@Neumann-A: I'll have to check that issue first.
@Voskrese: thanks for the inputs!
I've started working on a PR for this, see #8329 - I'll improve it in the next days.

https://github.com/microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_get_windows_sdk.cmake
# Returns Windows SDK number via out variable "ret"
function(vcpkg_get_windows_sdk ret)
    set(WINDOWS_SDK $ENV{WindowsSDKVersion})
    string(REPLACE "\\" "" WINDOWS_SDK "${WINDOWS_SDK}")
    set(${ret} ${WINDOWS_SDK} PARENT_SCOPE)
endfunction()

$ENV{WindowsSDKVersion}
open C:\Program Files (x86)\Microsoft Visual ...\...\...\Common7\Tools\vsdevcmd\core\winsdk.bat
set WindowsSdkDir=
set WindowsLibPath=
set WindowsSDKVersion=
set WindowsSDKLibVersion=
set WindowsSdkBinPath=
set UCRTVersion=
set UniversalCRTSdkDir=
set WindowsSDKVerBinPath=

version - vcpkg_get_windows_sdk_version(WINDOWS_SDK)
function(vcpkg_get_windows_sdk_version ret)
    set(WINDOWS_SDK $ENV{WindowsSDKVersion})
    string(REPLACE "\\" "" WINDOWS_SDK "${WINDOWS_SDK}")
    set(${ret} ${WINDOWS_SDK} PARENT_SCOPE)
endfunction()

echo %WindowsSDKVersion%
10.0.17763.0\

dir - vcpkg_get_windows_sdk_dir(WINDOWS_SDK)
function(vcpkg_get_windows_sdk_dir ret)
    set(WINDOWS_SDK $ENV{WindowsSDKVersion})
    string(REPLACE "\\" "" WINDOWS_SDK "${WINDOWS_SDK}")
    set(${ret} ${WINDOWS_SDK} PARENT_SCOPE)
endfunction()

echo %WindowsSDKDir%
C:\Program Files (x86)\Windows Kits\10\

I think the best approach here would be to run a CMake build that simply performs something like
project(opengl NONE)
find_library(OGL opengl32)
install(FILES ${OGL} DESTINATION lib)

This should correctly find opengl from whichever windows sdk we're using to configure cmake projcets.

This should correctly find opengl from whichever windows sdk we're using to configure cmake projcets.

Probably needs an opengl selector somehow since opengl32 from the windows sdk is not the only possibility if mesa is installed


feat: Show graph for file:// + optional isolation

@izelnakri (context) was looking for a Deno graphviz tool which can be used locally, and noticed that I treat all local files as just one file:// 'module':

So I decided to use a better default of treating each directory as a module: (Note that deps.ts is special cased to prevent false-positive of cycles when subdirectories used the parent's deps.ts)

And also added an --isolate-files CLI flag to make one node per file:

Hoping this proves useful now.

@danopia this is awesome, thanks for working on it! I particularly liked the different coloring between std, dep, and project files. Also having a list of directories in each dependency addition looks great! However I was thinking of a more general/customizable CLI interface. What do you think of this?
$ deno-graph test/some_module.ts # shows all files in the graph(including files in external dependencies)
$ deno-graph test/some_module.ts group-by=module # external dependency origin summary + file graph for internal files
$ deno-graph test/some_module.ts group-by=origin  # current behavior: group by external dependencies, and a single node for the internal.

This previous suggestion I made seems lacking some consideration as well. Idea I had is for the cli to operate on input files rather than on a project just like any test runner.
It seems there are 4 spheres and 2 toggles. 4 spheres. 4 spheres:

std,
external dependency,
input targets
input folder (could be ignored and ${CWD}/deps.ts chosen if no target file provided)
project folder(could be ignored and . could refer to the input folder reference).

2 toggles:

Display the graph by folder summary(single node)
Display the graph by file summary(many nodes connected)

Based on these we can group the spheres by toggles and if no flag provided, make it as detailed as possible:
$ deno-graph test/some_module.ts  test/some_module_2.ts # equivalent to --group-std-by=file --group-deps-by=file --group-project-files-by=file
$ deno-graph test/some_module.ts test/some_module_2.ts  --group-std-by=folder --group-deps-by=folder --group-project-files-by=file

So I suggest 3 optional flags and 2 toggles for these flags: file or folder. What do you think?

Thanks for the feedback. I think it's also important - for this project's goal at least - to consider how new functionality would be useful on the web interface as well. I have #3 open to track this, with the example of clicking one box -> a view where that specific package is exploded into its constituent files.
Grouping into file / std / third-party makes some sense, but unfortunately there's a longer list of known registries and also when you are looking at a published module via the web interface, even the main module would be considered a third-party dependency by current logic.
So given these concerns I think bucketing might not be so simple, but I agree that explicit grouping settings would be a useful feature and something worth designing. Currently I only have an 'isolated std' flag which would be easily expressed using your example flags.
Not super related, but I've also considering Graphviz subgraphs for any module which is 'exploded' but haven't had a proper chance to see how applicable the feature would be for me.

but unfortunately there's a longer list of known registries and also when you are looking at a published module via the web interface, even the main module would be considered a third-party dependency by current logic.

Yes, coloring logic could be separated as a different feature/flag and could perhaps even accept a optional config file/reference(package.json) for this if needed.
Also subgraphs could be additional nice step in the future/release bump indeed.
Let me know if I could help in anyway, thanks again for working on this!


handle exception during reconstitution of toggle

currently if a repository reconstitutes a feature without a target type, target type of nil, or target type of NOT_SET it raises an exception.
We should catch this exception so that evaluation does not break the apps using Togls in production and other environments.
Should explore toggle reconstitution process for any areas where we need to handle exceptions correctly.

This has been merged in. Closing...


.Net Core 3.1 compatible with .NetStandard 2.0 ?

Issue Title
In order to reference a dotnet core library in a consuming .net framework project I set the following TargetFrameworks in the project file of .net core library.
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netcoreapp3.1;netstandard2.0</TargetFrameworks>
  </PropertyGroup>
</Project>

When I build the .net core library I get:

Severity	Code	Description	Project	File	Line	Suppression State
Error	CS1061	'string[]' does not contain a definition for 'ToHashSet' and no accessible extension method 'ToHashSet' accepting a first argument of type 'string[]' could be found (are you missing a using directive or an assembly reference?)	Utils (netstandard2.0)

Related code:
 System.Environment.GetEnvironmentVariable(variableName, scope).Split(';').ToHashSet<string>();
As far as I understood, I have to compile the project to .NetStandard 2.0 in order to be consumable by .net fx > v4.6.1 project ?!
Is this assumption right?

I guess I have to change the code to make it compatible....


WIP: Add TOML cheatcode support

Pending the merge of https://github.com/foundry-rs/foundry/pull/7317
Implements the stdToml abstraction mirroring stdJson

Make sure to also run the scripts/vm.py file in this repo to automatically update Vm.sol with the new cheats

Make sure to also run the scripts/vm.py file in this repo to automatically update Vm.sol with the new cheats

Thanks @mds1! I've ran the script. It also includes the missing cheatcodes requested in #519 and more.
This PR is now ready for review :)


Not destroying VTI interfaces when booting before creating a new one. Fixes #10842

[X] Redmine Issue: https://redmine.pfsense.org/issues/10842
[X] Ready for review

During the booting process, we call interface_ipsec_vti_configure() from interfaces.inc multiple times :

From interfaces_configures() (once)
From vpn_ipsec_configure() (up to twice)
When create the VTI interface we destroy it beforehand if it exists AND the system is not booting. That results in interface creation attempts when it already exists. An error ensues :

rc.bootup: The command '/sbin/ifconfig 'ipsec1000' create reqid '1000'' returned exit code '1', the output was 'ifconfig: create: bad value'
And this command takes around 20s to return this error on our hardware which is a long time, especially during the booting process.

This needs a fair amount of testing before merging. I distinctly remember the boot time check being added to prevent another issue, but it's been a while and the git history didn't offer any clues since it's been there since VTI was originally imported.


HDDS-11457. Internal error on S3 CompleteMultipartUpload if parts are not specified

What changes were proposed in this pull request?
When submitting CompleteMultipartUpload request without parts, CompleteMultipartUploadRequestUnmarshaller encounters SAXParseException, which it converts to error response with the default 500 Internal Server Error code.  We can use the more specific InvalidRequest code instead.  Similar problem is fixed in two other unmarshallers.  Additionally, we can avoid the SAXParseException by checking for empty input and returning more specific error message (You must specify at least one part) for empty CompleteMultipartUpload request.
https://issues.apache.org/jira/browse/HDDS-11457
How was this patch tested?
Tweaked existing robot test to verify this case.
CI:
https://github.com/adoroszlai/ozone/actions/runs/10846339715

Thanks @ivandika3 for the review.


Procedure header / summary

Describe the bug
When hovering over a function, I do not see the function summary
To Reproduce
Following code:
codeunit 65123 funcHeader
{
    trigger OnRun()
    var
        recipients: List of [Text];
    begin
        recipients.Add('no@ema.il'');
        Smtp.CreateMessage('sender'<EMAIL_ADDRESS>recipients, 'hello world', 'bye world');
    end;
}

Expected behavior
When I hover my mouse over CreateMessage, I expect to see the following header:
    /// <summary>
    /// Creates the email with the name and address it is being sent from, the recipients, subject, and body.
    /// This overload always uses HTML formatting for the body text.
    /// </summary>
    /// <param name="FromName">The name of the email sender</param>
    /// <param name="FromAddress">The address of the default sender or, when using the Send As or Send on Behalf functionality, the address of the substitute sender</param>
    /// <param name="Recipients">The recipient(s) of the mail</param>
    /// <param name="Subject">The subject of the mail</param>
    /// <param name="Body">The body of the mail</param>

Screenshots
The only thing we see is the procedure definition:

5. Versions:

AL Language: 5.0.280447

Business Central: 16.1 something

Hi! The AL language extension does not have support for documentation strings at this point in time, but it is planned for a future release. I will close this as by-design.


TypeError: argmax() got an unexpected keyword argument 'output_type' in tensorflow1.2

Hello, I encountered TypeError error when I was running the program.
File "/home/kjm/Desktop/inpainting/GatedConvolution/inpaint_ops.py", line 512, in contextual_attention
offset = tf.argmax(yi, axis=3, output_type=tf.int32)
TypeError: argmax() got an unexpected keyword argument 'output_type'
I used python3.6+tensorflow1.2.And what should I do to correct this error?
Thank you very much for your help.

Thank you for your post. We noticed you have not filled out the following field in the issue template. Could you update them if they are relevant in your case, or leave them as N/A? Thanks.
Have I written custom code
OS Platform and Distribution
TensorFlow installed from
TensorFlow version
Bazel version
CUDA/cuDNN version
GPU model and memory
Exact command to reproduce
Mobile device

I am very sorry that I did not express the basic configuration of the computer clearly.
I downloaded others repository from github, but I made a mistake on my computer. And this statement just called argmax() function.
-----------------This is the error statement -----------------------
offset = tf.argmax(yi, axis=3, output_type=tf.int32)
TypeError: argmax() got an unexpected keyword argument 'output_type'
-----------------This is the error statement -----------------------
And my platform: Ubuntu16.04LST, CUDA8.0, cudnn5.1, python3.6, tensorflow1.2(I installed Tensor Flow on the official website and downloaded the .whl file)
GPU: TITAN X(Pascal)
Mem: 64GB
Thank you for your patient answer.

Nagging Assignee @bignamehyp: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

Nagging Assignee @bignamehyp: It has been 29 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

I'm having the same issue, please someone solve it ;(

solved it, replace
tf.argmax(yi, axis=3, output_type=tf.int32)
with
tf.cast(tf.argmax(yi, axis=3) ,tf.int32)

Closing as this is resolved


Update ac.AccessController SPI and rename checkGetProjectSecrets method with checkGetProjectSecretList

This PR changes ac.AccessController SPI and renames checkGetProjectSecrets method with checkGetProjectSecretList according to https://github.com/treasure-data/digdag/pull/1040.

@yoyama thanks! merging..


Remote localhost development does not work without https on iOS

Describe the bug
When developing locally using my iPhone, I cannot connect to Metamask
sorry I do not have time right now to document everythink, I am hacking at ETH Lisbon.
You can find instructions about how to run the webapp here https://github.com/fibo/pom-eth-lisbon/tree/main/frontend#readme
use command npm run dev then connect with an iPhone Safari.

SDK Version

Version [e.g. v1.9.8 or 2.0.0-alpha.2]

To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

OS: [e.g. iOS]
Browser [e.g. chrome, safari]
Version [e.g. 22]

Smartphone (please complete the following information):

Device: [e.g. iPhone6]
OS: [e.g. iOS8.1]
Browser [e.g. stock browser, safari]
Version [e.g. 22]

Additional context
Add any other context about the problem here.

@fibo https://github.com/fibo/pom-eth-lisbon 404s for me, is it private?

@IljaDaderko now it is public
I also explained the issue to your collegue here at ETH Lisbon. He said that it could be Swift related or something like that (sorry I did not sleep, hacked all the night)
It is easier to reproduce it with this fresh repo https://github.com/fibo/hello-walletconnect
just removing HTTPS=true in npm start script.

@fibo ty for the repro. I think debugging and fixing this might take a while (sorry for the blocking issue on your hackathon project). I'm relatively confident that it might be something related to webpack and how it loads dev scripts up on localhost in iPhone. My best suggestion for hackathon would be something like this:
Can you try this in a non create-react-app environment i.e. maybe use vite with its react plugin, they have example of this here https://stackblitz.com/edit/vitejs-vite-u2dikj
I believe this could be a quick change as both are relatively similar in setup. Since vite is not using webpack under the hood, this might work on localhost / iPhone.

After digging deeper into this, https error seems to be related to web tools, I was able to work on this remotely in nextjs example. Also works on simulator when you access your localhost via <IP_ADDRESS>


Rails 6.1

Coverage decreased (-0.003%) to 84.615% when pulling 9f1f4bc1d29054bf7d8f66a3d575c7ec69287161 on pr-rails-6.1 into 617308b201cccb5a3c3e42ad1fe0586763565a88 on master.


Add a resource to create tags on Environment Versions

Hello!

Vote on this issue by adding a 👍 reaction
If you want to implement this feature, comment to let us know (we'll work with you on design, scheduling, etc.)

Issue details

Affected area/feature

Completed with PR https://github.com/pulumi/pulumi-pulumiservice/pull/292


Use MSALjs for vscode.dev

We have received reports around Conditional Access where users are unable to use this route do to our existing Microsoft auth support in vscode.dev.
We should consider enabling MSAL-based auth for this route.
Upsides:

Conditional Access will be happy

Downsides:

Sessions can only last 24hrs before the page needs to be refreshed

Since the downsides are being seen more and more as a feature request these days, we should probably just make this change...

renamed for all of vscode.dev since we need to do this for all

Thanksgiving and confirming myself with this email.


bug Merge transient rowset state to rowset

Proposed changes
Merge transient rowset state to rowset.
Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall

run buildall

run buildall

run buildall


[Macros] Remove the ExtensionMacros experimental feature flag.

This change removes the ExtensionMacros experimental feature identifier and diagnoses @attached(conformance) attributes as being replaced by @attached(extension, conformances: <#Protocol#>).
Resolves rdar://112548321

@swift-ci please smoke test

https://github.com/apple/swift-syntax/pull/1929
@swift-ci please smoke test


Support library 22.2

I updated to the new support library and implemented the following thins using the new features of the Design Library:

Floating Action Button (3rd party library not needed anymore) -> The icons on the button got a little smaller, don't know if we should restore that
Collapsing toolbar in SearchResultDetailFragment (nicer animation, but no support for writing the title in 2 lines anymore)

Would you mind updating the .travis.yml for the new build tools version? :)

I suspect the SDK package is named build-tools-23.0.0-preview

It doesn't seem to be named like this. Maybe it is not available on Travis yet?

Uhm. Do we need them already?

I don't remember if I needed to use it because it didn't compile otherwise
or because Android Studio 1.3 prompted me to update it.

The old version seems to work too, so I downgraded it now.


How to chage border color of pie chart

[x] I have searched the issues of this repository and believe that this is not a duplicate.

Reproduction link

Steps to reproduce
Is it possible to change color of the borders inside the Pie Chart, they are white even in the 'dark' theme.

Environment
Info

g2
4.1.18

System
-

Browser
-

You can use pieStyle to set the stroke color of the border:
  pieStyle:{
    stroke: 'red'
  }


Bump wa web version

Fixes issue mentioned in #571

Fixes issue mentioned in #571

Update the protobuf.


Add new 8BitDo Zero 2 gamepad for Linux

map's wrong, should be
05000000c82d00003032000000010000,8BitDo Zero 2 gamepad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Linux,

Which firmware version is this for? You should be able to map all of dpad/left stick/right stick as using Select + Up/Left/Right.

Yes, forgot about the special keys. Will update the PR soon.

If you are going to update the PR, can you change the name to "8BitDo Zero 2" so it matches the other entries?

Will update the PR soon.

@piot if/when you get around to this can you check to make sure the face button mappings are correct? I suspect this map is wrong because it differs from the other maps for the same device/platform: make sure to match ABXY to South/East/West/North like on Xbox 360 pads ignoring the labels on the actual controller.


ModuleNotFoundError: No module named 'django_extensions'

Keep getting this error when I try to do anything with manage.py. I am able to import django_extensions when I open up a python shell, but for some reason will not work with my app even though it says "requirements filled" when I go to pip install again.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_extensions',
'corsheaders',
'rest_framework.authtoken',
'core',
'user',
'recipe',
'frontend',
]
Django >=2.2.6,<2.3.0
django-extensions>=2.2.5,<3.0.0
(myvenv) C:\Users\425823\Django_projects\recipe-app-api>docker-compose run app sh -c "python manage.py help"
Starting recipe-app-api_db_1 ... done
Traceback (most recent call last):
File "manage.py", line 21, in
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.7/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.7/site-packages/django/core/management/init.py", line 357, in execute
django.setup()
File "/usr/local/lib/python3.7/site-packages/django/init.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 90, in create
module = import_module(entry)
File "/usr/local/lib/python3.7/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1006, in _gcd_import
File "", line 983, in _find_and_load
File "", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'django_extensions'

Does sound like your docker container cannot find ‘django-extensions’. Can you import it inside of the container ?
Also you could double check with something like ‘docker run —rm -it imagename pip freeze’ to be sure.
(If you can post your repo and/or dockerfile we can try help debugging the issue)

https://github.com/gDoe24/recipe-app-api
Here is the repo link. I am now running into issues trying "docker run -rm -it postgres:10-alpine pip freeze"
/usr/local/bin/docker-entrypoint.sh: line 176: exec: pip: not found.
I am new to using Docker, so I'm sure I am missing something basic.

The PostgreSQL container won't have pip installed :-)
Please note that I do not own or use or have ever used any windows machines so there might be things you run or need to understand there that I do not know about. The below is all done on Mac and Linux.
Your app seems to be working fine for me. After adding django_extensions to the INSTALLED_APPS list I get:
$ docker run --rm -it test python /app/manage.py shell_plus

# Shell Plus Model Imports
from core.models import Ingredient, Recipe, Tag, User
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
from rest_framework.authtoken.models import Token
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import transaction
from django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When, Exists, OuterRef, Subquery
from django.utils import timezone
from django.urls import reverse
Python 3.7.6 (default, Jan 18 2020, 02:49:59)
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
now exiting InteractiveConsole...

And using docker-compose up:
$ docker-compose up

Creating recipe-app-api_db_1 ... done
Creating recipe-app-api_app_1 ... done
Attaching to recipe-app-api_db_1, recipe-app-api_app_1
db_1   | The files belonging to this database system will be owned by user "postgres".
db_1   | This user must also own the server process.
db_1   |
db_1   | The database cluster will be initialized with locale "en_US.utf8".
db_1   | The default database encoding has accordingly been set to "UTF8".
db_1   | The default text search configuration will be set to "english".
db_1   |
db_1   | Data page checksums are disabled.
db_1   |
db_1   | fixing permissions on existing directory /var/lib/postgresql/data ... ok
db_1   | creating subdirectories ... ok
db_1   | selecting default max_connections ... 100
db_1   | selecting default shared_buffers ... 128MB
db_1   | selecting default timezone ... UTC
db_1   | selecting dynamic shared memory implementation ... posix
db_1   | creating configuration files ... ok
db_1   | running bootstrap script ... ok
db_1   | performing post-bootstrap initialization ... sh: locale: not found
db_1   | 2020-02-04 20:26:18.474 UTC [28] WARNING:  no usable system locales were found
db_1   | ok
db_1   | syncing data to disk ... ok
db_1   |
db_1   | Success. You can now start the database server using:
db_1   |
db_1   |     pg_ctl -D /var/lib/postgresql/data -l logfile start
db_1   |
db_1   |
db_1   | WARNING: enabling "trust" authentication for local connections
db_1   | You can change this by editing pg_hba.conf or using the option -A, or
db_1   | --auth-local and --auth-host, the next time you run initdb.
db_1   | waiting for server to start....2020-02-04 20:26:19.945 UTC [33] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1   | 2020-02-04 20:26:19.968 UTC [34] LOG:  database system was shut down at 2020-02-04 20:26:19 UTC
db_1   | 2020-02-04 20:26:19.973 UTC [33] LOG:  database system is ready to accept connections
db_1   |  done
db_1   | server started
app_1  | Waiting for database...
app_1  | Database connection successful!
db_1   | CREATE DATABASE
db_1   |
db_1   |
db_1   | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
db_1   |
db_1   | 2020-02-04 20:26:20.394 UTC [33] LOG:  received fast shutdown request
db_1   | waiting for server to shut down....2020-02-04 20:26:20.398 UTC [33] LOG:  aborting any active transactions
db_1   | 2020-02-04 20:26:20.398 UTC [33] LOG:  worker process: logical replication launcher (PID 40) exited with exit code 1
db_1   | 2020-02-04 20:26:20.399 UTC [35] LOG:  shutting down
db_1   | 2020-02-04 20:26:20.415 UTC [33] LOG:  database system is shut down
db_1   |  done
db_1   | server stopped
db_1   |
db_1   | PostgreSQL init process complete; ready for start up.
db_1   |
db_1   | 2020-02-04 20:26:20.511 UTC [1] LOG:  listening on IPv4 address "<IP_ADDRESS>", port 5432
db_1   | 2020-02-04 20:26:20.511 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1   | 2020-02-04 20:26:20.515 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1   | 2020-02-04 20:26:20.536 UTC [44] LOG:  database system was shut down at 2020-02-04 20:26:20 UTC
db_1   | 2020-02-04 20:26:20.540 UTC [1] LOG:  database system is ready to accept connections
app_1  | Operations to perform:
app_1  |   Apply all migrations: admin, auth, authtoken, contenttypes, core, sessions
app_1  | Running migrations:
app_1  |   Applying contenttypes.0001_initial... OK
app_1  |   Applying contenttypes.0002_remove_content_type_name... OK
app_1  |   Applying auth.0001_initial... OK
app_1  |   Applying auth.0002_alter_permission_name_max_length... OK
app_1  |   Applying auth.0003_alter_user_email_max_length... OK
app_1  |   Applying auth.0004_alter_user_username_opts... OK
app_1  |   Applying auth.0005_alter_user_last_login_null... OK
app_1  |   Applying auth.0006_require_contenttypes_0002... OK
app_1  |   Applying auth.0007_alter_validators_add_error_messages... OK
app_1  |   Applying auth.0008_alter_user_username_max_length... OK
app_1  |   Applying auth.0009_alter_user_last_name_max_length... OK
app_1  |   Applying auth.0010_alter_group_name_max_length... OK
app_1  |   Applying auth.0011_update_proxy_permissions... OK
app_1  |   Applying core.0001_initial... OK
app_1  |   Applying admin.0001_initial... OK
app_1  |   Applying admin.0002_logentry_remove_auto_add... OK
app_1  |   Applying admin.0003_logentry_add_action_flag_choices... OK
app_1  |   Applying authtoken.0001_initial... OK
app_1  |   Applying authtoken.0002_auto_20160226_1747... OK
app_1  |   Applying sessions.0001_initial... OK
app_1  | Watching for file changes with StatReloader
app_1  | Performing system checks...
app_1  |
app_1  | System check identified no issues (0 silenced).
app_1  | February 04, 2020 - 20:26:23
app_1  | Django version 2.2.10, using settings 'app.settings'
app_1  | Starting development server at http://<IP_ADDRESS>:8000/
app_1  | Quit the server with CONTROL-C.

I will do a PR on your repository with the couple of small tweaks I made to get it to run for me locally.
Really hope this helps you to get your application going.
For now I will close the issue here since it's not a django-extensions related issue by itself.


Escaping for special characters isn't consistent for built in ${PREV_TEST_NAME} variable and listener model

Bug description

During test case development was found that backslash() in test case name cause an error.
If we use backslash() in test case name, for example, 'Test Case With Backslash \ Foo',
then we get 'Test Case With Backslash  Foo' in automatic variable ${PREV_TEST_NAME}.
But, if we verify it in ROBOT_LIBRARY_LISTENER method (for example, in _end_test),
which use ${PREV_TEST_NAME} automatically, we could see that now we have two backslashes,
which cause an error due to different number of backslashes.
So, error is appeared due to different names.

If we tried to escape backslash by doubled it in test case name, then we will have one backslash in ${PREV_TEST_NAME},
but four backslashes during verification in ROBOT_LIBRARY_LISTENER method.

Reproduction

Robot code:
*** Settings ***
Library             backslash_listener.py
Force Tags          backslash_issue

*** Variables ***

*** Test cases ***
Test Case With Backslash \ Foo
    No Operation

Second Test Case
    Log    ${PREV_TEST_NAME}
    # Here we have 'Test Case With Backslash  Foo' in ${PREV_TEST_NAME}

    Should Be Equal As Strings    ${PREV_TEST_NAME}    Test Case With Backslash \ Foo
    # Should Be Equal As Strings will be PASS because 'Test Case With Backslash \ Foo'
    # will be convert to 'Test Case With Backslash  Foo'

    Test Case Should Be Completed    ${PREV_TEST_NAME}
    # This verification will be FAIL because will be compared 'Test Case With Backslash  Foo'
    # and 'Test Case With Backslash \\ Foo'

*** Keywords ***

Listener code:
from robot.api import logger

class backslash_listener(object):
    ROBOT_LISTENER_API_VERSION = 3
    ROBOT_LIBRARY_SCOPE = "GLOBAL"

    def __init__(self):
        self.ROBOT_LIBRARY_LISTENER = self
        self._completed_test_cases = []

    def _end_test(self, data, attributes):
        # Here will be 'Test Case With Backslash \\ Foo' in data.name but should be the same as in ${PREV_TEST_NAME}
        self._completed_test_cases.append(data.name)

    def test_case_should_be_completed(self, test_name):
        logger.info("Test case name: {}".format(test_name))
        logger.info("Completed test cases: {}".format(self._completed_test_cases))
        if not test_name in self._completed_test_cases:
            raise AssertionError("Test case name should be in _completed_test_cases list, but it is not")

It's a bit unfortunate that result.name and data.name can look different, but that's a direct byproduct of #2962. I don't think we can really do anything to that so I'm closing this issue.


Editing scrobbled songs

Scrobbler's UI is too limited. You can manually edit song to be scrobbled only if scrobbler doesn't recognize it. Usually it thinks it does and too often results are garbage like Stevie Wonder - I Wish (Live in London 1995). Then I have to go remove the entry and scrobble it manually. I think user should be able to correct it straightly from the interface to Stevie Wonder - I Wish. YouTube video titles are seldom in a correct form. You could even add a feature which links corrections to YouTube video links if they got enough support.

I came here to suggest this too. Most of the times, songs from movies and games don't have the composer's name in the title. (And sometimes not even in the description!) Instead, the title usually is "%GAME/MOVIE NAME% - %SONG NAME%". I wish I could correct this directly.


str0m disconnects if the only remaining valid candidate is a peer-reflexive one

When a peer roams between networks, it will discover new host and srflx candidates. Once added as local candidates, str0m will start pairing them with the existing remote candidates and testing connectivity.
Very likely, those STUN requests arrive at the remote before they can be shared via the signaling channel which results in str0m creating peer-reflexive candidate pairs.
Despite these peer reflexive candidate pairs succeeding, str0m ends up emitting an ICE timeout instead of nominating the new pair.
Peer 1 (roaming)
2024-03-20T04:58:51.502366Z  INFO str0m::ice_::agent: Add local candidate: Candidate(host=<IP_ADDRESS>:44672/udp prio=2130705663)
2024-03-20T04:58:51.502468Z DEBUG str0m::ice_::agent: Add new pair CandidatePair(1-0 prio=9151311144248409598 state=Waiting attempts=0 unanswered=0 remote=0 last=None nom=None)
2024-03-20T04:58:51.503875Z  INFO str0m::ice_::agent: State change (got new possible): Completed -> Connected
2024-03-20T04:58:51.503994Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:51.507903Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:58:51.548769Z DEBUG str0m::ice_::agent: Reject redundant candidate, current: Candidate(host=<IP_ADDRESS>:44672/udp prio=2130705663) rejected: Candidate(srflx=<IP_ADDRESS>:44672/udp prio=1686109951)
2024-03-20T04:58:51.746877Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:58:51.749789Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:52.246401Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:58:52.248794Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:52.949820Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:53.246828Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:58:53.250022Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:53.449773Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:54.449805Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:54.746158Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:58:54.749893Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:55.949617Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:56.246747Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:58:56.248820Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:57.449631Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:57.746653Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:58:57.748990Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:58.950402Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:58:59.246689Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:58:59.248925Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:00.449471Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:00.746738Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:47452 }, integrity_len: 0 }
2024-03-20T04:59:00.748921Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:01.949619Z DEBUG str0m::ice_::agent: Remove failed pair: CandidatePair(0-0 prio=9151313343271665150 state=Succeeded attempts=8 unanswered=8 remote=140 last=Some(Instant { tv_sec: 12101, tv_nsec: 202472413 }) nom=Success)
2024-03-20T04:59:01.949753Z DEBUG str0m::ice_::pair: Nominated pair: CandidatePair(1-0 prio=9151311144248409598 state=Succeeded attempts=8 unanswered=0 remote=9 last=Some(Instant { tv_sec: 12112, tv_nsec: 2687266 }) nom=Nominated)
2024-03-20T04:59:01.949791Z  INFO str0m::ice_::agent: State change (no more possible to try): Connected -> Completed
2024-03-20T04:59:02.249874Z DEBUG str0m::ice_::pair: Nominated attempt STUN binding: CandidatePair(1-0 prio=9151311144248409598 state=Succeeded attempts=8 unanswered=0 remote=9 last=Some(Instant { tv_sec: 12112, tv_nsec: 2687266 }) nom=Nominated)
2024-03-20T04:59:02.249984Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:03.749210Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:04.249268Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:05.250351Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:06.750439Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:08.249954Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:09.750359Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:11.249163Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:44672 -> <IP_ADDRESS>:47452 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "i8aY:sP7T", priority:<PHONE_NUMBER>, use_candidate: true, ice_controlling:<PHONE_NUMBER>814807113 }, integrity_len: 0 }
2024-03-20T04:59:12.749835Z DEBUG str0m::ice_::agent: Remove failed pair: CandidatePair(1-0 prio=9151311144248409598 state=Succeeded attempts=8 unanswered=8 remote=9 last=Some(Instant { tv_sec: 12112, tv_nsec: 2687266 }) nom=Attempt)
2024-03-20T04:59:12.749931Z  INFO str0m::ice_::agent: State change (none nominated): Completed -> Disconnected
2024-03-20T04:59:12.749988Z  INFO snownet::node: Connection failed (ICE timeout)

Peer 2
2024-03-20T04:58:51.506401Z  INFO str0m::ice_::agent: Created peer reflexive remote candidate from STUN request: Candidate(prflx=<IP_ADDRESS>:44672/udp prio=1862270207)
2024-03-20T04:58:51.506506Z DEBUG str0m::ice_::agent: Created new pair for STUN request: CandidatePair(0-1 prio=7998389639641562622 state=Waiting attempts=0 unanswered=0 remote=0 last=None nom=None)
2024-03-20T04:58:51.506550Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:58:51.506800Z  INFO str0m::ice_::agent: State change (got new possible): Completed -> Connected
2024-03-20T04:58:51.506857Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:51.745434Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:51.751227Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:58:52.245125Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:52.249781Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:58:52.945499Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:53.245317Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:53.251440Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:58:53.444624Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:54.445571Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:54.744604Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:54.751363Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:58:55.944775Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:56.245178Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:56.250064Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:58:57.444872Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:57.745128Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:57.749885Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:58:58.945325Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:59.245141Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:58:59.249799Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:59:00.445181Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:59:00.745184Z DEBUG str0m::ice_::agent: Send STUN request: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Request, attrs: Attributes { username: "sP7T:i8aY", priority:<PHONE_NUMBER>, ice_controlled:<PHONE_NUMBER>6622960348 }, integrity_len: 0 }
2024-03-20T04:59:00.750143Z DEBUG str0m::ice_::agent: Send STUN reply: <IP_ADDRESS>:47452 -> <IP_ADDRESS>:44672 StunMessage { method: Binding, class: Success, attrs: Attributes { xor_mapped_address: <IP_ADDRESS>:44672 }, integrity_len: 0 }
2024-03-20T04:59:01.945161Z DEBUG str0m::ice_::agent: Remove failed pair: CandidatePair(0-0 prio=9151313343271665150 state=Succeeded attempts=8 unanswered=8 remote=141 last=Some(Instant { tv_sec: 12101, tv_nsec: 207276936 }) nom=Success)
2024-03-20T04:59:01.945256Z  INFO str0m::ice_::agent: State change (none nominated): Connected -> Disconnected
2024-03-20T04:59:01.945295Z  INFO snownet::node: Connection failed (ICE timeout)

Hmm, okay this might be an invalid report. Once we propagate the candidate via the signaling plane, it gets replaced by str0m.


Update requriments in README.md

The './configure --with-mapnik' part of the installation process will fail unless mapnik-config is available.  It seems to be packaged separately from mapnik3.0 on Ubuntu.
-Peter

Thanks!


[Feature Request] Support for Finding AsyncDisplayKit Nodes

https://github.com/facebook/AsyncDisplayKit is an incredible framework, and any non-trivial app would benefit from using it. Would it be possible to add a fnode or equivalent that finds the view (layer, even?!) that hosts a node of a given class?
I know ASDK code pretty well, so I can help if needed with the actual "find the node in the view hierarchy" code.

Sounds doable. Does it require traversing the view tree, or is there any "index" from nose to host?

Sweet, thanks for offering to help with this!
You've actually got to traverse the layer tree. Some nodes are backed by UIViews and others by raw CALayers. There's a private -[CALayer asyncdisplaykit_node] method to get the associated node, if any, for a layer. In Swift, I can't call that method from lldb since it's private =( we could use valueForKey:"asyncdisplaykit_node" which would work from Swift or Obj-C lldb frames but is a little uglier.
ASDisplayNode also has a name property. It's not very commonly used tbh but it'd be great to support searching by class or by name (pattern?).

What do you think about adding private methods in ASDK for Chisel to call? We could do it all via Python/lldb, but the benefits to having the heavy lifting done by the library are:

The command will run faster
If there are breaking changes to internals, the support code will get updated with it
The code can optionally be tested

Where available, Chisel will call available private debugging helper methods. In some cases, we have a fallback implementation inside Chisel.
So the choice to make is, do we implement the tree traversal in:

ASDK
Chisel
Both

I would suggest no. 1 for long term, and maybe no. 3 at the start since people might be using an ASDK version that doesn't contain the debugging helpers.

There exists a function:
NSArray<ASDisplayNode *> *ASDisplayNodeFindAllSubnodes(ASDisplayNode *start, BOOL (^block)(ASDisplayNode *node))

which is perfect except that it requires a start node, which we don't have. The more general version of that function:
ASDisplayNodePerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, void(^block)(ASDisplayNode *node))

accepts a layer or a node, so we could call that with e.g. the layer of the key window, right? Those functions have been around for a long time, so if they're sufficient then no. 1 is the way to go.
@appleguy Thoughts?

I recently learned that ASDisplayNodeExtras.h is technically public, which wasn't really intended...lol.  It contains the needed functionality, such as:
/**
Given a layer, returns the associated display node, if any.
*/
extern ASDisplayNode * _Nullable ASLayerToDisplayNode(CALayer * _Nullable layer);
/**
Given a view, returns the associated display node, if any.
*/
extern ASDisplayNode * _Nullable ASViewToDisplayNode(UIView * _Nullable view);
That said, I'd be thrilled to add any private functionality we'd like to support chisel.  @kastiglione, very grateful to have your support on this.  Since every iOS developer at Pinterest is using ASDK, we'll add 25-30 Chisel users overnight once this is available :).

@Adlai-Holler @appleguy I lost track of this one, sorry about that. Is this still something you're interested in? If yes, has any of the technical details changed in the last couple months?

This is something that findinstances should be able to do. Please reopen or @ mention me to discuss this more.


Order of arguments in MUI case classes

The order of arguments in the Mui component case classes seems arbitrary. What's the reason behind the ordering you use?

those are generated from material-ui PropTypes , i am happy to take a PR with correct order :)

after regeneration i ended up with the following:

props with documentation
event handlers
all other props without documentation
documentation is pulled from material-ui itself, we are not writing it ourselves.

If there are strong opinions we could change that of course


Wide Matplotlib figure not proportionally rescaled when window is smaller than figure with retina resolution images.

Environment data

VS Code version: 1.72.2
Jupyter Extension version (available under the Extensions sidebar): v2022.10.1102961034
Python Extension version (available under the Extensions sidebar): v2022.16.1
OS (Windows | Mac | Linux distro) and version: macOS 12.6
Python and/or Anaconda version: 3.10
Type of virtual environment used: conda
Jupyter server running: Local

Expected behaviour
Wide matplotlib images should be proportionally scaled when retina resolution is used.
Actual behaviour
Wide matplotlib images are not proportionally scaled when retina resolution is used.  In vscode-jupyter notebooks, a matplotlib figure may have a width (specified by figsize) that makes it wider than the window.  These images are rescaled by vscode-jupyter to fit inside the visible window width.  This scaling is done proportionally for the case when non-retina images are used.  This looks great and I think this is the correct behavior.  However, if retina images are requested (using %config InlineBackend.figure_format = "retina"), then the images are only resized horizontally rather than horizontally and vertically as they are in the non-retina case.  This results in images that look squashed in the horizontal direction.  This is inconsistent with the non-retina behavior.  Proportional image scaling for retina and non-retina cases would be fantastic!
Steps to reproduce:

Figures proportionally resized with window.  If the horizontal scale of an image is greater than the window width, then both horizontal and vertical sizes are scaled proportionally.

import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 3))
plt.plot(np.random.rand(100))
plt.show()

Figures are not proportionally resized with window size.  Vertical size stays the same, but horizontal size is squished.

%config InlineBackend.figure_format = "retina"
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 3))
plt.plot(np.random.rand(100))
plt.show()

## Summary figure

<img width="1195" alt="Screen Shot 2022-10-22 at 9 03 59 PM" src="https://user-images.githubusercontent.com/4225359/197368557-ea0fd101-b5b1-42b3-a847-33e49bf4b0d5.png">

I'm sorry for missing this issue and never getting back to you on this, will look into this today.

I can repro this issue at my end.


Include a basic test / example, for ease of validation

Please include an actual sample that would help validating and demonstrating Temporal Helm Chart operations.

good note for @tsurdilo for standards we want to achieve


Enhance GetOIDForPath to include more descriptive errors

The following error can be reported when NiFi communicates with the endpoint
There was an error hitting the /config endpoint of GM Data: java.lang.Throwable: There was an error with a call to GM Data:

It's unclear whether the root of the error is

Incorrect certificate
Incorrect trust
if the error is in the call to /config or the call to /self (I dont have insight into the server logs)

We need to make this more verbose to aid in diagnostics.

@lucasmoten From the error message you can see that it is an error with the call to the /config endpoint. The error message in the circumstance above takes the response from GM Data as is - in this instance GM Data did not return any message with their error response which creates the semi-confusing message above. The only thing I could do to clarify this situation from the processor's end is to detect empty messages and display a generic message such as "GM Data did not return a reason for this error response"

In this processor there is a call to both /config and /self showing up on the server.
Is the order of that /self then /config?
If so, then the next thing to put here is the actual error from the stack. The existing message implies there is something after "There was an error with a call to GM Data: "  If there is no message, then there's at least other information (status code is showing as 403 in the server logs) that would be helpful.  Ultimately, I'm trying to ascertain whether the actual cause is due to trust failure in setting up the communication, an expired user certificate, or an unauthorized user certificate.
If the order is /config, then /self, then the above applies, as well as consideration to change the error message to indicate that its failing on /self instead of /config.  However, regarding the 403, that is showing for both /config and /self, so it seems there may need to be two error messages?

@lucasmoten The order is /config then /self. https://github.com/greymatter-io/nifi-sdk/blob/e2b28004fa728d433a59913930819c8c667c05d9/gmd-sdk/nifi-data-processors/src/main/scala/com/deciphernow/greymatter/data/nifi/processors/utils/GetOidForPathStreamingFunctions.scala#L36 is the line where it failed. In that same function the processor makes both the call to /config and the call to /self as neither depends on the other to work. Directly after these calls it attempts to get information from both, starting with the response from /config. If there is some error with the call to /config it short circuits and attempts to log any error response given from GM Data, then moves onto the next flowfile.

Was merged in Friday September 18 via PR #17. That has since been published as a a Release 1.0.1. Closing


DhcpServerExclusionRange: New resource

Pull Request (PR) description
Adding DhcpServerExclusionRange resource. Allows you to define an exclusion range for a specific scope.
This Pull Request (PR) fixes the following issues

Fixes #7

Task list

[x] Added an entry under the Unreleased section of the change log in the README.md.
Entry should say what was changed, and how that affects users (if applicable).
[x] Resource documentation added/updated in README.md.
[x] Resource parameter descriptions added/updated in README.md, schema.mof
and comment-based help.
[x] Comment-based help added/updated.
[x] Localization strings added/updated in all localization files as appropriate.
[x] Examples appropriately added/updated.
[x] Unit tests added/updated. See DSC Resource Testing Guidelines.
[x] Integration tests added/updated (where possible). See DSC Resource Testing Guidelines.
[x] New/changed code adheres to DSC Resource Style Guidelines and Best Practices.

This change is

Codecov Report

Merging #53 into dev will decrease coverage by 3.73%.
The diff coverage is 7.27%.

@@            Coverage Diff             @@
##              dev      #53      +/-   ##
==========================================
- Coverage   74.97%   71.24%   -3.74%
==========================================
  Files          13       14       +1
  Lines         943      998      +55
  Branches        4        4
==========================================
+ Hits          707      711       +4
- Misses        232      283      +51
  Partials        4        4

Impacted Files
Coverage Δ

...rExclusionRange/MSFT_DhcpServerExclusionRange.psm1
7.27% <7.27%> (ø)

Continue to review full report at Codecov.

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


Manual quantity update feature.

Branch: Master
Description
There is no option to manually update the quantity by putting the digits in both i.e. cart and product view page.
If a user wanted to buy 100 quantity of a product, He/she will have to push the "+" button 100 times.
Expected Result
Customer should able to manually update the quantity by putting the digits.
It can be managed from Admin end if manual quantity is allowed on product view page/cart or not.
Actual Result
There is no option  to manually add the digits as of now.

I am working on this


Check Runtime Migration job fails for PRs with companions

check-runtime-migration-* CI jobs fail when companion PRs provided.
The CI job extends the .check-dependent-project job.
The script reports that it can not update the Cargo.lock file since the cargo command run with --locked arg.
For the companion PRs we usually do not commit the Cargo.* files, since they usually contain local machine specific artifacts (from diener tool).
PR example with failing CI jobs:
https://github.com/paritytech/substrate/pull/14434
Failed CI job example:
https://gitlab.parity.io/parity/mirrors/substrate/-/jobs/3296674

@muharem I didn't know about these CI jobs tbh. now I see that they've been recently added by @liamaharon & @alvicsam  here https://github.com/paritytech/substrate/pull/14618/files
@liamaharon @alvicsam could you follow up on this issue, please?

I think we need to remove --locked from the runtime migration COMPANION_CHECK_COMMAND command? It doesn't seem to be used in the check-dependent-polkadot which I modelled the new CI job after.
@muharem you can ignore the jobs in your PR for now, and I'll open a PR to remove --locked.

@muharem can you check if the fix in this PR resolves your issue? https://github.com/paritytech/substrate/pull/14690


Installation docs on main have mismatched versions

Our installation docs on the main branch (both installation.md and the helm README) have a user install v1.0.0 of the Gateway API crds, and v1.0.0 of NGF. The latter doesn't support the version of the former.
Acceptance:
Our installation docs in the main branch need to be accurate about which versions to install of each component. If we mention installing the latest release, then we have to match the version of Gateway API to that release, otherwise we should be referring to the "edge" version of NGF.

cherry-pick these changes into the docs/hugo-docs branch per the formatting of the new site in that branch

Also update release process doc if required for these changes.

how do i install from edge?

Closed by https://github.com/nginxinc/nginx-gateway-fabric/pull/1287


Proposal: new community branch

We sometimes see people asking about features that are not quite cross-vendor, such as EIGRP, CDP or FEX.
Of course (and I'm already seeing David typing the reply) this is against the NAPALM philosophy - I totally agree with this. But at the same time I do see the value added having these features.
I personally know people using napalm-junos just because it's way easier to just execute pip install napalm-junos and then get the BGP configuration with one call rather than rewriting the YAML descriptors for junos-eznc.
So, besides it's vendor abstraction, NAPALM is also about features/getters.
But some vendors have their proprietary protocols and people are interested in them. And I think we could support them, especially when people want to bring their contribution back to the community.
With these said, I think we could create a separate branch, say community where vendor-specific getter would go. No release needed, or we could release a rc version - not the official one.
This will bring a bit of complexity, but not much - providing some extra support for the community.
Thoughts?

Using your examples:

CDP is just another way of getting neighbors so it should be integrated with get_lldp_neighbors. If LLDP is not enabled, fallback to CDP on devices that support it.
EIGRP, why do you need a method for that? It will depend on what you want to do. If you want to get routes we could easily add support to the protocol on get_route_to

In any case, I'd rather try to make things generic and vendor-agnostic, as I sincerely don't think that there are that many "vendor-specific"  commands (maybe qfabric, VSS o other crap like that). In cases where there is no way to make it agnostic, I think I'd prefer to have them as part of the main branch than having to track two different branches. Naming of those methods should clearly indicate is a vendor-specific method. For example, junos_get_qfabric or ios_get_vss.

In cases where there is no way to make it agnostic, I think I'd prefer to have them as part of the main branch than having to track two different branches. Naming of those methods should clearly indicate is a vendor-specific method. For example, junos_get_qfabric or ios_get_vss.

Yes, this sounds sane to me.
Before closing this topic, where do you think it would be the right place for the tests? I think we could extend the local tester, under the driver implementing the method in cause.

Mmmm, I think I'd need to do some tests here on how to best do it. I think it makes sense to have them on a dedicated file on the driver itself. Let's do something, first time we have a vendor-specific method implementation we do it against a branch and we see how to best integrate it with the testing framework and how to generate the documentation automatically.

Yeah.. this might be pretty problematic.
I was thinking now also about documentation: as this is triggered based on the methods tested with the tests from napalm-base, I think we should do the same with driver-specific getters. As of today we consider all methods that have the prefix get_, we could as well test also $driver_ and generate doc. Do you think that would be a bit overkill?

As of today we consider all methods that have the prefix get_, we could as well test also $driver_ and generate doc. Do you think that would be a bit overkill?

Yeah, that's exactly why I wanted to name them $driver_get. It works for humans and machines. It will not be difficult to integrate and have a separate table generated automatically.

Ok cool - in that case I don't have any further questions here :)


Default dependencies in mjmlconfig

Fixes #2141

Defaults the dependencies of a component to an empty object
Adds type checks and warnings to dependency assignment

Looks good to me @TrySound are you OK too ?

Last small tweak


Redis List output cannot process batch messages from kafka

I have the following config:
input:
  kafka:
    addresses:
      - localhost:9092
    topics:
      - benthos_test
    batching:
      count: 100
      period: 5s

pipeline:
  processors: []

output:
  redis_list:
    url: tcp://localhost:6379
    key: foo_out
    max_in_flight: 10

which shall read messages from kafka, and push them into the redis list.
However, when I run with this config (Benthos v3.42.0), and push like 500 messages into the kafka broker, the target redis list only receives 10 messages, and Benthos would just stall. And when I restart Benthos, another 10 messages are pushed into the redis list, and Benthos stalls again.
I have tried replacing the redis_list output with stdout, and everything works fine.
Is there something wrong with this config? Or maybe this is the expected behavior?

Hey @WaizungTaam, thanks for reporting this. It looks like this is a regression introduced in v3.42.0 when using an output that publishes messages serially and the messages are batched. There's a mechanism that incorrectly triggers an internal shutdown which causes the stall to occur.
You can temporarily work around this by adding a split processor to break the batches out at the output level:
output:
  redis_list:
    url: tcp://localhost:6379
    key: foo_out
    max_in_flight: 10
  processors:
    - split: {}

It's not ideal but I should be able to release a fix for this later today, I'm treating this as severe as it impacts a wide range of outputs.

Yes, I remember there are logs about some kind of internal shutdown. Thanks a lot for the very quick response! @Jeffail

It was pretty quick and easy to fix so I've put a patch release out: https://github.com/Jeffail/benthos/releases/tag/v3.42.1

Closing but if you get a chance to upgrade and it hasn't fixed the issue then please re-open.


Download pre-built binary for Linux

I notice that vfox compiles python from source for Linux, which is so slow for low performance machine. Why not download pre-built archive file like other tools doing?

+1，希望支持直接安装编译好的python @aooohan


Enhancement: Migrate from Views to Compose/Migrate from KAPT to KSP

What is the user problem or growth opportunity you want to see solved?
There are many Views in this application and many source files that use KAPT. Users of Views and KAPT should migrate to Compose and KSP.
How do you know that this problem exists today? Why is this important?
There are Views that I would like to migrate to compose in order to merge my dependency update Pull Request. I worry about changing all these files in a single Pull Request. I am still evaluating whether or not I can migrate from KAPT to KSP while keeping the Pull Request reasonable.
Who will benefit from it?
The entire team and application.
Anything else you would like to add?
Jetpack Compose and KSP are the migrations recommended by the Android and Kotlin teams.

Compose is really nice, but I think we need to get through the current migration away from Butterknife and synthetic imports before taking on a large refactor like that.  Also, how well do those tools play with a (mostly) Java codebase like this app has?

Well migrating from Views to compose can be done 1 View at a time but it has to be a collective effort. Also Compose will allow us to remove Dagger/Hilt, KAPT/KSP and RX and use State Hoisting and onCreate injection. This will simplify the code base beyond belief. I have done this before and am currently looking to implement this not only here but across the ecosystem (I am dedicated to this effort because we live in strange times that require it).

I see the Jetpack Compose Migration has begun.


add selene.config.hold_browser_open (equal to false by default)

@yashaka why this feature can be useful? You want to add flag that will disable driver.quit in case of automatic driver management?

yeah, disabling driver.quit
This feature is kind of "debug feature". Sometimes it is handy to see where
your test finished, when you are still in progress of developing a test.
I use it sometimes in case of java + selenide
On Fri, Jan 27, 2017, 6:56 AM Serhii Pirohov<EMAIL_ADDRESS>wrote:

@yashaka https://github.com/yashaka why this feature can be useful? You
want to add flag that will disable driver.quit in case of automatic driver
management?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/yashaka/selene/issues/68#issuecomment-275659438, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AB3snuGZNYZrcd1QeNNQ1fVA7mUHLgWIks5rWemIgaJpZM4LlU7E
.

https://github.com/yashaka/selene/pull/83


Fix ESP32 storage

Problem
Commit 162366f0 (#8469) broke persistent storage on ESP32.
Change overview

Fixed return value of ESP32Config::EnsureNamespace().
Fixed a copy-paste mistake (NVS_READONLY for NVS_READWRITE)
in KeyValueStoreManagerImpl::_Put().
Added string presentation of ESP32 errors to aid troubleshooting.

Fixes #8572 ESP32 storage probably broken
Fixes #8569 ESP32: All clusters app fails to boot up.
Testing
Manual on M5Stack

Marking hotfix as this breaks our smoke tests..
@jepenven-silabs @msandstedt @Damian-Nordic


Fix don't omit theme at runtime

https://github.com/styled-components/styled-components/issues/4074
Include the theme in the  execution props.
Some UI component libraries require a theme at runtime. (e.g. react-select)
If you skip here, you will not be able to refer to the theme when overwriting the theme, resulting in a runtime error.
In fact, if you try using the codesandbox in the issue comment, A runtime error occurs because the theme cannot be referenced.

Cannot read properties of undefined (reading 'spacing')

I prepared an alternate implementation that will not leak the theme prop in normal scenarios. Passing theme always would be kind of a breaking change for v6 since the current behavior has been established, but using attrs to feed an override theme prop seems like a reasonable workaround.

ThanQ