Packaging and distributing apps

(moderated summary by @epage)
Context:

"Rust makes writing crossplatform, tested, modern command line applications frictionless while incorporating industry best practices and providing great documentation." (goal)
Focus is on CLI apps (see README for definition)

Assumptions and Implications

Majority of CLIs will at more than just Rust developers (for targeting rust-developers, see #20)
Users of CLIs will be somewhat technical considering they are using a terminal
Use case priorities

Using the app on the command line via the path
Glued together with other apps in a script
Drag and drop files onto an icon for the CLI

Examples of content to distribute

one or more rust binaries
completion files
man pages (See #23)

Other solutions

Go has equinox

Plan of attack

"How to package" documentation

Spec out and document how to package

Automation

Implement stager
Reach out to binary packaging tools to consolidate effort with stager

In-ecosystem resources

trust: example project that tarballs pre-built binaries releases via github releases
crate-ci docs: A home for process automation documentation
crate-ci meta: A home for discussing tooling and documentation, including discussing stager
stager
self-update
cargo-deb
cargo-wix
cargo-arch
cargo-rpm
cargo-ebuild

Open Issues

(Windows) Adding manifests, see https://github.com/rust-lang/rfcs/issues/721

Open Questions

Prioritized list of package formats per platform?

Linux: deb, rpm, flatpak, snap

Are flatpak / snap's apps added to PATH?

Windows: MSI via wix, chocolatey
Mac: homebrew

How easily are pkg's available from command line?

PPAs?
Use case, challenges, and priority of source packages?

See https://github.com/mmstick/cargo-deb/issues/40

Importance of remote administration and provisioning?

@killercup's original post
In the first meeting, we identified packaging and distributing CLI apps a something we should improve.
We need to have a best-practice solution for getting from "I have a crate with a binary" to "I can ship this app and don't have to worry about cross-platform installation stuff".
Edit 2018-03-19: This issue is about distribution of rust binaries without using cargo-install.

cf. https://github.com/japaric/trust/
https://github.com/crate-ci/crate-ci.github.io by @epage
cargo-install doesn't respect Cargo.lock

help fix https://github.com/rust-lang/cargo/issues/2263

Distribute documentation:

documentation of env vars a CLI app repsects/uses

auto-generate from something like https://docs.rs/configure?
how to incorporate external crates, like env_logger?

there seems to be no cohesive answer for man pages yet

ripgrep is using aciidoc: https://github.com/BurntSushi/ripgrep/pull/776
issue in clap https://github.com/kbknapp/clap-rs/issues/552 (@kbknapp, awaiting clap v3-alpha)

ref: man pages in clap v3-alpha the overall tracking issue (kbknapp/clap-rs#1037)

From the etherpad:

Guides/How-Tos

Deb, RPM, AUR, Homebrew, Snap, Flatpak, AppImage, nixpkgs

Automation

cargo subcommands
Using CI

If cargo-install is an important use case for dev tools, how much should we look at improving it?

If cargo-install is an important use case for dev tools, how much should we look at improving it?

I think this is part of a lot broader area of "crates.io's treatment of executables.". Which is something that previously has been very vague. Part of distribution should be codifying how crates.io handles and promotes executables or lack thereof.
I'm unsure how we should go about this as there isn't really a process for requesting crates.io features.

For distributing my cli apps I made https://github.com/jaemk/self_update to support a "self update" command that pulls the latest github release built using https://github.com/japaric/trust/

@killercup When it comes to automatically generating debian packages (and there is already cargo-deb for that) I think it's even more important to generate source packages for distributions to include (or to build a PPA with). And that is something that cargo-deb can't yet to.
See cargo-dev#40

For windows specifically, it would be nice to be able to add manifest to the binary: https://github.com/rust-lang/rfcs/issues/721.

A couple more thoughts after brainstorming with @killercup:
With CLI apps that are built by doing "cargo install", we have a pretty straightforward path we could go down with regards to building installers for people.
For example, what if we had a new cargo plugin, or separate tool, that could take a "cargo install"-able CLI app and then, using a bit of convention over configuration, build you an installable package for a distro or use a simple Windows installer .exe?
This seems doable because there are really only a couple steps when doing CLI work specifically: "build my binary" and "put it in my path", which distros and installers should be able to handle no problem.  @killercup mentioned that we might even want to go a step further and offer some project templates that drop in whatever metadata is required for building .deb, homebrew, etc.  From there maybe the cargo plugin can either be configured and/or searches for packaging tools it knows about and builds using them.
These combined with something like https://github.com/japaric/trust/ means folks could take an easy extra step to see what tweaks they'd need to make to get it to work across more platforms.

This seems doable because there are really only a couple steps when doing CLI work specifically: "build my binary" and "put it in my path", which distros and installers should be able to handle no problem.

Eh, that kind of depends on the tool, and how polished an experience you want it to be. Even static binaries might want to include manpages, generic documentation, default config files, command-line completion integration, data files...
I suspect no single tool is going to be able to support many or varied platforms, because platform conventions vary so widely, and because so few tool-developers are familiar with all possible deployment platforms. However, it would be great to have a set of base conventions that platform-specific tools can extend in different ways. For example, there could be a base convention that documentation lives in a docs/ subdirectory in Markdown format, and the build-posix-package tool could have an extra convention that a file named docs/manpage.md will be installed as the manpage for the crate's main executable.

I got pointed at this issue by @killercup on https://users.rust-lang.org/t/cargo-and-installation-of-ancilliary-files/15974
My specific problem is installing a GNOME application. So not a CLI application per se, but very similar. Whilst many of the resources needed by the application are embedded in the executable, there are some that need installing. Manual pages and user documentation certainly, but also some image files and a GNOMEShell launcher.
Whilst my need is very specific, I am sure it acts as a microcosm of the more general situation.
Meson makes it very easy to install application – my experience is with D and C++, I have not tried using Meson with Rust. It is also fairly straightforward, but not always easy, to set up installation using SCons and CMake – but again my experience is with D and C++, to date I have only used Cargo with Rust.

@Screwtapello: I suspect no single tool is going to be able to support many or varied platforms, because platform conventions vary so widely, and because so few tool-developers are familiar with all possible deployment platforms.

This is my exact concern. I agree very much with the rest of your comment that having separate tools or conventions that people can pick/choose/extend would go a lot further than an "all in one" tool. This is with the caveat that those "separate tools" are well known, widely supported, well documented, etc. Not just one offs.

@jaemk: For distributing my cli apps I made https://github.com/jaemk/self_update to support a "self update" command that pulls the latest github release built using https://github.com/japaric/trust/

I love this! It may not work for everyone, or for complex use cases, but making it easy to have a "self update" feature of Rust CLI applications for "small utilties and binaries" would probably go a long way. Of course this doesn't solve the initial installation piece, but I still think it'd be great to include in a full blown solution. This particular piece could just be a standard guide on how to do this, such as a cookbook like recipe.

[about cargo-install in general as an install tool]

I'm on record saying I don't really like leaning on cargo-install for the general public, or general purposes. I think it's great for dev tools, or things that make sense to use during Rust development, but I personally don't want to expand it's use case to a general purpose installer.
I think there's too many nuances, and too much complexity to do everything correctly for it to all be contained in cargo. I'd like to keep cargo a Rust build tool, not a general purpose package manager. This isn't to say we shouldn't add certain features to cargo-install such as post build scripts...I'd just like to have proper guides/tools doing things the correct way first so that people don't just hit the easy button of cargo install which is what people are starting to do already.
Why?
Here's a few of the things I think would need to be sorted out (conversely why I think they shouldn't sorted out). This isn't meant to be an all encompassing list, just a quick search of some relevant issues. There may be more I can't think of off the top of my head, but here's a few:
Advanced or Post Build Steps
My primary concern with using cargo install too generally is that because of all the added complexity of correctly installing software, cargo-install takes the easy route and doesn't support complex/advanced use cases. Which is perfectly fine to me because it's not a general purpose installer. Until recently cargo-install didn't even support use of Cargo.lock files. As far as I know it still doesn't (easily) support more advanced build steps (like setting RUSTFLAGS, or like many have mentioned post build steps).

rust-lang/cargo#4150 (RUSTFLAGS="-C target-cpu=native" by default on cargo-install)
rust-lang/cargo/issues/5068 (cargo install doesn't support --target options)
rust-lang/cargo/issues/2386 (Request install.rs similar to build.rs)

Crate Size
Including things like docs, manpages, completion scripts, licenses, axillary files, etc. which will be required for installation of end user products will bloat the crate packages. I'd actually like to do the opposite of de-bloating crates

kbknapp/clap-rs#1186
rust-lang/cargo/issues/4988 (cargo install requires downloading and building dev-dependencies)

Binary Only Features/Deps
Until cargo supports binary only features and deps, crates that include both a lib and bin will suffer from the above points when used as a lib (compile times, crate size, etc.)
Also, being able to specify binary dependencies is huge for a general purpose package manager.

rust-lang/cargo#1982 (bin only features)
rust-lang/cargo#5120 (cargo-install binary deps, which is part of the equation, but still leaves out general binary deps)
rust-lang/cargo/issues/4555 (Specify deps for cargo install)
rust-lang/cargo/issues/3816 (General sense of allowing "external deps" in cargo)
rust-lang/cargo/issues/4316 (crates depending on binary crates)

Code Signing
This is another pretty big hole if we'd want to properly use cargo install as a general purpose installer.

rust-lang/cargo#4768

Just to include packagers, nixpkgs has pretty good support for rust ATM. I managed to get the novault nixpkg created, which requires external dependencies and all sorts of cool stuff.
The advantage of nixpkgs is that they can run alongside other package managers on any Unix distribution (including Mac) and I believe they are trying to support windows as well. This allows for at least some installation path for almost any platform/distribution, which is very valuable.

Just to include packagers, nixpkgs has pretty good support for rust ATM.

Tell me more about this! The last time I tried to package something for nixpkgs, I failed hard. I used carnix and it created a package expression which OOM-Errored with Nix!
From what I think, Rust packaging with nixpkgs is hell!

@matthiasbeyer this might fix your problem (just came across it): https://github.com/NixOS/nix/issues/358

cargo install is nice for developers who already have Rust + cargo installed and are likely to have whatever -dev packages are required to build the app, but it's a bit heavyweight otherwise. Especially since you can wind up pulling in a lot of dependent crates to build a useful tool, which means the build time for your tool creeps up...
It would be nice to have best practices for alternatives as well. For sccache we've got binary releases being built in Travis + Appveyor for Mac/Windows/Linux:
https://github.com/mozilla/sccache/releases
Getting this right involved a bunch of fiddling which I'd be happy to help document somewhere:
https://github.com/mozilla/sccache/blob/master/.travis.yml
https://github.com/mozilla/sccache/blob/master/appveyor.yml

@luser I'm planning on documenting creating binary releases on my crate-ci docs
See https://crate-ci.github.io/
I put it on hold for the moment because I felt like documenting the process was a bit much.  Because we need to know what the target is to find the binary, we have to retrofit the CI configuration in a fairly invasive way.
My hope is soon(ish) to start a tool to make it easier to get the files needed to make it easier to document
See https://github.com/crate-ci/meta/issues/1

@kbknapp I think what you've listed as reasons cargo shouldn't be used as a build, is exactly the reasons this working group should push for solving those problems as anything that hampers general development also hampers the development of developer tools. Saying that we shouldn't allow people to "I'd just like to have proper guides/tools doing things the correct way first so that people don't just hit the easy button of cargo install which is what people are starting to do already." is honestly a bit elitist, if people don't have an easy way they won't work on the tools. No amount of documentation or templates can compete with a single line command.
The point of this working group is provide the easy way for developers to release and distribute their apps saying "Oh well you to integrate in CI, and this dependency to be able for users to upgrade your app." isn't an easy way to release apps, so what if the program is only available to Rust developers? That's a great way to get feedback, you can release a 0.1 through cargo and go to r/rust or IRC and ask them to try it out.
Unless you can somehow automate the process of releasing to all package managers at once with zero configuration any other option is worse than releasing through cargo-install. Saying that because cargo lacks features so shouldn't be a package manager is a self fulfilling prophecy as we're the CLI working group and if we choose not to try to improve cargo as a package manager that will be used as reasons to not improve cargo-install.

@Aaronepower Well, that's all well and good and yea maybe there are some things in the cargo install pipeline that aren't very nice right now. But to target that at end-users is the wrong way to go about it.
Writing apps and CLIs specifically in Rust is so great because you're not dependent on any interpreter or runtime or toolchain. And then to say: install this toolchain to install the application is a bit…weird.
If there are any hangups with cargo-install then yea, we should of course fix them. For example a super-duper awesome feature would be that sys- package automatically install the required -dev packages on your platform so that compilation doesn't fail if they're not there.
But as an end-user experience, I don't want them touching cargo at all

@spacekookie I feel like that is bit too much of generalisation on end users and the applications being made. Obviously if you're making a tool that helps write python applications it'd be a pain point to require cargo, and if you're a project that as big as ripgrep you need to provide other avenues of installation. But a lot of projects are Rust focused and even if they aren't when they start out they need a way to easily distribute there application to get feedback. I'm saying that even just as a quick way to get dev tools or small cli apps cargo-install needs to be held to a higher standard as I think improving that will have the most impact on developers releasing their applications.

Should we split this issue into two separate issues then?
One issue could focus on making Cargo more friendly for installing CLI tools written in Rust with Rust-dev community as target userbase.
Another issue could focus on documenting distribution of CLI tools written in Rust with different package managers (+ OSes and architectures) like Homebrew, apt, etc with regular non-Rust dev audience as target userbase.

This issue was never meant to cover cargo-install 😅
So, yeah, please go ahead and make that issue! Ideally with quotes from the comments here :)

@killercup if it wasn't, maybe you could update issue description to specify that it tracks distribution through package managers (or other solutions) to final non-Rust-dev users?
That'll help avoid confusion we had here :)

For Linux systems, it may be good to choice either Snap or Flatpak, instead of trying to support all available package managers.

@ayosec We don't have to support all package managers.
Creating source deb files, source rpm files would be a great start. Yea sure, making snap and flatpak packages is also nice. But not everybody likes those approaches (me included :stuck_out_tongue_winking_eye:), so supporting "classic" Linux packages is also good.
Besides, deb (for bin packages) already exists :+1:

I do think that it's worth separating out two separate considerations here, as a few people have suggested.
We want to support building and installing CLI tools and all the accompanying bits that people expect, including manpages, completions, etc.
We also want to support building policy-compliant source packages for Linux distributions, so that distributions can ship Rust software just as easily as they can ship anything else.

I know I'm a bit late to this discussion, but I looked into what it would take to build a Cargo extension to package up a CLI app a while back and thought I'd add a bit of what I came up with after researching the issue.

It's much easier to create an installer for the platform on which you're compiling. Cross compiling is a much more complex process since you can't rely on the tools that ship with the OS.

Creating a very basic installer is pretty easy on most platforms, but for more complex options that make installers feel professional like adding a logo or installing files beyond the single executable, the developer will need to supply additional metadata that's currently awkward to put in Cargo.toml.

Homebrew should not be looked at as an acceptable Mac install solution, or at least not the only solution. It's much more analogous to cargo install in that it's targeted at developers and other more-technical users. The likely best/default answer on Mac is a .pkg file assembled with the pkgbuild tool.

Creating a .msi installer on Windows will probably mean requiring developers install something like Wix since the VC++ toolchain seemed to require using the GUI. Documentation on this was a bit confusing, so I could be wrong on this one, but Wix support might still be necessary to support the MinGW use case.

Windows .msi and Mac .pkg are particularly important because they fit in with the first-party remote administration tools that IT departments use to provision their fleets of machines and keep them up to date.

I'm purposefully not saying much about the Linux side of this since there are a bunch of comments here that already cover everything I found for producing debs and rpms.

It's great that this issue is getting attention and I wish I had more time to pitch in and help.

@tblair

Creating a very basic installer is pretty easy on most platforms, but for more complex options that make installers feel professional like adding a logo or installing files beyond the single executable, the developer will need to supply additional metadata that's currently awkward to put in Cargo.toml.

Hm, do we need to have logos in CLI tools installers? Do we need installers for CLI tools?

Homebrew should not be looked at as an acceptable Mac install solution, or at least not the only solution. It's much more analogous to cargo install in that it's targeted at developers and other more-technical users. The likely best/default answer on Mac is a .pkg file assembled with the pkgbuild tool.

Well, CLI tools are mainly used by developers, sysadmins, devops and pro-users who tend to use some package manager and Homebrew is one of the most popular ones for macOS 😸
However definitely agree that it shouldn't be the only option 👍

Windows .msi and Mac .pkg are particularly important because they fit in with the first-party remote administration tools that IT departments use to provision their fleets of machines and keep them up to date.

Interesting perspective!
// Curious though how often do CLI tools need to be provisioned on Windows and Mac by IT departments, hmmm. But still definitely agree that OS-native packaging like .msi and .pkg must be covered anyway.

I've updated the issue with a summary of the conversation in context of the what we are working to achieve with this working group
I've left off man pages because generating them is more tangential to this discussion and I'll fork it off into a separate topic
@spacekookie

@killercup When it comes to automatically generating debian packages (and there is already cargo-deb for that) I think it's even more important to generate source packages for distributions to include (or to build a PPA with). And that is something that cargo-deb can't yet to.

@joshtriplett

We also want to support building policy-compliant source packages for Linux distributions, so that distributions can ship Rust software just as easily as they can ship anything else.

Is packaging for a distribution usually handled upstream or within distribution community?  I worry that there are a lot of constraints and requirements in trying to cover this use case that it'll overwhelm us for what we want to accomplish this year.
@ayosec

For Linux systems, it may be good to choice either Snap or Flatpak, instead of trying to support all available package managers.

@tblair

Windows .msi and Mac .pkg are particularly importan

I've not used Mac pkgs, Snap, or Flatpak.  Do they easily support running from the command line, like putting their bin in the path?

@epage

Is packaging for a distribution usually handled upstream or within distribution community? I worry that there are a lot of constraints and requirements in trying to cover this use case that it'll overwhelm us for what we want to accomplish this year.

It's something with many common requirements across distributions, so some aspects of it need addressing upstream, in collaboration with the distribution communities. We need to take those requirements into account in our development.

@soc pointed out https://sbt-native-packager.readthedocs.io/en/stable/
It has some similar concepts to what I am looking at creating.  Initially, I planned for the user-configuration to be siloed by the packaging targets but combining information, where possible, is possible in the my scheme and might be considered in the future.
If we instead adopted sbt, we'd still need to develop a way to make it easy to find the binary (see https://github.com/crate-ci/meta/issues/1)

@epage I'm not recommending adopting sbt, but rather having a look at the concepts and figure out which parts work for Rust. I think people are largely happy with how sbt-native-packager works, so it could make sense to check any design decision against it and evaluate whether its an improvement, a different approach, or something that could be improved upon.

@soc ok. My companies installers are actually similar and what I was modeling things after already. I do need to actually look to see whats different rather than just assume they are the same.

flatpak all the things maybe? :)

@berkus I'd rather prefer avoiding Flatpak, or at least supporting the "standard" means of distributing packages (deb, rpm, ...) as a preferred option.
It really irritates me is that the Flatpak developers not only knowingly violate the XDG base directory spec, but also try to obscure the fact that they are doing it.
It took half a decade to get to a state where one can reasonably assume that applications follow the standards of the operating system they run on. I have zero appetite for new applications regressing on that.
YMMV, though.

(offtopic) @spacekookie +1. The current state is just sad, and Flatpak doesn't do much to improve it, despite hijacking XDG environment variables – which is just a terrible thing to do.
Things would be so much nicer already if some distribution just declared "we are making $HOME read-only, fix your applications and stop dumping random files into the folder", and then people could use this as a starting point to further sandbox applications.

RE homebrew
@uwearzt pointed out https://github.com/Sean1708/cargo-brew but it just wraps cargo install which is limited.
@rcoh has a template for brews
https://github.com/rcoh/rust-brew-template
We talked about turning that into a crate-ci example and adding documentation for it in crate-ci docs.
Ideally, we'd also create a cargo brew (name pending since one exists) that will generate and update the tap files as needed.

I've not used Mac pkgs […]. Do they easily support running from the command line, like putting their bin in the path?

On macOS there's command-line installer that can install .pkg headlessly without user intervention. It has parseable output. Mac Sparkle updater uses it to apply complex updates.

In Open Build System, there are currently 282 crates already packaged.  There wiki page about Rust only documents the bootstrap, not how to build crates, but looking at the spec it seems they are using rust2rpm.
Fedora has ~820 rust-* specs, so they are even further along, and that should be nearly enough that each CLI app only needs to add packaging for one or two missing deps before the CLI can be built.

(offtopic) @spacekookie +1. The current state is just sad, and Flatpak doesn't do much to improve it, despite hijacking XDG environment variables – which is just a terrible thing to do.
Things would be so much nicer already if some distribution just declared "we are making $HOME read-only, fix your applications and stop dumping random files into the folder", and then people could use this as a starting point to further sandbox applications, making them easier to package and distribute.

That may only work, if you can like google with Android force them to simplify/let the user decide how to organize their (user)configurations, (user)data, (user)install setups, caching and the central lookup of these information.
This would mean 1.having a standard how to write these data (as file format) + 2.sandbox enforcing it + 3.tool for import/export/moving of datafolders.
Android/Apple etc are quite inflexible regarding structure, so something similar should not work.
I will suggest something like this to distri.


Flexible styling of Video

Currently the  _onNewLayout method is overwriting my custom styling no matter what I do. Suggestion to reorder the styles array - https://github.com/Ivshti/react-native-vlc/blob/master/Video.js#L124
Current from absolute positioning:

Desired:

EDIT: PR submitted https://github.com/Ivshti/react-native-vlc/pull/18

Hi @sabbyt , how did you manage to get it to stream? In my phone, it is not even streaming. I have followed the readme closely. Thanks.

is this issue solved ?
i have same problem


[SCB-802]in rollback scenario, old versions meta is used and invocation is fail

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

[ ] Make sure there is a JIRA issue filed for the change (usually before you start working on it).  Trivial changes like typos do not require a JIRA issue.  Your pull request should address just this issue, without pulling in other changes.
[ ] Each commit in the pull request should have a meaningful subject line and body.
[ ] Format the pull request title like [SCB-XXX] Fixes bug in ApproximateQuantiles, where you replace SCB-XXX with the appropriate JIRA issue.
[ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[ ] Run mvn clean install to make sure basic checks pass. A more thorough check will be performed on your pull request automatically.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

Coverage increased (+0.04%) to 85.117% when pulling aef8d863d3ab5f6e0ffa56ad1eb79d3a58854bba on liubao68:upgrade into ebff3ee49384e78a4210291702f13ff357acd671 on apache:master.


Bug 2091599 :event is sent multiple times when non slave port goes to faulty.

The fix makes sure events are not triggered when master port goes to faulty state.
Signed-off-by: Aneesh Puttur<EMAIL_ADDRESS>

/retest

/test e2e-aws

/retitle Bug 2091599: event is sent multiple times when non slave port goes to faulty.


As a user, I want to create and manage my team to facilitate collaboration and streamline the submission process.

Closed by https://github.com/ContestSubmission/Backend/commit/6e22f2c2b7f5d7717ad5946f66f2c8ecc1257e9f


Add push to front of rate limit queue.

(moved random delay to top to group with other delay types.
Tests and docs to follow

[ ] Bugfix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)

Proposed changes

This adds (allows) a msg.lifo property . If it exists on a msg for a rate limited queue then it adds it to the front of the queue (unshift) rather than the end so it will be first out (Last In First Out).
This  allow building a stack type queue if required - or a push back in case of failure retry type queue.

[x] Add tests
[x] Enhance Docs

Checklist

[x] I have read the contribution guidelines
[x] For non-bugfix PRs, I have discussed this change on the forum/slack team.
[x] I have run grunt to verify the unit tests pass
[x] I have added suitable unit tests to cover the new/changed functionality

Coverage decreased (-0.04%) to 67.549% when pulling d820f55358b29f408dc062da377baaf2bd63a9ee on delay-push-to-front into 66a704af55b2cc78e304549f5199f45f682b032b on dev.

I can see the value in this - my only concern is msg.lifo is not a very accessible property name, particular when you consider non-English speaking users.
In my mind lifo is like rbe - a technical term that will be familiar to those that know, but not intuitive to those unfamiliar.
If we can think of a better name, then we could get this into 2.0 - otherwise it'll have to wait.

How about msg.pushback ?

/easycla


better documentation for parse - some vs some - parse vec

-        .some("--upstream argment must not be empty. At least one upstream dns server is needed")
-        .parse(|addr| {
-            addr.into_iter()
-                .map(|s| s.parse::<UpstreamVariant>())
-                .collect::<Result<Vec<_>, <SocketAddr as FromStr>::Err>>()
-        });
+        .from_str::<UpstreamVariant>()
+        .some("--upstream argment must not be empty. At least one upstream dns server is needed");

#74


httpcode cast operator

Hello Mario!
First, let me thank you for the good job and the good code that you provide :)
I've included some of your projects into my library nstd: https://github.com/Ptomaine/nstd
I modified some of your files because I use C++17 standard for my library.
First modification is related to your route66 project. I didn't include it into my library because I want to create my own version of the same functionality but I suggest you a minor improvement to it:
/*/ httpcode:: 'listing of HTTP result codes'
/*/
struct httpcode {
    unsigned code;
    const char *const description;
    operator decltype(code) () { return code; } // <-- cast operator
};

Adding the type casting operator allows us to write in a controller functor like this:
return route66::OK;
instead of
return route66::OK.code;
The second modification is related to your giant class. I added compile time c_swap. But it works only in C++17.
May I ask you to include more unit values to your units project? Like 'fluid oz' etc.
Thank you for what you do!
Best regards,
Arlen.

Hey thanks for the suggestions. I am still using C++11 (even C++03) in many places :/
I 'll add the cast operator, good idea.
About giant, what's the current code?
About units, i am not familiar with imperial units (european here), do you mind creating a PR for them?
Ta

Hey Mario,
You may look into the latest giant code here:
https://github.com/Ptomaine/nstd/blob/master/include/external/giant/giant.hpp#L51-L62
Sure, I don't mind creating PR for them.
Thanks,
Arlen.

...also, I did changes to route66 in detecting init_ntop function since MinGW do have it. I use MinGW-w64 from here:
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/7.1.0/threads-posix/seh/
I changed #   ifndef _MSC_VER
... to
if !defined(_MSC_VER) && !defined(MINGW32)
static
const char* inet_ntop(int af, const void* src, char* dst, int cnt){
    struct sockaddr_in srcaddr;
    memset(&srcaddr, 0, sizeof(struct sockaddr_in));
    memcpy(&(srcaddr.sin_addr), src, sizeof(srcaddr.sin_addr));
    srcaddr.sin_family = af;
    if (WSAAddressToString((struct sockaddr*) &srcaddr, sizeof(struct sockaddr_in), 0, dst, (LPDWORD) &cnt) != 0) {
        DWORD rv = WSAGetLastError();
        return NULL;
    }
    return dst;
}

endif


Linux Mint Cinnamon LTS Flatpak won't run

Tried installing via my software manager and it wouldn't work so I did "flatpak run com.github.Murmele.Gittyup" and got "error: runtime/org.kde.Platform/x86_64/5.15-21.08 not installed".
OS: Linux Mint 21.3 x86_64
Kernel: 5.15.0-101-generic

I have the same issue.

I've also had issues with Flatpak.
Have you tried installing nix-env and installing the up-to-date nix package?


Component Browser missing entries when opened too soon

Discord username
No response
What type of issue is this?
Permanent – Occurring repeatably
Is this issue blocking you from using Enso?

[ ] Yes, I can't use Enso because of this issue.

Is this a regression?

[ ] Yes, previous version of Enso did not have this issue.

What issue are you facing?
When the Component Browser is opened immediately before data about available components has arrived, it doesn't offer any components except the built-in "text input" and "number input" options.
Expected behaviour
When the data arrives, we should display the populated list.
How we can reproduce it?

Open the IDE.
Press Tab right away.

Screenshots or screencasts

Logs
No response
Enso Version
develop (3e3b823620)
Browser or standalone distribution
Standalone distribution (local project)
Browser Version or standalone distribution
standalone
Operating System
Linux
Operating System Version
No response
Hardware you are using
No response

We do not display entries because we haven't received the suggestion database from the engine yet.
We could forbid opening CB until the database is loaded, but we don't know when it happens.
So the better solution could be reloading the list each time the suggestion database is modified.

So the better solution could be reloading the list each time the suggestion database is modified.

We do that in GUI2


Image Resize Problem

Resizing the image destroys a lot of information about the color distribution due to downsampling averaging colors together. Consider randomly sampling the pixels instead of resizing to avoid plotting colors that don't actually exist in the image.

Ah, you're right and it makes an especially big difference with the color noise image. I've fixed the problem in db52367.


[cleanup][consensus][types] Remove 26 untested, unused methods

This PR removes 26 untested, unused methods from consensus and types. The value of the PR may reside more in the signaling of the nature of those untested, unused methods rather than actual removal.
I do hope & expect that reviewers will come up with valid reasons why one or another of those methods should be part of our public API — I've hence separated commits per method so that those valid methods can be kept, by omitting the commit that removes them. Just say so in review, plz :slightly_smiling_face:
(I also have found 72 such unused, untested members that might be removed in language/,
https://gist.github.com/huitseeker/3e783ef9758e22693a1204d16c2a2ee2
which I won't submit for a PR, as requested  [1] [2] )

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

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

@bors-libra r=davidiw

:pushpin: Commit 93cc87c has been approved by davidiw

:hourglass: Testing commit 93cc87ce158ab0ae8611759a21a11f23eb61dfd4 with merge 681e3552ac893918a778ce7a1edc15060c8f5492...

:broken_heart: Test failed - checks-actions_land_blocking_test

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

@bors-libra r=davidiw

:pushpin: Commit 6151a8b has been approved by davidiw

:hourglass: Testing commit 6151a8bcdb45eb74a1dd3d21f0aa07129c37a364 with merge d3a42d1ef8e96a677c8faa400d3a6969231aebbc...

:sunny: Test successful - checks-actions_land_blocking_test, checks-circle_commit_workflow
Approved by: davidiw
Pushing d3a42d1ef8e96a677c8faa400d3a6969231aebbc to master...


Show users a message that we are still receiving prices. This message should be shown after 5 seconds of starting price fetching.

Message should say:
Headline: "We are getting you the best prices!"
Body: "This may take up to one minute, but you can just sit back and relax while you wait. We will be with you shortly."


Blendshape data and functionality with AR

Plugin Version or Commit ID
V0.14.0
Unity Version
2022.3.11f1
Your Host OS
Windows 11
Target Platform
Android, iOS
Description
I would like to know if there is any way to get blend shape information. I want to use blendshape data to apply that to my 3D model in AR. Also can I run this without webtexture? Because I want to use this in AR and webtexture is not suitable. Maybe I can pass my own texture 2D? Can I do something like that? Please let me know, thanks!
Code to Reproduce the issue
No response
Additional Context
No response

@homuler  Please when you have time just tell me 1 little thing, I got blend shapes working, I just need to understand how can I pass mediapipe my own texture 2Ds instead of using webcamera? Please, this is the only thing I need to get everything working.
I am using facelandmarkrunner script to get blendshape data, I just don't know how do provide this plugin with my own textures and not webtextures. Thanks!

If anybody needs to get blendshapes, access it from facelandmarkrunner script at this part:
private void OnFaceLandmarkDetectionOutput(FaceLandmarkerResult result, Image image, long timestamp)
{
File.WriteAllText(Application.persistentDataPath + "/mpblend.json",
result.faceBlendshapes[0].ToString());
_faceLandmarkerResultAnnotationController.DrawLater(result);
}

I just need to understand how can I pass mediapipe my own texture 2Ds instead of using webcamera?

You can build an Image from Texture2D.
https://github.com/homuler/MediaPipeUnityPlugin/blob/6eb80265bddd743ce287f7939a5fcdaa50521aa1/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Framework/Formats/Image.cs#L47-L50
See also https://github.com/homuler/MediaPipeUnityPlugin/wiki/API-Overview#imageframe and #343.

Thank you for your response, it is very clear there how to create an image frame, however, I don't understand where to pass that frame variable. facelandmarkrunner is the script I want to use only, since that one has blend shapes, so how do I input there this image frame? Or it is global? If it's global where does that go? Everything else is clear and I understand, thank you! In the sample code you pass it to some graph drawer or something, and I don't use that, I need this facelandmarkrunner.

I mean you can build an Image from Texture2D as well as ImageFrame.

Okay thanks I got it working on android, however, I am not able to make IOS build, is there anything that I am missing? The Xcode project with full of errors, that was not the case before I imported this plugin. I made a build from windows machine, should I make it from MacOS? Could that be an issue?

If necessary, please create a new issue.


Community Question: Documentation of Benchmark Model Architectures

Hi all, I  hope it is okay to use your issues channel to ask a question about the benchmark models! I am looking at the benchmark models in tflite-micro/tensorflow/lite/micro/benchmarks, namely the person-detection model and the keyword spotting model. I'm curious to learn more about these model architectures, i.e. what are the hidden sizes, kernel sizes, etc. behind each of these architectures.
I'm able to deduce from training_a_model.md that the person detection model is a mobilenet_v1 architecture, presumably with grayscale 96x96 input images. Assuming that the architecture is just a standard mobilenet_v1 with the given input image size (96x96x1) and 2 output classes ('person' and 'not a person'), I should be able to fill in all of the details about the architecture. Could you confirm if this is indeed the correct architecture?
It is harder to fill in the architectural details for the keyword-spotting architecture. It appears from keyword_benchmark.cc that the architecture is
FC -> Quantize -> Softmax -> SVDF (probably using this SVDF layer)
However, in this code, the low-latency-svdf architecture seems to quite different from the above. The create_low_latency_svdf_model function provides enough detail that I can figure out the architectural details, if this is indeed the code that is being used to define the KWS benchmark model. I'd appreciate if someone could clarify which of the two architectures is actually being tested by the kws benchmark model.
Thank you!

If your interest is in benchmarks for TinyML, I would like to point you to https://github.com/mlcommons/tiny/tree/e104a3aac401f3e278e81759611da5e94c2fd660/v0.5
Here are more specific answers to your questions:

Yes, person_detection is indeed mobilenet_v1.
The keyword_benchmark is a scrambled weights version of the model of a proprietary Google model. There isn't any way to use this model in the public domain. The speech commands model from the TF repo that you link to is not the same as the keyword_benchmark.
The recommendation for keyword sporring would be to follow the instructions from https://github.com/mlcommons/tiny/tree/e104a3aac401f3e278e81759611da5e94c2fd660/v0.5/training/keyword_spotting

@advaitjain that's cool. is there a way to fuse ops to SVDF


Demo at http://plnkr.co/edit/adwhKJcfSxiM3tjxU6JS?p=preview.

      <template is="dom-if" if="{{hasSpan}}">

          Header	<content select="span"></content>

      </template>
    ...

never shows the row, but replacing the <content> with anything else makes it work.

May be related to https://github.com/Polymer/polymer/issues/1631, will test after that fix.

Will be fixed by https://github.com/Polymer/polymer/pull/1816
Confirmed fix in repro case here:
http://jsbin.com/nunavo/2/edit


chore: Bump cloud-node-manager v1.30.5, v1.29.9, v1.28.11 and v1.27.19

What type of PR is this?

/kind cleanup
What this PR does / why we need it:
chore: Bump cloud-node-manager v1.30.5, v1.29.9, v1.28.11 and v1.27.19
Which issue(s) this PR fixes:

Fixes #
Requirements:

[ ] uses conventional commit messages

[ ] includes documentation
[ ] adds unit tests
[ ] tested upgrade from previous version

Special notes for your reviewer:
Release note:
none

Pull Request Test Coverage Report for Build<PHONE_NUMBER>5
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 71.005%

Totals

Change from base Build<PHONE_NUMBER>3:
0.0%

Covered Lines:
2564

Relevant Lines:
3611

💛  - Coveralls

@feiskyer could you help merge this?


Add system call to enter low power mode and reduce latency for deep sleep entry

This enhancement is related to long latency observed to enter deep sleep.
While default power management policy is flexible enough to allow to optimize power consumption in active mode and deep sleep, the time to reach the latter is longer that some apps may require.
As an example, the sequence to enter deep sleep start with app either suspending all threads all these waiting for an external event to let the idle thread to run.
Once the idle thread runs, it does call _sys_suspend  with the amount of ticks that system can be idle, this is followed by checks against the supported the sleep states and
This overall takes 500ms up-to 2s, which is longer than expected when Zephyr-enabled devices are connected to systems that may request an almost immediate suspend ~300ms
A possible solution to reduce latency will be to expose a system call that app can use to force a determined power state, or similar function for apps to trigger a request for low power entry.
The solution should not be mutually exclusive with existing active power policy
Describe alternatives you've considered
Calling _sys_suspend within the main app thread reduces the latency a bit, but there are cases where the request competes with the one from idle thread.

the basic idea to fix this high latency is to start a dedicated and very high priority work_q which is used to handle the force suspend request, and it will never compete with the suspend handle in idle thread. But that requires the device drivers implement DEVICE_PM_FORCE_SUSPEND_STATE state. @pabigot @vanti

@wentongwu would it be possible to have this "bypass/force" request to be handled by SoC
for boards/soc that do not support DEVICE_POWER_MANAGEMENT ?
If DEVICE_POWER_MANAGEMENT is support perform the suspension as you indicated and if not to rely on soc sys_set_power_state() is updating updating HW blocks in low power mode?

@albertofloyd Implementing DEVICE_PM_FORCE_SUSPEND_STATE state is to make sure the possible device ongoing transfers stop and store the states. It depends on SOC not OS where we put that functional code, just to make sure there is no HW issue.
By the way do you have any requirements for the deep sleep request interface between Host and Zephyr, like when received request, Zephyr have to give response for it, etc.


Upgrade juice

The new juice versions are about upgrading deps mostly.
https://github.com/Automattic/juice/releases/tag/v6.0.0
https://github.com/Automattic/juice/releases/tag/v7.0.0
The positive point is juice 7 is almost two times smaller.
<EMAIL_ADDRESS>Most changes is simplifying of web-resource-inliner and dropping deprecated "request" package.
https://github.com/jrit/web-resource-inliner/compare/v4.3.2...v5.0.0

Looks good, but this would mean dropping node 8 on top of dropping node 6, which I would be in favor for since they are both EOL.

Well, they are already dropped
https://github.com/mjmlio/mjml/blob/master/.github/workflows/mjml-workflow.yml#L8

Hey @kmcb777 @iRyusa What do you think?

Hey @TrySound , thanks for this !
I'll include this in 4.7 right now as there's not much risk of side effects


Feature: add new Studio CommandLine

Proposed Changes

🤖 Generated by Copilot at aace4eb
Added a feature to disable browser opening for the studio and test commands in the maestro-cli module. This gives the user more control over the workflow and avoids unwanted browser windows.
Hello author, I have encountered a scene that I hope to integrate into vscode in the form of plug-ins, but when I start Maestro Studio, the browser will start and load the page uncontrollably, which I personally think may not be very friendly, I hope this place can give me free control.
Testing

Issues Fixed

@markexin : Does this solve this problem? #1174
yes~~~great!!!

Hello author, after hard work, my code passed the test. Please kindly help to Review if there are any defects

Hi there @markexin, thanks for taking the time to create a pull request. Could you share more about this use case? In what case would a browser be opened when you run maestro test? Are you writing Flows using the WebDriver?

Hi there @markexin, thanks for taking the time to create a pull request. Could you share more about this use case? In what case would a browser be opened when you run maestro test? Are you writing Flows using the WebDriver?

Thank you for the author's reminder. For example:
When I execute:
maestro studio or maestro studio --nowindow  will automatically open the browser at this time.
Only when I clearly execute:
maestro studio --nowindow=false will not automatically open the browser.

Hi there @markexin, thanks for taking the time to create a pull request. Could you share more about this use case? In what case would a browser be opened when you run maestro test? Are you writing Flows using the WebDriver?

Thank you for the author's reminder. For example:
When I execute:
maestro studio or maestro studio --window will automatically open the browser at this time.
Only when I clearly execute:
maestro studio --window=false will not automatically open the browser.

Could you elaborate a bit more as to why you would like to open Studio without opening a browser window at the same time?

Thanks for the contribution @markexin! Let us know if you end up building some IDE integration :)

Thank you for your patience and guidance, I hope the project will get better and better


DSL Support

I think it makes sense to optionally generate DSLs as well. I was thinking about storing my k8s configuration on kotlin DSL, found about this codegen however it only generates kotlin, halfway there.

I don't what DSL you're referring to here.  The code generator creates Kotlin and Java output, and it also produces Typescript interfaces (although with much more limited feature coverage).
But the output is all controlled by Mustache templates, so if you want to generate some other form of code you can provide your own templates.
This is not well documented, but if you create a template and parse it using the above-linked Mustache processor, you can then supply it to the code generator:
        val codeGenerator = CodeGenerator()
        codeGenerator.template = customTemplate

The "context object" for the template is a Target object, and you may need to investigate the source of this class, or examine the existing templates (in src/main/resources)  to discover the properties you need to take part in template expansion.
I'm sorry if this is not very helpful, but your requirement is not what I had considered a primary use case for the code generator.

@pwall567
https://kotlinlang.org/docs/type-safe-builders.html
This is what I meant.
    html {
        head {
            title {+"XML encoding with Kotlin"}
        }
        body {
            h1 {+"XML encoding with Kotlin"}
            p  {+"this format can be used as an alternative markup to XML"}

            // an element with attributes and text content
            a(href = "https://kotlinlang.org") {+"Kotlin"}

            // mixed content
            p {
                +"This is some"
                b {+"mixed"}
                +"text. For more see the"
                a(href = "https://kotlinlang.org") {+"Kotlin"}
                +"project"
            }
            p {+"some text"}

            // content generated by
            p {
                for (arg in args)
                    +arg
            }
        }
    }


Make TopicIdentifier more effective

There are a number of things that can be done to increase the effectiveness of the current topic identifier:

Use noun phrase chunking: A great starting point is located at http://www.nltk.org/book/ch07.html
Use named entity recognition in conjunction with noun phrase chunking to identify chunks that might not have been identified solely using noun phrase chunking

Some work has been done on this since the issue was last opened. It should be more effective now.


feat(g-code-testing): HTTP G-Code GitHub Action (RET-174)

Overview
Update Makefile and add Github Action
Changelog
See above
Review requests

Is it okay to have all of them in 1 action? I did this because after the initial setup, each http test only takes about 10 seconds while setup takes about 2 minutes.
Take a look at the README and note the Control Tests section. Does it make sense to skip the tests that I noted as skipped?

Risk assessment
None

This is a lot of tests, and they're all separate makefile targets and each makefile target is a separate line in the github action. That's a lot to keep up to date and maintain; in addition to whatever's necessary to make the test run, it guarantees touching two other files.
What if instead we used a test system with test autodiscovery - pytest, for instance, since this is in python - and used its output reporting? one command, and the only thing you need to touch to change or add a test is the test code itself.

@sfoster1, the hard part is comparing against S3.
Is it okay if I pull in the S3 python package use that?


fix timesyncd cmd.wait

Needed to fix a small issue with cmd.wait, requisite reversed.

Merged, @aboe76.

@myii thanks for the quick merge

You're welcome.


gruvbox-kvantum: init at 1.1

Things done
Gruvbox theme for Kvantum: https://github.com/sachnr/gruvbox-kvantum-themes

Built on platform(s)

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

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] 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/)
24.11 Release Notes (or backporting 23.11 and 24.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

[x] Fits CONTRIBUTING.md. (I hope)

Add a :+1: reaction to pull requests you find important.

I think I will add 2 separate parameters for configuring, I don't like current variants. But a bit later

Okay, I won't change variants, current variant is simpler to configure within home-manager
let
  variant = "Gruvbox-Dark-Brown";
  pkg = pkgs.gruvbox-kvantum.override {inherit variant;};

  dir = ".config/Kvantum";
in {
  home.file."${dir}/kvantum.kvconfig".source = util.toINI "kvantum.kvconfig" {
    General.theme = variant;
  };
  home.file."${dir}/${variant}".source = "${pkg}/share/Kvantum/${variant}";
}


Is there a way to attach?

Is there a way to attach to a currently running application? Using the "app" capability it is possible to configure the driver to launch an application, but for large applications that take 1-2 min to load and setup It'd be very helpful to be able to attach to them, once started, and then run all tests.
Aside form that, what is the best practice to verify a test that I'm currently writing? It'd be very time consuming to wait for an application to load every time while trying to get a test green. Is there an easier way to verify what's being written?

Hello @ivan-prodanov,
The JSON wire protocol doesn't seem to cover the scenario of creating a session by attaching to already running application. What kind of information would you pass to the session creation to ensure that you can attach to your already running app? Does you app take 1-2 minutes before showing the actual UI window? Understanding this scenario will help us address issue that you may have.
If you create a new session of your app, will it create a new instance on top of existing one? Otherwise, you may be able to leave it running and see if you can run the test without restarting the app all the time. Using inspect.exe helps me in identifying the element tree and parameters I can write against. This will also help you be more confident writing more lines of code without having to retest every line.

Our application, Revit, does take 2-4 minutes to load as it is a 3D modeling environment...even with SSD and 16 Gigs of Ram.
You can try Revit out yourself to see the load time: http://www.autodesk.com/products/revit-family/free-trial
While inspect.exe helps identify the element tree, for our application, Revit, with thousands of controls inspect.exe appears to be super slow and crashes frequently.
Any chance the Appium Inspector will be released to work with Windows Apps?

Indeed I agree with @ianceicys. I suggest this to be marked as a feature request for a mechanism that allows us to run tests on already executed applications. I'm confident as well when using inspect.exe, but delays are not easy to measure without running the actual test and calibrating them accordingly. It's easy to do with notepad or calculator, but in more complex scenarios - for e.g visualization of seismic data it is just a slow process.

I have a similar scenario with a bootstrapper-application which will check for updates and then start another application with some arguments, then quit itself. I would want to open a session to the newly opened application.

I have the same needed as I develop a ide like product, which is multi process backed, It need a long time to start. As many workflow need be test on the ide, when I balance the test to different test suite, attach will be a must needed function!

i second for the above requirement.  In my case, App1 opens App2 if we  click a button. In that case i have to attach or switch to the App2 (which is already opened) from App1.
@timotiusmargo @ivan-prodanov   This is a much needed functionality for a automation framework. Please consider this as a important enhancement for winappdriver.
Thanks and good luck.

Hey Guyz,
I may be missing something over here, but I believe we already have workaround for this scenario..
Once you have got the desktopsession object, I guess you should be able to access all applications available in desktop.
DesiredCapabilities desktopCapabilities = new DesiredCapabilities();
desktopCapabilities.SetCapability("app", "Root");
desktopCapabilities.SetCapability("deviceName", "WindowsPC");
RemoteWebDriver desktopSession = new RemoteWebDriver(new Uri("http://<IP_ADDRESS>:4723"), desktopCapabilities);

the desktop root session is a great way to find windows that aren't in your existing tree.
We're also investigating a way to better support attach.

@dhapolapankaj Could you please share a sample code snippet for that function to find windows that aren't in existing tree?

@vijay44 correct me If I have not understood it properly
I haven't mentioned we can get the objects which are not visible in Inspect tree.
Ironically, we have some discrepancy in objects availability in WinAppDriver and Inspect.exe
Please refer Issue #212
All I am saying is whatever objects available in Inspect.exe, WinAppDriver should be able to intercept them.
In context to this issue, we already have an application running and @ivan-prodanov is asking if we can directly access this application object hierarchy. Till the time we don't have capability to attach we can have workaround to get the desktop session object and access the already running application.
Since I work in the Selenium WebDriver based project as well as I am using WinAppDriver,
I find a great potential in WinAppDriver, if it can access the DOM structure of Web Browser also, I believe tomorrow we don't have to use Selenium WebDriver ;)

Hi @dhapolapankaj,
Sorry if made you confused. Really what I asked was a sample code snippet for the workaround of attach function.
For example I have to paste a value to a notepad (which is already opened) by coping the value from calculator result display after doing some calculation.

@vijay44 the workaround is get the desktop root object and then search for your notepad.

@dhapolapankaj  do you happen to know how to switch between the apps ? None of these worked getWindowHandles() and switchTo()... any thoughts ?

In v1.0-RC release, Windows Application Driver now supports attaching to an existing app window. As it is shown in the documentation and samples, you can now create a session based on any top level window. Once the session is created, you can perform all operation as if you started the application yourself. Below is an example taken from the documentation on how to create a new session by attaching to Cortana window with the help of a Desktop Session to locate the window.
DesktopSession.Keyboard.SendKeys(Keys.Meta + "s" + Keys.Meta);

var CortanaWindow = DesktopSession.FindElementByName("Cortana");
var CortanaTopLevelWindowHandle = CortanaWindow.GetAttribute("NativeWindowHandle");
CortanaTopLevelWindowHandle = (int.Parse(CortanaTopLevelWindowHandle)).ToString("x"); // Convert to Hex

// Create session by attaching to Cortana top level window
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("appTopLevelWindow", CortanaTopLevelWindowHandle);
CortanaSession = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);

// Use the session to control Cortana
CortanaSession.FindElementByAccessibilityId("SearchTextBox").SendKeys("add");

Notice the use of the new appTopLevelWindow capability above to specify the application top level window to attach to.
Our test sample also includes test scenarios that demonstrate attaching to other existing session top level window without the help of a Desktop Session below.

CreateSessionFromExistingWindowHandle_ClassicApp
CreateSessionFromExistingWindowHandle_ModernApp

Thank you everyone for your patience and for your suggestions that make WinAppDriver great.

Do we have the same above code for Java ?

Iam also having the same issue How to find the appToplevelWindow in Python or Java or if i can find the powershell script also fine.

I'm also want some samples in python.

Here's how I find an open Edge browser and attach to it in Python...
    def getEdgeDriver(self):
        # Launch a driver for the Windows Desktop (Root)
        desired_caps = {}
        desired_caps["app"] = "Root"
        desktop = self.launchApp(desired_caps)

        # Use the desktop driver to locate the window for Edge browser
        win = WebDriverWait(desktop, 120).until(EC.presence_of_element_located((By.CLASS_NAME,'ApplicationFrameWindow')))
        # Get an app driver for Edge from the window
        app_driver = self.getDriverFromWin(win)
        return app_driver

    def getDriverFromWin(self, win):
        win_handle1 = win.get_attribute("NativeWindowHandle")
        win_handle = format(int(win_handle1), 'x') # convert to hex string

        # Launch new session attached to the window
        desired_caps = {}
        desired_caps["appTopLevelWindow"] = win_handle
        driver = self.launchApp(desired_caps)
        driver.switch_to_window(win_handle)
        return driver

    def launchApp(self, desired_caps):
        dut_url = "http://" + self.dut_ip + ":" + self.app_port
        driver = webdriver.Remote(
            command_executor = dut_url,
            desired_capabilities = desired_caps)
        return driver

Do we have code above attaching to a running process using Javascript?


Pepper URDF

Hi, I am having struggles to load Pepper robot URDF. I see from your images in docs you have used a Pepper robot. Are you please able to share URDF with me? Thank you.

Have you downloaded pepper_meshes package?
https://github.com/ros-naoqi/pepper_meshes/
It is separated from pepper_description because of license.

I put them together but somehow self collision does not work anymore


ETH...33766688644577

Yes

You need 0.000033766688644577 ETH in order to send the transaction. https://myetherwallet.github.io/knowledge-base/gas/what-is-gas-ethereum.html

Yes mau uang


Loss scale support for chainerx

Reworks #7763
Closes #7756
Instead of exposing a loss_scale attribute on Chainerx arrays.
We do the loss scaling on the arrays that belong to input variables, parameters or must be explicitly retained at the end of the ChainerX backward pass.

@asi1024  I addressed most of the comments but one, can you please take a look,
thanks!

pfnCI, test this please.

Jenkins CI test (for commit d5abf37a3b9ba418cb934f41431a1863239361c6, target branch master) succeeded!

LGTM.


In visualizations, don't repeat if conclusion is all constants (low priority)

In visualizations, if the concluding justification is all constants, then the resulting statement shouldn't be repeated because it adds no new information. E.g., if you visualize df-2, you see:
---------------------
|- 2 = ( 1 + 1 )
|- 2 = ( 1 + 1 )

There's no point in showing it twice, because there are no variables to map to. Being able to show the visualization is great even in this case, because it reveals that this conclusion really is all constants... we just don't need that duplicated.

@david-a-wheeler  This is fixed on dev.

This is available in version 15 https://expln.github.io/lamp/v15/index.html


Map out Prez top-level API including handoff of HTML to Vue

still need to define the interfaces clearly - what is the best way to do this? profiles has some of the information but is not everything. Might be easiest to add this to the dev documentation


Bus error when running on MacOS (M2) with <TrayIcon.Icons>

When running a simple program with dotnet run, the program exists without a message or exception. When running it directly (dotnet bin/Debug/net6.0/AvaloniaBusError.dll or just ./bin/Debug/net6.0/AvaloniaBusError), it exits with code 138 and a message "bus error":
❯ ./bin/Debug/net6.0/AvaloniaBusError
Program start
[Property]Set 'ActualThemeVariant' to 'Light' with priority 'LocalValue'(App #41421720)
[Property]Set 'RequestedThemeVariant' to 'Default' with priority 'LocalValue'(App #41421720)
[Property]Set 'Icon' to 'Avalonia.Controls.WindowIcon' with priority 'LocalValue'(TrayIcon #16495015)
[1]    72126 bus error  ./bin/Debug/net6.0/AvaloniaBusError

This problem can be reliably reproduced on M2 Pro processor (Mac Mini) (it works on M1 processor (MacBook)).
I have prepared a simple reproduction here: https://github.com/skyflyer/AvaloniaBusError
To Reproduce
Steps to reproduce the behavior:

Clone the referenced repo
dotnet build the project
Execute the binary using dotnet bin/Debug/net6.0/AvaloniaBusError.dll
See error

Expected behavior
A working app or at least an exception.
Desktop:

OS: MacOS
Version: Ventura 13.6
.NET SDK 6.0.414 (tried with older SDKs as well (6.0.406)

Additional context
Perhaps related, but I doubt it: https://github.com/dotnet/runtime/issues/66302
When the program is run through a debugger (either .NET debugger in VSCode or through XCode or manually through lldb -- bin/Debug/net6.0/AvaloniaBusError, the program works.
The program's output when starting is seen above. It ends with "[Property]Set 'Icon' to ... " whereas there are many more messages present if the program is run through a debugger (but then it also works).
Tagging the author of TrayIcon @danwalmsley, if this is perhaps due to not having any handlers attached to TrayIcon at this point? But even when adding a DataContext to the App.axaml and providing binding for Exit menu item (which works in debug mode), the app still exhibits the same behaviour.
Let me know if there's anything else I can debug/try/troubleshoot.
Thank you!

Forgot to mention that I did add bindings to all elements present in the tray icons and it still exhibits the same behaviour (bus error).

Just an interim update: even compiling and building Avalonia from source and then running ControlCatalog.NetCore produces the same result. More debugging will follow...

The ControlCatalog.NetCore project does not run even if there is no TrayIcon.Icons involved. It still runs fine in a debugger (crashes on some component, but that is not related).
I have then replaced all instances of [[NSImage alloc] initWithData] with initialization from file and found out that even when I use the test_icon.ico from the example project, it fails. I then created another test.ico (attached here), and with that file it mostly works.
Further testing showed a segfault when running on a system with a severe load: I started ffmpeg transcoding which uses all cores on the system and ran the app while the ffmpeg was running. The result was a seg fault, but I could not reproduce it reliably:
[1]    25336 segmentation fault  bin/Debug/net6.0/ControlCatalog.NetCore

I even captured it a couple of times with `lldb`:
Process 25484 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x3eadde6d2930)
    frame #0: 0x000000019e80ba54 libobjc.A.dylib`objc_retain + 16
libobjc.A.dylib`objc_retain:
->  0x19e80ba54 <+16>: ldr    x17, [x17, #0x20]
    0x19e80ba58 <+20>: tbz    w17, #0x2, 0x19e80ba10    ; ___lldb_unnamed_symbol1435
    0x19e80ba5c <+24>: tbz    w16, #0x0, 0x19e80ba38    ; ___lldb_unnamed_symbol1435 + 40
    0x19e80ba60 <+28>: lsr    x17, x16, #55

(lldb) thread backtrace
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x3eadde6d2930)
  * frame #0: 0x000000019e80ba54 libobjc.A.dylib`objc_retain + 16
    frame #1: 0x000000019ec12c6c CoreFoundation`__NSDictionaryI_new + 480
    frame #2: 0x000000019ec12904 CoreFoundation`+[NSDictionary dictionaryWithObjects:forKeys:count:] + 52
    frame #3: 0x00000001a26f0eb4 AppKit`___NSSendConfigToAnalytics_block_invoke + 136
    frame #4: 0x00000001a5cb73d0 CoreAnalytics`std::__1::__function::__func<AnalyticsSendEventInternal(NSString const*, NSDictionary<NSString*, NSObject*>* () block_pointer, XPCMessagePriority, EventPayloadFormat)::$_1, std::__1::allocator<AnalyticsSendEventInternal(NSString const*, NSDictionary<NSString*, NSObject*>* () block_pointer, XPCMessagePriority, EventPayloadFormat)::$_1>, nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > ()>::operator()() + 76
    frame #5: 0x00000001a5cce550 CoreAnalytics`CoreAnalytics::Client::sendEventAlways(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::function<nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > ()> const&, XPCMessagePriority, EventPayloadFormat) const + 128
    frame #6: 0x00000001a5cb6de4 CoreAnalytics`AnalyticsSendEventInternal(NSString const*, NSDictionary<NSString*, NSObject*>* () block_pointer, XPCMessagePriority, EventPayloadFormat) + 272
    frame #7: 0x00000001a5cb31e4 CoreAnalytics`AnalyticsSendEventLazy + 24
    frame #8: 0x00000001a1e773f8 AppKit`_NSGetBoolAppConfig + 472
    frame #9: 0x00000001a1fe4070 AppKit`-[NSBox _tile:] + 208
    frame #10: 0x00000001a204cf84 AppKit`-[NSBox setContentView:] + 120
    frame #11: 0x00000001a204ced0 AppKit`-[NSBox initWithFrame:] + 268
    frame #12: 0x0000000106e7e4c0 libAvaloniaNative.dylib`-[AutoFitContentView initWithContent:](self=0x0000000100616290, _cmd="initWithContent:", content=0x0000000100615dc0) at AutoFitContentView.mm:36:26
    frame #13: 0x0000000106e6fe68 libAvaloniaNative.dylib`WindowBaseImpl::WindowBaseImpl(this=0x0000000100613530, vtt=0x0000000106ea2c20, events=0x000060000021b2e0, usePanel=false) at WindowBaseImpl.mm:33:25
    frame #14: 0x0000000106e746dc libAvaloniaNative.dylib`WindowImpl::WindowImpl(this=0x00000001006134b0, events=0x000060000021b2e0) at WindowImpl.mm:12:52
    frame #15: 0x0000000106e73c98 libAvaloniaNative.dylib`CreateAvnWindow(events=0x000060000021b2e0) at WindowBaseImpl.mm:669:44
    frame #16: 0x0000000106e69d74 libAvaloniaNative.dylib`AvaloniaNative::CreateWindow(this=0x0000600000223660, cb=0x000060000021b2e0, ppv=0x000000016fdfd8e0) at main.mm:236:20
    frame #17: 0x00000002815ee890
    frame #18: 0x0000000281bff3a4
    frame #19: 0x0000000281bfe3b8
    frame #20: 0x0000000281bfdce4
    frame #21: 0x0000000281bfd100
    frame #22: 0x0000000281bfd038
    frame #23: 0x0000000281bfc75c
    frame #24: 0x0000000281bfc590
    frame #25: 0x0000000281309090
    frame #26: 0x0000000281308b34
    frame #27: 0x000000028130889c
    frame #28: 0x00000002812bfe94
    frame #29: 0x0000000280da0568
    frame #30: 0x000000010316e348 libcoreclr.dylib`CallDescrWorkerInternal + 132
    frame #31: 0x0000000102fdf97c libcoreclr.dylib`MethodDescCallSite::CallTargetWorker(unsigned long const*, unsigned long*, int) + 852
    frame #32: 0x0000000102ed84ac libcoreclr.dylib`RunMain(MethodDesc*, short, int*, PtrArray**) + 664
    frame #33: 0x0000000102ed8798 libcoreclr.dylib`Assembly::ExecuteMainMethod(PtrArray**, int) + 380
    frame #34: 0x0000000102f06b24 libcoreclr.dylib`CorHost2::ExecuteAssembly(unsigned int, char16_t const*, int, char16_t const**, unsigned int*) + 472
    frame #35: 0x0000000102ec341c libcoreclr.dylib`coreclr_execute_assembly + 204
    frame #36: 0x000000010047e38c libhostpolicy.dylib`run_app_for_context(hostpolicy_context_t const&, int, char const**) + 1072
    frame #37: 0x000000010047f0f0 libhostpolicy.dylib`corehost_main + 240
    frame #38: 0x000000010026e198 libhostfxr.dylib`fx_muxer_t::handle_exec_host_command(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, host_startup_info_t const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<known_options, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, known_options_hash, std::__1::equal_to<known_options>, std::__1::allocator<std::__1::pair<known_options const, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > > > const&, int, char const**, int, host_mode_t, bool, char*, int, int*) + 1172
    frame #39: 0x000000010026d3dc libhostfxr.dylib`fx_muxer_t::execute(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, char const**, host_startup_info_t const&, char*, int, int*) + 860
    frame #40: 0x0000000100269df0 libhostfxr.dylib`hostfxr_main_startupinfo + 152
    frame #41: 0x000000010000d3f8 ControlCatalog.NetCore`exe_start(int, char const**) + 1484
    frame #42: 0x000000010000d63c ControlCatalog.NetCore`main + 160
    frame #43: 0x000000019e84ff28 dyld`start + 2236

I could not get it to work if I added the test.ico as an asset and initialize NSImage with data provided from .NET. (again, unless I run it under debugger).
I'm not sure what to do next... any pointers greatly appreciated.

Can you try with NET7?
I just tried it on my machine (with NET7) and it's working as expected.

I just tested with NET7 and its working as expected.

@MikeCodesDotNET, thank you for testing. I have just tried with .NET 7 and .NET 8 and I get the same results. What machine / CPU are you testing this on?
Note that this "bug" is reproducible (for me at least) only on M2 Pro (M1 works).

Tested on a MacBook Pro M2 Max.

Interesting. So it appears to be a problem with M2 Pro only. Did it crash for you on .NET 6 though?

I want to point out that I've figured out what the cause was. It was an environment variable (export DYLD_LIBRARY_PATH=/opt/homebrew/lib) set in a shell (don't really remember what the reason for setting this environment variable was), but this affected xamarin libraries (and others) in weird inconsistent ways.
Anyhow, I want to thank everyone for looking into this and trying it out.


Update Column with Pivot Toggle

Laravel Version: 5.5.#
PHP Version: 7.0
Database Driver & Version: MySql 5.7

Description:
With the Attach method we can add additional data to the pivot table. However with Toggle this is not possible and I need to create an if statement.
I guess this is more a feature request.
Steps To Reproduce:
This will not work:
$trip->user()->toggle($user->id, ['accepted_hours' => $trip->hours]);
This does:
if($trip->user->contains($user->id))
{
$trip->user()->detach($user);
} else {
$trip->user()->attach($user, ['accepted_hours' => $trip->hours]);
}
Thanks

I find this to be intended behaviour. For example, say you have a row in the pivot but value of accepted_hours is 100. Now when you toggle it with accepted_hours 200 , what do you expect? the row to be detached or attached with new value?

When you toggle, if it is attaching, it will include the additional data. When detaching, toggle would ignore the additional columns.

For suggestions and feature requests please use the https://github.com/laravel/internals repo.

ref: https://github.com/laravel/ideas/issues/943


Improvements to templated content

At the moment, from within any page, an element with the data-template attribute will be removed from the DOM and provided server-side via the $template object.
Current usage:

Item title

        Item name

<?php
// Simplified syntax:
$li = $template["item"];
$li["h1"]->textContent = $itemFromDb["title"];
$li["span"]->textContent = $itemFromDb["name"];
$ul->appendChild($li);

Downsides of this approach:

Templates are isolated to their original pages.
Templated elements have no reference to their original position within the DOM, tightening the coupling in PHP between the data and the view.

In modern browsers, the <template> element is used for client-side templating. We don't want PHP.Gt to interfere with how templated elements behave on the client-side, but if we could utilise this upcoming technology on the server it would be beneficial.
Side note: Gt1 provided templated elements to the client using a special hidden div, and required Gt.js to be loaded in order to interact. We can still provide the client with templated elements, but use the <template> element for this, opening up more possibilities.
Plan of action:

data-template attribute used as it is now, apart from the templated elements have a templateParent property on their node, and a templateAppend() property for re-attaching to the original parent. This avoids having to build the DOM up on the server for simple lists where the templated elements will always be placed in their original parents.
<template> elements will be available in the server-side $template object, accessible by their ID, but will remain untouched in the page, so client-side scripts will be able to interact as usual.
The /page/template directory will contain named html files representing

Need to action 2) and 3) from the original post, then we're done on this.

Will be handled in BrightFlair/Dom


Deletion format

Hello,
The deletions are 1 base too long when looking at the specs for VCF 4.2 or 4.3. Is it expected?
In the example below, 1 T is missing, but an extra G is reported for both the reference and the allele.
With the specs of VCF 4.2 or 4.3, this deletion should be reported as ref=AT alt=A.
version = freeBayes v1.3.2-40-gcce27fc
chr15 75039612        .       ATG     AG      2432.58 .       AB=0.437984;ABP=11.6289;AC=1;AF=0.5;AN=2;AO=113;CIGAR=1M1D1M;DP=258;DPB=220.333;DPRA=0;EPP=29.3178;EPPR=9.70694;GTI=0;LEN=1;MEANALT=3;MQM=60;MQMR=60;NS=1;NUMALT=1;ODDS=560.123;PAIRED=1;PAIREDR=0.986014;PAO=0;PQA=0;PQR=0;PRO=0;QA=3738;QR=4731;RO=143;RPL=55;RPP=3.18325;RPPR=3.38993;RPR=58;RUN=1;SAF=84;SAP=61.1404;SAR=29;SRF=94;SRP=33.7602;SRR=49;TYPE=del;technology.Illumina=1  GT:DP:AD:RO:QR:AO:QA:GL 0/1:258:143,113:143:4731:113:3738:-259.382,0,-348.688

There is no length limitation for expressing an allele.
This is the window over which the variant call is made.
If you need a shorter representation then use a postprocessing tool like vt
normalize to simplify it.
On Wed, Apr 15, 2020, 19:56 Fred-07<EMAIL_ADDRESS>wrote:

Hello,
The deletions are 1 base too long when looking at the specs for VCF 4.2 or
4.3. Is it expected?
In the example below, 1 T is missing, but an extra G is reported for both
the reference and the allele.
With the specs of VCF 4.2 or 4.3, this deletion should be reported as
ref=AT alt=A.
version = freeBayes v1.3.2-40-gcce27fc
chr15 75039612 . ATG AG 2432.58 .
AB=0.437984;ABP=11.6289;AC=1;AF=0.5;AN=2;AO=113;CIGAR=1M1D1M;DP=258;DPB=220.333;DPRA=0;EPP=29.3178;EPPR=9.70694;GTI=0;LEN=1;MEANALT=3;MQM=60;MQMR=60;NS=1;NUMALT=1;ODDS=560.123;PAIRED=1;PAIREDR=0.986014;PAO=0;PQA=0;PQR=0;PRO=0;QA=3738;QR=4731;RO=143;RPL=55;RPP=3.18325;RPPR=3.38993;RPR=58;RUN=1;SAF=84;SAP=61.1404;SAR=29;SRF=94;SRP=33.7602;SRR=49;TYPE=del;technology.Illumina=1
GT:DP:AD:RO:QR:AO:QA:GL
0/1:258:143,113:143:4731:113:3738:-259.382,0,-348.688
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/ekg/freebayes/issues/612, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABDQENVYON2XJESWDDWE43RMXYNDANCNFSM4MIY5Q7Q
.

Thanks for your fast reply.


Translation feature returned garbled text

Japanese text --> English text (garbled output)

https://github.com/soimort/translate-shell/issues/326

Fixed by upgrading trans from <IP_ADDRESS> to <IP_ADDRESS>.


release 1.0.1

Codecov Report

Merging #6 into master will not change coverage.
The diff coverage is 100%.

@@         Coverage Diff          @@
##           master    #6   +/-   ##
====================================
  Coverage      75%   75%
====================================
  Files           3     3
  Lines         128   128
====================================
  Hits           96    96
  Misses         32    32

Impacted Files
Coverage Δ

app/__init__.py
100% <100%> (ø)
: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 3965bba...a2e35d1. Read the comment docs.


Change to logo not updating on website

Not sure if it's a permission issue, but upload url is saving to database but file not saving on server.

Fixed this by running php artisan storage:link


Enhancements to Turtle

By submitting this PR, I am indicating to the Numberscope maintainers that I have read and understood the contributing guidelines and that this PR follows those guidelines to the best of my knowledge. I have also read the pull request checklist and followed the instructions therein.

This PR provides enhancements to the turtle visualizer:

Instead of a "domain" input there's just a modulus and the sequence is automatically taken with respect to that modulus (just like chaos does), so you shouldn't have so many boring thumbnails that go two steps and die.
The number of elements in the "angles" list has to match the modulus; instead of causing an error, the parameter dialog will shorten or lengthen it automatically for you when you change modulus.  Similar for other lists.
The step size is now a list of step sizes, like the angles.
There's a path length option.
The default behaviour is to draw the full path from scratch in one frame, no animation.
If you input a growth rate in the Path Growth variable, it will go back to drawing the path at that speed, so you can watch the animation.
If you use the "Turning angle increments" list, the angles in the angle list will gradually change, causing the path to "fold" gradually over itself like a protein.  This is fun for finding other variations on a cool picture you've found.  This is also an animation feature.  You can combine it with growth, or use just one of them.

Note:  This turtle visualizer is not backward compatible to past URLs.  Is this something we need to add (seems difficult)?  Or should we just update the existing gallery items to the new parameter format.  This is perhaps a more general question about when visualizers are updated.
The main thing I have not implemented yet, but hope to later, is more colouring options.
To see what it can do, check out some fun ones (note that these URLs only work with this PR).  These are all static to begin, but you can animate them.
http://localhost:5173/?name=Beatty+DNA&viz=Turtle&domain=3&turns=79+0+45&steps=5+2+6&pathLength=6000&bgColor=e9eee3&strokeColor=4b7a81&start=0+200&seq=OEIS+A001951
http://localhost:5173/?name=Tau+Goldberg+Machine&viz=Turtle&domain=2&turns=121+0&steps=40+100&pathLength=6000&bgColor=e9eee3&strokeColor=814b7c&start=0+5&seq=OEIS+A000594
http://localhost:5173/?name=Free+Wheelin'&viz=Turtle&domain=3&turns=127+10+105&steps=40+25+5&pathLength=6000&bgColor=ffffff&strokeColor=5f402b&seq=OEIS+A005228
http://localhost:5173/?name=Hofstader&viz=Turtle&domain=3&turns=137+0+105&steps=15+10+5&pathLength=5000&folding=0+0+0&bgColor=ffffff&strokeColor=7792bb&seq=OEIS+A005228

Sorry, something with the rebasing isn't right.


Trying to use the OpenAI javascript API in react im facing this error: dangerouslyAllowBrowser

Uncaught Error: It looks like you're running in a browser-like environment.
This is disabled by default, as it risks exposing your secret API credentials to attackers.
If you understand the risks and have appropriate mitigations in place,
you can set the dangerouslyAllowBrowser option to true, e.g.,
new OpenAI({ apiKey, dangerouslyAllowBrowser: true });
https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety
OpenAIError error.ts:5
OpenAI index.ts:134
 ComponentChatBotReactChatBotifly.jsx:26
error.ts:5:6
My code .... (dont know if i can use:
new OpenAI({ apiKey, dangerouslyAllowBrowser: true }); in ollama openai compatibility library javascript as there is nothing related in doc).
import ChatBot from 'react-chatbotify';
import OpenAI from 'openai';

const openai = new OpenAI({
    baseURL: 'http://localhost:11434/v1/',
    // required but ignored
    apiKey: 'ollama',
  })

let messageHistory = [];

async function fetchData() {
    const chatCompletion = await openai.chat.completions.create({
        messages: messageHistory,
        model: 'llama3',
      })
      return chatCompletion.data.choices[0].message.content;
/*
    try {
        const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
        const data = await response.json();
        return data.title;
    } catch (error) {
        return "Oh no I don't know what to say!";
    }
*/
}

function updateMessages( rol, content) {
    messageHistory.push({ role: rol, content: content });
    return messageHistory;
}
export default function ComponentChatBotReactChatBotifly() {

    const flow = {
        start: {
            message: (params) => {
                updateMessages('system','You are a helpful assistant.  Be kind and short in your responses.');
                params.injectMessage("Hi my name is Edubot.  Im here to help you');
                updateMessages('assistant','Can you write your username, so i can address you ?');
            },
            path: "askname"
        },
        askname: {
            message: (params) => {
                updateMessages('user',`${params.userInput}`);
                params.injectMessage(`Nice to meet you ${params.userInput}!`);
                updateMessages('assistant',`Nice to meet you ${params.userInput}!`);
                params.injectMessage("Ask anything i will try to help you!");
                updateMessages('user','Ask anything i will try to help you!');
            },
            path: "loop",
        },
        loop: {
            message: async (params) => {
                updateMessages('user',`${params.userInput}`);
                const result = await fetchData();
                return result;
            },
            path: "loop",
        }
    }
    return (
        <ChatBot options={{ theme: { embedded: false }, chatHistory: { storageKey: "example_simulation_stream" }, botBubble: { simStream: true } }} flow={flow} />
    )
}`

Update tried to use the dangerouslyAllowBrowser option to true:
const openai = new OpenAI({
    baseURL: 'http://localhost:11434/v1/',
    // required but ignored
    apiKey: 'ollama',
    dangerouslyAllowBrowser: true
  })

Seems i skip or pass the error of the issue, but still doesnt work as im facing:
Solicitud de origen cruzado bloqueada: La política de mismo origen (Same Origin Policy) no permite la lectura de recursos remotos en http://localhost:11434/v1/chat/completions. (Motivo: La cabecera ‘x-stainless-arch’ no está permitida de acuerdo a la cabecera ‘Access-Control-Allow-Headers’ de la verificación previa de la respuesta CORS).
In english ( using Google Translator) :
Request for blocked cross origin: the same origin policy (Same Origin Policy) does not allow reading remote resources at http: // localhost: 11434/v1/chat/complete. (Reason: The header ‘X-Stainless-Arch’ is not allowed according to the header ‘Access-Control-Allow-Headers’ of the previous verification of the Cors response).

This is because this React component runs on the client side. If anyone looks at the page source code, your API key will leak. Please move this code to the back-end. Create an API in the way described in this post:
https://dev.to/bilal1718/how-to-create-a-backend-api-in-express-js-e0k


Jackson Module for serialization query response message response type

Implement a Jackson Module to allow for usage of Jackson in query serialization.
Fix #114

I was able to overcome my data-entries-query issue by using a 0.0.06-SNAPSHOT build.
So we can merge this after the codacy check is fixed and you considered my dependency scope adjustment.
I would however want to solve some general issues before doing the next release:

groupId is top-level "io.holixon" - should be "io.holixon.axon.gateway"
you told me that for IDEA to be able to display sources, we should keep the "java" package layout instead of the simplified kotlin hierarchy
maven wrapper could be updated to latest official wrapper, jar is not needed in git-index
java version should be set to at least 11


User Login/Registration via Mail

[x] User should login with its mail and then get a code (or link) to their mail account to access his/her environments. The mail should be sent from the Google servers, so that there is no spam problem.
[x] A cookie should be set for 30 days, so that the user don't have to login so often.
[x] Every time a user is active, the cookie should be renewed to 30 days

This was already completed with the small caveat that we don't use Google to send mail.