Screen resolution broken on macOS

Description
Screen resolution is not displaying at all on macOS.
The system_profiler method does work, although it seems to slow down the entire script. The refresh rate isn't displaying, however (and it is definitely turned on in my config file).
"Mac OS X")
    # if type -p screenresolution >/dev/null; then
    #     resolution="$(screenresolution get | awk '/Display/ {printf $6 "Hz, "}')"
    #     resolution="${resolution//x??@/ @ }"
    #
    # else
        resolution="$(system_profiler SPDisplaysDataType | awk '/Resolution:/ {printf $2"x"$4" @ "$6"Hz, "}')"
    fi

    scale_factor="$(/usr/libexec/PlistBuddy -c "Print DisplayAnyUserSets:0:0:Resolution" /Library/Preferences/com.apple.windowserver.plist)"

    # If no refresh rate is empty.
    [[ "$resolution" == *"@ Hz"* ]] && \
        resolution="${resolution//@ Hz}"

    ((${scale_factor%.*} == 2)) && \
        resolution="${resolution// @/@2x @}"

    if [[ "$refresh_rate" == "off" ]]; then
        resolution="${resolution// @ [0-9][0-9]Hz}"
        resolution="${resolution// @ [0-9][0-9][0-9]Hz}"
    fi

    [[ "$resolution" == *"0Hz"* ]] && \
        resolution="${resolution// @ 0Hz}"
;;

We added screenresolution as a dependency on macOS because it's way faster than system_profiler and it shows refresh rates. (system_profiler doesn't iirc)
What's the output of this command?
screenresolution get

2017-02-25 17:31:46.140 screenresolution[5810:22510] starting screenresolution argv=screenresolution get
2017-02-25 17:31:46.154 screenresolution[5810:22510] Display 0: 1280x800x32@0

It looks to me like screenresolution is working, or am I wrong?
@iandrewt, can you take a look at this?

Yeah, I do have it installed, it's just not working with Neofetch for some reason.

Try this in the terminal:
screenresolution get | awk '/Display/ {printf $6 "Hz, "}'

Same output as above.
2017-02-25 17:36:45.162 screenresolution[7810:29735] starting screenresolution argv=screenresolution get
2017-02-25 17:36:45.168 screenresolution[7810:29735] Display 0: 1280x800x32@0

I've got no idea how to fix this and no macOS machine to test on so we'll have to wait for @iandrewt.

It seems that screenresolution is now writing the results to stderr instead of stdout, as the command expects.
So a simple fix would be changing the command to:
screenresolution get 2>&1 | awk '/Display/ {printf $6 "Hz, "}'

@eliezio That seems to be the problem. Care to make the PR?

It might be worth redirecting stderr to stdout so that the fix also works
with older versions of screenresolution
On Sun, 5 Mar 2017 at 9:22 am, Jorge Gonzalez<EMAIL_ADDRESS>wrote:

@eliezio https://github.com/eliezio That seems to be the problem. Care
to make the PR?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/dylanaraps/neofetch/issues/662#issuecomment-284192323,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AGfAa7wA4MlY5vUmt0JJn5G8HoOwFv5Mks5rifIagaJpZM4MMB1m
.

This issue should be fixed by now. Feel free to reopen if this issue somehow still exists.

Currently Resolution: 1280x800@2x is what is being displayed for me. I have refresh_rate="on" in my config, but it's not displaying.
Also, would there be any benefit of using
{
    DisplayAnyUserSets =     (
                (
                        {
                Active = 1;
                Depth = 4;
                DisplayID = 69731840;
                DisplayProductID = 40984;
                DisplaySerialNumber = 0;
                DisplayVendorID = 1552;
                ForceDeepMode = 0;
                Height = 800;
                IODisplayLocation = "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/IGPU@2/AppleIntelFramebuffer@0";
                IOFlags = 33554439;
                LimitsHeight = 1600;
                LimitsOriginX = 0;
                LimitsOriginY = 0;
                LimitsWidth = 2560;
                MirrorID = 0;
                Mirrored = 0;
                Mode =                 {
                    BitsPerPixel = 32;
                    BitsPerSample = 8;
                    DepthFormat = 4;
                    Height = 800;
                    IODisplayModeID = "-2147479552";
                    IOFlags = 33554439;
                    Mode = 0;
                    PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                    RefreshRate = 0;
                    SamplesPerPixel = 3;
                    UsableForDesktopGUI = 1;
                    Width = 1280;
                    kCGDisplayBytesPerRow = 10240;
                    kCGDisplayHorizontalResolution = 227;
                    kCGDisplayModeIsInterlaced = 0;
                    kCGDisplayModeIsSafeForHardware = 1;
                    kCGDisplayModeIsStretched = 0;
                    kCGDisplayModeIsTelevisionOutput = 0;
                    kCGDisplayModeIsUnavailable = 0;
                    kCGDisplayModeSuitableForUI = 1;
                    kCGDisplayPixelsHigh = 1600;
                    kCGDisplayPixelsWide = 2560;
                    kCGDisplayResolution = 2;
                    kCGDisplayVerticalResolution = 227;
                };
                OriginX = 0;
                OriginY = 0;
                PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                Resolution = 2;
                Unit = 0;
                UnmirroredHeight = 800;
                UnmirroredLimitsHeight = 1600;
                UnmirroredLimitsOriginX = 0;
                UnmirroredLimitsOriginY = 0;
                UnmirroredLimitsWidth = 2560;
                UnmirroredMode =                 {
                    BitsPerPixel = 32;
                    BitsPerSample = 8;
                    DepthFormat = 4;
                    Height = 800;
                    IODisplayModeID = "-2147479552";
                    IOFlags = 33554439;
                    Mode = 0;
                    PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                    RefreshRate = 0;
                    SamplesPerPixel = 3;
                    UsableForDesktopGUI = 1;
                    Width = 1280;
                    kCGDisplayBytesPerRow = 10240;
                    kCGDisplayHorizontalResolution = 227;
                    kCGDisplayModeIsInterlaced = 0;
                    kCGDisplayModeIsSafeForHardware = 1;
                    kCGDisplayModeIsStretched = 0;
                    kCGDisplayModeIsTelevisionOutput = 0;
                    kCGDisplayModeIsUnavailable = 0;
                    kCGDisplayModeSuitableForUI = 1;
                    kCGDisplayPixelsHigh = 1600;
                    kCGDisplayPixelsWide = 2560;
                    kCGDisplayResolution = 2;
                    kCGDisplayVerticalResolution = 227;
                };
                UnmirroredOriginX = 0;
                UnmirroredOriginY = 0;
                UnmirroredResolution = 2;
                UnmirroredWidth = 1280;
                Width = 1280;
            }
        ),
                (
                        {
                Active = 1;
                Depth = 4;
                DisplayID = 69731840;
                DisplayProductID = 40984;
                DisplaySerialNumber = 0;
                DisplayVendorID = 1552;
                ForceDeepMode = 0;
                Height = 800;
                IODisplayLocation = "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/IGPU@2/AppleIntelFramebuffer@0";
                IOFlags = 33554439;
                LimitsHeight = 1600;
                LimitsOriginX = 0;
                LimitsOriginY = 0;
                LimitsWidth = 2560;
                MirrorID = 0;
                Mirrored = 0;
                Mode =                 {
                    BitsPerPixel = 32;
                    BitsPerSample = 8;
                    DepthFormat = 4;
                    Height = 800;
                    IODisplayModeID = "-2147471360";
                    IOFlags = 33554439;
                    Mode = 0;
                    PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                    RefreshRate = 0;
                    SamplesPerPixel = 3;
                    UsableForDesktopGUI = 1;
                    Width = 1280;
                    kCGDisplayBytesPerRow = 10240;
                    kCGDisplayHorizontalResolution = 227;
                    kCGDisplayModeIsInterlaced = 0;
                    kCGDisplayModeIsSafeForHardware = 1;
                    kCGDisplayModeIsStretched = 0;
                    kCGDisplayModeIsTelevisionOutput = 0;
                    kCGDisplayModeIsUnavailable = 0;
                    kCGDisplayModeSuitableForUI = 1;
                    kCGDisplayPixelsHigh = 1600;
                    kCGDisplayPixelsWide = 2560;
                    kCGDisplayResolution = 2;
                    kCGDisplayVerticalResolution = 227;
                };
                OriginX = 0;
                OriginY = 0;
                PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                Resolution = 2;
                Unit = 0;
                UnmirroredHeight = 800;
                UnmirroredLimitsHeight = 1600;
                UnmirroredLimitsOriginX = 0;
                UnmirroredLimitsOriginY = 0;
                UnmirroredLimitsWidth = 2560;
                UnmirroredMode =                 {
                    BitsPerPixel = 32;
                    BitsPerSample = 8;
                    DepthFormat = 4;
                    Height = 800;
                    IODisplayModeID = "-2147471360";
                    IOFlags = 33554439;
                    Mode = 0;
                    PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                    RefreshRate = 0;
                    SamplesPerPixel = 3;
                    UsableForDesktopGUI = 1;
                    Width = 1280;
                    kCGDisplayBytesPerRow = 10240;
                    kCGDisplayHorizontalResolution = 227;
                    kCGDisplayModeIsInterlaced = 0;
                    kCGDisplayModeIsSafeForHardware = 1;
                    kCGDisplayModeIsStretched = 0;
                    kCGDisplayModeIsTelevisionOutput = 0;
                    kCGDisplayModeIsUnavailable = 0;
                    kCGDisplayModeSuitableForUI = 1;
                    kCGDisplayPixelsHigh = 1600;
                    kCGDisplayPixelsWide = 2560;
                    kCGDisplayResolution = 2;
                    kCGDisplayVerticalResolution = 227;
                };
                UnmirroredOriginX = 0;
                UnmirroredOriginY = 0;
                UnmirroredResolution = 2;
                UnmirroredWidth = 1280;
                Width = 1280;
            },
                        {
                Active = 1;
                Depth = 4;
                DisplayID = 441053378;
                DisplayProductID = 10179;
                DisplaySerialNumber = 0;
                DisplayVendorID = 1129;
                ForceDeepMode = 0;
                Height = 1080;
                IODisplayLocation = "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/IGPU@2/AppleIntelFramebuffer@2";
                IOFlags = 34603015;
                LimitsHeight = 1080;
                LimitsOriginX = 2560;
                LimitsOriginY = 0;
                LimitsWidth = 1920;
                MirrorID = 0;
                Mirrored = 0;
                Mode =                 {
                    BitsPerPixel = 32;
                    BitsPerSample = 8;
                    DepthFormat = 4;
                    Height = 1080;
                    IODisplayModeID = "-2147471360";
                    IOFlags = 34603015;
                    Mode = 0;
                    PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                    RefreshRate = 60;
                    SamplesPerPixel = 3;
                    UsableForDesktopGUI = 1;
                    Width = 1920;
                    kCGDisplayBytesPerRow = 7680;
                    kCGDisplayHorizontalResolution = 82;
                    kCGDisplayModeIsInterlaced = 0;
                    kCGDisplayModeIsSafeForHardware = 1;
                    kCGDisplayModeIsStretched = 0;
                    kCGDisplayModeIsTelevisionOutput = 1;
                    kCGDisplayModeIsUnavailable = 0;
                    kCGDisplayModeSuitableForUI = 1;
                    kCGDisplayPixelsHigh = 1080;
                    kCGDisplayPixelsWide = 1920;
                    kCGDisplayResolution = 1;
                    kCGDisplayVerticalResolution = 82;
                };
                OriginX = 1280;
                OriginY = 0;
                PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                "RefreshRate16.16" = 3932160;
                Resolution = 1;
                Unit = 2;
                UnmirroredHeight = 1080;
                UnmirroredLimitsHeight = 1080;
                UnmirroredLimitsOriginX = 2560;
                UnmirroredLimitsOriginY = 0;
                UnmirroredLimitsWidth = 1920;
                UnmirroredMode =                 {
                    BitsPerPixel = 32;
                    BitsPerSample = 8;
                    DepthFormat = 4;
                    Height = 1080;
                    IODisplayModeID = "-2147471360";
                    IOFlags = 34603015;
                    Mode = 0;
                    PixelEncoding = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
                    RefreshRate = 60;
                    SamplesPerPixel = 3;
                    UsableForDesktopGUI = 1;
                    Width = 1920;
                    kCGDisplayBytesPerRow = 7680;
                    kCGDisplayHorizontalResolution = 82;
                    kCGDisplayModeIsInterlaced = 0;
                    kCGDisplayModeIsSafeForHardware = 1;
                    kCGDisplayModeIsStretched = 0;
                    kCGDisplayModeIsTelevisionOutput = 1;
                    kCGDisplayModeIsUnavailable = 0;
                    kCGDisplayModeSuitableForUI = 1;
                    kCGDisplayPixelsHigh = 1080;
                    kCGDisplayPixelsWide = 1920;
                    kCGDisplayResolution = 1;
                    kCGDisplayVerticalResolution = 82;
                };
                UnmirroredOriginX = 1280;
                UnmirroredOriginY = 0;
                UnmirroredResolution = 1;
                UnmirroredWidth = 1920;
                Width = 1920;
            }
        )
    );
    DisplayLayoutToRight = 1;
    DisplayMainOnInternal = 1;
    MTAccountBase = 309;
    MTAccountDelta = 220;
}

Neofetch hides the refresh rate if it's blank or appears as 0HZ in the screenresolution output.
What's the full output of:

screenresolution get
screenresolution get | awk '/Display/ {printf $6 "Hz, "}'

Also about that file, I think it'll be too difficult parse. I could be wrong though.

2017-03-20 17:56:09.860 screenresolution[17047:48227] starting screenresolution argv=screenresolution get
2017-03-20 17:56:09.866 screenresolution[17047:48227] Display 0: 1280x800x32@0

2017-03-20 17:56:30.138 screenresolution[17285:49209] starting screenresolution argv=screenresolution get
2017-03-20 17:56:30.144 screenresolution[17285:49209] Display 0: 1280x800x32@0

Yes you are correct, it's because it appears as @0.
Do ignore the file I pasted in my previous comment - I forgot to edit it!


rename this to geolite-api

please

####### #    #
#     # #   #
#     # #  #
#     # ###
#     # #  #
#     # #   #
####### #    #


select hide does the same as omitting an option

hide should only handle the hole menu instead of specific keys. The keys that shall be shown should only be in the options.
So change hide: (ctx, key) => boolean to hide: ctx => boolean.
This requires a check that the clicked key is in the currently available options.

select can check the available options as the key is easy to obtain: last match in ctx.match.
selectSubmenu is not that easy possible as the key can be anything in the ctx.match.
hide(ctx, key) will stay as it does not create a big hassle and is nice to have. users can omit the key and get their expected behaviour too.


A small bug : Should be 0B1...1  not 0x1..1

https://github.com/tleino/emws/blob/ed1acdbadf0dff692a97e409d073f8eff78b4213/wsframe.c#L133
This clearly intended to set the FIN and OP codes (aka the first 8 bits), so the hex notation is wrong

Indeed. A good catch.
I guess my intention was to do this sort of a thing as a way of writing a TODO-note to myself, as this may document I wanted to set FIN to 1 and opcode to 1, while RSV1-3 in the middle should be 0. However, as I had it there, it results in 00000001 in binary, i.e. FIN set to 0 and opcode set to 1.
Looking at the example usage in the ifdef'd TEST block, FIN should be 1 because only one packet is written. It is obviously unfinished code and the behavior should be modified so that FINs are written properly. The correct hexadecimal number for 10000001 is 0x81 for setting FIN=1 and opcode=1 and interestingly it was used correctly in the test byte sequences in the TEST block.
Chances are, the code in the wsframe_write was partially phased out, since good logic seems to be already happening in wsframe_add_bytes which does the correct thing with FIN and opcode. What happens in wsframe_add_bytes should be reflected in the wsframe_write that obviously should be re-written since the current one is only half-finished that works only for getting some reactions when testing, but is not useful for anything real. Should be fairly trivial, though.

Made a quick fix to 6fd12285e29fe4c4c6786bf40406593ebefe5f0c.


Newer release available build_bazel_rules_apple: 0.31.2 (current: 0.31.2)

        Package Name: {dep}
        Current Version: {metadata_version}@{release_date}
        Available Version: {tag_name}@{created_at}
        Upstream link: https://github.com/{package_repo.full_name}

New version is available for this package
New Version: 0.31.3@2021-05-11 21:48:34
Upstream Link: https://github.com/bazelbuild/rules_apple


Samba shares and Atom

Hello,
I have some problems with Atom and Samba shares. All samba shares that i used have their own Git repo. The first problem is that the package Git diff believes that all files are modified, but after changing the Git config (core.fileMode) works the package perfectly. But that's an option for me. The second problem is that Atom sometimes crashed with samba shares. It seems that Atom has difficulty waiting for a response from Samba. The last problem is that changing words in a samba share can damage files. The word had to be changed is replaced with nothing.

It sounds like this is a duplicate of https://github.com/atom/atom/issues/10596. Let us know if you believe this to not be the case.

No, because my issue is different. Atom showed the wrong color by Git repo's in a Samba share. The files are not modified. The last problem is that the replace method in Atom, the method doen't work every time. The application crasht after pressing the replace button and the word is replaced with nothing.
Before:
function test() { }
After:
function () { }


 The minimum Go
version in go.mod is still 1.17 because we don't use any new Go 1.18
features yet. Using the new Go compiler should still bring some of the
performance improvements to the builds. (20% improvement on ARM64
allegedly)
Signed-off-by: Charith Ellawala<EMAIL_ADDRESS>

Looks like the pre-built golangci-lint binary downloaded by the GH action can't work with Go 1.18: https://github.com/golangci/golangci-lint/pull/2438 (thanks @oguzhand95). I'll temporarily downgrade the linter Go version to 1.17 until the upstream is fixed.


filter external links in the image block

filter and sanitize eternal links which are displayed through the image block.

I could foresee this causing issues for people who currently have escaped entities (such as & as opposed to just &) in their external URLs so this may not be ideal to merge with the htmlentities call. However the $sec->sanitizeURL() should be safe to use.

Yeah I'd probably just go for the sanitizeURL

@aembler I just thought I would point out that the pull request had the htmlentities call included. I guess I should have been more explicit with that. Would you want me to submit another PR with that removed?

Heh, I meant to follow up that with a commit removing htmlentities() but never did it. This should take care of it: 3db92c9

awesome, I just wanted to make sure it didn't get missed and forgotten about. thanks!


feat: add support for view transitions

This is a very rough draft for natively supporting view transitions in Fresh. It's inspired by the recent astro announcement. I quite like the way they handle the CSS generation via attributes.
Keep in mind that this is a very early prototype.
Rough demo:
https://github.com/denoland/fresh/assets/1062408/996eb844-e648-4758-8f23-d2123daca65b
TODO:

[x] generate CSS bindings on the fly
[x] Ensure correctness of history entries
[ ] Only load view transition code when used.
[ ] tests

Updated video:
https://github.com/denoland/fresh/assets/1062408/abb659d1-6ad7-4f3a-870a-7c94eab59547
(I know it's not the prettiest animation, it's just to show that it works)

Excited for this. Definitely a more "fresh-y" way of doing this.

Dear Santa...
really looking forward to it!

Do you think this will eventually work with partials?


I have some applications in private hosted VMs whats the best practice for self hosted dapr

Most of my application is running in Azure but I still have some traditional applications running in IIS on a VM in our private hosting.
What's the recommended way of running the dapr process?  I can launch it standalone but without any container runtime it has not inherent reliability.  Do I need to wrap my services around it to start it, stop it etc or is their anything that exists for non container scenarios?

For your needs, you would treat the Dapr process as any executable that needs to be managed independently. Containers are one way to guarantee lifecycle management, others would be Chef, Puppet, Octopus Deploy etc. The Dapr process is unopinionated about what's running it, and as such there's no formal recommendation to be given.


Option to hide players' video boxes

I have only a few players that send me video, and I like to make them fairly big. Without popping out the video frames (which has it's own issues when the windows resizes) this results in a lot of wasted space. It would be great to have the option to hide a player's video box, on a player-by-player basis.

Thanks! I realized after filing this that although the suggestion fits with the theme of this module, maybe this exact issue is a better suggestion for a core feature. Maybe I'll throw a suggestion at the core team.

Yes, at a first time when I did the camera hiding feature for players, was already a "grey" area with something that Foundry should provide!
It is a great idea to provide the suggestion to core.

Will wait for a little longer to gather whether other users are also interested in this. It is quite the effort to do it. If nothing happens, will close this item eventually, as it is not yet on the short-term plans.

Took a year but I finally did it - @benbarbour this feature is in 1.4.18


v3.13.1

[v3.13.1] (Mar 08, 2024)
Fixes

Fixed a GroupChannel scroll issue on Safari when scrollBehavior is set to smooth
Fixed the case where the calculation of the input height in the chat window was not functioning properly

/bot create ticket

[Creating Ticket] 🔖 Done https://sendbird.atlassian.net/browse/SDKRLSD-1163


Now AMP ready

Just made this AMP ready! :)

If you use the Amp validator chrome extension, you'll see that this passes with flying colors :)


python311Packages.nats-py: 2.2.0 -> 2.3.1

Diff: https://github.com/nats-io/nats.py/compare/refs/tags/v2.2.0...v2.3.1
Changelog: https://github.com/nats-io/nats.py/releases/tag/v2.3.1
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.11 Release Notes (or backporting 23.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 254374 run on x86_64-linux 1

4 packages built:

python310Packages.nats-py
python310Packages.nats-py.dist
python311Packages.nats-py
python311Packages.nats-py.dist

@ofborg eval


Plan: add run-time in minutes as attribute to adjusted run times

implemented in https://github.com/jeroenterheerdt/HAsmartirrigation/releases/tag/v0.0.13


Allow cargo aliases to shadow existing commands with flags

Teaches cargo to accept default-args aliases of the form
[alias]
fmt = fmt --verbose
Teaches cargo to failfast (rather than stack overflow on corecursive
aliases)
[alias]
test-1 = test-2
test-2 = test-3
test-3 = test-1
Fixes #8360

r? @Eh2406
(rust-highfive has picked a reviewer for you, use r? to override)

r? @alexcrichton
since it's related to #9767

Added documentation
Migrated the test to support windows using @alexcrichton suggestion (thanks!)
Factored into 3 separate commits to ease reviewing
Added test to confirm builtins can't use this feature

Thanks! This affects the public API of cargo so I'm gonna ask for sign-off from others as well:
@rfcbot fcp merge

Re: Concern - builtins are blessed
Good point.
I believe disallowing aliases on builtin commands was an idea stolen from git. Here's an SO Post
It doesn't elaborate much on why. There's a benefit to disallowing aliasing of builtins away entirely - users confusing themselves out of fundamental commands. Aliasing with default args seems more ok. Perhaps it needn't be blessed for the default-args use case.
[alias]
build = my_custom_command  # might confuse users
build = "build --verbose". # maybe this is more ok?

Re: Concern - compatibility hazard
I think this compatibility hazard is preexisting. There's always the risk of adding a new builtin command - which can mess with people's aliases and custom subcommands. I think it's just the cost of adding a new builtin (it won't be backward compatible).
I know that appealing to the preexisting nature of the issue is not the best argument/defense - so consider it an opportunity to reconsider, but probably we'd have to think about how to handle subcommand / builtin conflicts as well.

Another issue is that tools invoke Cargo commands as part of build processes, and such aliases could disrupt automated builds. As far as I can tell, we don't even have an option to ignore a user's ~/.cargo/config.toml, other than overriding all of CARGO_HOME.
This is of course also a problem for other commands such as fmt, but that seems less likely to cause build breakage than overriding cargo build or cargo test or cargo run with local configuration.
I'd also hate to see a crate trying to override cargo build with its own non-standard build command.

@rfcbot concern breaking-automated-usage

I pulled out the non-controversial majority of this diff into #9791 - simply ensuring that we give a reasonable error message instead of stack-overflow when there are recursively defined aliases. Assuming that one can get in with less discussion, then we can have the discussion here on a smaller diff.

Another issue is that tools invoke Cargo commands as part of build processes, and such aliases could disrupt automated builds. As far as I can tell, we don't even have an option to ignore a user's ~/.cargo/config.toml, other than overriding all of CARGO_HOME.
This is of course also a problem for other commands such as fmt, but that seems less likely to cause build breakage than overriding cargo build or cargo test or cargo run with local configuration.
I'd also hate to see a crate trying to override cargo build with its own non-standard build command.

Great point - another reason to lean toward disallowing default-flags on builtin commands (or potentially disallowing default-flags entirely).

:umbrella: The latest upstream changes (presumably #9791) made this pull request unmergeable. Please resolve the merge conflicts.

We discussed this in today's @rust-lang/cargo meeting. We came to the conclusion that we really want to have consistency between internal and external cargo commands, so we don't want to allow aliases to override either one.
(We'd be happy to have improvements to the error messages for overriding external commands, though.)

Thanks @joshtriplett, @alexcrichton and all. Appreciated.
Consider giving the explanation on the tracking issue #8360 as well (and closing it)!


Update readme to reflect changes made in PR #141.

After PR #141 the the backend_service cloud_property takes either a string or a Map of strings, allowing the creation of a Internal Load Balancer.

Thank you!


FC Group and Feature Classes

Now that there is a solid workflow for the generic and simple processing of time series we need to extend capability to include other methods of cleaning the data.  Common methods are some sort of sorting of Fourier Coefficients, like simple coherency sorting, etc. These are static estimations, in that they can be calculated once and do not depend on other estimates.  Whereas dynamic estimations are recalculated after an initial pass, like the down weighting by distance.
We can store the static estimations: coherence, multiple coherence, polarization, etc. and move the dynamic methods to the regression.
Structure

[ ] setup a Features group under Station

[ ] Processing Run -> Decimation Level -> Feature [has to have same time axis as FC's]
[ ] Cross powers
[ ] Time series features

Feature Class

[ ] metadata for the method

[ ] type [real, complex, bool]
[ ] bands [this is different from frequency bands for FC estimation]
[ ] thresholding [not applied]
[ ] channels used, from which station [should be labelled as '{station}.{channel}'

Steps

Calculate cross powers
Calculate feature
Regression
TF

@kkappler What type of metadata do we need for each level of features?
MasterFeatureGroup
None, this is just a bookkeeping group for H5
MasterFeatureGroup -> FeatureRunGroup
This is a processing run that will hold all the decimations levels for that processing run.

start time
end time
sample rate
stations used?

MasterFeatureGroup -> FeatureRunGroup -> DecimationLevel
This is a single decimation level for the processing run.

start time
end time
sample rate
time step
frequency bands

MasterFeatureGroup -> FeatureRunGroup -> DecimationLevel -> Feature
This is a single feature for a single cross power at a single decimation level for the processing run. Therefore, each feature will have similar metadata, but there may be some that are extras?
This will be stored as an xarray-like object with coordinates of time steps and frequency bands and data of FC features like coherency, polarization, etc for a single cross power.

What type of feature
Feature parameters

method
thresholds [not applied]

bands
channels used, labeled as survey.station.channel


Add test ids

Add test ids for:
access_test.go
vmi_lifecycle_test.go
migration_test.go
vmi_multus_test.go
container_disk_test.go
template_test.go

What this PR does / why we need it:
Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #
Special notes for your reviewer:
Release note:

NONE

/lgtm
/approve
/retest


Auth: Server side does not work

Hello
After a lot of debugging, I found out that an error has been silenced.
The Auth module does not load the user while on the server.
I managed to print the error while on the server side:
TypeError: this.scheme.$auth.ctx.beforeNuxtRender is not a function
  at ConfigurationDocument.request (/DIR/.nuxt/dist/server/server.mjs:5353:31)
  at processTicksAndRejections (node:internal/process/task_queues:96:5)
  at async ConfigurationDocument.init (/DIR/.nuxt/dist/server/server.mjs:5399:5)
  at async OpenIDConnectScheme.mounted (/DIR/.nuxt/dist/server/server.mjs:6694:5)
  at async Auth.init (/DIR/.nuxt/dist/server/server.mjs:4688:7)
  at async /DIR/.nuxt/dist/server/server.mjs:4552:9
  at async Object.callAsync (/DIR/node_modules/unctx/dist/index.mjs:45:16)
  at async applyPlugin (/DIR/.nuxt/dist/server/server.mjs:516:23)
  at async Module.applyPlugins (/DIR/.nuxt/dist/server/server.mjs:526:5)
  at async createNuxtAppServer (/DIR/.nuxt/dist/server/server.mjs:46:7)

The lines are not right, but here is the piece of code:
https://github.com/Teranode/nuxt-module-alternatives/blob/b19bc7051beb69109fa18bd7a6acb9da5463a5d4/%40nuxtjs-alt/auth/src/runtime/inc/configuration-document.ts#L62-L71
If you comment this line of code (since its only to avoid fetching it while being on the client side), another problem happen:
Error: nuxt instance unavailable
  at Module.useNuxtApp (/DIR/.nuxt/dist/server/server.mjs:584:13)
  at Module.useRoute (/DIR/.nuxt/dist/server/server.mjs:1340:32)
  at OpenIDConnectScheme.#handleCallback (/DIR/.nuxt/dist/server/server.mjs:6743:41)
  at OpenIDConnectScheme.mounted (/DIR/.nuxt/dist/server/server.mjs:6700:50)
  at processTicksAndRejections (node:internal/process/task_queues:96:5)
  at async Auth.init (/DIR/.nuxt/dist/server/server.mjs:4688:7)
  at async /DIR/.nuxt/dist/server/server.mjs:4552:9
  at async Object.callAsync (/DIR/node_modules/unctx/dist/index.mjs:45:16)
  at async applyPlugin (/DIR/.nuxt/dist/server/server.mjs:516:23)
  at async Module.applyPlugins (/DIR/.nuxt/dist/server/server.mjs:526:5)

Which this time lies here:
https://github.com/Teranode/nuxt-module-alternatives/blob/b19bc7051beb69109fa18bd7a6acb9da5463a5d4/%40nuxtjs-alt/auth/src/runtime/schemes/openIDConnect.ts#L192-L193
Seems like the scheme's mounted() function is called too soon?
What do you think? I already spend way too much time debugging this... And I think I am close to finally make it work!
Could we discuss it by a faster way like via email or discord?

i messed up on the pull requests. I only wanted to do one but github.dev wasn't allowing me to update the first pull request...

@Teranode is there a problem with the pull requests?
Is it because you wanted all into one?

I had updated the npm package, I don't update this repository at the same time as npm.

I am not sure to understand, but thanks for accepting the code anyway :)

It's now working without a problem!
Thanks a lot for maintaining this library!


Ensure only href-checker runs on docs only commit

Seperates href-checker into make verify-docs command.

Updates Travis script to only run full build on changes to
non-markdown or docs/ files.

The href-checker still runs via make verify-docs for all Travis
builds.
Closes #1673

No worries - the stages look a lot neater :)
I've rebased, but I need to check before_install works the same with stages. I'll have a look tomorrow.

@kibbles-n-bytes everything is running fine apart from the deploy stage which fails with the following message:
/home/travis/.travis/job_stages: line 57: kubernetes-incubator/service-catalog}},: No such file or directory
Is this a known issue with pull requests? Or is it a problem I need to look into?

@cgmcintyr Not sure; haven't seen that error before. See if the syntax comment I made above changes things; hopefully it's just an undefined structure for include (though documentation is really sparse...). The deploy stage is supposed to be skipped entirely for PRs, so something's off.

Thanks, that was the problem :)

LGTM.
@kibbles-n-bytes @cgmcintyr is this PR safe to merge? The comment about the syntax seems to have been addressed.

I'm happy with it going in. I think we might want to tweak the structure later, but this has been outstanding for a while and is a clear value add.


1.17.1 fabric support

It would be nice if I could use this lovely mod with 1.17.1 fabric. Do you plan on updating the mod?

Yeah sure, I'll work on that. I'll try to get it working by the end of the week, I'm super busy lately. The upgrade should be fast to write :)

Oh that's great! Please take your time! Don't want to add any stress to your busy schedule!

To give you an update, it's still on my todo list. Fabric 1.17 requires Java 16, so I need to re-do some stuff on the configuration side. I'll work on it as soon as I get at least 1h of free time.

Finally done: https://github.com/lilgallon/Bettercolors/releases/tag/7.4.0-MC1.17.1fa
I've got some free time in the upcoming days, hit me up if anything is not wrong


Add experimentation folder

This PR adds the experimentation folder in the root of the project, and all the existing experimental results are moved into there. This is to help in the overall organization of the repo.

Thanks a lot Fernanda!


Using npm with js agent?

I've looked through the wiki and can't find anything that mentions how to include other libraries when using the Javascript agent.
Is there anyway to use npm/yarn and can someone point me to some docs about it.

Looks like this is a dupe of https://github.com/huginn/huginn/issues/1064

Kind of, yes 😄 . What you can do to get around it is to include the minified version of the library in your JavaScriptAgents code.

I was hoping huginn used execjs so I could have just enabled the node option. Without being able to use npm libs it kinda makes the js agent pointless when you can just have the shell agent start node with your actual script.

The main benefit of the JavaScriptAgent is the option to interoperate with Huginn/ruby like setting the Agent's memory, emitting multiple events, etc, while still having the freedom to define the logic. This is only possible by using an embedded JavaScript runtime but comes with limitations like not being able to use npm modules. I think both Agents have their use case depending on what one wants to achieve.


How Place archive.txt relative to playlist download folder?

Please follow the guide below

You will be asked some questions and requested to provide some information, please read them carefully and answer honestly
Put an x into all the boxes [ ] relevant to your issue (like this: [x])
Use the Preview tab to see what your issue will actually look like

Make sure you are using the latest version: run youtube-dl --version and ensure your version is 2017.11.15. If it's not, read this FAQ entry and update. Issues with outdated version will be rejected.

[x] I've verified and I assure that I'm running youtube-dl 2017.11.15

Before submitting an issue make sure you have:

[x] At least skimmed through the README, most notably the FAQ and BUGS sections
[x] Searched the bugtracker for similar issues including closed ones

What is the purpose of your issue?

[ ] Bug report (encountered problems with youtube-dl)
[ ] Site support request (request for adding support for a new site)
[x] Feature request (request for a new functionality)
[x] Question
[ ] Other

The following sections concretize particular purposed issues, you can erase any section (the contents between triple ---) not applicable to your issue

If the purpose of this issue is a bug report, site support request or you are not completely sure provide the full verbose output as follows:
Add the -v flag to your command line you run youtube-dl with (youtube-dl -v <your command line>), copy the whole output and insert it here. It should look similar to one below (replace it with your log inserted between triple ```):
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
[debug] youtube-dl version 2017.11.15
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
[debug] Proxy map: {}
...
<end of log>

If the purpose of this issue is a site support request please provide all kinds of example URLs support for which should be included (replace following example URLs by yours):

Single video: https://www.youtube.com/watch?v=BaW_jenozKc
Single video: https://youtu.be/BaW_jenozKc
Playlist: https://www.youtube.com/playlist?list=PL4lCao7KL_QFVb7Iudeipvc2BCavECqzc

Note that youtube-dl does not support sites dedicated to copyright infringement. In order for site support request to be accepted all provided example URLs should not violate any copyrights.

Description of your issue, suggested solution and other information
Explanation of your issue in arbitrary form goes here. Please make sure the description is worded well enough to be understood. Provide as much context and examples as possible.
If work on your issue requires account credentials please provide them or explain how one can obtain them.
First of all, I can't thank you enough for this software. Keep up the good work.
The problem I have is creating a separate archive.txt file for each playlist i download from youtube. I need to download each playlist to a folder & maintain archive.txt inside it. I CAN download fine, but can't find how to keep the archive.txt file relative to the download folder.
Currently, just using -download-archive archive.txt creates a file relative to the location of my .sh script & not to the download folder.
My code is :
outputdir="/media/michael/multimedia/_youtube-downloads"
url="https://www.youtube.com/watch?xxxxxxxxx"
outputtemplate="$outputdir/%(playlist_title)s/%(title)s__%(uploader)s.%(ext)s"
downloadedlist="$outputdir/%(playlist_title)s/.downloaded.txt"
audioformat="mp3"

youtube-dl --extract-audio --audio-format $audioformat --restrict-filenames  --download-archive $downloadedlist -o $outputtemplate $url

The error I get with the above code is :
IOError: [Errno 2] No such file or directory: '/media/michael/multimedia/_youtube-downloads/%(playlist_title)s/.downloaded.txt'
Note how the variable/argument %(playlist_title)s/  is printed out as is.

--download-archive is not supposed to be used with output template. You must specify a path without any placeholders.

Thanks, any advice on how to return the playlist_title with youtube-dl ? any script or argument that allows me to get the playlist name from a url ?

That's conceptually impossible in general. URL may contain videos from different playlists or video that does not belong to any playlist at all.

Sorry, what I should have asked was : how can I return data from a url in json or any other format, then I can use this data to generate my file paths ..

-j, --dump-json                  Simulate, quiet but print JSON information.
                                 See the "OUTPUT TEMPLATE" for a description
                                 of available keys.
-J, --dump-single-json           Simulate, quiet but print JSON information
                                 for each command-line argument. If the URL
                                 refers to a playlist, dump the whole
                                 playlist information in a single line.


Notebooks 2.0 // Frontend // Workspaces table // Edit workspace

Implement edit workspace action. It will use the same UI as the creation, but with populated data from the workspace.

Hey @paulovmr, can I work on this story?

@paulovmr @ederign
i want to work on this issue

/assign

/unassign

Still want to work on this issue !
Just i want to make sure where i can find the design ?


change size

how can i set size for the notifications ?? such  as  with andlength ?? thanks...

this is impossible


Add Evals

"evals are surprisingly often all you need"
But here we are evaluating a pretty novel dimension:
How can we systematically quantify generated text/audio is engaging, follows a target configuration while delivering accurate and informative content?
This is perhaps the most challenging yet most pressing issue to solve.

import numpy as np
from typing import List, Dict, Any
from rouge_score import rouge_scorer
from spacy import load
from bert_score import score
from scipy.stats import entropy
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
from nltk.tokenize import sent_tokenize
import re

class AutomaticMetrics:
    """
    Automatic evaluation metrics for generated podcasts based on:
    - ROUGE [Lin, 2004]
    - Entity Coverage [Xu et al., 2023]
    - Dialogue Balance [Krishna et al., 2023]
    - Citation Verification [Gao et al., 2023]
    """
    def __init__(self):
        # Initialize NLP components
        self.nlp = load("en_core_web_sm")
        self.rouge_scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'])
        self.toxicity_model = AutoModelForSequenceClassification.from_pretrained(
            "martin-ha/toxic-comment-model"
        )
        self.toxicity_tokenizer = AutoTokenizer.from_pretrained(
            "martin-ha/toxic-comment-model"
        )

    def evaluate_content_coverage(
        self,
        source_text: str,
        generated_text: str
    ) -> Dict[str, float]:
        """
        Evaluate content coverage using ROUGE scores and entity overlap.
        Based on: "A Critical Evaluation of Evaluations for Long-form QA"
        [Xu et al., 2023]
        """
        # Calculate ROUGE scores
        rouge_scores = self.rouge_scorer.score(source_text, generated_text)

        # Extract entities
        source_entities = set(self._extract_entities(source_text))
        generated_entities = set(self._extract_entities(generated_text))

        # Calculate entity coverage
        entity_recall = len(generated_entities.intersection(source_entities)) / len(source_entities) if source_entities else 0

        return {
            'rouge1': rouge_scores['rouge1'].fmeasure,
            'rouge2': rouge_scores['rouge2'].fmeasure,
            'rougeL': rouge_scores['rougeL'].fmeasure,
            'entity_recall': entity_recall
        }

    def analyze_dialogue_structure(
        self,
        transcript: str
    ) -> Dict[str, float]:
        """
        Analyze dialogue balance and structure.
        Based on: "LongEval: Guidelines for Human Evaluation of Faithfulness
        in Long-form Summarization" [Krishna et al., 2023]
        """
        # Split into speaker turns
        turns = self._split_into_turns(transcript)

        # Calculate turn statistics
        speaker_counts = {}
        turn_lengths = []

        for turn in turns:
            speaker = turn['speaker']
            text = turn['text']

            speaker_counts[speaker] = speaker_counts.get(speaker, 0) + 1
            turn_lengths.append(len(text.split()))

        # Calculate dialogue metrics
        total_turns = len(turns)
        turn_distribution = [count/total_turns for count in speaker_counts.values()]

        return {
            'speaker_entropy': entropy(turn_distribution),
            'avg_turn_length': np.mean(turn_lengths),
            'turn_length_variance': np.var(turn_lengths),
            'interaction_score': self._calculate_interaction_score(turns)
        }

    def verify_citations(
        self,
        generated_text: str,
        sources: List[Dict[str, str]]
    ) -> Dict[str, float]:
        """
        Verify citation accuracy and coverage.
        Based on: "Enabling Large Language Models to Generate Text with Citations"
        [Gao et al., 2023]
        """
        # Extract cited statements
        citations = self._extract_citations(generated_text)

        # Verify each citation
        correct_citations = 0
        for citation in citations:
            statement = citation['statement']
            source_id = citation['source_id']
            source_text = next(
                (s['text'] for s in sources if s['id'] == source_id),
                None
            )

            if source_text and self._verify_statement(statement, source_text):
                correct_citations += 1

        return {
            'citation_precision': correct_citations / len(citations) if citations else 0,
            'citation_density': len(citations) / len(sent_tokenize(generated_text))
        }

    def measure_engagement(
        self,
        transcript: str
    ) -> Dict[str, float]:
        """
        Measure engagement through linguistic features.
        Based on: "What makes conversations engaging?" [Zhang et al., 2023]
        """
        # Analyze question frequency
        questions = len(re.findall(r'\?', transcript))

        # Calculate sentiment variance
        sentiments = self._analyze_sentiment_by_turn(transcript)

        # Check linguistic diversity
        vocab_richness = len(set(transcript.split())) / len(transcript.split())

        return {
            'question_density': questions / len(sent_tokenize(transcript)),
            'sentiment_variance': np.var(sentiments),
            'vocabulary_richness': vocab_richness,
            'toxicity_score': self._measure_toxicity(transcript)
        }

    def _extract_entities(self, text: str) -> List[str]:
        """Extract named entities using spaCy."""
        doc = self.nlp(text)
        return [ent.text for ent in doc.ents]

    def _split_into_turns(self, transcript: str) -> List[Dict[str, str]]:
        """Split transcript into speaker turns."""
        turns = []
        pattern = r'<(Person\d)>(.*?)</\1>'
        matches = re.finditer(pattern, transcript, re.DOTALL)

        for match in matches:
            speaker, text = match.groups()
            turns.append({
                'speaker': speaker,
                'text': text.strip()
            })

        return turns

    def _calculate_interaction_score(self, turns: List[Dict[str, str]]) -> float:
        """Calculate interaction score based on turn-taking patterns."""
        question_pattern = r'\?'
        interaction_pairs = 0

        for i in range(len(turns)-1):
            current_turn = turns[i]['text']
            next_turn = turns[i+1]['text']

            # Check if current turn has question and next turn responds
            if re.search(question_pattern, current_turn):
                interaction_pairs += 1

        return interaction_pairs / len(turns) if turns else 0

    def _verify_statement(self, statement: str, source: str) -> bool:
        """Verify if statement is supported by source using BERTScore."""
        precision, recall, f1 = score(
            [statement],
            [source],
            lang='en'
        )
        return f1.mean().item() > 0.6  # Threshold based on empirical testing

    def _analyze_sentiment_by_turn(self, transcript: str) -> List[float]:
        """Analyze sentiment for each turn."""
        turns = self._split_into_turns(transcript)
        sentiments = []

        for turn in turns:
            # Use toxicity model for sentiment approximation
            inputs = self.toxicity_tokenizer(
                turn['text'],
                return_tensors="pt",
                truncation=True
            )
            outputs = self.toxicity_model(**inputs)
            sentiment = torch.sigmoid(outputs.logits).item()
            sentiments.append(sentiment)

        return sentiments

    def _measure_toxicity(self, text: str) -> float:
        """Measure overall toxicity of the text."""
        inputs = self.toxicity_tokenizer(
            text,
            return_tensors="pt",
            truncation=True
        )
        outputs = self.toxicity_model(**inputs)
        return torch.sigmoid(outputs.logits).item()

# Example usage
def main():
    evaluator = AutomaticMetrics()

    # Example transcript
    transcript = """
    <Person1>Can you explain how neural networks learn?</Person1>
    <Person2>Neural networks learn through a process called backpropagation...</Person2>
    <Person1>That's interesting! How does backpropagation work exactly?</Person1>
    <Person2>Think of backpropagation as a way for the network to adjust its mistakes...</Person2>
    """

    # Example sources
    sources = [{
        'id': '1',
        'text': 'Neural networks learn through backpropagation, adjusting weights based on errors.'
    }]

    # Run evaluations
    coverage_scores = evaluator.evaluate_content_coverage(
        sources[0]['text'],
        transcript
    )
    dialogue_scores = evaluator.analyze_dialogue_structure(transcript)
    citation_scores = evaluator.verify_citations(transcript, sources)
    engagement_scores = evaluator.measure_engagement(transcript)

    print("Evaluation Results:")
    print("Coverage:", coverage_scores)
    print("Dialogue:", dialogue_scores)
    print("Citations:", citation_scores)
    print("Engagement:", engagement_scores)

if __name__ == "__main__":
    main()

from typing import List, Dict, Any
import numpy as np
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import re
from nltk.tokenize import sent_tokenize
from textblob import TextBlob
from collections import Counter

class EngagementMetrics:
    """
    Extended metrics for measuring conversation engagement based on:
    Zhang et al. "Unveiling the Secrets of Engaging Conversations"
    """
    def __init__(self):
        self.emotion_model = AutoModelForSequenceClassification.from_pretrained(
            "j-hartmann/emotion-english-distilroberta-base"
        )
        self.emotion_tokenizer = AutoTokenizer.from_pretrained(
            "j-hartmann/emotion-english-distilroberta-base"
        )

    def evaluate_engagement(self, transcript: str) -> Dict[str, float]:
        """Calculate comprehensive engagement metrics."""
        turns = self._split_into_turns(transcript)

        return {
            'turn_dynamics': self._measure_turn_dynamics(turns),
            'emotional_resonance': self._measure_emotional_resonance(turns),
            'content_depth': self._measure_content_depth(turns),
            'interactive_flow': self._measure_interactive_flow(turns)
        }

    def _measure_turn_dynamics(self, turns: List[Dict]) -> Dict[str, float]:
        """
        Measure turn-taking dynamics including:
        - Response latency patterns
        - Turn length variations
        - Speaker balance
        """
        turn_lengths = [len(turn['text'].split()) for turn in turns]
        speaker_counts = Counter(turn['speaker'] for turn in turns)

        return {
            'turn_length_mean': np.mean(turn_lengths),
            'turn_length_variance': np.var(turn_lengths),
            'speaker_balance': min(speaker_counts.values()) / max(speaker_counts.values()),
            'consistent_engagement': self._calculate_engagement_consistency(turn_lengths)
        }

    def _measure_emotional_resonance(self, turns: List[Dict]) -> Dict[str, float]:
        """
        Analyze emotional aspects including:
        - Emotion transitions
        - Sentiment synchronization
        - Emotional intensity
        """
        emotions = []
        for turn in turns:
            inputs = self.emotion_tokenizer(
                turn['text'],
                return_tensors="pt",
                truncation=True
            )
            outputs = self.emotion_model(**inputs)
            emotion_probs = torch.softmax(outputs.logits, dim=1)
            emotions.append(emotion_probs.detach().numpy())

        return {
            'emotion_coherence': self._calculate_emotion_coherence(emotions),
            'sentiment_alignment': self._calculate_sentiment_alignment(turns),
            'emotional_range': self._calculate_emotional_range(emotions)
        }

    def _measure_content_depth(self, turns: List[Dict]) -> Dict[str, float]:
        """
        Evaluate content quality including:
        - Topic development
        - Information density
        - Vocabulary sophistication
        """
        all_text = " ".join(turn['text'] for turn in turns)
        sentences = sent_tokenize(all_text)

        return {
            'vocab_diversity': len(set(all_text.split())) / len(all_text.split()),
            'topic_coherence': self._calculate_topic_coherence(turns),
            'information_density': self._calculate_information_density(sentences)
        }

    def _measure_interactive_flow(self, turns: List[Dict]) -> Dict[str, float]:
        """
        Analyze interaction patterns including:
        - Question-answer dynamics
        - Follow-up behaviors
        - Engagement signals
        """
        return {
            'question_answer_ratio': self._calculate_qa_ratio(turns),
            'followup_rate': self._calculate_followup_rate(turns),
            'engagement_signals': self._detect_engagement_signals(turns)
        }

    def _calculate_engagement_consistency(self, turn_lengths: List[int]) -> float:
        """Measure consistency of engagement through turn lengths."""
        if not turn_lengths:
            return 0.0
        # Calculate moving average of turn lengths
        window_size = 3
        moving_avgs = []
        for i in range(len(turn_lengths) - window_size + 1):
            window = turn_lengths[i:i + window_size]
            moving_avgs.append(np.mean(window))
        # Calculate variance of moving averages
        return 1 / (1 + np.var(moving_avgs))

    def _calculate_emotion_coherence(self, emotions: List[np.ndarray]) -> float:
        """Calculate emotional coherence between turns."""
        if len(emotions) < 2:
            return 0.0
        coherence_scores = []
        for i in range(len(emotions) - 1):
            similarity = np.dot(emotions[i][0], emotions[i+1][0])
            coherence_scores.append(similarity)
        return np.mean(coherence_scores)

    def _calculate_topic_coherence(self, turns: List[Dict]) -> float:
        """Measure topic development and maintenance."""
        # Simplified topic coherence using lexical overlap
        words_by_turn = [set(turn['text'].lower().split()) for turn in turns]
        coherence_scores = []
        for i in range(len(words_by_turn) - 1):
            overlap = len(words_by_turn[i] & words_by_turn[i+1])
            union = len(words_by_turn[i] | words_by_turn[i+1])
            coherence_scores.append(overlap / union if union > 0 else 0)
        return np.mean(coherence_scores)

    def _calculate_information_density(self, sentences: List[str]) -> float:
        """Calculate information density using sentence complexity."""
        # Using sentence length and unique words as proxy for information density
        densities = []
        for sent in sentences:
            words = sent.split()
            unique_ratio = len(set(words)) / len(words) if words else 0
            densities.append(len(words) * unique_ratio)
        return np.mean(densities)

    def _calculate_qa_ratio(self, turns: List[Dict]) -> float:
        """Calculate ratio of questions to answers."""
        questions = sum(1 for turn in turns if '?' in turn['text'])
        return questions / len(turns) if turns else 0

    def _detect_engagement_signals(self, turns: List[Dict]) -> float:
        """Detect explicit engagement signals in conversation."""
        engagement_markers = [
            r'\b(interesting|fascinating|tell me more|i see|wow|really|oh)\b',
            r'[!?]{2,}',
            r'\b(agree|exactly|absolutely|definitely)\b'
        ]
        total_signals = 0
        for turn in turns:
            for marker in engagement_markers:
                total_signals += len(re.findall(marker, turn['text'].lower()))
        return total_signals / len(turns) if turns else 0

    def _split_into_turns(self, transcript: str) -> List[Dict[str, str]]:
        """Split transcript into turns."""
        turns = []
        pattern = r'<(Person\d)>(.*?)</\1>'
        matches = re.finditer(pattern, transcript, re.DOTALL)
        for match in matches:
            speaker, text = match.groups()
            turns.append({
                'speaker': speaker,
                'text': text.strip()
            })
        return turns

# Example usage
def main():
    evaluator = EngagementMetrics()

    transcript = """
    <Person1>What's your take on artificial intelligence?</Person1>
    <Person2>AI is fascinating! It's revolutionizing how we solve complex problems.</Person2>
    <Person1>That's interesting! Could you give an example?</Person1>
    <Person2>Absolutely! Take medical diagnosis for instance. AI can now detect patterns in medical images with remarkable accuracy!</Person2>
    """

    results = evaluator.evaluate_engagement(transcript)
    print("Engagement Metrics:")
    for category, scores in results.items():
        print(f"\n{category.replace('_', ' ').title()}:")
        for metric, value in scores.items():
            print(f"  {metric}: {value:.3f}")

if __name__ == "__main__":
    main()

LLM-as-a-judge sounds like an interesting, flexible and clean solution for this
https://huggingface.co/learn/cookbook/en/llm_judge

Also, https://github.com/HLasse/TextDescriptives
for a metrics-based approach


Enable codecov in GHA

This enables the Codecov.io GitHub action to track and report code coverage in PRs and over time.
100% coverage isn't required, but it tends to be good to see if newly added lines aren't exercised by tests.
The repo may need to be separately activated on Codecov if nothing happens.

@adieyal Yep, you'll probably need to log in on Codecov and activate this repo: https://codecov.io/login/gh

done


Feature flag to direct users to a particular index

Type
✨ In order to show different sets of users different indexes available through the catalogue API the app should have a mapping from group -> index.
Needs
An expected format for the mapping:
{
  "groups": [
    {
      "id": "group_name",
      "search_index": "search_index_id"
    }
  ]
}

The JSON will be made available via S3 and will be publicly accessible.

Might be nice to work on this with @alicefuzier

Tweaked feature flag functionality to enable this instead, so we can control the mappings with Prismic


Tests fail to build: error: no matching member function for call to 'allocate'

When SIRIUS is built with SIRIUS_USE_MEMORY_POOL=OFF, tests fail to build:
In file included from /usr/ports/science/sirius/work/SIRIUS-7.5.0/apps/unit_tests/test_mempool.cpp:2:
/usr/ports/science/sirius/work/SIRIUS-7.5.0/src/core/memory.hpp:364:16: error: no matching member function for call to 'allocate'
        return allocate<T>(num_elements__, M_);
               ^~~~~~~~~~~
/usr/ports/science/sirius/work/SIRIUS-7.5.0/apps/unit_tests/test_mempool.cpp:14:26: note: in instantiation of function template specialization 'sirius::memory_pool::allocate<std::complex<double>>' requested here
    auto ptr        = mp.allocate<double_complex>(1024);
                         ^
/usr/ports/science/sirius/work/SIRIUS-7.5.0/src/core/memory.hpp:355:5: note: candidate function template not viable: requires single argument 'num_elements__', but 2 arguments were provided
    allocate(size_t num_elements__)
    ^
/usr/ports/science/sirius/work/SIRIUS-7.5.0/src/core/memory.hpp:364:16: error: no matching member function for call to 'allocate'
        return allocate<T>(num_elements__, M_);
               ^~~~~~~~~~~
/usr/ports/science/sirius/work/SIRIUS-7.5.0/apps/unit_tests/test_mempool.cpp:49:30: note: in instantiation of function template specialization 'sirius::memory_pool::allocate<double>' requested here
            double* ptr = mp.allocate<double>(sz);
                             ^
/usr/ports/science/sirius/work/SIRIUS-7.5.0/src/core/memory.hpp:355:5: note: candidate function template not viable: requires single argument 'num_elements__', but 2 arguments were provided
    allocate(size_t num_elements__)
    ^
/usr/ports/science/sirius/work/SIRIUS-7.5.0/src/core/memory.hpp:364:16: error: no matching member function for call to 'allocate'
        return allocate<T>(num_elements__, M_);
               ^~~~~~~~~~~
/usr/ports/science/sirius/work/SIRIUS-7.5.0/apps/unit_tests/test_mempool.cpp:94:20: note: in instantiation of function template specialization 'sirius::memory_pool::allocate<char>' requested here
    char* ptr = mp.allocate<char>(n);
                   ^
/usr/ports/science/sirius/work/SIRIUS-7.5.0/src/core/memory.hpp:355:5: note: candidate function template not viable: requires single argument 'num_elements__', but 2 arguments were provided
    allocate(size_t num_elements__)
    ^
3 errors generated.

Version: 7.5.0
clang-16
FreeBSD 14.0

Thank you for the report.
This has been fixed it current develop branch: https://github.com/electronic-structure/SIRIUS/pull/939

Hi @yurivict ! I just tagged 7.5.1 which should contain the fixes for that.


Define clear task structure

Define a clear structure of how our tasks need to be written for future tasks. The best would be a small example task that shows the structure and input/output handling

In the docs, there should be a couple of example tasks:

A global task (acting on nothing);
A task which will be parallelized over wells.

Each task should have its full call signature, i.e. it should include both fractal-specific and task-specific arguments. And we should also show how a task can be added to the manifest.
This issue is currently on hold, waiting for the ongoing major refactor of the server/client architecture.

Close in favor of https://github.com/fractal-analytics-platform/fractal-tasks-core/issues/151


Added new product types.

Resolves https://github.com/tuist/XcodeProj/issues/617
Short description 📝
Added definitions for com.apple.product-type.driver-extension and com.apple.product-type.system-extension
Here is how pbxproj file looks like:
80FE40502679519400D7853F /* MyDriver */ = {
	isa = PBXNativeTarget;
	buildConfigurationList = 80FE405D2679519400D7853F /* Build configuration list for PBXNativeTarget "MyDriver" */;
	buildPhases = (
		80FE404C2679519400D7853F /* Headers */,
		80FE404D2679519400D7853F /* Sources */,
		80FE404E2679519400D7853F /* Frameworks */,
		80FE404F2679519400D7853F /* Resources */,
	);
	buildRules = (
	);
	dependencies = (
	);
	name = MyDriver;
	productName = MyDriver;
	productReference = 80FE40512679519400D7853F /* abc.xyz.any.MyDriver.dext */;
	productType = "com.apple.product-type.driver-extension";
};
80FE40632679523400D7853F /* MySysExtension */ = {
	isa = PBXNativeTarget;
	buildConfigurationList = 80FE406E2679523400D7853F /* Build configuration list for PBXNativeTarget "MySysExtension" */;
	buildPhases = (
		80FE40602679523400D7853F /* Sources */,
		80FE40612679523400D7853F /* Frameworks */,
		80FE40622679523400D7853F /* Resources */,
	);
	buildRules = (
	);
	dependencies = (
	);
	name = MySysExtension;
	productName = MySysExtension;
	productReference = 80FE40642679523400D7853F /* abc.xyz.any.xxx.MySysExtension.systemextension */;
	productType = "com.apple.product-type.system-extension";
};

Codecov Report

Merging #618 (eedc198) into main (6910a7f) will increase coverage by 0.00%.
The diff coverage is 50.00%.

@@           Coverage Diff           @@
##             main     #618   +/-   ##
=======================================
  Coverage   84.17%   84.17%
=======================================
  Files         154      154
  Lines        8718     8662   -56
=======================================
- Hits         7338     7291   -47
+ Misses       1380     1371    -9

Impacted Files
Coverage Δ

...ces/XcodeProj/Objects/Targets/PBXProductType.swift
55.88% <50.00%> (-0.79%)
:arrow_down:

Sources/XcodeProj/Errors/Errors.swift
23.61% <0.00%> (-12.50%)
:arrow_down:

Sources/XcodeProj/Scheme/XCScheme.swift
53.73% <0.00%> (-7.47%)
:arrow_down:

Sources/XcodeProj/Objects/Project/PBXObjects.swift
77.00% <0.00%> (-1.93%)
:arrow_down:

Sources/XcodeProj/Utils/CommentedString.swift
92.75% <0.00%> (-0.40%)
:arrow_down:

...es/XcodeProj/Objects/Project/PBXObjectParser.swift
90.16% <0.00%> (-0.16%)
:arrow_down:

Sources/XcodeProj/Utils/ReferenceGenerator.swift
92.89% <0.00%> (-0.04%)
:arrow_down:

Sources/XcodeProj/Utils/Decoders.swift
100.00% <0.00%> (ø)

...ts/XcodeProjTests/Utils/ObjectReferenceTests.swift
100.00% <0.00%> (ø)

Sources/XcodeProj/Extensions/String+md5.swift
12.66% <0.00%> (+1.80%)
:arrow_up:

Continue to review full report at Codecov.

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


Fix Xcode backend

This makes the Xcode backend work.

Stopped crashes from build.CustomTarget being unsupported.
Fixes include directories.
Now adds compiler arguments to targets
Fixed typo causing Sources directory to show up as red.

I've been using this command to generate Xcode projects:
. build/frida-meson-env-macos-x86_64.rc; \
export builddir=build/xcode/frida-gum; \
mkdir -p $builddir; \
meson \
--prefix $PWD/frida/build/frida-macos-x86_64 \
--cross-file build/frida-macos-x86_64.txt \
--default-library static --backend xcode --buildtype minsize --strip -Denable_diet=auto \
frida-gum $builddir

Awesome!
Before landing this, let's remove the trailing whitespace and ensure that blank line separations are always just one blank line. (Unless the existing code uses e.g. two blank lines consistently in certain places, in which case it's fine.)
Would be awesome to submit this upstream after landing it.

Okay I ran it through pylint and removed all the trailing whitespace warnings I saw, and removed the two blank lines I found.
Honestly I don't really know python, and getting this working was a struggle for me. Submitting upstream requires adding tests according to their guidelines, and it's too deep of a rabbit hole for me to jump into but of course anyone can feel free to do so.
Here are the issues that still crop up:

Crashes on pickling @ https://github.com/frida/meson/blob/master/mesonbuild/mesonmain.py#L186 - This is after the Xcode project file is generated, so it doesn't affect anything.
Doesn't set include flag for frida-version.h
Doesn't set Base SDK or architectures for iOS targets, so that has to be manually done for now
I still had to manually add in a couple include directories when building frida-gumjs.

Totally understand! I'll merge this, and look into opening a PR upstream asking for volunteers to take it further. (Even if they can't merge it as-is, someone might have been sitting on the fence thinking about fixing the Xcode backend – fingers crossed :-) ).
Thanks a lot for this awesome PR! ❤


Unable to delete indicators

When trying to delete indicators using this SDK, the call is missing the v2:
https://sandbox.threatconnect.com/api//indicators/hosts/example.com.
I hope to have a PR to fix this in the near future.

Fixed with #19 .


unzip depedency for staging

fixes https://github.com/solarkennedy/puppet-consul/issues/164

Thanks!


Unable to build for Android

Steps to reproduce problem

Download latest GraalVM version (At the time of writing)
Set environment values according to manual
Download the HelloFX project from the examples repository
Set build target to Android from pom.xml
Run mvn clean client:build  at the project root

Output:
ubuntu@Ubuntu-Desktop:~/Documents/HelloFX$ mvn clean client:build
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/usr/share/maven/lib/guice.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------< hello:hellofx >----------------------------
[INFO] Building hellofx 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hellofx ---
[INFO] Deleting /home/ubuntu/Documents/HelloFX/target
[INFO]
[INFO] ---------------------------< hello:hellofx >----------------------------
[INFO] Building hellofx 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- client-maven-plugin:0.1.28:build (default-cli) @ hellofx ---
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/usr/share/maven/lib/guice.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------< hello:hellofx >----------------------------
[INFO] Building hellofx 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> client-maven-plugin:0.1.28:compile (default-cli) > process-classes @ hellofx >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hellofx ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ hellofx ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/ubuntu/Documents/HelloFX/target/classes
[INFO]
[INFO] <<< client-maven-plugin:0.1.28:compile (default-cli) < process-classes @ hellofx <<<
[INFO]
[INFO]
[INFO] --- client-maven-plugin:0.1.28:compile (default-cli) @ hellofx ---
[Sat Jul 25 12:02:51 EEST 2020][INFO] ==================== COMPILE TASK ====================
             _______  ___      __   __  _______  __    _
            |       ||   |    |  | |  ||       ||  |  | |
            |    ___||   |    |  | |  ||   _   ||   |_| |
            |   | __ |   |    |  |_|  ||  | |  ||       |
            |   ||  ||   |___ |       ||  |_|  ||  _    |
            |   |_| ||       ||       ||       || | |   |
            |_______||_______||_______||_______||_|  |__|

    Access to the latest docs, tips and tricks and more info on
    how to get support? Register your usage of Gluon Substrate now at

    https://gluonhq.com/activate

[Sat Jul 25 12:02:52 EEST 2020][INFO] We will now compile your code for aarch64-linux-android. This may take some time.
[Sat Jul 25 12:02:55 EEST 2020][INFO] [SUB] Error: Could not find option 'UseBionicC'. Use -H:PrintFlags= to list all available options.
[Sat Jul 25 12:02:55 EEST 2020][INFO] [SUB] Error: Could not find option 'UseOnlyWritableBootImageHeap'. Use -H:PrintFlags= to list all available options.
[Sat Jul 25 12:02:55 EEST 2020][INFO] [SUB] Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
[Sat Jul 25 12:02:55 EEST 2020][INFO] [SUB] Error: Image build request failed with exit status 1
[Sat Jul 25 12:02:55 EEST 2020][SEVERE] Process compile failed with result: 1
Check the log files under /home/ubuntu/Documents/HelloFX/target/client/aarch64-android/gvm/log
And please check https://docs.gluonhq.com/client/ for more information.
[Sat Jul 25 12:02:55 EEST 2020][INFO] Logging process [compile] to file: /home/ubuntu/Documents/HelloFX/target/client/log/process-compile-1595667775141.log
[Sat Jul 25 12:02:55 EEST 2020][SEVERE] Compiling failed.
Check the log files under /home/ubuntu/Documents/HelloFX/target/client/aarch64-android/gvm/log
And please check https://docs.gluonhq.com/client/ for more information.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.943 s
[INFO] Finished at: 2020-07-25T12:02:55+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.gluonhq:client-maven-plugin:0.1.28:compile (default-cli) on project hellofx: Compiling failed -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.254 s
[INFO] Finished at: 2020-07-25T12:02:55+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.gluonhq:client-maven-plugin:0.1.28:build (default-cli) on project hellofx: Error, client:build failed -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

The particular issue with UseBionicC flag is fixed already (see: https://github.com/gluonhq/client-maven-plugin/issues/211) but there are currently more open issues (see: https://github.com/gluonhq/substrate/issues/688) which make building for Android impossible.

Fixed with https://github.com/gluonhq/substrate/pull/706
Should work now with Client 0.1.29-SNAPSHOT and latest GraalVM 20.3.0-dev (from July 25th).
Please test and provide feedback.

Building and installing works for me again now but the app always crashes on my phone although it works on my tablet. I'll create a new issue for that.

Fixed with gluonhq/substrate#706
Should work now with Client 0.1.29-SNAPSHOT and latest GraalVM 20.3.0-dev (from July 25th).
Please test and provide feedback.

            <plugin>
                <groupId>com.gluonhq</groupId>
                <artifactId>client-maven-plugin</artifactId>
                <version>0.1.29-SNAPSHOT</version>
                <configuration>
                    <target>android</target>
                    <mainClass>${mainClassName}</mainClass>
                </configuration>
            </plugin>

Simply doing that doesn't seem to work.

Add to yor pom:
<pluginRepositories>
        <pluginRepository>
            <id>snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        </pluginRepository>
    </pluginRepositories>

Thank you, that version 0.1.29-SNAPSHOT works well for android builds!


Please implement same functionality in 2.79 to 2.88 for Source 2

Hi dev,
I realize you can access Source 2 if you set the HTTP Client to Generic HTTPClient , then if user exit and reopen the app they be able to access Source 2 no issue.
And 2.88 Source 5, have an issue when you try to resume video after existing the app will stuck indefinitely in Loading Stream Data part.

Will look into it.
Actually 2.8.8 is emergency stable release.

2.9.x should fixed it


Onboard NY to the Universal Pipeline

User Story:
As NY, I want to be onboarded to the UP, so that I can start receiving conditions other than flu.
Description/Use Case
We will be onboarding NY to the UP as part of Full ELR pilot. They are interested in receiving flu results from Simple Report and potentially HIV results coming from HCI.
Risks/Impacts/Considerations

Covid results still need to be routed through the Covid pipeline.
NY is only interested in receiving positive flu results. We can reuse the filter we had originally set up for CA to only send positive FLU results
Covid needs to filtered out from SR messages

Dev Notes:

A new receiver needs to be set-up for NY that is configured for the UP in both staging and production

Acceptance Criteria

[ ] NY starts receiving messages through the UP with no errors
[ ] Integration tests are added with test messages coming from SR

Waiting on meeting on Wednesday to move forward (get answers from NY).

NY is set up to our staging environment.

Met with NY today, they are ready to move to production.


Adding a better navbar in mobile view

Recognized an improvement , I suggest enhancing the visual of navigation bar in mobile view , currently it seems to be a dull one. I am enthusiastic about addressing and resolving this matter and would appreciate the opportunity to be assigned this task under the SWOC-24 initiative.

@Akshanshkaushal @dakshsinghrathore  could you please assign this issue to me?

Shall be able to improvise the navbar design in mobile view. Please assign this to me under SWOC'24

@dakshsinghrathore can you please assign this issue to me


Add documentation for further improvements

This PR includes details about further improvements that can be made to @plone/client.

@sneridagh This PR is ready for review.


fix licencse check

Important Read

Please ensure the GitHub issue is mentioned at the beginning of the PR

What is the purpose of the pull request
(For example: This pull request implements the sync for delta format.)
Brief change log
(for example:)

Fixed JSON parsing error when persisting state
Added unit tests for schema evolution

Verify this pull request
(Please pick either of the following options)
This pull request is a trivial rework / code cleanup without any test coverage.
(or)
This pull request is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:
(example:)

Added integration tests for end-to-end.
Added HudiSchemaEvolutionTest to verify the change.
Manually verified the change by running a job locally.

@wuchunfu can you help me to get the license check passing?

Having both spotless check and skywalking-eys in the same project is not a good practice, because their behaviors are not the same, what do you think?  @the-other-tim-brown @sagarlakshmipathy

@charlesy6 the intention was that the skywalking check would find anything not covered by the spotless plugin since the spotless plugin requires you to define rules for different file types not covered by default. If there is something that better fits that need, let me know.

@the-other-tim-brown, I agree with @charlesy6's point that there is no need to introduce the skywalking into xtable project.
and it is also not used in projects such as hudi, paimon, flink...
We can use mvn validate command to execute check commod on plugins such as spotless, enforcer.
E.g
name: CI mvn validate

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

on:
  push:
    branches:
      - "main"

  pull_request:
    branches:
      - "main"

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'

      - name: validate plugin
        run: mvn validate

@the-other-tim-brown, I agree with @charlesy6's point that there is no need to introduce the skywalking into xtable project. and it is also not used in projects such as hudi, paimon, flink...
We can use mvn validate or mvn spotless:check command to execute check commod on plugins such as spotless, enforcer.
E.g
name: CI mvn validate

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

on:
  push:
    branches:
      - "main"

  pull_request:
    branches:
      - "main"

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'

      - name: validate plugin
        run: mvn validate

@daragu  how do we catch new file types being added without licenses? That is not currently possible with spotless. mvn validate is just part of the Maven lifecycle, you will run that as part of install https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

thanks @the-other-tim-brown,  let me think again.

hi @the-other-tim-brown, when a new type of file is added to the repo, it will be detected by the maven rat plugin automatically. it seems that we can close this pr now.


Update pathspec to 0.10.1.

Description of changes:
Updating pathspec to the latest released version. I have used a fixed version to follow convention, although I am not sure if that is intentional or if it is just following the pattern established when pathspec was first introduced in https://github.com/aws/aws-elastic-beanstalk-cli/commit/8fc17ea3a72a6d786fef452bdc2ecedeb7f57a5f.
This is not urgent, but will help the nixpkgs package collection simplify its build of awsebcli, since nixpkgs (almost always) includes only the latest version of a Python package. I am updating pathspec in nixpkgs in https://github.com/NixOS/nixpkgs/pull/190845.
Note that this version of pathspec drops support for Python 2.7, 3.5, and 3.6, all of which have been EOLed by now. I see that this package still advertises support for Python 2.7, 3.4, and 3.5, and that its setup.py has a conditional that checks
for Python versions lower than 3.6. I hope that this advertised support is unintentional and that we can clean all of this up.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

This was committed in https://github.com/aws/aws-elastic-beanstalk-cli/commit/7b71bbc38e89f5603e8c2b81ed4fdc5c52b18484.


Fix created image not being added to state

Created images were not being added to the state.

Sorry, I should have clarified more. This does not address #269. I noticed that no images were being added to the image list and error was coming up in the console because the created image wasn't being added to the state. This fix merely allows created images to be added to the state in the session they were created in.

Codecov Report

Merging #299 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #299   +/-   ##
=======================================
  Coverage   32.93%   32.93%
=======================================
  Files          74       74
  Lines        2414     2414
  Branches      322      322
=======================================
  Hits          795      795
  Misses       1362     1362
  Partials      257      257

Impacted Files
Coverage Δ

core/reducers/blueprints.js
15% <ø> (ø)
:arrow_up:

Continue to review full report at Codecov.

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


support ppm through Image crate

Current branch for this fails to build. I don't want to over complicate the image generation yet till proper multi monitor support is done.


Error when compiling example #013 on Arduino IDE 2.3.4

Hi.
I'm trying to compile example #013 for ESP32 Dev Module, without changing anything. Below are the compiled messages and errors. Would anyone be able to help?
`In file included from c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_HTTP_Client.cpp:2:
c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_HTTP_Client.h:46:16: error: cannot declare field 'Arduino_HTTP_Client::m_http_client' to be of abstract type 'HttpClient'
46 |     HttpClient m_http_client; // Underlying HTTP client instance used to send data
|                ^~~~~~~~~~~~~
In file included from c:\Users\Gabriel\Documents\Arduino\libraries\ArduinoHttpClient\src/ArduinoHttpClient.h:8,
from c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_HTTP_Client.h:10:
c:\Users\Gabriel\Documents\Arduino\libraries\ArduinoHttpClient\src/HttpClient.h:41:7: note:   because the following virtual functions are pure within 'HttpClient':
41 | class HttpClient : public Client
|       ^~~~~~~~~~
In file included from C:\Users\Gabriel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Arduino.h:197,
from c:\Users\Gabriel\Documents\Arduino\libraries\ArduinoHttpClient\src/HttpClient.h:8:
C:\Users\Gabriel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Client.h:29:15: note:     'virtual int Client::connect(IPAddress, uint16_t, int32_t)'
29 |   virtual int connect(IPAddress ip, uint16_t port, int32_t timeout) = 0;
|               ^~~~~~~
C:\Users\Gabriel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Client.h:31:15: note:     'virtual int Client::connect(const char*, uint16_t, int32_t)'
31 |   virtual int connect(const char *host, uint16_t port, int32_t timeout) = 0;
|               ^~~~~~~
c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_MQTT_Client.cpp: In member function 'virtual bool Arduino_MQTT_Client::set_buffer_size(uint16_t, uint16_t)':
c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_MQTT_Client.cpp:26:39: error: no matching function for call to 'PubSubClient::setBufferSize(uint16_t&, uint16_t&)'
26 |     return m_mqtt_client.setBufferSize(receive_buffer_size, send_buffer_size);
|            ~^~~~~~~~~~~~~
In file included from c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_MQTT_Client.h:10,
from c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_MQTT_Client.cpp:2:
c:\Users\Gabriel\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:142:12: note: candidate: 'boolean PubSubClient::setBufferSize(uint16_t)'
142 |    boolean setBufferSize(uint16_t size);
|            ^~~~~~~~~~~~~
c:\Users\Gabriel\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:142:12: note:   candidate expects 1 argument, 2 provided
c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_MQTT_Client.cpp: In member function 'virtual uint16_t Arduino_MQTT_Client::get_receive_buffer_size()':
c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_MQTT_Client.cpp:30:26: error: 'class PubSubClient' has no member named 'getReceiveBufferSize'; did you mean 'getBufferSize'?
30 |     return m_mqtt_client.getReceiveBufferSize();
|                          ^~~~~~~~~~~~~~~~~~~~
|                          getBufferSize
c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_MQTT_Client.cpp: In member function 'virtual uint16_t Arduino_MQTT_Client::get_send_buffer_size()':
c:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard\src\Arduino_MQTT_Client.cpp:34:26: error: 'class PubSubClient' has no member named 'getSendBufferSize'; did you mean 'getBufferSize'?
34 |     return m_mqtt_client.getSendBufferSize();
|                          ^~~~~~~~~~~~~~~~~
|                          getBufferSize
Using library WiFi at version 3.1.0 in folder: C:\Users\Gabriel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\libraries\WiFi
Using library Networking at version 3.1.0 in folder: C:\Users\Gabriel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\libraries\Network
Using library NetworkClientSecure at version 3.1.0 in folder: C:\Users\Gabriel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\libraries\NetworkClientSecure
Using library ThingsBoard at version 0.15.0 in folder: C:\Users\Gabriel\Documents\Arduino\libraries\ThingsBoard
Using library ArduinoJson at version 6.21.4 in folder: C:\Users\Gabriel\Documents\Arduino\libraries\ArduinoJson
Using library PubSubClient at version 2.8 in folder: C:\Users\Gabriel\Documents\Arduino\libraries\PubSubClient
Using library Update at version 3.1.0 in folder: C:\Users\Gabriel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\libraries\Update
Using library ArduinoHttpClient at version 0.6.1 in folder: C:\Users\Gabriel\Documents\Arduino\libraries\ArduinoHttpClient
exit status 1
`

I'm sorry, but I don't know what I need to do to fix it. Can you be more specific about how to do it:
And that implementation is not done by the HttpClient causing the aformentioned compilation issues. To fix that could you go into the HttpClient and write an implementation for the int connect(const char *host, uint16_t port, int32_t timeout); method.
Another question, is this error expected even though all the library's versions are correct? It will be fixed by Thingsboard on another update?

First of all you need to update the library to the newest release to fix the latter errors. So upgrade to v0.15.0 .
To fix the first error, this is not an issue with this library but with the ArduinoHTTPClient. If you are using the newest version of the Arduino IDE, which you are 3.1.0 then the Client Interface has changed to include another method which needs to be implemented.
This is not done by the ArduinoHTTPClient, but because it should follow the Interface contract because it inherits from it, the aforementioned error is produced, that the implementation of the connect method with an additional timeout parameter is missing. This method is not used by this library but it needs to be implemented by ArduinoHTTPClient nevertheless.
There is also already an issue for this so I would recommend pinging on this issue so it might get more attention, so it will be fixed as soon as possible.
Until it is fixed for sure you can use the aforementioned workaround which is writing a simple implementation of that method in the actual ArduinoHTTPClient library code that simply does nothing so simply add this method to the class.
int connect(const char *host, uint16_t port, int32_t timeout) override {
     // Do nothing, simple stub to fix issues with interface.
}


[ST] Transaction delegate address is a CEX deposit address

Describe the bug
A user bridged USDT from Gnosis to Polygon directly into a CEX deposit address through Jumper. The slippage tolerance was set at 0.1%. Jumper automatically sets the receiver address as the delegate that can update the slippage, so now the user is stuck.
https://connextscan.io/tx/0xd36aeaba25a599e4ed22a50c5e9ff3152ba06db5561d642e076c0a229eda6c29
This also ties into https://github.com/connext/monorepo/issues/5190
Link to ticket in discord
https://discord.com/channels/454734546869551114/1179617907743928330/1179618311667994635

We have a new case of this. This time the transaction was made through Connext Bridge directly. The delegate is a CEX deposit address.
https://connextscan.io/tx/0x1ed53f4a115c65e78cfe5707a0c531a1421bc940911eb3c032351b7b61f8288e
https://discord.com/channels/454734546869551114/1188229899215970486/1188230471100924015

The tx went through

Resolved


[distributed storage] support re-syncing counters after a peer is partitioned.

This likely needs more thought put into it.  A peer only resyncs when it goes from having zero active connections to 1 active connection.

Trying to avoid doing too many re-sync on every connect to a peer, but I think we could end up in scenarios where you have peers A, B, C, D and
peer A and B start up and connect and sync,
then C and D start up and connect and sync,
then C,D and A,B connect and don't sync anymore as they thought they were already synced with the cluster.

Switched to a more simplified strategy of syncing with every peer session.  It should work better in the face of complex network partitions.


Unnecessary use of with?

The biwascheme library code uses with in several places, generally in conjunction with define_libfunc. Given the concerns involved in use of with (the ambiguity problem came up for me earlier why trying to hack on the js interface...), I'd think that, in the long term, it could be useful to refactor the withs out.
(Tangentially, I'd also super-appreciate it if a future biwascheme would conform to ES5 strict mode, but that isn't necessarily feasible.)

Should be fixed by #160