Cross-platform justfiles

It would be useful to be able to write single justfiles that work on a variety of systems.
Concretely, justfile authors should be able to write a single justfile that can be deployed on different platforms, where the same command (i.e. just build) can be used to invoke the justfile and run a particular recipe or set of recipes.
I just released version v0.5.0 (see #530), which allows setting the shell used to interpret backticks and recipe lines on a per-justfile basis. This allows writing justfiles that work on platforms where sh is not available, but it still requires writing a different justfile for each different platform.
This feature has been discussed before, in particular in #326 and #161, however those issues have been addressed and closed, so I'm opening this issue to track the feature more directly.
The design which I currently favor is to add annotations to recipes that control:

Which shell is used: e.g "this recipe should be run with cmd.exe /c instead of sh -cu"
In which circumstances a recipe should run: e.g. "this recipe should be run when sh is not available"

Example:
[sh]
foo:
  ls /

[powershell]
foo:
  dir C:\\

Since this feature is primarily intended to make just usable when sh is not available, it seems like different versions of the same recipe should be selected not based on which OS just is running on, but rather whether or a particular shell is available. (Since windows machines may have sh, and if sh is available it is probably desirable to use it.)
I suggest initially starting with three annotations, sh, powershell, and cmd. Each annotation has an associated test, which, if multiple recipes have the same name but different annotations, just will use to select which version should run.

annotation
test
shell

sh
sh -cu echo OK
sh -cu

cmd
cmd.exe /c Echo OK
cmd.exe /c

powershell
powershell -c "Write-Host OK"
powershell -c

Recipes with no annotation will default to sh, to preserve backwards compatibility.
I think the above design is solid, but there are still a couple of unresolved questions:

Should it be possible for the user to override recipe selection from the command line, e.g. to run a powershell-annotated recipe even if sh is available? If so how?
Should it be possible to specify that recipe selection should be based on OS, and not shell availability? If so, how is OS-detection performed? If a recipe must run OS-specific commands, for example, it might be desirable to select recipe variants based on OS, and not shell availability, and even have a windows-specific recipe that still uses sh.

Thank you for all the work your putting into cross-platform support! I think the annotations option above it a good solution that doesn't require writing your own scripting language. The update in v0.5.0 is great for people in organizations that may need to use work cross-platform and have the option of specifying organization wide to use something specific like REXX, or Python, etc. Also for individual developers that work cross-platform but don't need users to utilize the Justfile.
I think it would be reasonable and legible to specify the annotation as-is affixed to the recipe name. So something like just build would trigger version with the first annotated recipe with system support. While something like just build[cmd] on my Mac (probably within DosBox or similar) would use the [cmd] annotated version of the build recipe. Now how you display that there are annotated versions in just --list might be funky.
1. Sloppy Left (current default)
$ just --list
Available recipes:
    build [sh][cmd] # Build this code!
    help # Things about the project to remember
    test target="defaul" +args="" [sh][cmd][powershell] # Test this code!

2. Comments aligned
$ just --list
Available recipes:
    build [sh][cmd]                                     # Build this code!
    help                                                # Things about the project to remember
    test target="defaul" +args="" [sh][cmd][powershell] # Test this code!

3. Three Columns
$ just --list
Available recipes:
    build                         [sh][cmd]             # Build this code!
    help                                                # Things about the project to remember
    test target="defaul" +args="" [sh][cmd][powershell] # Test this code!

4. Stacked Annotations
$ just --list
Available recipes:
    [sh][cmd]
    build # Build this code!
    help # Things about the project to remember
    [sh][cmd][powershell]
    test target="defaul" +args="" # Test this code!

5. Stacked Annotations with Comments Aligned (my favorite compact)
$ just --list
Available recipes:
    [sh][cmd]
    build                         # Build this code!
    help                          # Things about the project to remember
    [sh][cmd][powershell]
    test target="defaul" +args="" # Test this code!

Number 3 is my favorite. But I always have wide terminals setup. Number 5 is my favorite for compact display.
BTW, thanks for adding cmd.exe support! I'll take it's lightweight over PowerShell for minor scripting any day.

BTW, how hard would it be to just embed JavaScript, Lua, or Neko at this point? I know it was not really an option prior.

Thank you for all the work your putting into cross-platform support!

You are most welcome!

…something like just build[cmd] on my Mac (probably within DosBox or similar) would use the [cmd] annotated version of the build recipe…

I'm hesitant to use RECIPE[ANNOTATION], because some shells (for example zsh) interpret [ as a special character. But, there are a lot of other options. Currently, recipe names cannot contain : or ., so another possibility is to use just build.cmd or just build:cmd.
I definitely like the three column display for --list, but agree that it could be problematic for

BTW, thanks for adding cmd.exe support! I'll take it's lightweight over PowerShell for minor scripting any day.

You bet. I think powershell should work too, using set shell := ["poweshell", "-c"], so I'm curious what people use.

BTW, how hard would it be to just embed JavaScript, Lua, or Neko at this point? I know it was not really an option prior.

I can definitely see the value of embedding a scripting language:

Scripting languages are less error prone than sh.
Scripting languages don't depend on the userland (cp, rm, grep, sed, etc) which is inconsistent between systems.
It makes just more of a one-stop-shop, if just is on a machine, you don't also need to think about installing a scripting language in order to run basic scripts on that machine.

The two main things that would stop me are:

I wouldn't be sure which language to choose. I think I would choose python, since it's very common, and language is a good choice to switch to when a shell script get's too large. Lua and JavaScript might be easier to embed, but I'm not entirely sure what the value proposition would be, since Lua and JS aren't as big an upgrade over sh for scripting.

I would need to be sure that there was a suitable implementation available. Just is a pure-Rust, statically linked binary, so the implementation would need to bundle the language and standard library into a statically linked library. As far as I know, there aren't any python implementations out there which meet this requirement. Also, it shouldn't bloat the binary too much. (Which might disqualify python, given that the standard library is quite large.)

JavaScript, Lua, Neko, and Python all have good embedding options. Lua and Neko were specifically designed with embedding in mind so have very small VMs.

Language
CLI Size
Minimum StdLib
Notes

JavaScript - Duktape
duk ~335 KB
libduktape.so 300.6 KB
Designed for portability. ECMAScript 5.1+

JavaScript - MuJS
mujs ~208 KB
libmujs.o 300.1 KB
Designed to be embedded. ECMAScript via ECMA-262

JavaScript - QuickJS
qjs ~1.2 MB
quickjs.o 5.1 MB
Designed to be embedded and supports ES2020

JavaScript - V8
?
?
Designed for speed. ECMAScript and WebAssembly

Lua
lua ~20 KB
liblua.dylib 166.4 KB
Designed to be embedded

Neko
neko ~20 KB
libneko.dylib 164.0 KB
Designed to be embedded

Python
python ~14 KB
libpython3.dylib 2.2 MB
Designed for general scripting and supports embedding

Note the numbers above are just for general reference. I'm not even remotely certain of what is needed to implement any of those interpreters.

JavaScript

Well know to most programmers. Though only Node programmers (and a few other) will have any experience using JS for file IO.
C like. Easy to learn by C, C++, ObjectiveC, C#, and most other programmers.
Several interpreters to choose from.

Lua

Like what I've seen of the syntax.
Design goal of being very easy for newbies.
Lua's standard library is very small. See https://www.lua.org/manual/5.3/manual.html#6 for the latest.
The only thing I don't like about it (I have not done a deep dive at all yet) is it uses 1 based indexes for arrays instead of zero based. Also that it's arrays are actually a modified version of their hashtable type. Which can be problematic. Unless that was changed recently.

Neko

Like what I've seen of the syntax.
Design goal of being easy but well conceived for integration with other languages to use the VM.
The major part of the Neko standard library (std.ndll) is 208.4 KB and includes everything in https://nekovm.org/doc/libs/ except Mysql, Mod_neko, Regexp, Sqlite, Ui, and ZLib. Unless I'm incorrect in my review of lib/neko
Haxe can compile to Neko bytecode.

Python

Love the syntax.
Designed to be easy and extensible. Embedding is not a goal but is supported.

Lots of options but really for light weight and overall performance I can't see beating Neko. Though Lua is a close second with the caveats mentioned. Followed by MuJS, Duktape, etc. simply because of size.

Thanks for this comparison! I think that a scripting language wouldn't fully obviate the need for a shell, since most people would probably want to write most recipes in shell, so an embedded scripting language would probably be a separate feature.
That being said, I think Python is the only reasonable choice, since it blows the other languages away in terms of ease of shell-scripting type tasks, and it's widely known. (JavaScript is definitely widely known, but not great for scripting, and Neko and Lua are popular but still somewhat niche.)

No prob. It's something important to me for the project and something I'm trying to learn more about in general. I love Python 3 so no problem with that. I don't know how you can implement it without doubling or tripling the size of just in the process. And that may not matter to you at all, which is completely fine. Just thinking out loud.  👼

I don't believe embedding makes sense.
I'll just point out for people looking here that for scripting with TypeScript/JavaScript deno really makes a lot of sense. It handles dependency fetching via normal url imports and handles TypeScript compilation. All you need to do is make sure the deno binary is in the path.
For anything that requires a language runtime, it would just make sense to make the install of that a dependency of the other targets.

It would be useful to be able to write single justfiles that work on a variety of systems.

I would approach this exactly as I would in Rust with cfg attributes. We should provide attributes to tag recipes that dictate exactly when and how they should be run. Fundamentally, recipe names should be treated as identifiers and must be unique for a given invocation of just to be valid.
In the original example:
[sh]
foo:
  ls /

[powershell]
foo:
  dir C:\\

This should be a syntax error as the recipe names are the same (and there is no conditional attribute to select the recipe based on some precondition). There is no logical way to select which recipe to run.
If there are two versions of some recipe that require different shells, I would argue that they are in fact different recipes. If this was not the case, why would they require different shells? The way to differentiate here should be in name only. By introducing a conditional attribute, recipe selection becomes automatic and is entirely in the control of the user.

Since this feature is primarily intended to make just usable when sh is not available, it seems like different versions of the same recipe should be selected not based on which OS just is running on, but rather whether or a particular shell is available. (Since windows machines may have sh, and if sh is available it is probably desirable to use it.)

I partially agree with this. I don't necessarily think it is always be desirable to use sh if it is available on Windows. This needs to be completely down to the user, and not automatically selected by just.

My preferred design for recipe cross-platform justfiles would look something like:
[conditional(os_family = "unix")]
[shell(sh)]
foo:
  ls /

[conditional(os_family = "windows")]
[shell(powershell)]
foo:
  dir C:\\

This makes it clear that:

On Unix-like OS, the first recipe is run
On Windows, the second recipe is run
Certain versions of recipes can use different shells
foo as a recipe is a unique, and depends on the OS family - the target for just foo is non-ambiguous
Recipes can contain OS-specific instructions which cannot be accessed from the wrong OS

i wonder if duckscript might help you to resolve this issue.
its a really simplified shell like language i wrote and embedded inside cargo-make to give cross platform scripting solution.
it has few advantages:

written in rust so can be embedded really easily. just few lines. you can even pass variables/state to the script from outside.
its a shell like syntax but MUCH simpler so there is a 0 learning curve.
you can embed just the runtime or also the SDK which gives you access to a file system api, http/ftp clients, collection api and more.

disadvantages:

maybe too simple for some people. however most scripts inside makefiles are simple.
no pipe/redirect capability that people are used to
If you include the SDK you will get a LOT of dependencies and increase your binary size as all these capabilities (such as http client with ssl support) require these dependencies. The runtime itself is super small but... just a runtime won't give you much.

As i see it, the binary size issue is the biggest risk here.

i wonder if duckscript might help you to resolve this issue.
its a really simplified shell like language i wrote and embedded inside cargo-make to give cross platform scripting solution.
it has few advantages:

written in rust so can be embedded really easily. just few lines. you can even pass variables/state to the script from outside.
its a shell like syntax but MUCH simpler so there is a 0 learning curve.
you can embed just the runtime or also the SDK which gives you access to a file system api, http/ftp clients, collection api and more.

disadvantages:

maybe too simple for some people. however most scripts inside makefiles are simple.
no pipe/redirect capability that people are used to
If you include the SDK you will get a LOT of dependencies and increase your binary size as all these capabilities (such as http client with ssl support) require these dependencies. The runtime itself is super small but... just a runtime won't give you much.

As i see it, the binary size issue is the biggest risk here.

Duckscript looks very cool, and I definitely like the idea of embedding something like it in Just. I'm unsure about embedding something that isn't sh, and isn't very widely used. Even though duckscript is very simple, I'm not sure if people would want to learn a scripting language just for use with Just.
And even though sh has a lot of sharp corners, it's very nice that the scripts in Just recipes use the same language as the command line, and existing shell scripts, so you can move code between them easily. (I.e. copy commands from a justfile to the command line, or from a shell script into a justfile.)

Duckscript looks very cool, and I definitely like the idea of embedding something like it in Just. I'm unsure about embedding something that isn't sh, and isn't very widely used. Even though duckscript is very simple, I'm not sure if people would want to learn a scripting language just for use with Just.
And even though sh has a lot of sharp corners, it's very nice that the scripts in Just recipes use the same language as the command line, and existing shell scripts, so you can move code between them easily. (I.e. copy commands from a justfile to the command line, or from a shell script into a justfile.)

makes sense. so I think the only solution to solve cross platform is to make sh env setup easier on windows.
Maybe automate installation of git for windows for example by exposing it as a just sub command (on just for windows version only of course).

makes sense. so I think the only solution to solve cross platform is to make sh env setup easier on windows.
Maybe automate installation of git for windows for example by exposing it as a just sub command (on just for windows version only of course).

pwsh/PowerShell is good at being cross-platform, but it might have a slightly alien or overly-verbose syntax to users of sh etc. And Linux users most likely don't have it anyway. But it might be an option?

pwsh/PowerShell is good at being cross-platform, but it might have a slightly alien or overly-verbose syntax to users of sh etc. And Linux users most likely don't have it anyway. But it might be an option?

PowerShell would definitely be a reasonable option, although the unfamiliarity of most users is a negative. A big part of this, though, is also shipping cross-platform versions of the binaries that people call, since that's a big part of most scripts. So I'm basically waiting for a pure-rust version of something like busybox that includes a built-in sh.

Are you currently aware of any such projects Casey? Even if they are just starting and may not see the light of day?

@runeimp I think the closest thing I know of is uutils/coreutils. It's a reimplementation, in rust, of much of the unix userland, and can be built into a busybox-style binary. I don't think they have a shell yet though.

I am mostly aligned with @rjsberry but I also think I am missing something :)
We already have the ability to specify shell's using a shebang - or setting the default interpreter - so the [sh] attribute seems to overlap with that and potentially confusing.
Personally the requirements I think of are:

Be able to implement a recipe differently for different OS's (which shell I use is either not related - or based on convenience)
Be able to have different recipes on different OS's

For example I currently have the following justfile:
sanity-tests: && sanity-tests-win
    pytest sanity_tests --confcutdir sanity_tests
    python modules/paths/paths_b/path.py

sanity-tests-win:
	#!/usr/bin/env python
	import sys, subprocess
	if sys.platform == "win32":
		subprocess.check_call("py -3 modules/windows_registry/test_reg2.py")

I was thinking that maybe this could look like
sanity-tests: && sanity-tests-win
    pytest sanity_tests --confcutdir sanity_tests
    python modules/paths/paths_b/path.py

[conditional(os_family = "windows")]
sanity-tests-win:
    py -3 modules/windows_registry/test_reg2.py

Though I haven't thought carefully whether && sanity-tests-win should be an error on non-Window's platforms so maybe "safer" would be the following
_sanity-tests-common:
    pytest sanity_tests --confcutdir sanity_tests
    python modules/paths/paths_b/path.py

[conditional(os_family != "windows")]
sanity-tests: sanity-tests-common
    pass  # can I create an empty recipe?

[conditional(os_family = "windows")]
sanity-tests: sanity-tests-common
    py -3 modules/windows_registry/test_reg2.py

@markmmm I believe the whole point of the shell support issue is largely that Windows does not support Bourne shell (sh) in any form out-of-the box. Yet Bourne shell itself or another shell that can emulate it (ash, bash, ksh, zsh, etc.) is supported on almost every other OS that vaguely resembles common usage. So basic flow control and logic scripted in Bourne shell is (other than Windows) extremely portable. So if we could embed sh into Just we could all just write Bourne shell script logic once in Just and utilize them everywhere without the need for anyone to install Linux Subsystem for Windows, Git for BASH, Cygwin, MSYS, etc. And if you don't like Bourne shell script you can already always use something else. You'll have have to ensure support is available on every OS your Justfile is deployed too or write two entirely different recipes per task you want just to handle. One for Windows, and one everything else. Or possibly one for each OS if you really have some very special needs per OS.

One problem though that needs to be kept in mind is that even if we embed a shell in just, the userlands on different OSs are totally different, so the commands that you're running aren't cross platform. We'd probably have to embed something like busybox.

Example requirement: I want to delete a file (e.g. user-configuration.json) that is located in different locations on Win/Mac/Linux, on Windows I would like to additionally remove a registry entry

of course there are workarounds, like env-vars etc - but now a just-file stands on it's own - which is one of benefits if you ask me.
while the difference between rm / rd will be solved by the shell - the separate paths won't be. I don't know much about busy-box - but I assume that can only help when the paths in question are relatively 'standard')
By having the ability to specify a rule as OS/OS Family specific I could handle those differences.

Embedding shell solves one part of the problem for people who want to use shell across all platforms - but it wouldn't support the full title of this issue.
I would also say that users who want to use sh have a route available to them right now - they can ensure that sh is installed. But I would question whether just should "bless" (and integrate) any particular shell.

@markmmm I like the conditional logic tags. Though you can already do this with {{os()}} as part of the conditional logic within a recipe. For example
sanity-tests-common:
    pytest sanity_tests --confcutdir sanity_tests
    python modules/paths/paths_b/path.py

[conditional(os_family != "windows")]
sanity-tests: sanity-tests-common

Even if we embed Python or PowerShell, etc. you will still have differences such as the Windows Registry being a unique feature to Windows. There will always be cases where you need special handling for a particular OS. This is not limited to POSIX vs Windows. Different distributions of Linux are VERY different depending on what you're talking about. Though most of the time you can't tell the difference from the command line. This is why we have {{os()}} so we can manage special situations in a particular OS at the most basic level.

You may even be able to do it with with the conditional logic built into just. I've not been able to figure out how to use it that way myself, sorry @casey, but if it's possible that would be a cross-platform option as well.

I'm using just and nushell to run cross-platform scripts, they work pretty well

@hustcer do you mean nushell? If so that looks rather interesting. @casey might that be a good candidate for an embed shell/scripting language as it is written in Rust? Looks to be heavily inspired by PowerShell which many POSIX types will likely distain. But maybe not?

Looks good to me but I'm a PowerShell user :^)

I've grown to appreciate PowerShell over the last year. I think that in general it's verbose as hell. But I like many of the ideas behind it. And yes, that feature is awesome! 😀

@hustcer do you mean nushell? If so that looks rather interesting. @casey might that be a good candidate for an embed shell/scripting language as it is written in Rust? Looks to be heavily inspired by PowerShell which many POSIX types will likely distain. But maybe not?

Yes! That's it. It's modern, elegant and powerful, I have use it for a few months. The latest version 0.4.0 is compressed
to about 50M with a lot of pluggins, and nushell without pluggins could be much more smaller. However, nushell is not production ready, and will have a breaking change after using the new engine-q in the future.

I've grown to appreciate PowerShell over the last year. I think that in general it's verbose as hell. But I like many of the ideas behind it. And yes, that feature in nushell is awesome! 😀

@runeimp Try it and you will love it, I enjoy it very much! Actually, I have change all my scripts from sh to nushell.

Yeah, it would likely need to reach version 1 before @casey would consider using it. Looks promising though.

Regarding an embedded scripting language, have you considered rhai? It seems the easiest option to embed in Rust.

@torkleyy rhai looks good, although the fact that it's not popular is a big of a downside, since most developers using just would have to learn it. Currently I think using python via https://github.com/RustPython/RustPython is the best bet.

i wonder if there is any more update on this support. currently, my solution is set default shell to powershell 7.

Nothing new to report, I've been working on other projects, so I'm not tackling major new features, although if someone wants to tackle this, I'm happy to help.

Nushell has introduced the new engine in v0.60, and just released v0.65, It's good enough for me currently. I had use it for more then half an year, and found no compatible issue for mac / Linux and Windows.

Yea! Using a cross platform shell sounds like a plan! Since I am mostly using azure pipeline for build etc, Powershell 7 seems to be working good everywhere, so I will stick on that for now. Thanks for the quick check and help! @casey @hustcer

Starlark maybe? https://github.com/casey/just/issues/537#issuecomment-1201873086

Now that #1387 has landed, and shells are fully configurable, I think this issue can probably be closed. Truly cross platform justfiles would depend on two things:

A cross-platform scripting language.
A cross-platform userland, i.e., cross-platform versions of all the commands that you might want to call in a jusfile.

These two things are ultimately outside of the scope of the project. I'm hoping that eventually, they'll appear, ideally in the form of sh and busybox clones written in Rust that can be integrated into the just binary.

I know this is an older issue technically, but PowerShell core is cross-platform and has built-in if ($isWindows) and if ($isLinux), etc. I use it heavily on linux, then also Windows for work, and a large majority of my scripts are x-platform, considering you can also utilize .Net classes for directory/paths like the following, which will work on most any system:
if (!([System.IO.Directory]::Exists($logPath))) {
    [system.io.directory]::CreateDirectory($logPath)
}

So either utilizing that in a justfile, or if a justfile simply had a command annotation of

#[if(linux)]
install: build
    echo linux > stuff

#[if(windows)]
install: build
    cmd /c myWindowCommand.stuff
`
Not sure id that information is useful at all, but I just wanted to make sure it was known

Yep, this is what I ended up doing previously as the workaround too. Then later I switched to nushell. I highly recommend to give it a try. The problem with Powershell Core is that on linux and mac, the first launch can be crazily slow from my experience, (as well as the second, maybe the third, but it gets better every time). And on the other side, nushell is quite fast and usually can do most of the work too, unless you need certain specific features that uses powershell modules is way easier.
(don't get me wrong. I love powershell and wrote many powershell modules by myself too. : D i just don't like to wait when running frequently used commands.)

Yep, this is what I ended up doing previously as the workaround too. Then later I switched to nushell. I highly recommend to give it a try. The problem with Powershell Core is that on linux and mac, the first launch can be crazily slow from my experience, (as well as the second, maybe the third, but it gets better every time). And on the other side, nushell is quite fast and usually can do most of the work too, unless you need certain specific features that uses powershell modules is way easier.
(don't get me wrong. I love powershell and wrote many powershell modules by myself too. : D i just don't like to wait when running frequently used commands.)

Thats interesting. On linux, I find Pwsh to be not only way faster than on Window, but faster than zsh (both are setup with the same imports and scripts, minus zsh itself, things like starship, my update display, etc) I try and use as few shell specific plugins as possible so I can set both up the same.
In this below, zsh is what I am loading in the first window, then pwsh in the second, both with full profiles.  It's even faster if you launch with -noprofile -nologo, etc.

I started implementing some things in Just with pwsh last night and it has been working pretty well, minus some small things here and there being my first try using it with just.
That said, I have nothing against nushell, I just personally am a huge fan of pwsh on linux, being I get the crazy power of objects seamlessly mixed with bash, without having to pick up something else completely new.
What would be super nice is to be able to use more than one language in a single command (if there is no chance of  the one example in my prior post #[if(linux)])

install: build
    ({pwsh
        # Items here are ran in pwsh, if it exists, else fall back to next shell
        echo "Using pwsh: $PSVersionTable"
    }),
    ({sh
        # Items here are ran with sh, if pwsh was not ran, and sh exists.
        TEXTTEST="using sh!" && echo $TEXTTEST
    })

Something along those lines, then no matter which system, the same command can be ran from a user point of view to build/install, without having to have separate commands for each system, which it seems like might be necessary with the `shell := [""] commands?

Wow! That's good for you! Somehow pwsh needs about 1-2 minutes to launch on my work mbp, so I switched to nushell in later projects. But I am still using it on my personal fun project (w/ -noprofile and etc). And yes, I am a huge fan as well, the object pipeline and all the bash aliases just makes things so much easier and less chance to wrong.
And having a fallback will be great indeed. What I am doing right now is that I have a init command for each system just to get things installed for each type of system, e.g. just init-win, just init-linux and just init-mac. It uses whatever the shell that runs on those os, but the problem is that, the users has to remember to which command to run, instead of blindly run just init. If certain fallback mechanism is there, it will make this experience even better.

@r12f you could do something like
# Initialize OS Setup
init:
	just _init-{{os()}}

_init-linux:
	# Linux init

_init-macos:
	# macOS init

_init-windows:
	# Windows init

Wow! This is a really nice trick! Thanks a lot for sharing! 👍👍👍

I got way off track from what I wanted to accomplish this evening, but I wanted to see if I could create a single command that might work for both pwsh and sh, and it looks like I have something figured out. It is in no way practical, or even worth the effort outside of my need to accomplish this, lol, but this is essentially what I came up with:

shebang := if os() == 'windows' {
  'pwsh.exe'
} else {
  '/usr/bin/bash'
}

set shell := ["/usr/bin/env", "bash" ,"-c"]
set windows-shell := ["pwsh.exe","-NoLogo", "-noprofile", "-c"]

sh-pwsh:
    #!{{shebang}}
    #!/bin/bash
    # ---------
    # - Shell -
    # ---------
    echo --% >/dev/null;: ' | out-null
    <#'
    function ShellRunner {
      echo -e "\n\nRunning: ShellRunner\n\n" || true
      just install
    }
    # Pwsh ignores these, but bash will run it
    "ShellRunner"
    exit #> # Bash exits here
    # ---------
    # - Pwsh --
    # ---------
    echo "`n`nRunning PwshRunner`n`n"
    function PwshRunner {
      $homeDir = $HOME
      $originalExe = "ncm-rs.exe"
      $newExe = "ncm.exe"
      $targetPath = "./target/release/"
      $releasePath = "./target/release/ncm.exe"
      $installPath =  "/.local/bin/"
      # --
      if (test-path $releasePath) { rm $releasePath }
      $(cargo test)
      $(cargo build --release)
      mv "$targetPath/$originalExe" "$targetPath$newExe"
      echo "Moving $releasePath to $homeDir/$installPath"
      cp "$releasePath" "${homeDir}/$installPath"
    }
    # --------
    PwshRunner

https://user-images.githubusercontent.com/3442753/219552072-e1647e61-4e7d-4c4e-b0df-81ed5f2541c8.mp4

@MostHated I often need cross-platform compatibility to simplify Justfile maintenance. I work on Mac but most of the systems I deploy code to are Windows so I simplified things by installing PowerShell Core on my Mac and default to PowerShell Desktop on the Windows systems as they always have that version installed.
set windows-shell := ["powershell", "-c"] # To use PowerShell Desktop instead of Core on Windows
set shell := ["pwsh", "-c"] # PowerShell Core (Multi-Platform)

# The .exe extension is not required
shebang := if os() == 'windows' {
	'powershell'
} else {
	'/usr/bin/env pwsh'
} # Switch 'powershell' with 'pwsh' for PowerShell Core

# PS Hello World
@hello:
	#!{{shebang}}
	Write-Host "Shebang: {{shebang}}"
	Write-Host "Hello, world from PowerShell!"
	# Do other scripty things...


Please help to install and run properly

Hi,
I would love to be able to use comfy-station but I encounter issues, sharing the installation procedure would be great!
Here is what I did on my Mac to install it :

Cloned the Repo
Added a .env.local file with these parameters :

APP_HOSTNAME=localhost
NEXTAUTH_SECRET='secret'
BACKEND_URL=http://localhost:3001
NEXTAUTH_URL=http://localhost:3000

Build using bun next build
Run using 'npm start'

I'm able to see the login page : http://localhost:3000
But then I can't login and he "Forgot your password? Click here" button doesn't do anything...
Is there a default user/password to use?
Or where should I create my username, password, token?
Thank you very much!
j.

I have been able to create a new user and login successfully using the following command:
bunx tsx ./cli.ts user --email<EMAIL_ADDRESS>--password "password1234" --roleLevel "5"

I have been able to create a new user and login successfully using the following command:
`bunx tsx ./cli.ts user --email<EMAIL_ADDRESS>--password "password1234" --roleLevel "5"
`
If you have a better method please share :)

Your method to create new user is correct. We can only create new user using admin account in the future.
It still under heavy development so i dont put the document for it yet, I will write some instruction for it soon. Sorry about that!


Remove double quote stripping

Description
Removes the section of API.js that strips double quotes from messages - Knex protects against SQLInjection so this is no longer required
Fixes #180
Type of change
Please delete options that are not relevant.

[x] New feature (non-breaking change which adds functionality)
[ ] This change requires a documentation update

How Has This Been Tested?
Submitted messages containing SQL Statements and confirmed these were NOT executed
Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have updated changelog.md with changes made

I have a vague recollection that was there to protect against something else. Either the regex text swap/highlighting thing, or the old search functions... if it tests ok from your side then it's probably all good though :)

Hmmmm i might run it through a full set of tests. I only really tested SQL Injection. 😁

Searching and the highlighter seem to work ok for my use case.
I'll leave it run overnight and checck for any issues 😃

This seemed to run ok Overnight, nothing strange comparing to 0.3.0 build


"./manage.py migrate" required at the first launch

Can override this ?

Yes, i would want to definitively avoid database usage, so this would not be needed.
But in fact, this we can do without, will just have to ship the dummy database created (db.sqlite3) on your install or my development install, because finally the webapp does not really use datas from the db so we don't care of dummy datas. Just need the file and Django won't say nothing about syncdb or migrate requirements.

Ok i noted it in the README, but will have to tell about to ship the db.sqlite3 file into the recalbox manager package so the server will be totally ready to run.


Item be evicted before reaching the TTL

let c = Cache::builder()
        .time_to_live(Duration::from_secs(60 * 60 * 24)) // live, 24h
        .build(),

I set my cache like this, make it unbounded.
This cache may be shared between threads.
However, I noticed that the items inserted will disappear very soon.
Is there an ensurance that items will always live longer than this TTL? How to let it expires after the TTL?

To be more specific:
I'm using it with actix-web.
At the beginning, it works fine:
let c = Cache::builder()
        .time_to_live(Duration::from_secs(60 * 60 * 24)) // live, 24h
        .build(),
let app = MyStruct{c};
HttpServer::new(move || {
        App::new()
            .app_data(web::Data::new(app.clone()))
//....

            }).bind(("<IP_ADDRESS>", 8888))?
    .run()
    .await;

But after I changed to:
let c = Cache::builder()
        .time_to_live(Duration::from_secs(60 * 60 * 24)) // live, 24h
        .build(),
HttpServer::new(move || {
        App::new()
            .app_data(web::Data::new(MyStruct{c})) // Now inside
//....

            }).bind(("<IP_ADDRESS>", 8888))?
    .run()
    .await;

And the problem occurs.

Is this a problem with the smart pointers, and maybe the underlying issue is something inside the unsafe impl Send/Sync ?

The reason:
the worker threads will create a new state for each thread. So it must be done by ways like .clone()

The reason:
the worker threads will create a new state for each thread. So it must be done by ways like .clone()


Issue113 - Backend accepts commit message as an optional parameter

Closes issue #113

Sanitize functions should be easy to test with jest. I think we should add the tests too to this pull request

Wait for @tulma95's change for sanitize funcs


Update BASE_VERSION to 1.16-2023-04-12T19-03-05

@istio-testing: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

integ-telemetry-mc_istio_release-1.16
eb76394bcd1c6873c50898c92f49073ec67b5a3a
link
true
/test integ-telemetry-mc

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

/test integ-telemetry-mc

@istio-testing: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

integ-security-multicluster_istio_release-1.16
eb76394bcd1c6873c50898c92f49073ec67b5a3a
link
true
/test integ-security-multicluster

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

/test integ-security-multicluster


bug(tiller): sort unknown but different kinds alphabetically based on kind name

Adds additional manifest sorting logic so that different unknown kinds
are sorted alphabetically so that manifest order is more deterministic.

@thomastaylor312 I tested this manually with some "unknown" kinds and it works as expected.

Let's pull this in to 2.6.2 as well. @jascott1 can you add the "needs pick" label after you merge?

@thomastaylor312 Thanks and done!


Slides force German language

https://github.com/piepert/grape-suite/blob/8f405cc68a58934cbff2c9f6433793ef166add81/src/slides.typ#L131
Since this is only in the slides, it's probably unintentional.

You're right, this is unintentional. Seems to be a remnant of my personal modifications. I'll go through the code again to check that all templates (except for the examples) are free of German and will remove it in the next update. Thank you for the issue!

Done.


tests: add more unit tests to internal pkgs

Codecov Report
Attention: Patch coverage is 80.00000% with 3 lines in your changes are missing coverage. Please review.

Project coverage is 69.04%. Comparing base (593107a) to head (8d69ec9).

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #28      +/-   ##
==========================================
+ Coverage   65.32%   69.04%   +3.72%
==========================================
  Files          35       35
  Lines        1759     1767       +8
==========================================
+ Hits         1149     1220      +71
+ Misses        610      547      -63

Files
Coverage Δ

internal/oci/store/tests/mock.go
77.77% <90.00%> (+30.40%)
:arrow_up:

internal/oci/registry.go
63.76% <60.00%> (+63.76%)
:arrow_up:

... and 2 files with indirect coverage changes


[AutoPR policyinsights/resource-manager] Fix PolicyInsights code generation issue

Created to sync https://github.com/Azure/azure-rest-api-specs/pull/5389

This PR has been merged into https://github.com/Azure/azure-sdk-for-java/pull/3117


Simplify generating firebase config files

Do you want to request a feature or report a bug?
feature
What is the current behaviour?
preact build --template ./template.html --json
preact serve --server config
is currently the only way to generate the config but I'd like a --firebaseconfig or something on preact build so I don't have to execute as many commands.
What is the expected behaviour?
preact build --template ./template.html --json --firebaseconfig
If this is a feature request, what is motivation or use case for changing the behaviour?
ease of use
Please mention other relevant information.

Node version v10.0.0
npm version v6.0.0
Operating system osx 10.10.5
CLI version 2.2.1

I think we're looking at rolling it into build like you suggested in the next version:
preact build --config firebase.json


Getsubstructure match fails for seemingly identical fragments

Configuration:

RDKit Version: 2018.09.1
Operating system: Windows10 subsystem linux debian
Python version (if relevant):
Are you using conda?
If you are using conda, which channel did you install the rdkit from? ..
If you are not using conda: how did you install the RDKit?

Description:
Hello, I'm trying atom to atom renumbering between reactant and product.
While doing so, I'm breaking bonds of reactant and product fragments until identical conformers are achieved.
This method is explained in the paper. (JCTC 2017, 13, 5780-5797)
Following code is actually from Prof. Jan Jensen's github.
Sorry for very verbose codes uploaed but I believe that the problem can be reproduced with this :)
While doing so, I've encountered strange problem where Getsubstructure match not working for two seemingly and obviously equivalent substructures.
I want to get indices as return value after "getsubstrucmatch" but nothing is returned.
Could anyone help me how this happened?
Any comment would be very appreciated and thank you in advance for taking time to read this!
Best regards,
Hyunwook

from rdkit import Chem
from rdkit.Chem import AllChem, rdMolDescriptors
from rdkit.Chem.Draw import IPythonConsole

def change_bond_order(mol):
    for bond in mol.GetBonds():
        if bond.GetBondType() != Chem.BondType.SINGLE:
            bond.SetBondType(Chem.BondType.SINGLE)

    return mol

def change_formal_charge(mol):
    for atom in mol.GetAtoms():
        if atom.GetFormalCharge() != 0:
            atom.SetFormalCharge(0)

    return mol

def break_bonds(mol_dict,num_bonds):
    frag_smiles = []
    mol_frags = {}
    for key in mol_dict:
        mol = mol_dict[key]
        for bond in range(num_bonds):
            mol_frag = Chem.FragmentOnBonds(mol,[bond],addDummies=False)
            Chem.SanitizeMol(mol_frag)

            # Canonicalize smiles
            smiles = Chem.MolToSmiles(Chem.MolFromSmiles(Chem.MolToSmiles(mol_frag),sanitize=False))
            #print(smiles)
            if smiles not in frag_smiles:
                frag_smiles.append(smiles)
                mol_frags[smiles] = mol_frag

    return frag_smiles,mol_frags

max_bonds_cut = 3
rxn_smiles = "C=[C]c1ccccc1.c1ccccc1C=C>>C=C(C[CH]c1ccccc1)c1ccccc1"
react_smiles, prod_smiles = tuple(rxn_smiles.split(">>"))

react = Chem.MolFromSmiles(react_smiles)
prod = Chem.MolFromSmiles(prod_smiles)

#Remove aromaticity and work with single/double/triple bonds
Chem.Kekulize(react,clearAromaticFlags=True)
Chem.Kekulize(prod,clearAromaticFlags=True)

react = Chem.AddHs(react)
prod = Chem.AddHs(prod)

react_numbonds = react.GetNumBonds()
prod_numbonds = prod.GetNumBonds()

original_prod = prod
#Change all bonds to single bonds and remove all charges on atoms
#This allows us to compare molecule fragments based purely on connectivity
react = change_bond_order(react)
prod = change_bond_order(prod)
react = change_formal_charge(react)
prod = change_formal_charge(prod)

#recanonicalize SMILES (sanitize=False prevets hydrogen deletion)
react_smiles = Chem.MolToSmiles(Chem.MolFromSmiles(Chem.MolToSmiles(react),sanitize=False))
prod_smiles = Chem.MolToSmiles(Chem.MolFromSmiles(Chem.MolToSmiles(prod),sanitize=False))

#We identify active bonds based on SMILES comparisons and connect fragments to SMILES via dictionaries
matches = []
bonds_cut = 1
react_frag_smiles = [react_smiles]
prod_frag_smiles = [prod_smiles]
react_frags = {}
react_frags[react_smiles] = react
prod_frags = {}
prod_frags[prod_smiles] = prod

# Keep cutting bonds until the fragments match each other.
# If reactants and products have an unequal number of bonds, we cut the one with most bonds first
# until they have an equal number of bonds
while len(matches) == 0 and bonds_cut <= max_bonds_cut:
    if react_numbonds > prod_numbonds:
        react_frag_smiles, react_frags = break_bonds(react_frags,react_numbonds)
        react_numbonds += -1
    elif prod_numbonds > react_numbonds:
        prod_frag_smiles, prod_frags = break_bonds(prod_frags,prod_numbonds)
        prod_numbonds += -1
    else:
        react_frag_smiles, react_frags = break_bonds(react_frags,react_numbonds)
        react_numbonds += -1
        prod_frag_smiles, prod_frags = break_bonds(prod_frags,prod_numbonds)
        prod_numbonds += -1

#Check if bond breaking produced idential set of fragments. There may be more than one way to do this
#"matches" is a list of SMILES strings describing the fragments resuling from bond cutting
    matches = list(set(react_frag_smiles) & set(prod_frag_smiles))
    #print("bonds_cut attempted : {}".format(bonds_cut))
    bonds_cut += 1

#print(matches, bonds_cut-1)

#Translate the SMILES strings to lists of atom numbers
#For example react = NCC and prod = CCN, so prod_order = [2,1,0], i.e. N is atom 0 in react and 2 in prod.
prod_orders = []

for match in matches:
    #print(match)
    patt = react_frags[match]
    Chem.SanitizeMol(patt)
    Chem.SanitizeMol(prod_frags[match])
    #print(Chem.MolToSmiles(patt))
    prod_order = prod_frags[match].GetSubstructMatch(patt)
    #prod_order = prod_frags[match].GetSubstructMatch(Chem.MolFromSmiles(match,sanitize=False))
    if prod_order not in prod_orders:
        prod_orders.append(prod_order)
#            atom_ranks.append(atom_rank)

print(prod_orders)

react_frags[match]

prod_frags[match]

prod_order = prod_frags[match].GetSubstructMatch(react_frags[match])
prod_order  ## empty tuple

@jungsdao : one guess (without reading through all that code and trying to figure out what it does) would be that this is caused by the fact that you are kekulizing the molecules and removing the aromaticity flags.
It's possible to end up having a molecule not being a substructure of itself if the Kekule structures don't match. Here's a trivial example:
In [2]: m = Chem.MolFromSmiles('CC1=NC(O)=CC=C1')

In [3]: m = Chem.MolFromSmiles('CC1=NC(O)=CC=C1',sanitize=False)

In [4]: m.UpdatePropertyCache()

In [5]: m2 = Chem.MolFromSmiles('CC1N=C(O)C=CC=1',sanitize=False)

In [6]: m2.UpdatePropertyCache()

In [7]: m.HasSubstructMatch(m2)
Out[7]: False

In [8]: Chem.SanitizeMol(m)
Out[8]: rdkit.Chem.rdmolops.SanitizeFlags.SANITIZE_NONE

In [9]: Chem.SanitizeMol(m2)
Out[9]: rdkit.Chem.rdmolops.SanitizeFlags.SANITIZE_NONE

In [10]: m.HasSubstructMatch(m2)
Out[10]: True


Support passing options to LDClient.initialize

I imagine there was a time when we couldn't do this. Closing...


Allow DataGenerator for ActivationDefence

Description
This PR allows the activation clustering defense to accept the ART DataGenerator type instead of passing a full x_train, y_train numpy arrays on initialization. This allows the defense to be used in cases where the entire dataset doesn't fit in memory.
Fixes #373
Type of change
Please check all relevant options.

[ ] Bug fix (non-breaking)
[x] New feature (non-breaking)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

Testing
Tests were added to test_activation_defense for generators
Checklist

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code
[ ] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[x] I have added tests that prove my fix is effective or that my feature works
[x] New and existing unit tests pass locally with my changes

@ebubae Thank you very much for adding support for data generators on the activation defense!


fix(theme): display docs toggle theme icon in mobile screens

Fixes #1546 .
Description
Allows for changing theme in mobile devices.

Mobile:

Full screen:

Scope

[X] Patch: Bug Fix
[ ] Minor: New Feature
[ ] Major: Breaking Change

Thanks @tajo ! Is there anything I can do to make the screener test pass?

Thanks for the fix @IgorWilbert !


BAU DWP KBV Explicitly set headers on token and credential requests

BAU DWP KBV Explicitly set headers on token and credential requests

Temporary debugging code so ignoring sonar issues


v1.5.1

Hi I am new to this site (just joined a few minutes ago --- I only joined so I can comment on your program).
I first tried Fuckr a few months ago.

I have had problems though the past few weeks with messages on Fuckr--I can send, but I am not receiving any, and my profile is NOT showing online--which is another reason I am not getting messages..I had an older version of Fuckr (which had worked really well up to that point, so I decided to update to the 4/25/2016 version--and its not helped at all).
I read that closed discussion you have, and I tried to go in the "coffee" to change the lines you talked about, but there is no way to edit that file, I tried. I don't know a huge amount about programming.
On the fuckr.me website of yours, it still lists v1.5.1 (the April 25 version) as the downloadable version (you said it was temporarily online, it's still listed as the default download for windows). Do you know when a newer version of Fuckr for windows will be able to be downloaded, or is there a link you can give me to download a newer update? As I am hoping that next version will allow my profile to be shown online Fuckr, as well as me getting messages again.
Most of Grindr's errors, are indeed with Grindr -- I have talked to many guys on Grindr that said they have problems with messaging all the time -- and most guys are actually using Grindr, and not Fuckr, no one I have chatted with on there has admitted to using Fuckr.
I will be patient. As I do not have the expertise or training otherwise to "remedy" the version I currently have.  I am using other "social" websites in the meantime.
Also a suggestion for a future version to have an "auto-updater" (unless that would be too difficult) -- chat client had an auto-download to update the software --
Thanks once again for making this program. I consider you a friend for all the effort and hard work you have put into it. :)

I believe he is releasing them here (below) until they are stable. It still is in sorta a Beta version right now, he is working to bring out 1.6.2. I believe there has been some changes at Grindr so hes adding features and fixing the issues.
https://github.com/tomlandia/fuckr/releases

v1.7.0 has been released on is used on https://fuckr.me .


[Android] App causes extreme system slowdown and freezing

Running the Android app on my OnePlus 7 Pro (8Gb RAM) causes the phone to become nearly unresponsive. I am unable to bring up the keyboard, gesture controls fail, and pressing the power button takes several seconds to turn off the screen.
My best bet is it just doesn't have enough RAM because the issues occur after loading the model but before sending any messages. 8Gb seems pretty standard on Android phones though, is there a way to select a different model for me to test with?

I tried out the latest version and I still have slowdown issues, but I've found a new and interesting problem: upon the app crashing (probably because it's out of memory), I found my phone wallpaper had been changed. I have no idea how that happened, but I'm thinking there's something not quite right about my phone's operating system. I'll give the app a try on a different phone from a different manufacturer

We indeed have a limit on RAM we can handle. Latest app ships with 3B model that might help in such cases


refactor(v2client): refactored pagination into a separate function

:tada: This PR is included in version 7.4.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Sensitive clients will find the word "Pimp" offensive.

Sensitive clients will find the word "Pimp" offensive and will feel it condones the exploitation of women.
Much in the same way as A&M Nav, you should add the option to rename the plugin title as a setting which will change the plugin title in all places it occurs (menu bar, options page title, plugin list, etc).
Personally, I find nothing wrong with the name, and take it as it was intended to mean, that is 'to elevate' or 'add style', but having worked with sensitive clients, I already know several who will take strong issue with the name at first glance.
I know this to be the case from dealing with questions over P&Ts 'Playa' add on with EE clients.

    {
        $settings = $this->getSettings();
        if ($settings->pluginName) {
            return $settings->pluginName;
        }
        return Craft::t('Pimp My Matrix');
    }```

+1 on this.
Also, I'd much prefer to access the settings via plugin->settings and for the title bar menu to be optional if that is possible.  Given it's something I only actually visit and use irregularly, I prefer less clutter over easier access.

Yup - certainly loosing the tab makes sense

Agreed, I'll move it to settings - although it can't actually be stored as plugin settings so we'll have to do some kind of redirect to he correct controller action.


Feature Request: Kalphite Queen Helper

Shows the tile kq is on, what tiles count as "lured" i.e. you can walk out, hit and walk back under and she won't move (https://clips.twitch.tv/SarcasticKindOpossumLeeroyJenkins) and possibly (if it's not too op, probably is) what movements to get to a lured position.

it's a cheap method, like 3m costs. do you mean like marking tiles and marking kq? i dont know all the tiles thats "lured" though, only got 2 kc

Idk what u meant, but Kq is stuck couz of kalphite workers, all u need to do just go in the corner so workers can surround Kq

There is no such thing as "lured" spots, you just go to corner and let workers block the KQ.


proposal: Trusted Protocal and Trust Native Protocal

What would you like to be added:
Layotto not only supports dapr api, but also supports all "trusted protocols",e.g. redis protocal and aws s3 protocal ( #510 is working on it)

Specifically, we can divide layotto API into three types:

Standard API. This is what we already have.
Trusted Protocal. For example , we add an "aws s3 API".
Trust Native Protocal. For example, layotto support redis native protocal

I will submit a PR to add support for redis API.
Why is this needed:
That's a long story. To be short, current dapr api can not meet all the needs of applications in the real world while maintaining portability, but protocals like redis protocal and aws s3 protocal can.
For more details, I have a presentation for it .

Subtasks:

[ ] s3 API. #556
[ ] Redis API.
[ ] Kafka API.

可以调研下 eventmesh

Does the Redis API need to be defined in the proto file?

Does the Redis API need to be defined in the proto file?

I think so. It's like "the gRPC version of redis binding api", and as a gRPC api, it needs a proto.
From this perspective, the interface of Redis API on capa-java is "the in-process version of redis binding API"

We have tried to define the interface of Redis API on capa-java before, mainly referring to jedis, but there are many jedis custom objects which are very complicated.

I read your code and it's very good. Could u give some examples on "jedis custom objects which are very complicated"?
By the way, did you already use these interfaces in your production environment?

Delay message API for pubsub 这儿有人assigned吗，等我目前的pr 如果成功 merge后想尝试下这个的实现

@azhsmesos 欢迎，目前没人 assigned
因为这个功能比较重要，需要先做设计（写个设计 proposal)，大家讨论后达成一致了再开始编码~
可以先想想怎么设计，如果不太清楚的话我帮着写个初版设计proposal也行

I read your code and it's very good. Could u give some examples on "jedis custom objects which are very complicated"?
By the way, did you already use these interfaces in your production environment?

我给出的Redis API链接里，剔除了"非常复杂的jedis自定义对象”的部分，因为这部分是跟jedis的jar耦合在一起的，在开源版本的设计中我不希望它们强耦合。
举个例子，在上述定义的完全版的Redis API NativeKeyCommands中，有这样的API：
import redis.clients.jedis.params.SortingParams;

List<byte[]> sort(byte[] key, SortingParams sortingParameters);

SortingParams

By the way, did you already use these interfaces in your production environment?

是的，包含了上述Jedis复杂对象部分的API，就是目前在生产上使用的Redis API。它基于jedis，可以在java-sdk中可以良好工作。

以下是使用到的"非常复杂的jedis自定义对象”：
NativeGeoCommands.java
import redis.clients.jedis.GeoCoordinate;

import redis.clients.jedis.GeoRadiusResponse;

import redis.clients.jedis.GeoUnit;

import redis.clients.jedis.params.geo.GeoRadiusParam;

NativeHashCommands.java
import redis.clients.jedis.ScanParams;

import redis.clients.jedis.ScanResult;

NativeKeyCommands.java
import redis.clients.jedis.SortingParams;

NativeListCommands.java
import redis.clients.jedis.BinaryClient;

NativeSetCommands.java
import redis.clients.jedis.ScanParams;

import redis.clients.jedis.ScanResult;

NativeSortedSetCommands.java
import redis.clients.jedis.ScanParams;

import redis.clients.jedis.ScanResult;

import redis.clients.jedis.Tuple;

import redis.clients.jedis.params.sortedset.ZAddParams;

NativeStringCommands.java
import redis.clients.jedis.BitOP;

可以在 https://github.com/redis/jedis/tree/master/src/main/java/redis/clients/jedis 中找到这些对象，不过由于jar包版本区别，可能和上述import目录不同。

Update:
I just found that dapr is developing "capability API" for feature discovery.
https://github.com/dapr/dapr/issues/4367

我不是很理解咱们api规范是啥样的，比如事物消息，我我这儿有一份思路就是，可以类似rocketMQ那样，利用两阶段提交+TCC补偿机制实现，比较重要考虑的问题就是可能在两阶段提交中途宕机导致事物回滚不成功，这儿要么就是consumer端去进行tcc补偿，但是感觉对业务侵入性比较大，可不可以考虑利用redis+lua的scriptLoad脚本实现，只要redis不宕机就可以保证事物的正常执行

@azhsmesos Hi~您说的是关于事务消息API的设计思路对么~

但是感觉对业务侵入性比较大

我不是很清楚事务方面有没有更简洁易用的api呢，但感觉侵入性越大越难可移植呢
或许也可以参考一下dapr的一个提案中对transaction的设计：https://github.com/dapr/dapr/issues/3354

I submitted an issue in MOSN https://github.com/mosn/mosn/issues/2054
We can also support redis native protocal


loading checkpoint error

I can load checkpoint correctly if I run train_ds.py, but when I use deepspeed as the given example, this error occurs. Can you tell me how to fix it?
You are using the legacy behaviour of the <class 'transformers.models.llama.tokenization_llama.LlamaTokenizer'>. This means that tokens that come after special tokens will not be properly handled. We recommend you to read the related pull request available at https://github.com/huggingface/transformers/pull/24565
Loading checkpoint shards:  50%|███████████████████████████████████████████████████████████▌                                                           | 1/2 [00:10<00:10, 10.36s/it][2023-08-22 11:46:22,908] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 3210
[2023-08-22 11:46:23,766] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 3211
[2023-08-22 11:46:24,696] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 3212
Loading checkpoint shards:  50%|███████████████████████████████████████████████████████████▌                                                           | 1/2 [00:18<00:18, 18.49s/it][2023-08-22 11:46:25,962] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 3213
[2023-08-22 11:46:26,758] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 3214
[2023-08-22 11:46:26,758] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 3215
[2023-08-22 11:46:27,597] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 3216
[2023-08-22 11:46:28,151] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 3218
[2023-08-22 11:46:28,827] [ERROR] [launch.py:321:sigkill_handler] ['/home/TianYunjie/anaconda3/envs/lisa/bin/python', '-u', 'train_ds.py', '--local_rank=7', '--version=liuhaotian/LLaVA-Lightning-7B-delta-v1-1', '--dataset_dir=/home/ubuntu/Workspace/TianYunjie/datasets/LISA_datasets/', '--vision_pretrained=sam_vit_h_4b8939.pth', '--dataset=sem_seg||refer_seg||vqa||reason_seg', '--sample_rates=9,3,3,1', '--exp_name=lisa-7b'] exits with return code = -9
and here is the related information:
[2023-08-22 11:45:50,020] [INFO] [real_accelerator.py:158:get_accelerator] Setting ds_accelerator to cuda (auto detect)
[2023-08-22 11:45:52,164] [WARNING] [runner.py:201:fetch_hostfile] Unable to find hostfile, will proceed with training with local resources only.
[2023-08-22 11:45:52,224] [INFO] [runner.py:567:main] cmd = /home/TianYunjie/anaconda3/envs/lisa/bin/python -u -m deepspeed.launcher.launch --world_info=eyJsb2NhbGhvc3QiOiBbMCwgMSwgMiwgMywgNCwgNSwgNiwgN119 --master_addr=<IP_ADDRESS> --master_port=24999 --enable_each_rank_log=None train_ds.py --version=liuhaotian/LLaVA-Lightning-7B-delta-v1-1 --dataset_dir=/home/ubuntu/Workspace/TianYunjie/datasets/LISA_datasets/ --vision_pretrained=sam_vit_h_4b8939.pth --dataset=sem_seg||refer_seg||vqa||reason_seg --sample_rates=9,3,3,1 --exp_name=lisa-7b
[2023-08-22 11:45:54,525] [INFO] [real_accelerator.py:158:get_accelerator] Setting ds_accelerator to cuda (auto detect)
[2023-08-22 11:45:56,379] [INFO] [launch.py:145:main] WORLD INFO DICT: {'localhost': [0, 1, 2, 3, 4, 5, 6, 7]}

It seems that RAM has been run out. You may consider using more CPU memory or lowering the number of GPUs.

The memory is 125G in total and around 110G available as the command 'free -h' display, isn't it enough? May I know the memory condition for LISA ?

Hi, it actually consumes not that much for a single process. But in your case, you use 8 GPUs for training, so the CPU memory consumption is approximately 8 times.
FYI, in my side, 256G CPU memory is enough for training on 8*3090 24G GPUs.


Use parent group ids for all artifacts

Hi, I'm the main contributor for this project https://github.com/abashev/vfs-s3 I have a lot of complaints about our 'custom' build for commons-vfs project so I've decided to submit everything that I have to common repo.
There is my first one - using parent group ids for all artifacts. I have to prepare own builds for commons-vfs so for me it is hard to track a lot of places with my group id. With this commit, I will be able to change only parent group id and leave everything as is.

I am not a big fan of it as you cannot easily work on the core module but I also won’t oppose it. Could you squash your commits.

@ecki done

I did rebase for latest master

@garydgregory, @ecki - could you take a look/merge this so @abashev can continue with his PRs? :)


ci: add semrel

:tada: This PR is included in version 1.0.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


chore: add string benchmarking

:tada: This PR is included in version 16.15.14 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release
v16.15.14

Your semantic-release bot :package::rocket:


Remove extra checks from register and update register states

Allow to call unregister if state is 7 == STATE_REGISTER_RESOURCE_CREATED

@yogpan01


Review NavigationChild::find_by_id

My recursive async fn NavigationChild::find_by_id seems to have some unnecessary double wrapping, e.g. calling it looks like that:
NavigationChild::find_by_id(page.id, pool).await.await?;

Is there some way to remove one layer (so that we only need one await?)

Write that imperatively instead.

Write that imperatively instead.

Just remove the async from the function signature.

Just remove the async from the function signature.


docs: transfer of text about runtime uploads

transfer and update of the text describing the way users will get data into Seedcase
most of this is text from the original Seedcase repo.  It's been updated with a few lines about batch uploads.  The links to the diagrams are broken, there are todo's on all of them to make them into pngs and get them integrated, but one is waiting for another PR do be done.
Focus for reviewers:
That the text hasn't been cut in a way that it no longer makes sense.  Also, a small bit has been commented out, it would be good to have a discussion of whether or not it should go back in.

Just did some initial minor edits - will read through the runtime-view post tomorrow ☺


Bootloop

Device name: Oneplus 11R
Rom name: OOS
Android version: 14
Pixelify version: 3.0

Bug Description:
The Phone boots fine after installing the module ,however ,restarting the phone makes it bootloop, Which can't be removed by either deleting /data/adb, or by Reflashing the stock boot.img to remove magisk ,
Only factory reset boots it back ,
I just installed the module for Google photos backup and didn't select any one of the options while installation .
Unable to dump logcat in this kind of bootloop , Phone doesn't get detected at all, I am really sorry

Same issue with OnePlus 9 Pro / Lemonadep
Rom name: OOS / OxygenOS
Android version: 14
Pixelify version: 3.0

I can also confirm the issue. First reboot is fine. Any reboot after this causes bootloop.
Oneplus 11
Rom name: OOS / OxygenOS
Android version: 14
Pixelify version: 3.0
CPH24<IP_ADDRESS>.304

I have boot loop after install on.
Oneplus 7t pro
Android 11
Phone will reboot a couple times then will boot successfully, and launcher goes to load and then phone crashes. Boots again without any signs of the pixel launcher

Same issue on OnePlus 12 ColorOS 14.

Same issue happened with me. Flashing stock boot or full payload.bin doesn't help. Goodbye all my data (press F)
Oneplus 10R
ROM: Oxygen OS 14
Android ver.: 14
Pixelify ver.: 3.0
CPH2411_<IP_ADDRESS>

Same issue oneplus 12
ROM: Oxygen OS 14
Android ver.: 14
CPH2581_<IP_ADDRESS>4
Pixelify ver: 3.0

Same bootlooping issue here. Sub Modules for Photos and Call Screening work.
Reflashing boot.img did not resolve bootloop and forced data reset.
OnePlus Open
ROM: Oxygen OS 14
Android ver.: 14
Pixelify ver.: 3.0
CPH2551_<IP_ADDRESS>0(EX01)

Please if possible send boot logs that are required to fix it.

Please if possible send boot logs that are required to fix it.

Same as above, couldn't connect to pull logs and had to factory reset to get phone running again. I did have SIM manager crashing in a previous OS version, not sure if issues are related

Caused bootloop too on Realme GT5.
ROM: Realme UI 5.0 Android 14.
Bootloop happened in second or third restart. I love pixelify but new it make my phone in bootloop everytime.
Cannot access the log because forced to format data.

Bootloop on my 13T, running HyperOS, on the second reboot.

@Kingsman44
OnePlus 12
ROM: Oxygen OS 14
Android ver.: 14
CPH2581_???
Second reboot sent my phone to its bootloop purgatory.
Flashing boot or init_boot did not help.
Adb -rm did not help, neither mounting /data as rw.
TWRP will "sucessfully" delete any files in /data until reboot. They appear back again. Same goes for adb delete.
ADB is not even available during boot so, of course, no logcat is available.
Would be great if we would at least receive a clue about this.
Even a lame answer would be good since the issue is open for half a year
Will use force if there's no answer in 2 days


Update the github wiki to be up to date with https://developer.adonis.dev/

Make the wiki on the github to be up to date with the wiki on the adonis website. This : https://developer.adonis.dev/

Alternatively the wiki should just be wiped and redirected to https://developer.adonis.dev/ instead.

Alternatively the wiki should just be wiped and redirected to https://developer.adonis.dev/ instead.

Yeah. But I mean the wiki is usefull to have in github too.

Yeah. But I mean the wiki is usefull to have in github too.

tbh the adonis wiki needs a lot of documentation still qq


Improper CTA Usage - Not Using BO

Details
CTA is equipped and koolo successfully switches to it, however does not use BO but only uses BC.
Anyone else experiencing this issue?
Version
dev
Logs
time=12:42:26 level=DEBUG msg="CTA found: swapping weapon and casting Battle Command / Battle Orders"
time=12:42:26 level=DEBUG msg="Post CTA Buffing..."
time=12:42:31 level=DEBUG msg="Monster detected close to the player, casting Blizzard over it"

I found if I pause the bot, manually switch to my CTA and click on BO, then switch back to primary weapon - it successfully uses BO upon entering the next zone.
However, it's only using BO and not BC.

More details:
This seems to happen when the bot receives an error while it's trying to pick up an item or cannot determine if a monster is dead. It just continues to cast blizzard into an area until the game times out. This seems to completely ignore the CTA buff even though it think it has used the CTA buffs.
time=14:00:16 level=INFO msg="Starting Game #124. Run list: eldritch"
time=14:00:16 level=INFO msg="Running: eldritch"
time=14:00:16 level=DEBUG msg="Loading screen detected, waiting until loading screen is gone"
time=14:00:19 level=DEBUG msg="Load completed, continuing execution"
time=14:00:19 level=DEBUG msg="Checking for character corpse..."
time=14:00:19 level=DEBUG msg="Character corpse not found :D"
time=14:00:19 level=DEBUG msg="Checking for items to identify..."
time=14:00:19 level=DEBUG msg="No items to identify..."
time=14:00:19 level=DEBUG msg="Belt Stats Health: 8/8 healing, 0/0 mana, 5/8 rejuv."
time=14:00:19 level=DEBUG msg="Checking for items to stash..."
time=14:00:19 level=DEBUG msg="Checking for items to stash..."
time=14:00:19 level=INFO msg="Current life is 73%, healing on NPC"
time=14:00:27 level=DEBUG msg="CTA found: swapping weapon and casting Battle Command / Battle Orders"
time=14:00:27 level=DEBUG msg="Post CTA Buffing..."

time=14:01:26 level=WARN msg="Game finished with errors, reason: max game length reached, try to exit game: 70.11. Game total time: 70.13s" supervisor="Blizzard Sorc" mapSeed=789973385
time=14:01:32 level=DEBUG msg="Fetching map data..." seed=86128373 difficulty=hell

No issues on my side, so first thought is it might be a config/setup issue
rather than a bot issue.
Are BO and BC bound to F6 and F7?
Did you have this working with BO previously or just added CTA?
Weird that it's saying "Monster detected close to the player, casting
Blizzard over it". but I guess that's possible at Frigid WP.
On Mon, Jun 17, 2024 at 6:04 AM HYPERTONE @.***> wrote:

More details:
This seems to happen when the bot receives an error while it's trying to
pick up an item or cannot determine if a monster is dead. It just continues
to cast blizzard into an area until the game times out. This seems to
completely ignore the CTA buff even though it think it has used the CTA
buffs.
time=14:00:16 level=INFO msg="Starting Game #124
https://github.com/hectorgimenez/koolo/pull/124. Run list: eldritch"
time=14:00:16 level=INFO msg="Running: eldritch"
time=14:00:16 level=DEBUG msg="Loading screen detected, waiting until
loading screen is gone"
time=14:00:19 level=DEBUG msg="Load completed, continuing execution"
time=14:00:19 level=DEBUG msg="Checking for character corpse..."
time=14:00:19 level=DEBUG msg="Character corpse not found :D"
time=14:00:19 level=DEBUG msg="Checking for items to identify..."
time=14:00:19 level=DEBUG msg="No items to identify..."
time=14:00:19 level=DEBUG msg="Belt Stats Health: 8/8 healing, 0/0 mana,
5/8 rejuv."
time=14:00:19 level=DEBUG msg="Checking for items to stash..."
time=14:00:19 level=DEBUG msg="Checking for items to stash..."
time=14:00:19 level=INFO msg="Current life is 73%, healing on NPC"
time=14:00:27 level=DEBUG msg="CTA found: swapping weapon and casting
Battle Command / Battle Orders"
time=14:00:27 level=DEBUG msg="Post CTA Buffing..."

time=14:01:26 level=WARN msg="Game finished with errors, reason: max game
length reached, try to exit game: 70.11. Game total time: 70.13s"
supervisor="Blizzard Sorc" mapSeed=789973385
time=14:01:32 level=DEBUG msg="Fetching map data..." seed=86128373
difficulty=hell
—
Reply to this email directly, view it on GitHub
https://github.com/hectorgimenez/koolo/issues/302#issuecomment-2171793386,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AJDJAUR5PLPNH2YSWWXA3BDZHXHR7AVCNFSM6AAAAABJMXPI3CVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNZRG44TGMZYGY
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

BO and BC were not bound before.
This seems to have fixed the issue, thanks 👍 .


Reorder PostgresChangesData so that UPDATE and DELETE changes dont fa…

Hi, good job on the library.
I had issues with serde failing to parse PostgresChanges on UPDATE and DELETE. Worked fine on INSERT. The reason was because UPDATE and DELETE contained fields that were not in INSERT message. By reordering the data struct everything works great.

lgtm, thanks for the fix :)


how do i delete a security group

Hello Team ,
I am new to cfmgmt. Can someone please help understand how do i delete a security group using cfmgmt.

Hi @vijayantprakash. cf-mgmt does not delete security groups. You will have to delete them through another means, such as the cf cli.


Losing touch events after a stretch

Hey, first of all, great library.
Context: I only imported the ScrollViewHeader code in my project.
I noticed a small glitch that I'm not sure how to go about fixing. After a stretch, touch events stop being recognized on the containing views until the scrollView is scrolled.
My View hierarchy:
ScrollView {
   VStack {
      ScrollViewHeader {
          HeaderView()
                Subview.tapGesture {
                     print("tapped") // Issue occurs here.
                 }
      }
   }
}

Issue: The print statement is called without issues unless the ScollViewHeader is pulled and stretched. After a stretch, the touch events are no longer recognized until the scrollView is scrolled down again.
It could be my design but I thought I would check here if someone else had this issue.
Please let me know if you would like more information.
Cheers and thanks again for this library.
Ed

Hi @edbarbier
Oh, that sounds strange. Let me check.

Hmmm, it works for me in the demo app.
I added this to both the demo header, the Spotify preview header and to different views within the headers and it all works for me.
.onTapGesture { print("Tapped") }

Here you can se it applied to the Spotify preview header:
https://github.com/danielsaidi/ScrollKit/assets/429927/d114a3ef-6232-4f0e-bb8a-b8be329d726a
Did you make it work?

Hi Daniel,
Thanks for replying.
I ended up adding the tap gesture inside a view that is contained by the ScrollViewHeader.
I'll double check your code and compare with my implementation.
Cheers,
Ed

Great to hear it worked out. 👍


Problem of downloading pretrained model weight

Thank you for your excellent work！I'm having issues with my network connection while downloading a pretrained model. If I manually download the weight file from the hugging face website, where should I put it?

Hi,
Thank you for your interest in this project! Could you tell me which file / pre-trained model you're trying to run?
-Gaurav

Thank you for your reply. I checked huggingface's tutorial about offline models. After I downloaded the model, I specified the model loading path and it ran successfully.😄


Clarifying "experimental features" in OpenSearch [DISCUS][BUG]

What is the bug?
While we have a description of what an "experimental feature" feature can be used for in OpenSearch, we don't actually describe what the criteria need to be met to graduate from experimental to a general availability (GA).
Additionally, while we provide a general heuristic, we have plenty of features that are launched without ever being experimental, even those that could probably have benefited -- we leave the decision on both whether a feature should be marked as experimental and whether it's ready to graduate entirely up to the maintainers of the individual repos.
Finally, the OpenSearch Project does do security reviews for some features (you can see more information here).  Like much of the process around experimental features, we have considered a sign-off from AWS appsec following this process a requirement to graduate out of experimental, but that is not documented anywhere.
This has caused some confusion for contributors because the "rules of the road" have never been fully defined.  So, I propose we define them :)
Here are a couple of questions to kick us off that are the top of my mind, but feel free to add your own:
0/ What purpose should experimental feature serve?  Do we still agree with this description?
1/ Should the OpenSearch Project have rules about a) what features need an "experimental" phase and b) what a feature needs to graduate to GA  at the project level, the repo level or something else?
Assuming we do want some kind of guidelines...
2/  Do we want criteria in place that, if your feature meets them, you must have an experimental phase?
3/  What criteria should we look at for graduation?   Security?  Scalability?  Testability?
4/  Do we want to set a limit on how long a feature can be experimental?
5/ Who decided if those criteria have been met?
Please note:  I'd like to focus this discussion on what (if any) criteria The OpenSearch Project wants to have around experimental/GA features.  Downstream providers and products will have their own criteria, including AWS OpenSearch Service.  We (OpenSearch Project) can certainly craft our criteria to make a GA launch on any particular service easier, but they should still be considered separate processes.  Additionally, while a downstream project make make decisions based on us (e.g. "we will not expose any experimental feature to our customers"), we should  not take a dependency based on them or their actions (e.g. "The OpenSearch Project will not mark a feature GA until XYZ Service agrees that it's GA").
WDYT?

I personally like having it be easy to introduce experimental functionality so that people can easily ship features at an early stage to get feedback. Right now the guidelines say experimental releases are used to gather early feedback on features.
For release criteria, I do think individual repo maintainers may have different criteria they care about and so there should be flexibility for maintainers of their code to drive that definition.

AWS appsec following this process a requirement to graduate out of experimental for some features, but like much of the process around experimental features, that requirement not documented anywhere and is not universally adopted.

We have this process documented security reviews [1] on this .github project.  Inside the security plugin, the security review process is followed carefully, such as for OnBehalfOf tokens [2], where there is a task specifically waiting on the 'sign-off' to be issues [3].  That said - I think we can do much better in documenting and following this for features because of course a maintainer of Security Plugin thinks this :D

[1] https://github.com/opensearch-project/.github/blob/main/RELEASING.md#security-reviews
[2] https://github.com/opensearch-project/security/issues/2573
[3] https://github.com/opensearch-project/security/issues/3162

I've just written and deleted a response for the third time to the define experimental question.  Where I'm getting stuck is what is the user problem, why do we need the concept of experimental to have a consistent meaning?

Generally, in open source the leaner a process is, the better. Community members do not join meetings, so it's best to rely on good async habits (e.g., tldrs, scripts, lean issues, lite docs).
My experience and preference is to take it on a case by case basis with a contributor first initiating a "proposal" vote to graduate / promote a feature from "experimental" to LTS. Then use lazy consensus to vote and/or valid veto (required counter proposals and/or technical arguments).
Perhaps the more interesting discussion is what to do if/when the vote passes. I'm not sure this needs heavy prices either. I think this is also a case by case basis but in general relies on good testing, benchmarking, and security review which we should have for LTS features anyway.

tl;dr I think we should add recommendations, but I don't think we should try to enforce anything.

0/ What purpose should experimental feature serve? Do we still agree with this description?

I'd keep. I like it as it has strong warnings around (not) using experimental features in any other way than "at your own risk".

1/ Should the OpenSearch Project have rules about a) what features need an "experimental" phase and b) what a feature needs to graduate to GA at the project level, the repo level or something else?

I would limit ourselves to recommendations. I believe most features should start as experimental because it's faster, and because new APIs have to follow semver, so some time as experimental gives more time to get it right with more user feedback.

2/ Do we want criteria in place that, if your feature meets them, you must have an experimental phase?

I would not, but would agree to have soft recommendations in that same doc.

3/ What criteria should we look at for graduation? Security? Scalability? Testability?

We already say that all new features need a security review. It goes without saying that any feature needs to be unit and integration tested, if we haven't spelled it, I'd add those words. Scalability is a good question, I think we can add some recommendations, but I wouldn't hold an experimental feature back if it works on a single node cluster only for example.

4/ Do we want to set a limit on how long a feature can be experimental?

I would not unless there are strong arguments to do so. It would force maintainers into removing experimental features. I don't see any advantages., all while maintainers are free to do so at any time.

5/ Who decided if those criteria have been met?

Maintainers of each repo.


Can't select a list entry which is in list but not on screen - scroll down with keyboard step

Hi,
i made a query to get me my selected covid info from a website. So long as i select list entries which are also seen on my screen when opening the list all is fine and i can select the entry with tagui. When i select a entry which is on list but not on visuell screen only the list stays open and nothing is selected. I tried much variants with "select as" and "dclick" and tried different xpathes but no success. Maybe a bug or maybe i need to go another way ...
Manual way i do:

open website
select  state
open region selection
select commune from opened region selection
get covid values for selected commune
If you have a commune which is not directly seen when opening the selection list you scroll down with the mouse and select the commune.

In tagui i do this (shortend part wheres my problem of the corox.tag i use - TAG is shortend but can be used as it is to show the problem - the entry 5562 is not seen on my real screen and is not selected, but why....):
https://www.lzg.nrw.de/inf_schutz/corona_meldelage/index.html

KRID = []

KRID [0] = 5913 // Dortmund
KRID [1] = 5562 // Recklinghausen
//KRID [2] = 5513 // Gelsenkirchen
//KRID [3] = 5316 // Leverkusen
//KRID [4] = 5774 // Paderborn
//KRID [5] = 5113 // Essen

// first get in the frame then click action
frame innerbox
	for n from 0 to KRID.length-1
		{
		click //*[@id="tabNRWSelection"]
		wait
		click //*[@id="nrwKommunal"]
		wait
		click //*[@id="lkrLink_`KRID[n]`"]
		wait
		//further action
		echo ****************************
		//Python Block
		//further action
		}

Hi @Flipsand
You can indent the line with 2 spaces after identifying the frame like this. Also note that adding the wait step before frame step will prevent TagUI from erroring out before the frame is loaded.
https://www.lzg.nrw.de/inf_schutz/corona_meldelage/index.html
wait 3
frame innerbox
  click //*[@id="nrwKommunal"]
  dclick //*[@id="lkrLink_5913"]

this works for me. Hope it helps.

I checked the keyboard [pagedown] before and this time again. Result is the same for me if i use keyboard[pagedown] or just use the click //[@id="lkrLink_5562"]. It scrolls to the "next list page" where the entry is but didn't select the entry and only stays there so as i am just using a pagedown command. No selection is made after moving to the next list page where the entry is. So your example also did not work for me no matter if i use 1, 2 or three pagedown comands or just use the click action.
For Info about Java i did a java -version comand with this result:
C:\WINDOWS\system32>java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment Corretto-8.292.10.1 (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM Corretto-8.292.10.1 (build 25.292-b10, mixed mode)

Hi @kensoh Mr.Kensoh,
I am now using rpa-python to perform automation, in windows I can use r.keyboard("[F6][F6]") to focus from the address bar into the page, to achieve the result of scrolling down the page, but in mac to enter what to solve, I try to perform in mac r.keyboard("[pagedown]"), resulting in a downward entry in the address bar instead of scrolling the page

Hi @kensoh
Mr.Kensoh,I've fixed the problem and in mac you can use r.eyboard ("[esc]")

Thanks @hanyuanzhong for sharing back! Other ways that might work could be sending the [tab] key, or using visual automation to click into the web-browser page, before trying to scroll down.


Add make checks to PR template. Resolves #1905

Description

An updated pull request template that discusses make checks
Motivation and Context

Fixes #1905
This change was discussed with @ghaskins and @rameshthoomu. Please review this proposal. I have remove go vet and goimports from the checklist and instead discuss how make checks will be run in CI and how it can be run locally.
How Has This Been Tested?

No new tests required and this is only a change to the PR template.
Checklist:

[x] I have added a Signed-off-by
[x] Either no new documentation is required by this change, OR I added new documentation
[x] Either no new tests are required by this change, OR I added new tests
[x] I have run goimports, go vet, and golint. I have cleaned up all valid errors and warnings in code I have added or modified. These tools may generate false positives.  The goal is clean, consistent, and readable code.

Signed-off-by: Sheehan Anderson<EMAIL_ADDRESS>

I like the phrasing that @JonathanLevi suggested @srderson otherwise LGTM

@JonathanLevi @christo4ferris Thanks for the feedback. I have updated the PR template with the suggested language.

LGTM thanks!

LGTM


Adding a blocking call count threshold

/cc @aozarov

Reviewed. I have a couple of minor naming suggestions.

I have updated the PR - PTAL.

Reviewed. Found a couple of other instances of copyReset.

Good catch. Updated - PTAL again.

LGTM.


Version Bump

version.py was not bumped.

Released 1.2.1 with an additional enhancement - 1.2.1 is on pypi now


Cannot find 'crypto'

Hi,
I am trying to integrate this with a meteor app I am building but can't get past the build of the app. I'm not too familiar with meteor, but I was able to reproduce this in a new meteor project. When I did I also got this in the terminal:

If you notice problems related to these missing modules, consider running:

meteor npm install --save meteor-node-stubs

That seemed to resolve the crypto dependency issue for me. Can you try that?

I tried that but askes me for the dependency still, did you install the stubs within the dropbox folder npm modules or the global meteor modules?

I created a blank project and copied all my data and ran meteor-node-stubs successfully. Not sure what happened but thanks for your help @greg-db


chore(release): create release v0.9.0-rc.1

Signed-off-by: Allen Leigh<EMAIL_ADDRESS>
Description:
This PR has the necessary changes for cutting release v0.9.0-rc.1

[ ] I have cherry-picked any changes

[ ]  I have made all of the following version and patch updates:

Updated the container image tag in charts/osm/values.yaml
Updated the chart and app version in charts/osm/Chart.yaml
Updated the default osm-controller image tag in osm cli
Updated the image tags used in the demo manifests
Regenerated the Helm chart README.md

[ ] I have checked that the base branch for this PR is correcct as defined in the release guide

Affected area:

Functional Area

New Functionality
[ ]

Documentation
[ ]

Install
[ ]

CLI Tool
[ ]

Certificate Management
[ ]

Control Plane
[ ]

Ingress
[ ]

Egress
[ ]

Networking
[ ]

Observability
[ ]

SMI Policy
[ ]

Sidecar Injection
[ ]

Security
[ ]

Upgrade
[ ]

Tests
[ ]

CI System
[ ]

Demo
[ ]

Performance
[ ]

Other
[ ]

Please answer the following questions with yes/no.

Does this change contain code from or inspired by another project?

Did you notify the maintainers and provide attribution?

No

Is this a breaking change?

No

Codecov Report

Merging #3464 (574081b) into release-v0.9 (68279d4) will not change coverage.
The diff coverage is n/a.

@@              Coverage Diff              @@
##           release-v0.9    #3464   +/-   ##
=============================================
  Coverage         65.82%   65.82%
=============================================
  Files               169      169
  Lines              7886     7886
=============================================
  Hits               5191     5191
  Misses             2664     2664
  Partials             31       31

Flag
Coverage Δ

unittests
65.82% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

cmd/cli/mesh_upgrade.go
45.83% <ø> (ø)

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 68279d4...574081b. Read the comment docs.


How much target data?

What is the recommended video length for the target video?

I went ahead and used 3 minutes of training video. Results are decent.  Not sure if more data would make a significant difference or not though.

Need guidance from people who are able to run this code . Kindly reply below

@mallorbc the original paper mentions on Section 8.3 that they used 8~17 mins of footage for their target videos. Additionally  they point out:

We follow the progressive learning schedule from pix2pixHD and learn to synthesize at 512 × 256 at the first (global) stage, and then upsample to 1024 × 512 at the second (local) stage...
We trained the global stage for 5 epochs, the local stage for 30epochs

I have  no idea how or if those resolution stages are automatically implemented in this repo, or how  to set it manually. Any one care to share some insight? @seaweiqing , @yanx27 ?
I am currently training the GAN on 13 mins target video. Using a n1-standard-4 instance in GC (4 vCPUs, 15 GB memory) witth Nvidia K80 GPU, it took me 9 hours to get through the 1 epoch. I see some slight convergence in the loss but far from over. Guess Ill post an update in 50 hours  or so...

@mallorbc the original paper mentions on Section 8.3 that they used 8~17 mins of footage for their target videos. Additionally they point out:

We follow the progressive learning schedule from pix2pixHD and learn to synthesize at 512 × 256 at the first (global) stage, and then upsample to 1024 × 512 at the second (local) stage...
We trained the global stage for 5 epochs, the local stage for 30epochs

I have no idea how or if those resolution stages are automatically implemented in this repo, or how to set it manually. Any one care to share some insight? @seaweiqing , @yanx27 ?
I am currently training the GAN on 13 mins target video. Using a n1-standard-4 instance in GC (4 vCPUs, 15 GB memory) witth Nvidia K80 GPU, it took me 9 hours to get through the 1 epoch. I see some slight convergence in the loss but far from over. Guess Ill post an update in 50 hours or so...

Can you please Provide a sample target video or this project used target video!!
It will be of great help


I can't read two (or more) markers at the same time if they are the same.

The bug
While poiting to equal markers, instead of showing the same 3d figure on top of all of them, they compete to see which one will keep it.
To reproduce it, just point to two (or more) equal markers at the same time.
Expected behavior
It is expected that equal markers don't conflict with which other.
Desktop:

OS: [Windows 10]
Browser [Chrome]
Version [77.0.3865.90 (64 bits)]

Obs.:
I don't really know if this is a bug or if it is meant to be that way, but is kinda holding me down.

As far as I know, it has always behaving this way: can recognize two markers at the same time if different, otherwise it tries to render one content if the marker are multiple but the same.

So is there any way to get this thing working. I am also having same problem.

Nope. https://github.com/jeromeetienne/AR.js/issues/656
I suggest you all, in order to show the same content, to connect the same content for different markers, and show them at the same time. That will work.


config: Allow $schema in dagger.json

Closes https://github.com/dagger/dagger/issues/8967
Took a first swing at allowing $schema in the parsed config, and writing it back if it exists.
It does not write a value by default, nor does it actually enforce that the json file abides by the schema (technically the URI could point to a completely random schema, or not resolve in the first place).
Primarily for the benefit of local development, because IDEs can help with descriptions and autocompletion if a $schema property is available

@JacobLey this needs a DCO sign-off commit: https://github.com/dagger/dagger/pull/9069/checks?check_run_id=33651982122

Added DCO
Couple tests are still failing though, I think I might still be missing something.

More tests failing...
Some were lint issues that I fixed, but some like java-dev appear to be failing on

./sdk_elixir.go:52:19: sdkDev.Lint undefined (type *dagger.ElixirSDKDev has no field or method Lint)

I don't think I would have broken that...?
Then things like test-cli-engine just fail without a good explanation?
Locally I've just been running dagger -m . call test specific '--run=TestConfig' --race=true --parallel=16, but that fails as well, at least on slightly more sensical failure.
This assertion fails, finding ".dagger" instead of "."


Tax calculation is not following rate in config

Ok, so I have SilverShop 4 which works perfectly fine outside of one issue with taxes.
The tax rate defined in the config yml is 21% as it's for Spain and the recorded rate in the table SilverShop_TaxModifier is 0.21 which is correct and even the tax rate displayed is Tax@21%. However, when I calculate the actual tax amount, it's always based on 20% and not 21%. I had that issue already many times which was the reason I didn't use SilverShop for a long time. Now that I'm at the end of a project I realise that issue is still there and even by manually setting the rate directly in the FlatTax class, it stays at 20% whatsoever.

@digitweaks Can you share your YAML configuration for review? You should have something like this in your YAML
SilverShop\Model\Modifiers\Tax\FlatTax:
  exclusive: false
  rate: 0.21
  name: 'VAT'

Hi @wilr, thanks for the swift reply!
I was a bit far with the YML as I was settings another class SilverShop\Tax\ShopConfigExtension.
However, I will sound stupid... LOL
I was calculating the VAT at 21% based on the price of the item as if it was exclusive.
So for an item at 30€, I took my calculator, type 30 * 0.21 and it gives me 6.3€... which is false
I tried a rate of 50% just for the sake of the test and obviously the price didn't change... as it's inclusive.
Then I realised that if the price is inclusive, I have to divide the price of the item by 121, multiply by 21
which obviously gives me 5.21€... so there never was an issue, I was just being determined to do the wrong calculation.
I will take the L on this one, I guess being good at mathematics made me too confident in my lack of reflection lol
Thanks a lot for the YML snippet, at least I will stop hardcoding the tax rate in the SilverShop core.