Unable to remove member from cluster if member not running

Start a single-node cluster

./bin/etcd -name=uno -initial-cluster=uno=http://<IP_ADDRESS>:2380

Add a member to the cluster

% curl -X POST http://<IP_ADDRESS>:4001/v2/admin/members -H "Content-Type: application/json" -d '{"peerURLs":["http://<IP_ADDRESS>:8080"]}'
{"id":9178644553537991936,"peerURLs":["http://<IP_ADDRESS>:8080"]}

Note the log on the first node

2014/10/29 13:53:39 etcdhttp: added node 7f6118974534b500 with peer urls [http://<IP_ADDRESS>:8080]

Try to remove the node

% curl -i -X DELETE http://<IP_ADDRESS>:4001/v2/admin/members/7f6118974534b500
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain; charset=utf-8
X-Etcd-Cluster-Id: 9dbd6201abd472d6
Date: Wed, 29 Oct 2014 20:54:42 GMT
Transfer-Encoding: chunked

Internal Server Error

Note the logs on the first node

2014/10/29 13:54:42 etcdhttp: remove node 7f6118974534b500
2014/10/29 13:54:42 etcdhttp: error removing node 7f6118974534b500: etcdserver: request timed out
2014/10/29 13:54:42 etcdserver: request timed out

I am seeing the exact same behavior with a 3 node cluster with 2 healthy nodes. If I attempt to remove a node for a machine which is no longer running, and therefore listening on the ip address, I will get a request timed out and an Internal Server Error. Here are some logs:
{
  "members": [
    {
      "id": "19dd924a6bb20a14",
      "name": "i-c61b106a",
      "peerURLs": [
        "http://<IP_ADDRESS>:2380"
      ],
      "clientURLs": [
        "https://<IP_ADDRESS>:2379"
      ]
    },
    {
      "id": "2eb577a8ab57f628",
      "name": "i-382864ea",
      "peerURLs": [
        "http://<IP_ADDRESS>:2380"
      ],
      "clientURLs": [
        "https://<IP_ADDRESS>:2379"
      ]
    },
    {
      "id": "9b20587f244fdf6f",
      "name": "",
      "peerURLs": [
        "http://<IP_ADDRESS>:2380"
      ],
      "clientURLs": []
    }
  ]
}

curl -k --cert etcd_client.crt --key etcd_client.key "https://<IP_ADDRESS>:2379/v2/members/9b20587f244fdf6f" -XDELETE

Aug 20 15:43:24 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:24 etcdhttp: error removing node 9b20587f244fdf6f: etcdserver: request timed out
Aug 20 15:43:24 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:24 etcdhttp: unexpected error: etcdserver: request timed out

Our hypothesis is that etcd is attempting to contact the bad peer and ask it to remove itself from the cluster, but when it cannot be reached (no machine is listening) the request times out. This is unanticipated, so the cluster reports the error to the client. When checking the cluster membership the node is actually removed though, despite the 500 error.
{
  "members": [
    {
      "id": "19dd924a6bb20a14",
      "name": "i-c61b106a",
      "peerURLs": [
        "http://<IP_ADDRESS>:2380"
      ],
      "clientURLs": [
        "https://<IP_ADDRESS>:2379"
      ]
    },
    {
      "id": "2eb577a8ab57f628",
      "name": "i-382864ea",
      "peerURLs": [
        "http://<IP_ADDRESS>:2380"
      ],
      "clientURLs": [
        "https://<IP_ADDRESS>:2379"
      ]
    }
  ]
}

More logs from after the event showing leader elections getting queued up, and the node eventually being removed.
Aug 20 15:43:27 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:27 raft: 2eb577a8ab57f628 is starting a new election at term 138
Aug 20 15:43:27 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:27 raft: 2eb577a8ab57f628 became candidate at term 139
Aug 20 15:43:27 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:27 raft: 2eb577a8ab57f628 received vote from 2eb577a8ab57f628 at term 139
Aug 20 15:43:27 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:27 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 19dd924a6bb20a14 at term 139
Aug 20 15:43:27 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:27 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 9b20587f244fdf6f at term 139
Aug 20 15:43:29 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:29 raft: 2eb577a8ab57f628 is starting a new election at term 139
Aug 20 15:43:29 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:29 raft: 2eb577a8ab57f628 became candidate at term 140
Aug 20 15:43:29 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:29 raft: 2eb577a8ab57f628 received vote from 2eb577a8ab57f628 at term 140
Aug 20 15:43:29 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:29 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 19dd924a6bb20a14 at term 140
Aug 20 15:43:29 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:29 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 9b20587f244fdf6f at term 140
Aug 20 15:43:31 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:31 raft: 2eb577a8ab57f628 is starting a new election at term 140
Aug 20 15:43:31 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:31 raft: 2eb577a8ab57f628 became candidate at term 141
Aug 20 15:43:31 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:31 raft: 2eb577a8ab57f628 received vote from 2eb577a8ab57f628 at term 141
Aug 20 15:43:31 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:31 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 19dd924a6bb20a14 at term 141
Aug 20 15:43:31 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:31 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 9b20587f244fdf6f at term 141
Aug 20 15:43:32 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:32 raft: 2eb577a8ab57f628 is starting a new election at term 141
Aug 20 15:43:32 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:32 raft: 2eb577a8ab57f628 became candidate at term 142
Aug 20 15:43:32 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:32 raft: 2eb577a8ab57f628 received vote from 2eb577a8ab57f628 at term 142
Aug 20 15:43:32 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:32 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 19dd924a6bb20a14 at term 142
Aug 20 15:43:32 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:32 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 9b20587f244fdf6f at term 142
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 is starting a new election at term 142
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 became candidate at term 143
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 received vote from 2eb577a8ab57f628 at term 143
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 19dd924a6bb20a14 at term 143
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [logterm: 133, index: 11333] sent vote request to 9b20587f244fdf6f at term 143
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 134]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 137]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 136]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 135]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 138]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 139]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 140]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 141]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [term: 143] ignored a MsgVoteResp message with lower term from 19dd924a6bb20a14 [term: 142]
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 received vote from 19dd924a6bb20a14 at term 143
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 [q:2] has received 2 votes and 0 vote rejections
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft: 2eb577a8ab57f628 became leader at term 143
Aug 20 15:43:34 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:34 raft.node: 2eb577a8ab57f628 elected leader 2eb577a8ab57f628 at term 143
Aug 20 15:43:36 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:36 raft: 2eb577a8ab57f628 [term: 143] received a MsgVote message with higher term from 19dd924a6bb20a14 [term: 144]
Aug 20 15:43:36 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:36 raft: 2eb577a8ab57f628 became follower at term 144
Aug 20 15:43:36 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:36 raft: 2eb577a8ab57f628 [logterm: 143, index: 11338, vote: 0] voted for 19dd924a6bb20a14 [logterm: 143, index: 11338] at term 144
Aug 20 15:43:36 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:36 raft.node: 2eb577a8ab57f628 lost leader 2eb577a8ab57f628 at term 144
Aug 20 15:43:37 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:37 etcdserver: removed member 9b20587f244fdf6f from cluster 3798e4719398a84b
Aug 20 15:43:37 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:37 rafthttp: server streaming to 19dd924a6bb20a14 at term 143 has been stopped
Aug 20 15:43:37 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:37 raft.node: 2eb577a8ab57f628 elected leader 19dd924a6bb20a14 at term 144
Aug 20 15:43:37 ip-10-0-1-65.ec2.internal etcd2[861]: 2015/08/20 15:43:37 rafthttp: starting client stream to 19dd924a6bb20a14 at term 144

@jakedt What version of etcd are you running? This seems to be normal. You were experiencing leader election. The removal request did timed out.

Getting back an Internal Server Error with a 500 when removing a bad peer does not seem normal. Having that peer successfully removed after receiving a 500, also does not seem normal.

@jakedt We have improved the logging around unexpected timeout: see https://github.com/coreos/etcd/pull/3277

@jakedt Your server were experiencing leader election for quite a long time for some reason.
etcd cannot know if the request will be committed or not. It timed out.
I think this is a reasonable behavior.

@jakedt After offline discussion, we found out the root cause. There is a bug in etcd 2.0.11 that can lead to this behavior. See https://github.com/coreos/etcd/issues/2888. It has been fixed since 2.1 release.


Fixed infinite recursion when pytypes tries to access  .orig_class on an instance of a @typechecked class with getattr/getattribute

Hi! I hit this problem yesterday and dived in to fix it because I was excited to use pytypes in my library :)
My environment is Python 3.5 running inside pipenv on Windows, and a fresh install of pytypes==1.0b5.post2+dirty.
Here's a simple case that should demonstrate the problematic behavior:
from pytypes import typechecked

@typechecked
class Bad:
    def __getattr__(self, attr: str):
        if attr == 'one':
            return 1
        else:
            raise AttributeError(attr)

bad = Bad()
res = bad.one  # causes infinite recursion into the wrapped `__getattr__`

If, like me, you keep mixing up __getattr__/__getattribute__,
__getattr__ is the one that acts like a fallback –
it's only called if other methods of attribute lookup failed:
- the attr wasn't in the instance dict
- there's a descriptor for the attr in the class dict but it raised AttributeError
- the attr wasn't in the class dict either

On an unwrapped class, bad.one would result in Thing.__getattr__(bad, 'one') and work fine.
When wrapped with @typechecked, it becomes be Thing.checker_tp<__getattr__>(bad, 'one'), where checker_tp<__getattr__> is the checker_tp (from pytypes.typechecker._typinspect_func) that wraps __getattr__.
Unfortunately, in its code, checker_tp<__getattr__> does this:
try:
    parent_class = args_kw[0].__orig_class__
except AttributeError:
    ...

We're in a method call, so args_kw[0] is self – our bad object. But bad.__orig_class__ – a dot-access on a nonexistent attribute – ends up calling checker_tp<__getattr__>(bad, '__orig_class__') again, which tries to get the __orig_class__ again, and so on until it hits a RecursionError.
The way I solve this in this pull request is simple –
Use object.__getattribute__(x, '__orig_class__') instead, thus bypassing a classes' __getattr__ and __getattribute__. I'm not familiar with pytypes' internals, So I don't know what consequences this could have; I imagine it might lead to unexpected behaviour on proxy-like classes.
Ideas for alternative solutions (FWIW from a person unfamiliar with the code):

Wrap __getattr__/__getattribute__, but special-case them somehow so that pytypes internals know they should use the unwrapped version instead. I'm pretty fuzzy on the details, but it seems plausible.

Don't wrap __getattr__/__getattribute__ at all.
Unfortunately if the original __getattr[ibute]__ returns a method, an un-wrapped method would 'leak' out. But I guess this could happen with any method, so maybe it's not a solvable problem anyway.
(I guess in that case pytypes could do identity checks with known methods from the class dict, and returning the appropriate wrapped method instead if possible. But that'd require wrapping __getattr[ibute]__, which we're trying to avoid.)

I hope this wasn't too long winded. Please tell me what you think about this solution!

Done! As you asked, the tests break before and work after (at least on my machine - is it possible to make Travis run the new tests on an older version?)

I had to modify this slightly to fit into some changes I had made towards Python 3.7 support. Also moved your new function to a position where I find it belongs best.
That said, I observe that especially in the first 200 lines of type_util frequently dunder accesses occur, e.g. to __origin__, __extra__, __args__, __class__. Do you think a similar fix should be applied to these to prevent wrapping issues. Or would a better wrapping approach fix this issue in a broader sense, e.g. wrapt, c.f. #30.


Failed to build new v2.5.0 on Fedora

Checklist

[X] I'm reporting a problem with Chatterino
[X] I've verified that I'm running the most recent nightly build or stable release
[X] I've looked for my problem on the wiki
[X] I've searched the issues and pull requests for similar looking reports

Describe your issue
Since chatterino2 version 2.5.0 failed to build from source on Fedora Linux. Previous chatterino2 versions compiles fine.
/builddir/build/BUILD/chatterino2-2.5.0/src/common/network/NetworkPrivate.cpp:204:1: internal compiler error: in streamer_write_chain, at tree-streamer-out.cc:536
  204 | }  // namespace chatterino
      | ^

Full build log
Koji task
PR with diff changes from v2.4.6 to v2.5.1

Help wanted.
Screenshots
No response
OS and Chatterino Version
Chatterino 2.5.1

Could you try building with clang or with lto disabled?

You're running into Bug 114501 because LTO is enabled.

You're running into Bug 114501 because LTO is enabled.

It compiles fine if LTO disabled, thanks!
@pajlada i'll try to build with Clang also. I need your recommendation here: what is preferable choice, build chatterino2 with Clang or GCC in Fedora?

I aim to support both, so the choice is up to you. It's probably easier to temporarily disable LTO until the bug is fixed so that's what I would've personally done

Understood, thanks. chatterino2 built for Fedora >=39 branches.


new dhall jobs for detecting duplicated steps and invalid jobs names

Added two more dhall checks to buildkite/Makefile, which I found handy when making changes to dhall framework:

make check_dups

Looks for duplicate names of any steps defined

make check_names

Validates that all defined jobs respect naming constraints
Running above checks before pushing to CI helped me to find out issues without spamming (!ci-build-me) command too much

!ci-build-me

!approved-for-mainnet


can't install plugin using git

Note: It's not only with my plugin as seen below, it was also tested with jsgrid
On public, When you install a new plugin using github or git, it doesn't find the repo, I tried with https://....git,

Additionally, from a tenant PoV: you can't add a plugin
If public installs it, it should be available for subdomains.
All I need is my plugin leaflet-map-icon running into a limited tenant :)
Well, for now, I can use the public way.

Aargh, I can't use a subdomain as the public root domain?

yes, you definitely can use a subdomain as a root domain. you probably need to set your DNS for that specific subdomain

I turned off get plug-ins for tenants because I didn't want people to install random code that could access the file system on that server. But I guess if you use the tenant settings to require a user to be logged in to create tenants, then the administrator should be able to allow tenants to install git plug-ins

yes, you definitely can use a subdomain as a root domain. you probably need to set your DNS for that specific subdomain

It was done, sorry I forgot to mention. Subdomain not found is sent by https://github.com/saltcorn/saltcorn/blob/master/packages/server/routes/utils.js so it reaches the server, and I restarted the container before adding this ticket.

I turned off get plug-ins for tenants because I didn't want people to install random code that could access the file system on that server.

I totally understand :)
Maybe, the list of plugins should be managed by the admin for tenants.
The git issue is on the public (administrator) part of saltcorn.

On root (public), as administrator:
git source is more verbose:

but with a working URL:

For future readers: About git, this is the working format, but I cannot test it for my plugin right now:
{
      "name": "@saltcorn/json",
      "source": "github",
      "location": "saltcorn/json"
}

@glutamate Would you please share a mockup subdomain example DNS entry?
For example, I'm on cloudflare and DNS setup is A dev2 <ip> (proxied)
Then a reverse proxy container points dev2.NNN.com to the public ip and container port.
Same for the root, (except for the DNS of course).
This DNS+routing setup is working for both root and subdomain, but not subdomain as root.

will write a wiki page with DNS examples

Thank you very much!

@j2l https://wiki.saltcorn.com/view/ShowPage?title=Domain name configuration - may not cover what you wanted, so just let me know what I need to add

Thank you!
Basically, that's all I"ve done.
I wonder in DOMAIN=locahost in the .env file is also important. And I don't use traefik, so may be it's related.
I can't test right now because I run out of public IP to fully test it :)
I'll let you know here in case I can't make it.


Error after update

Description
I updated lspsaga to latest version. After initialisation lsp in project it shows this error:
E5108: Error executing lua vim/shared.lua:218: t: expected table, got nil
stack traceback:
        [C]: in function 'error'
        vim/shared.lua:608: in function 'validate'
        vim/shared.lua:218: in function 'tbl_contains'
        .../start/lspsaga.nvim/lua/lspsaga/codeaction/indicator.lua:75: in function 'check'
        [string ":lua"]:1: in main chunk

I didn't made any action, error is showing automatically.

Environment

nvim --version output:

NVIM v0.7.0-dev+704-gac2d140a3
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compilation: /usr/bin/gcc-11 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNVIM_TS_HAS_SET_MATCH_LIMIT -O2 -g -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=always -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/home/runner/work/neovim/neovim/build/config -I/home/runner/work/neovim/neovim/src -I/home/runner/work/neovim/neovim/.deps/usr/include -I/usr/include -I/home/runner/work/neovim/neovim/build/src/nvim/auto -I/home/runner/work/neovim/neovim/build/include
Compiled by runner@fv-az87-49

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/share/nvim"

Operating system: Manjaro
lspsaga commit: 3cd3c4b

Last working commit is a361ccf.

Is this fixed or not yet?

I'm still getting the same error. I did clean all plugins and reinstall all of them?

This is caused because it seems sometimes client doesn't expose  config or config.filestypes. possible fix #70

Yes, that's fixed it. I updated indicator.lua with and client.config.filetypes.
Thank you :)


Correctly tag Vulkan Ampere tests as requiring sm80

Also exclude requires-gpu-sm80 in the same places we exclude
requires-gpu-nvidia. I'm actually not sure how this wasn't causing
errors. I went with a relaxed regex of any label starting with
"requires-gpu" in our CMake build scripts, but Bazel requires listing
tags explicitly.
This actually also raised a question for me. Why are our tests for
Valhall tagges as "requires-gpu-nvidia"? I would expect these to not
even run on an Nvidia GPU... Do we just happen to not take advantage
of any Valhall-specific features?

This actually also raised a question for me. Why are our tests for
Valhall tagges as "requires-gpu-nvidia"? I would expect these to not
even run on an Nvidia GPU... Do we just happen to not take advantage
of any Valhall-specific features?

This is intentional -- in terms of vulkan extension and capability support, nvidia/desktop gpus support a superset of Valhall features.

This is intentional -- in terms of vulkan extension and capability support, nvidia/desktop gpus support a superset of Valhall features.

Huh, weird. Seems like we should come up with another way to say that, but this makes sense for now. I'm going to add a comment explaining that


Use 'shared point numbers' in gvar

in gvar you can optionally store on set of point numbers that are referenced by multiple regions for the same glyph; we were not previously using this very efficiently.

based off of #616
fixes #614

LGTM except for the one comment.


⚠ Bofrost.lu has degraded performance

In 4a60331, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 1153 ms

Resolved: Bofrost.lu performance has improved in d8f49ac after 29 minutes.


cosmetic(pie-button): new primary colour and larger size

This is not a real PR
[Changed] - Using a new colour for primary buttons and larger height for the large size
This PR introduces a new background colour for primary buttons, and increases the size to 70px for large buttons.

This is a weird request

Test

😏

Hi

@RLumleyJET just checking you're happy with this change?


HQQ static observer implementation

Implements static HQQ Observer

Noting in here for @dsikka and @anmarques that we should finalize this implementation after the observer migration. For now going to assign it to myself for the future after that migration


Fix broken bottom panel switching

Fixes #72389
Fixes #72332
Fixes #70705

The cause of the crash is simple recursion. Switching events bound to buttons on the bottom panel were being called recursively by inspector updates.
The inability to transition to the animated tab is due to the inspector update, which can be resolved by the restriction that bottom tab switching is allowed only once in the same frame. This means that the pending update method of #68498 cannot be used.

This does fix the issues, but while testing I discovered a new buggy behavior (which is either exposed or caused by this PR).

First make sure that Animation is active (i.e. the keys are visible in the inspector)
Add a theme to some Control node and unfold it
You will see Theme editor
Switch to Animation tab
The inspector should be displaying: Control node properties, keys, unfolded theme
Fold Theme resource in the inspector
Switch to Theme editor
The Theme tab disappears, but the editor opens normally
Ghost editor 👻

Although I guess it's still better than being unable to switch to Animation or crashing.

Ghost editors seem to have existed before this PR...

This fixes the switching bug, but I found a side effect in the EditorPlugin that may spam switching in the bottom panel, which may cause problems with the bottom panel closing unwillingly.
The ones I have encountered so far are SpriteFramesEditor and ThemeEditor, but they may need to be addressed individually. Also, the ghost editor has existed prior to this PR, but that may need to be fixed as well.

Thanks!

Note: The issue with the theme editor seemed to be a different problem https://github.com/godotengine/godot/issues/72271

This seems to have caused another issue - I'm using a custom editor plugin that updates whenever a node is selected. However, after beta 17, the _edit function is only called if the dock updates. Previously, it would be called every time a new node was selected.
This means I have to select a node that causes my custom dock to hide, then select another node that makes it appear again to get it to update at all.
I don't see exactly how this could have been caused by this fix, but I don't see any other PRs that changed EditorPlugin since beta 16 (where everything worked as expected)


Remove “off-topic” System.IO classes (SafeNetworkStream is actually dangerous-looking)

SafeNetworkStream seems to be quite unrelated to the core goal of this project. Also, it places itself in System.IO, meaning it will show up in Intellisense in such a way that the unsuspecting developer might thing it is a Microsoft-provided API. And, even worse, it does things like the following to make stuff “safe”:
try
{
    return _stream.Read(buffer, offset, count);
}
catch (IOException)
{
    return 0;
}
catch (ObjectDisposedException)
{
    return 0;
}

Almost always when an IOException would be thrown, the developer should be handling that in some way. For example, it signals that the connection was reset and that the handle needs to be cleaned up. Code written against streams will expect this behavior to mean that the end of file was reached and it will assume that the bytes read so far represents the entirety of the entity being read. Whereas an IOException is a sign that the connection was interrupted without the sender claiming it was done.
Also, encountering an ObjectDisposedException is the sign of a bug in the code which called Read() on the disposed/closed stream. If the caller can’t even figure out if it closed a Stream handle it has, it’s not keeping track of its state properly. That’s something you’d want thrown so that at least it could be logged or, when developing, crash the app so that you can investigate and fix the bug!
Other classes in the IO folder might actually be useful utilities, but they seem to be wrongly polluting the System.IO namespace and not really related to the purpose of sharpfilesystem. If any of them are actually required for sharpfilesystem to work, it would be better for them to either be marked internal or, if they are to support some of the addon archive assemblies, moved to a namespace that clearly marks them as for sharpfilesystem’s own use, such as namespace SharpFileSystem.Internal.IO.

For example, it signals that the connection was reset and that the handle needs to be cleaned up. Code written against streams will expect this behavior to mean that the end of file was reached and it will assume that the bytes read so far represents the entirety of the entity being read.

Here I am meaning to say that when the API returns 0, normal Stream-using code will assume that meant a successful read of the entire entity. Whereas this “safe” wrapper is basically silently truncating the read data.

Yes, totally agree. They were already in the IO directory, so it would be logical to namespace them in SharpFileSystem.IO. I think they could be useful in other projects as well. They are also simple enough to keep supporting them. So I think SharpFileSystem.IO instead of SharpFileSystem.Internal.IO is in order.
SafeNetworkStream was used to normalize Socket-based streams in some hacky applications in the past. For networking read 0 can often be handled the same way as IOException (socket was closed). I agree it is dirty. It also isn't in use by any of SharpFileSystem, so I removed it.


Examples: review basic auth examples

StaticSite with basic auth: https://github.com/sst/ion/tree/dev/examples/aws-static-site-basic-auth
Nextjs with basic auth: https://github.com/sst/ion/tree/dev/examples/aws-nextjs-basic-auth

https://sst.dev/docs/examples/#aws-nextjs-basic-auth
https://sst.dev/docs/examples/#aws-static-site-basic-auth
Done


[BUG] Images are being uploaded without captions

Describe the bug
Images are being uploaded without captions.
To Reproduce
Happens every time.
from instapy_cli import client

user = input('username')
password = input('password')
text = 'test #foo #bar'

with client(username, password) as cli:
    cli.upload('./testfile.png', text)

Expected behavior
Images with the text variable as caption on Instagram.
Env (please complete the following information):

OS: Linux Mint 18.3
Python: 3.6
instapy-cli Version: 0.0.12

It seems that using cli.upload('./testfile.png', caption=text) solves the problem. But the examples do  not include the keyword caption for the second argument. Are the examples out of date?

Doesn't for me. I'm using:
cli.upload(sys.argv[1], caption=text)
Where sys.argv[1] is a path to a file and text is a string built with an account I'm tagging first and a series of hashtags
OS: Archlinux
Python: 3.7.4
Instapy-cli: 0.0.12

@Donearm so are you saying you don't get captions either way?
The caption I tested with in my project is:
    text = 'nine letters' + \
        '\r\n' + \
        '#9letters ' + \
        '#AlgorithmicArt ' + \
        '#GenerativeArt ' + \
        '#DigitalArt ' + \
        '#ComputerArt ' + \
        '#TextBasedArt ' + \
        '#TextArt ' + \
        '#BotArt ' + \
        '#ColourBlock ' + \
        '#Minimalism ' + \
        '#Minimal ' + \
        '#Helvetica ' + \
        '#Python ' + \
        '#Generative ' + \
        '#Digital ' + \
        '#Art ' + \
        '#ContemporaryArt ' + \
        '#Typography ' + \
        '#GraphicDesign'

and I am uploading images using:
with client(username, password) as cli:
        cli.upload('./output/output-' + str(image_index) + '.png',
                   caption=text,
                   )

Yes, both using "caption=text" and just the text variable. The complete code to upload is:
with client(username, password) as cli:
    cli.upload(sys.argv[1], text)

An example caption would be:
@accountname •\r\n•\r\n•\r\n•\r\n•\r\n #hashtag1 #hashtag2 #hashtag3
And so on with the hashtags. Last week I had a similar issue where the hashtags and periods were being posted but not the accountname, nor the newlines were working (only the first one as per #45 ). Now the whole caption is absent

Hadn't been trying for a few weeks but today it worked (same command as my last comment). I guess it was an issue on Instagram's side.

And the issue is back. Same command as above, same hashtags, similar caption: image gets uploaded but no caption whatsoever


How to get targets from sentences?

Hi,
I am using the "eberta-v3-base-absa-v1.1" model/tokenizer from huggingface in order to run the model on my data but my data only has sentences, it doesn't have targets specified. I see that the example shown already inputs "manager" as the target but does your model also allow automatic extraction of the targets from sentences? If not, can you point me to implementations/apis for target extraction?
Thank you!

There is this library you can use: https://github.com/yangheng95/ABSADatasets (it is made by the author of the PyABSA). You can label your own data and give sentiment to each aspect that you want.
If you don't want to do it yourself, you can use some entity recognition software, spacy has such functionality as far as I remember.
But for the format that PyABSA accepts, you should manually label sentences by using ABSADatasets.

I can help you do it, just let me know.

I looked into spacy's entity recognition but it seems to only pick up named entities (not just regular entities). I want something that does this:
input: "the tech support is bad but the battery life is good"
output: ["tech support", "battery life"]
Is there any entity recognition tool I can use?


Add possibility to force flush logs after certain period of time

Fixes #215
This is work in progress PR. General idea is to keep information about when last log has been properly flushed and if it was long ago, buffered line should be flushed as we do not except more lines
I'm going to make minor refactor, add unit tests and more comments to code

Thanks @sumo-drosiek, nice improvement!


Suggestion:  Add native integrated database administration tool

VSCode Version:

Versão 1.19.0-insider
Confirmação 0fbdfff167653b233231259ceb3109f0931887ef
Data 2017-11-09T06:19:28.857Z
Shell 1.7.9
Renderizador 58.0.3029.110
Nó 7.9.0
Arquitetura x64

OS Version:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.10
DISTRIB_CODENAME=artful
DISTRIB_DESCRIPTION="Ubuntu 17.10"
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"

Steps to Reproduce:

Add panel to manage and administrate MySQL
Like https://netbeans.org/features/ide/database.html
Like https://www.jetbrains.com/help/ruby/database-tool-window.html

Reproduces without extensions: Yes/No

hi - thanks for the suggestion.  this functionality can be contributed through an extension, so this is a good community project.  closing.


Exception caught by scheduler library

When the exception was thrown, this was the stack:
#2      WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:885:12)
#3      RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
#4      SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
#5      SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
#6      SchedulerBinding.scheduleWarmUpFrame. (package:flutter/src/scheduler/binding.dart:864:7)
...
======== Exception caught by scheduler library =====================================================
'package:flutter/src/widgets/binding.dart': Failed assertion: line 885 pos 12: '!debugBuildingDirtyElements': is not true.
code sample:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.teal,
body: SafeArea(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: double.infinity,
color: Colors.red,
child: Text('container 1 '),
),
SizedBox(
width: 50.0,
),
Container(
width: 100.0,
height: 100.0,
color: Colors.yellow,
child: Text('container3'),
),
SizedBox(
width: 50.0,
),
Container(
width: 100.0,
height: double.infinity,
color: Colors.blue,
child: Text('container3'),
),
],
)),
),
);
}
}

Your double.infinity expressions are causing you problems. The code runs without error without them.
Good places to ask questions or work through problems where you're more likely to get a fast response include:

Stack Overflow
Gitter
Flutter Community Slack

Thanks for using Flutter!


Docs: Correction - Field Settings > Searchable is activated by default

In First app documentation https://docs.amplication.com/docs/first-app it states that the Searchable field is inactive by default

Correct to read active by default.

Also, the Owner field description does not mention the dialog that opens following the selection of the Relation to Entity data type.

Add a description of the searchable feature where relevant:

Searchable means that the field does not appear on searches, although it is still visible to the user and functionally (in accordance with it's accessibility settings)
Add a note to the following locations:

How to create an entity field
How to set access permissions
Your first application - tutorial

Searchable means that the field does not appear on searches

@MoFoGo - searchable means that you cannot search based on this field. The field visibility is determined based on the settings on the Permissions tab.
So, for example, if the customer's email address is visible (permissions set to "all roles" for search) but the field is not set as "searchable" the user will be able to search for customers by name, phone, or any other field but not by email address. but nevertheless, the results will include the email address.

Corrected


JHS generated files do not properly move into directories on Linux

JavaHTTPServer Version: 1.0.2
Exit Code: None
Reproduction Steps:

Run JavaHTTPServer.1.0.2.jar on any Linux distribution
Exit out using ^C^Z
ls the parent directory of JHS
The files generated aren't in a directory like on Windows, but are their own files with names including the Windows directory separator.

root@nanachi-main:~/JHS# ls /root/
 JHS  'JHS\configs\server.cfg'  'JHS\logs'  'JHS\logs\14-12-2024_11-51-52_GMT.txt'

This is mainly because I wasn't actually able to test it on Linux myself back when I started this due to Windows 11 crashing itself whenever I tried using WSL, but now I have a VPS from Zorrito Hosting, I can properly test JHS on Linux.

Fixed in b373aa7a63bbbdda6fd6e052993531e7cfb8897b (1.0.3)


Added cloudes.me support

cloudes.me is a web-based simulation development tool. These changes add
a toggl button on the development interface.

Merged with rebase. Thank you for your contribution.


Dependencies break when keys are alphabetized

This is a bug with the Gingko Bioworks form builder, which has already been addressed in the RJSF core code base.
If you have fields where some answers or form keys are dependent on other ones, the order in which the JSON is parsed must be maintained in order for the form data to be read in correctly. However, this is a problem: JSON's data specification is such that the order of the keys shouldn't be relevant in how the data structure is processed.
In other words, if you stringify the JSON, and then parse that string, the keys become alphabetized by default. Reordering JSON keys shouldn't break the way that JSON is processed... however, in your implementation of RJSF, this is exactly what happens. As a result, when instrumenting your form builder in any scenario involving JSON.parse(), an error is introduced.
Thankfully, there is already some code available in the RJSF core code base that could likely be appropriated to resolve the same problem in the Ginkgo Bioworks form builder. Let's start with some bug reproduction data.
Here's the data schema you may use to reproduce this error:
{
    "type":"object",
    "title":"Dependencies Bug Reproduction",
    "required":[

    ],
    "properties":{
      "relation":{
        "enum":[
          "true",
          "false"
        ],
        "type":"string",
        "title":"Is it a plant?",
        "enumNames":[
          "Yes",
          "No"
        ]
      }
    },
    "description":"Described",
    "dependencies":{
      "arc":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "arc":{
                "enum":[
                  "true"
                ]
              },
              "bloSto":{
                "type":"string",
                "title":"Outcome 1",
                "default":"Recommendation 1"
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "arc":{
                "enum":[
                  "false"
                ]
              },
              "search":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Choose yes or no",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              }
            }
          }
        ]
      },
      "graph":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "graph":{
                "enum":[
                  "true"
                ]
              },
              "cos":{
                "type":"string",
                "title":"Outcome 2",
                "default":"Recommendation 2"
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "graph":{
                "enum":[
                  "false"
                ]
              },
              "trans":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Is it an animal?",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              }
            }
          }
        ]
      },
      "lrgDt":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "lrgDt":{
                "enum":[
                  "true"
                ]
              },
              "fileSys":{
                "enum":[
                  "fileSystem",
                  "object"
                ],
                "type":"string",
                "title":"Choose your path wisely",
                "enumNames":[
                  "File system",
                  "Object"
                ]
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "lrgDt":{
                "enum":[
                  "false"
                ]
              },
              "binBlo":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Is it a mineral?",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              }
            }
          }
        ]
      },
      "binBlo":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "binBlo":{
                "enum":[
                  "true"
                ]
              },
              "bloSto":{
                "type":"string",
                "title":"Outcome 3",
                "default":"Recommendation 3"
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "graph":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Is it a person?",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              },
              "binBlo":{
                "enum":[
                  "false"
                ]
              }
            }
          }
        ]
      },
      "smb":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "azu":{
                "type":"string",
                "title":"Outcome 4",
                "default":"Recommendation 4"
              },
              "smb":{
                "enum":[
                  "true"
                ]
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "arc":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Is it bigger than a breadbox?",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              },
              "smb":{
                "enum":[
                  "false"
                ]
              }
            }
          }
        ]
      },
      "trans":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "trans":{
                "enum":[
                  "true"
                ]
              },
              "azCaRe":{
                "type":"string",
                "title":"Outcome 5",
                "default":"Recommendation 5"
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "cosDa":{
                "type":"string",
                "title":"Outcome 6",
                "default":"Recommendation 6"
              },
              "trans":{
                "enum":[
                  "false"
                ]
              }
            }
          }
        ]
      },
      "relation":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "sql":{
                "type":"string",
                "title":"Outcome 7",
                "default":"Recommendation 7",
                "description":"We suggest this outcome to you now."
              },
              "relation":{
                "enum":[
                  "true"
                ]
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "relation":{
                "enum":[
                  "false"
                ]
              },
              "semi":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Does it need nutrients to grow?",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              }
            }
          }
        ]
      },
      "semi":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "cosDa":{
                "type":"string",
                "title":"Outcome 8",
                "default":"Recommendation 8"
              },
              "semi":{
                "enum":[
                  "true"
                ]
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "smb":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Does it taste like anything good?",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              },
              "semi":{
                "enum":[
                  "false"
                ]
              }
            }
          }
        ]
      },
      "search":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "azSrch":{
                "type":"string",
                "title":"Outcome 9",
                "default":"Recommendation 9"
              },
              "search":{
                "enum":[
                  "true"
                ]
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "search":{
                "enum":[
                  "false"
                ]
              },
              "timSerDa":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Would you find it in an average household?",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              }
            }
          }
        ]
      },
      "timSerDa":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "timSerDa":{
                "enum":[
                  "true"
                ]
              },
              "timSerIns":{
                "type":"string",
                "title":"Outcome 10",
                "default":"Recommendation 10"
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "lrgDt":{
                "enum":[
                  "true",
                  "false"
                ],
                "type":"string",
                "title":"Is it fun to bring to a party?",
                "enumNames":[
                  "Yes",
                  "No"
                ]
              },
              "timSerDa":{
                "enum":[
                  "false"
                ]
              }
            }
          }
        ]
      },
      "fileSys":{
        "oneOf":[
          {
            "required":[

            ],
            "properties":{
              "dtLkSt":{
                "type":"string",
                "title":"Outcome 11",
                "default":"Recommendation 11"
              },
              "fileSys":{
                "enum":[
                  "fileSystem"
                ]
              }
            }
          },
          {
            "required":[

            ],
            "properties":{
              "bloSto":{
                "type":"string",
                "title":"Outcome 12",
                "default":"Recommendation 12"
              },
              "fileSys":{
                "enum":[
                  "object"
                ]
              }
            }
          }
        ]
      }
    }
  }

Here's a UI schema to go with that:
{
    "ui:order":[
      "relation",
      "sql",
      "semi",
      "smb",
      "azu",
      "arc",
      "search",
      "azSrch",
      "timSerDa",
      "timSerIns",
      "lrgDt",
      "fileSys",
      "binBlo",
      "graph",
      "dtLkSt",
      "bloSto",
      "cos",
      "trans",
      "azCaRe",
      "cosDa"
    ]
  }

If you paste those into the Ginkgo Bioworks form builder demo, you will notice two things right away.
First, the form builder crashes with the following error:
TypeError: Cannot read properties of undefined (reading 'dependents')
Second, when previewing the form (which uses RJSF core, and therefore this bug isn't an issue), you will notice that the "Preview Form" tab is rendering the above form just fine.
You can also try pasting the same code into the RJSF Playground, where it works just fine.
When this schema was originally built, the data was entirely the same as it is now. However, the keys arrived in a different order, which allowed the form builder to process this data just fine. Now that the order of the keys has been changed, we are getting this bug introduced because a field is being loaded with dependencies in its "oneOf" implementation, which haven't yet been loaded into memory.
Thankfully, a solution shouldn't be too far away. Have a look at the code starting on line 810 of the utils.js file from RJSF core:
function resolveDependencies(schema, rootSchema, formData) {
  // Drop the dependencies from the source schema.
  let { dependencies = {}, ...resolvedSchema } = schema;
  if ("oneOf" in resolvedSchema) {
    resolvedSchema =
      resolvedSchema.oneOf[
        getMatchingOption(formData, resolvedSchema.oneOf, rootSchema)
      ];
  } else if ("anyOf" in resolvedSchema) {
    resolvedSchema =
      resolvedSchema.anyOf[
        getMatchingOption(formData, resolvedSchema.anyOf, rootSchema)
      ];
  }
  return processDependencies(
    dependencies,
    resolvedSchema,
    rootSchema,
    formData
  );
}
function processDependencies(
  dependencies,
  resolvedSchema,
  rootSchema,
  formData
) {
  // Process dependencies updating the local schema properties as appropriate.
  for (const dependencyKey in dependencies) {
    // Skip this dependency if its trigger property is not present.
    if (formData[dependencyKey] === undefined) {
      continue;
    }
    // Skip this dependency if it is not included in the schema (such as when dependencyKey is itself a hidden dependency.)
    if (
      resolvedSchema.properties &&
      !(dependencyKey in resolvedSchema.properties)
    ) {
      continue;
    }
    const {
      [dependencyKey]: dependencyValue,
      ...remainingDependencies
    } = dependencies;
    if (Array.isArray(dependencyValue)) {
      resolvedSchema = withDependentProperties(resolvedSchema, dependencyValue);
    } else if (isObject(dependencyValue)) {
      resolvedSchema = withDependentSchema(
        resolvedSchema,
        rootSchema,
        formData,
        dependencyKey,
        dependencyValue
      );
    }
    return processDependencies(
      remainingDependencies,
      resolvedSchema,
      rootSchema,
      formData
    );
  }
  return resolvedSchema;
}

function withDependentProperties(schema, additionallyRequired) {
  if (!additionallyRequired) {
    return schema;
  }
  const required = Array.isArray(schema.required)
    ? Array.from(new Set([...schema.required, ...additionallyRequired]))
    : additionallyRequired;
  return { ...schema, required: required };
}

function withDependentSchema(
  schema,
  rootSchema,
  formData,
  dependencyKey,
  dependencyValue
) {
  let { oneOf, ...dependentSchema } = retrieveSchema(
    dependencyValue,
    rootSchema,
    formData
  );
  schema = mergeSchemas(schema, dependentSchema);
  // Since it does not contain oneOf, we return the original schema.
  if (oneOf === undefined) {
    return schema;
  } else if (!Array.isArray(oneOf)) {
    throw new Error(`invalid: it is some ${typeof oneOf} instead of an array`);
  }
  // Resolve $refs inside oneOf.
  const resolvedOneOf = oneOf.map(subschema =>
    subschema.hasOwnProperty("$ref")
      ? resolveReference(subschema, rootSchema, formData)
      : subschema
  );
  return withExactlyOneSubschema(
    schema,
    rootSchema,
    formData,
    dependencyKey,
    resolvedOneOf
  );
}

function withExactlyOneSubschema(
  schema,
  rootSchema,
  formData,
  dependencyKey,
  oneOf
) {
  const validSubschemas = oneOf.filter(subschema => {
    if (!subschema.properties) {
      return false;
    }
    const { [dependencyKey]: conditionPropertySchema } = subschema.properties;
    if (conditionPropertySchema) {
      const conditionSchema = {
        type: "object",
        properties: {
          [dependencyKey]: conditionPropertySchema,
        },
      };
      const { errors } = validateFormData(formData, conditionSchema);
      return errors.length === 0;
    }
  });
  if (validSubschemas.length !== 1) {
    console.warn(
      "ignoring oneOf in dependencies because there isn't exactly one subschema that is valid"
    );
    return schema;
  }
  const subschema = validSubschemas[0];
  const {
    [dependencyKey]: conditionPropertySchema,
    ...dependentSubschema
  } = subschema.properties;
  const dependentSchema = { ...subschema, properties: dependentSubschema };
  return mergeSchemas(
    schema,
    retrieveSchema(dependentSchema, rootSchema, formData)
  );
}

// Recursively merge deeply nested schemas.
// The difference between mergeSchemas and mergeObjects
// is that mergeSchemas only concats arrays for
// values under the "required" keyword, and when it does,
// it doesn't include duplicate values.
export function mergeSchemas(obj1, obj2) {
  var acc = Object.assign({}, obj1); // Prevent mutation of source object.
  return Object.keys(obj2).reduce((acc, key) => {
    const left = obj1 ? obj1[key] : {},
      right = obj2[key];
    if (obj1 && obj1.hasOwnProperty(key) && isObject(right)) {
      acc[key] = mergeSchemas(left, right);
    } else if (
      obj1 &&
      obj2 &&
      (getSchemaType(obj1) === "object" || getSchemaType(obj2) === "object") &&
      key === "required" &&
      Array.isArray(left) &&
      Array.isArray(right)
    ) {
      // Don't include duplicate values when merging
      // "required" fields.
      acc[key] = union(left, right);
    } else {
      acc[key] = right;
    }
    return acc;
  }, acc);
}

It looks like this code may have been designed to solve exactly this bug. We're hoping you can take a look, and potentially incorporate the same code into the Ginkgo Bioworks form builder. Solving this bug is an important ingredient to ensuring that dependencies work even after the keys in any JSON object are reordered.
Let me know if you have any questions, and thanks very much for your diligent efforts on such a valuable tool!

@raymond-lam - Any chance we could get someone to triage this issue? It's pretty critical that we get a resolution in order to use this tool.

@crates Sorry about the delay. I just put out a PR to fix this.

@crates The fix should be in v2.9.1

@raymond-lam - Thanks VERY much for this fix! It's definitely closer to where it needs to be now, but we're still getting a similar error when trying to add a new form element or section to a form that has dependencies.
So now, we can load the forms that previously crashed on load, but when adding a new item to those, we get:
Cannot read properties of undefined (reading 'startsWith')
The error originates from:
addElem > addElem > addCardObj > getIdFromElementsBlock
Please let me know if there's anything that can be done to resolve this, or if I should open a new ticket. Thanks again!

BTW, this happens when using a form that has nested dependencies like the example I posted above. It only occurs after clicking the green/white plus sign button, then selecting either new form element or form section (either will produce the bug), and then clicking the blue "Create" button.

One thing you might consider is to use null propagation operators whenever inspecting properties.
Doing this will help mitigate a lot of cases where you might otherwise encounter bugs.
For instance, I'm noticing errors around the getIdFromElementsBlock method in formBuilder/utils.js:
        ...names.map((name) => {
          if (name.startsWith(DEFAULT_INPUT_NAME)) {
            const index = name.substring(defaultNameLength, name.length);

You might consider adding question marks before your periods to help with undefined errors:
        ...names.map((name) => {
          if (name?.startsWith(DEFAULT_INPUT_NAME)) {
            const index = name?.substring(defaultNameLength, name.length);

Or, alternatively, specifying a default value:
        ...names.map((name) => {
          const safeName = name || '';
          if (safeName.startsWith(DEFAULT_INPUT_NAME)) {
            const index = safeName.substring(defaultNameLength, safeName.length);

I don't know the library enough to open a pull request, but wanted to suggest those possibilities.
Thanks again for all of your excellent work on this library! It's greatly appreciated. =)

@raymond-lam - Sorry to keep bugging you. Any chance of this getting a fix soon?

@raymond-lam - Sorry to keep bugging you. Any chance of this getting a fix soon?

I can't promise a timeline but I am looking at this.

I haven't forgotten about this....

Glad to hear it! We're showcasing a demo of a solution that uses your form builder this week, but without the bug fix we can't edit previously-built forms that have dependency fields (which for our use case, is all of them). We were wondering if we'd have to rewrite the form portion of our app entirely as a result... But for now we're still holding out for a possible fix.

I can’t guarantee that I’ll have a fix for this by the end of the week. You should assume that I won’t, to be safe.

@crates I think I found the fix. I'm issuing a PR -- hopefully I'll release a new version in the next day or so.

You're my hero, homie. Your timing is absolutely impeccable. Thanks a million!

@raymond-lam - Not every FOSS project maintainer I've seen has been on top of things, but you and your team are 100% amazing with these updates. Thanks a million. Everything is working phenomenally.


[fix] add helper methods and messages in places that need them

preparing for the test data has led to discovering many places where functionality is missing. i'm adding it here so the rest of the team is able to work without major disturbance.

right, i was still behind a couple commits on main....


Scoped Parallelism Extension

I'm currently thinking about creating an extension for a new kernel invocation mechanism that addresses the same points as hierarchical parallelism but should be substantially easier to implement on all platforms supported by hipSYCL, and have less surprises (functionality or performance-wise) for users. For lack of a better word, let's call it scoped parallelism.
It follows the goals

Be efficiently implementable on GPU and host
Be relatively easy to implement, without additional compiler magic
Be explicit to avoid performance surprises
Be able to express the same algorithms as nd_range parallel for.

This is all still brainstorming, so feedback welcome.
Like hierarchical parallel for, scoped parallelism uses two nested scopes:
constexpr size_t Group_size = 128;
q.submit([&](sycl::handler& cgh){
  auto data_accessor = ...;
  cgh.parallel<class Kernel>(sycl::range<1>{num_groups}, sycl::range<1>{Group_size},
  [=](sycl::group<1> grp, sycl::physical_item<1> phys_idx){
     // Inside the parallel scope, the degree of parallelism is implementation-defined
     // the implementation can use whatever is most efficient for hardware/backend.
     // In hipSYCL CPU, this would be executed by a single thread on CPU
     // and Group_size threads on hipSYCL GPU
     // phys_idx contains information about the position in the (implementation-defined)
     // physical iteration space

     // Local memory in parallel scope must be allocated explicitly as such
     sycl::local_memory<int [Group_size]> scratch{grp};
     // Same goes for private_memory, if required (here only dummy example)
     sycl::private_memory<int> dummy{grp, initial_value};
     // Variables not explicitly marked as either can be declared as well under certain
     // circumstances, see the for loop below.

     // `distribute_for` distributes the logical, user-provided iteration space across the physical one.
     // We might also support flexible group sizes in the future like for hierarchical parallelism..
     grp.distribute_for([&](sycl::subgroup<1> sg, sycl::logical_item<1> idx){
        scratch[idx.get_local_id(0)] = data_accessor[idx.get_global_id(0)];
        // Can execute code for a single item of the subgroup:
        sg.single_item([&](){
          ...
        });
     }); // implicit barrier at the end by default (mechanism to alter that behavior might also come)

     // Variables inside the parallel scope that are not explicitly local or private memory
     // are allowed, if they have the same value across all work items and are not modified
     // from inside `distribute_for()` scope.
     // The SYCL implementation will allocate those in whatever memory is more efficient
     // for the target device.
     for(int i = Group_size / 2; i > 0; i /= 2){
       grp.distribute_for([&](sycl::subgroup<1> sg, sycl::logical_item<1> idx){
         size_t lid = idx.get_local_id(0);
         if(lid < i)
           scratch[lid] += scratch[lid+i];
       });
     }

     grp.single_item([&](){
       data_accessor[grp.get_group_id(0)] = scratch[0];
     }); //should this synchronize at the end?
  });
});

CC @tomdeakin
EDIT: A good way to think about this approach might be OpenMP, where the threads are first spawned with #pragma omp parallel, and the items to be processed in parallel are then distributed across the threads with #pragma omp for. A similar thing happens here: In the outer scope, all threads are spawned (based on whatever the amount of threads is that the SYCL implementation wants for best performance), and then the work items are distributed across the threads using distribute_for().
EDIT2: Renamed parallel_for->distribute_for, introduced subgroups

What is a thread?
grp.single_thread([&](){→grp.single([&]{ or grp.single_work_item([&]{?

Really interesting and thanks for sharing. I like the explicit memory space declarations but it might be cumbersome if you had a lot of private variables.
Are we allowed to nest parallel_for? Having multiple levels of nesting could be useful, especially if we don't specify a mapping. OpenMP exposes 3 levels: teams, threads and simd. What's tricky is it's a different word for each level. Also the sharing of an iteration space has a different word depending on the level too: distribute between teams, for between threads. simd has different semantics!

What is a thread?
grp.single_thread(&{→grp.single([&]{ or grp.single_work_item([&]{?

Hehe.. you are right of course, thank you :) Maybe single_item would also be an option to retain the precision of single_work_item without being too long.

Really interesting and thanks for sharing. I like the explicit memory space declarations but it might be cumbersome if you had a lot of private variables.

Maybe, but it's no worse than current hierarchical parallelism where private memory also has to be declared explicitly in the outer scope. For most code patterns, I would not expect a large number of local memory allocations, so I'm not really worried about too much local_memory. In order to be implementable on the host device, I really so no way around explicit private_memory if we want to allow the user to declare private memory in the outer scope.
The main problem is that on CPU, we want to have 1 thread per group with a loop across work items. So the outer scope will be executed by a single thread. If we now want to allocate some memory here for the work items (i.e. individual iterations of, effectively, a for loop), we actually need to allocate an array with one element per iteration. If we want to allow SYCL-as-a-library implementations on CPU, we need special constructs for private memory allocations for this.
Of course, inside parallel_for any declaration is private, so no additional effort required here. And as I mentioned, you can omit the private_memory/local_memory in the outer scope if you know that they're going to be the same for all work items (e.g. for constants). I think this will cover many cases in practice..

Are we allowed to nest parallel_for?

Good question. The teams level would probably be covered by different work groups in our case. We already have this covered since each parallel_scope kernel starts with a group object. Since we are not really doing any hierarchical parallelism, I think we could easily expose SIMD parallelism exactly the same way as DPC++ does with subgroups for nd_range kernels, which would have the advantage for users that they don't have to learn something new and can just use it the same way they have don for nd_range. Perhaps there's also a better way to express this in this case, but this requires more investigation. So initially, I don't think that there will be any nesting, but I think this could be done in the future.
Maybe what happens might also be clearer if we don't call it parallel_for but distribute_for or something like that..

Subgroups would be the framework to work with for this. But as we're doing hierarchical parallelism it could make more sense to express them as another parallel loop with a different iterator, instead of the kernel style programming required for the DPC++ subgroups:
This rough sketch shows what I'm thinking at:
constexpr size_t Group_size = 128;
q.submit([&](sycl::handler& cgh){
  auto data_accessor = ...;
  cgh.parallel_scope<class Kernel>(sycl::range<1>{num_groups}, sycl::range<1>{Group_size},
  [=](sycl::group<1> grp) {
    // Level 1
    // Describes what each work-group is doing
    // Question? Is this executed by each work-item in the work-group or by a single work-item??

    grp.parallel_for([&](sycl::sg_item<1> sg) {
      // Level 2
      // Describes what each sub-group is doing

      sg.parallel_for([&](sycl::h_item<1> idx) {
      // Level 3
      // Describes what each work-item of the sub-group is doing
      });
    });
  });
});

Maybe what happens might also be clearer if we don't call it parallel_for but distribute_for or something like that..

I think the trouble with having both distribute_for and parallel_for is that they need to do different things and parallelise over different levels in the hierarchy. It might be nicer to simply have parallel_for that parallelises over the next level down as above. Then it is flexible what the implementation maps each level to.

Hm.. So, to be clear, this scoped parallelism concept is not really hierarchical, strictly speaking. In order to avoid all the issues associated with hierarchical, a fundamental aspect of it is that all threads required by the backend for best performance are there right from the beginning. This gives implementations the flexibility to do the right thing for performance.
So, the answer to your question of whether level 1 code is per group or per work item is: It depends. The degree of parallelism you have here is implementation (or backend) defined. I am worried that, if we introduce nested parallel_for we end up with exactly the same issues as in hierarchical. E.g. what happens if a variable declared in subgroup scope is used in the work item scope?
The implementation of this would probably also require a lot of compiler support, just like hierarchical...
What we could have quite easily though is probably something like:
grp.parallel_for([&](sycl::subgroup<1> sg, sycl::h_item<1> idx){
   sg.single_item([&](){
      // Executed once per subgroup
   });
   // Executed for each item
});
grp.single_item([&](){
   // Executed once per work group
}

This better matches the concept of "all threads are there from the beginning", I think. But I see that there is still some asymmetry here as we start from the group object, and then get both h_item and subgroup at the same time..

... I think we could resolve the asymmetry by having:
cgh.parallel_scope<class Kernel>(...,
  [=](sycl::group<1>, sycl::physical_item<1> phys){
  // The physical item contains information about the actual degree of parallelism that
  // the implementation uses
  grp.parallel_for([&](sycl::subgroup<1> sg, sycl::logical_item<1> logical_idx){
    // logical_item describes where we are in the user-specified iteration space.
    // On GPU, logical_idx = phys, on CPU the physical index is always 0 while
    // the logical item contains information about the actual position in the iteration space
    sg.single_item([&](){
      // Executed once per subgroup
   });
   // Executed for each item
  });
  grp.single_item([&](){
    // Executed once per work group
  });
});

Hm.. So, to be clear, this scoped parallelism concept is not really hierarchical, strictly speaking. In order to avoid all the issues associated with hierarchical, a fundamental aspect of it is that all threads required by the backend for best performance are there right from the beginning.

I think I missed that point, apologies. In that context your approach makes sense as an equivalent notation for ndrange.

Updated the original post with subgroups, renamed parallel_for to distribute_for, renamed parallel_scope to parallel.

I think I missed that point, apologies. In that context your approach makes sense as an equivalent notation for ndrange.

@tomdeakin It's equivalent to ndrange in the sense that you can express the same algorithms with it, just like hierarchical is equivalent in that sense... But this form of parallelism distinguishes itself from ndrange by

being performance portable between host and device
having a clear separation between the user-provided logical iteration space and the actual parallelism employed by the implementation, giving the implementation the freedom to do things the optimal way. E.g. we could also support flexible work group ranges in scoped parallelism, just like in hierarchical parallel for.
being a modern, less low-level way to express kernels

I think there are aspects it has in common with ndrange, and some aspects it has in common with hierarchical. The best of both worlds, hopefully ;)

Closing because feature is implemented.


Workspace not sorted correctly while creating room

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Go to "New room"
Click on "Workspace" dropdown

Expected Result:
Workspace should be sorted alphabetically
Actual Result:
Workspace not sorted alphabetically while creating room
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[ ] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: <IP_ADDRESS>
Reproducible in staging?: yes
Reproducible in production?: yes
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/93399543/47dc7df0-a213-4cc4-bdd2-6feb5b1cd559
https://github.com/Expensify/App/assets/93399543/de8a3eb1-a687-4e00-9afe-90b12ed22eea
Expensify/Expensify Issue URL:
Issue reported by: @ayazhussain79
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1685370310524839
View all open jobs on GitHub

closing based on - https://github.com/Expensify/App/issues/19963#issuecomment-1572303898


Use unwrap_or_else in case PROFILE does not exist

In certain situations, the PROFILE env var isn't set (for example when using rules_rust). This falls back in that case to use the string "unknown"

Thanks for catching this.
Never used bazel, but now I wonder if then also the profile configs in Cargo.toml would be ignored, or if those things are separate from the PROFILE env var setting.

0.5.2 patch release published, in case you  want to stick to the crate updates.


API name removed from the command name solving #890, consistent names solving #891

API name removed from the command name solving #890, consistent names solving #891

Coverage remained the same at 100.0% when pulling 6cd5424cbbf8ec9d83362f1b5e228d4cdbd0222e on VelinGeorgiev:commands-rename into 7aefe4e989db3e3274abb9c2a390abf42cc14a66 on pnp:v2.

Awesome! Let's get it in 💪

@waldekmastykarz , I did the requested changes.
What I moved in the base folder for now is AzmgmtCommand, GraphCommand since they are shared across multiple services. Please feel free to leave a message if you think other classes should be moved there.

For consistency, I'd say let's put everything in the same folder so that we have a single place to look at with regards to which APIs are supported.

Merged manually. Thank you!


biotypes chart showing only last 7 entries

Hi,
is this on purpose? it selects only last seven biotypes from tmp_file , missing protein coding genes and other important groups leaving the chart quite meaningless (at least in my case).
https://github.com/SciLifeLab/NGI-RNAseq/blob/632aef19ee28fbb2f03f00cb2d54055c4a51b276/main.nf#L944
I'd suggest adding something like
cut -f 1,7 ${bam_featurecounts.baseName}_biotype.featureCounts.txt | sort -k 2 -n -r | head -n 10 > tmp_file
thanks,
JK

Ah no, I guess this was accidental - maybe the file that @Hammarn was looking at only had 7 categories or something?

hmm, I have no idea why I did this. I don't really see a point in restricting the categories at all to be honest. It's not that many.I'll make a  PR.


Fix window resize on move

This fixes :
https://github.com/electron/electron/issues/9477
On monitors having scale options applied,window.setPosition() also cause a growth of the window.
The fix consists in resetting to initial window size once the move/drag event finished.
This only applies on Windows.

Have you tried to use setBounds as described in https://github.com/electron/electron/issues/9477 ?

@hristoterezov setBounds worked it now works flawlessly on scaled monitor. thanks


Label Representation

ASM represent labels as pseudo-instructions. Right now, CHASM instead attaches label information to instructions.
While I personally prefer it this way, it comes with it's own issue: There might be trailing labels in the ASM representation that can't be expressed in CHASM.
Right now this is solved by inserting a trailing NOP instruction at the end of each method. This seems to work fine for now, adn we might also be able to strip this trailing NOP when writing the class file.
However, I feel like this might require additional discussion.

Just as an update:
Right now, there is a trailing NOP inserted at the end of every method to which the final labels get attached to.
When writing, NOPs are ignored but the labels are still emitted.
An alternative solution would be to handle the end of the method specially by always emitting a specially labeled "end" node.

The current ChasmMethodWriter strips all NOP instructions rather than only trailing NOPs. Is this a bug?

It's not a bug, It's a temporary soplution.
Right now I'm thinking of emitting a NOP for each label, and then stripping them all, or use a custom (temporary) opcode for labels.
But that's the discussion this issue was created for in the first place.

I meat that you didn't mention you stripped all NOPs instead of only trailing NOPs, so I was wondering if you knew or if it was accidental.
Do you mean it strips all NOPs because CHASM puts NOPs in for any label that tries to label a labeled node?
Is there a reason to keep NOPs that CHASM didn't insert, or is it safe to remove them all?

I said it above, though I wasn't very specific since I assumed it was a temporary solution anyway.

When writing, NOPs are ignored but the labels are still emitted.

Do you mean it strips all NOPs because CHASM puts NOPs in for any label that tries to label a labeled node?
That is what I'm thinking, though the current code doesn't do that.

Is there a reason to keep NOPs that CHASM didn't insert, or is it safe to remove them all?
I think removing them all would be fine, but i don't know for sure.
Maybe there are tools that require them, though I couldn't think of any.

I have now decided to represent labels as instructions without opcode.
They are now nodes in the instructions list with no opcode and a single label member.


Allow users to set WSYWIG or mardown in their own profile settings

Describe the feature you'd like
Allow users to set whether they want to use markdown or WSYWIG
Describe the benefits this would bring to existing BookStack users
Markdown is a very efficient way to create documents. Some of my associates prefer to WSYWIG while others, markdown. Having the ability for a user to set this preference within their own profile, or on the fly, would bring greater flexibility to the system.
Can the goal of this request already be achieved via other means?
This use case, no. It is set from a system-wide perspective.
Have you searched for an existing open/closed issue?

[X] I have searched for existing issues and none cover my fundemental request

How long have you been using BookStack?
Over 5 years
Additional context
No response

Hi @lithium-arp,
Since it's not mentioned in this request, just wanted to ensure you're aware it's possible to change editors from within the editor, on a per-page basis, as shown from about 1:39 in my video here: https://foss.video/w/b4aTq3YzsTVjdEFBQtuHgZ?start=1m39s

Since there's been no further follow up I'll go ahead and close this off.

Apologies... I thought this container was updating automatically. Thank you


ion-range not updating when set to dual

Bug Report
Ionic Info
Ionic:

   ionic (Ionic CLI)  : 4.2.1 (/usr/local/lib/node_modules/ionic)
   Ionic Framework    : ionic-angular 3.9.2
   @ionic/app-scripts : 3.2.0

Cordova:

   cordova (Cordova CLI) : 8.0.0
   Cordova Platforms     : android 7.0.0
   Cordova Plugins       : cordova-plugin-ionic-keyboard 2.1.2, cordova-plugin-ionic-webview 2.1.0, (and 7 other plugins)

System:

   Android SDK Tools : 26.1.1 (/home/leydar/Android/Sdk)
   NodeJS            : v10.4.1 (/usr/local/bin/node)
   npm               : 6.4.1
   OS                : Linux 4.15

Describe the Bug
When binding to an underlying object the dual ion-range control doesn't update.
Steps to Reproduce

Add ion-range control, set dualKnobs to true and bind to object.
Programatically change object lower or upper property.

Related Code
https://plnkr.co/edit/Gn61NSu1HNs33gALTLSG?p=preview
Expected Behavior
Range knob should move as it does with the single knob instance.

I just noticed that it does update if the object is set rather than just the property. For instance if you set volume = {lower: volume.lower, upper: 57}; then it will update the control.


stubborn merge segment after a singleton operator

Describe the bug
If an operator ends up on a line by itself (after splitting), we don't try hard enough to merge the segment after that operator into the operator's line, which can result in ugly output (for somewhat pathological input)
To Reproduce
From gitlab's project:
{{column|lower}} ||
ENCRYPT_RAW(
    to_binary('{{ get_salt(column|lower) }}', 'utf-8'),
    to_binary('{{ env_var("SALT_PASSWORD") }}', 'HEX'),
    to_binary('416C736F4E637265FFFFFFAB', 'HEX')
)

Expected behavior
{{ column | lower }} || encrypt_raw(
    to_binary('{{ get_salt(column|lower) }}', 'utf-8'),
    to_binary('{{ env_var("SALT_PASSWORD") }}', 'HEX'),
    to_binary('416C736F4E637265FFFFFFAB', 'HEX')
)

Actual behavior
{{ column | lower }} ||
encrypt_raw(
    to_binary('{{ get_salt(column|lower) }}', 'utf-8'),
    to_binary('{{ env_var("SALT_PASSWORD") }}', 'HEX'),
    to_binary('416C736F4E637265FFFFFFAB', 'HEX')
)

Additional context
What is the output of sqlfmt --version?
Commit 88617d2 (v0.10)

See also:
https://github.com/tconbeer/gitlab-analytics-sqlfmt/blob/7e002680565326278d4ead72cff9c651f27c7169/transform/snowflake-dbt/models/legacy/bamboohr/rpt/bamboohr_rpt_headcount_aggregation.sql#L88-L89

Also need to handle open parens that end up on lines by themselves, e.g., over\n(something long)
https://github.com/tconbeer/gitlab-analytics-sqlfmt/blob/7e002680565326278d4ead72cff9c651f27c7169/transform/snowflake-dbt/models/legacy/bamboohr/sensitive/bamboohr_job_role.sql#L42-L44

Also:
https://github.com/tconbeer/rittman_ra_data_warehouse/blob/d8dc7bd1c008ca79f9d09c909734e28a66ef6366/models/integration/int_ad_campaign_performance.sql#L4-L5

closed by fd66993

closed in #210


Example instruction updated to use the toga pre version on pypi

The dev version on pypi introduces some new GUI packages, such as style.
The examples in toga project rely on these new GUI packages, and it will run into some problems with the stable version on pypi, so the instructions need to be updated to use the dev version.
The change is from
pip install toga

to
pip install --pre toga

Fixes https://github.com/pybee/toga/issues/553
PR Checklist:

[ ] All new features have been tested
[x] All new features have been documented
[x] I have read the CONTRIBUTING.md file
[x] I will abide by the code of conduct

Thanks for review, @freakboy3742 . I agree with you, removing pip install --pre toga is better than not doing anything, at leave it won't simply fail. Just submit another commit for it, and updated the prompt symbol in some examples to make it all as $ for consistency.


kills currently active connections

If I run example (go 1.7.1) and I run: while curl http://<IP_ADDRESS>:8080 ; do date; done
Then, I see:
Serving HTTP
^CGot signal:interrupt
Stopping listener
Waiting on server

(expected)
...
Hello HTTP!
Fri Oct 28 21:44:54 UTC 2016
Hello HTTP!
Fri Oct 28 21:44:54 UTC 2016
curl: (52) Empty reply from server

Which means the already accepted connection was interrupted mid-stream.
Looking into the bowels of net/http, it seems somewhat impossible because go c.serve(ctx) has no way of waiting on in-flight requests. There are a few issues open currently to try and fix this issue though:
https://github.com/golang/go/issues/4674
https://github.com/golang/go/issues/11219
The problem is that you can't just wait on http.Serve().

https://github.com/tylerb/graceful does what you think it should... except that it takes a timeout.

The intent of this package is stop the listening socket. The handling of any other sockets that have been opened as a result of that one is not in the scope of this package. I choose to solve this problem outside of the application layer, namely by using connection draining on a load balancer before issuing the stop command to my software.
Pull requests that add additional logic and tests to handle such cases are welcome.


Generalize target information for CUDA GPUs and use it to pick codegen config

Request description
When compiling for a given cuda target we need to decide the right configuration based on the target information. Right now IREE has concentrating on sm_80 A100 target but should enable sm_86, sm_90 kind of target by choosing the right codegen configuration based on the amount of shared memory available.
Currently we only have very basic target info:
https://github.com/openxla/iree/blob/d9b052d57713122b8c74a89aa4f383b3063105d4/compiler/src/iree/compiler/Codegen/LLVMGPU/KernelConfig.cpp#L75
One improvement would be to add shared memory available for each target. Then we should use it to decide whether we support a given configuration or not here:
https://github.com/openxla/iree/blob/d9b052d57713122b8c74a89aa4f383b3063105d4/compiler/src/iree/compiler/Codegen/LLVMGPU/KernelConfig.cpp#L327
What component(s) does this issue relate to?
Compiler
Additional context
No response

We have a common #iree_gpu.target shared by all GPU backends to describe the target information now.


Fix Show Attendance error message

Closes #126

Codecov Report

Merging #154 into master will not change coverage.
The diff coverage is 0.00%.

@@            Coverage Diff            @@
##             master     #154   +/-   ##
=========================================
  Coverage     72.57%   72.57%
  Complexity      473      473
=========================================
  Files            83       83
  Lines          1546     1546
  Branches        163      163
=========================================
  Hits           1122     1122
  Misses          355      355
  Partials         69       69

Impacted Files
Coverage Δ
Complexity Δ

.../address/logic/commands/ShowAttendanceCommand.java
70.83% <0.00%> (ø)
5.00 <0.00> (ø)

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 a11e4dc...db22b20. Read the comment docs.


All highlighting stopped working with neovim 0.8

There seems to have been some breaking changes in the new 0.8 release.

When using nvim 0.8 + master on nvim-treesitter, highlights are not working anymore. It seems that all colorschemes needs to be updated.
See https://github.com/nvim-treesitter/nvim-treesitter/issues/3680

Looks like the colorscheme is actually okay and the real problem is that filetype detection has stopped working. If I do :set ft=ocaml the highlighting works just fine.

@erikw I fixed my highlighting issues by removing these bits from my config. I have also tweaked the colorscheme a bit in #54, give it a spin and let me know what you think!
@ishan9299 any chance you could review and possibly merge this?

@rbjorklin i'm glad i found your issue!
per the 0.7 announcement on the blog i had added these lines to my config:
-- new filetype part of 0.7: https://neovim.io/news/2022/04
vim.g.do_filetype_lua = 1
vim.g.did_load_filetypes = 0

your assesment is spot on, but also surprising, that the upgrade to v0.8 requires a removal of such config. i expected the transition from "opt-in" to "by default" be a bit smoother.
either way, thanks to dev team for all their hard work!


Support compound shapes

Would be awesome to add support for paths made up of multiple shapes and shapes with holes in them.

Yes, I'm working on this. It will be pushed online this weekend I think. :)


Footer doesn't exist in "rules" page of subreddits

Description
Footer (the 3rem padding/margin) doesn't exist in "rules" page of subreddits.
Severity
Low

Pull request #53


[question] How do I cancel an in progress http call?

I have a scenario where we've started a call with HCHttpCallPerformAsync but before the callback has completed we'd like to tear everything down. I've attempted to use HCHttpCallCloseHandle to signal I have no interest in the result but that seems to just cause a crash while the call is processing.

Close shouldn't crash but it does.  That's a known bug.  It doesn't yet keep a reference so for now you have to keep the handle open while the async is in flight.  We'll fix this in a upcoming release.

The cancel operation isn't hooked up down to the OS APIs (e.g. WinHTTP's cancel, etc) so it won't really cancel yet.  That's work that we'll likely do at some point but isn't yet done.  Its not high on our priority so it'll be done in a future release but if you want to pull request the feature in sooner, feel free :)


Faucet confirmation page does not show updated balance on Testnet

To reproduce:

Go to https://faucet.staging.originprotocol.com/
Select Rinkeby, Enter your wallet address then submit
=> The confirmation page does not show the updated balance.
It could be that we are hitting the Infura load balancing issue where transaction is processed by one node but then the call to check the balance right after it is processed by another node which is hasn't synced the block.

Fixed in PR #545


adout second iteration and new_instruction

hi, thanks for release your code.I have some small questions to ask you.
The code you provided is for one iteration, so what is the input dataset for the second iteration? Is it the train_cool that has been replaced in the diagram, and where is cache_pool reflected in the code?
Then,Does the new_instruction generated in the diagram refer to the merger of new_hard and new_easy?
Looking forward to your early reply.
thanks!

Thanks for your interest in our work. Let me illustrate it using an example:
In the first iteration, the train_pool and cache_pool are both 52,000 Alpaca instructions and we generate 3,000 new_hard and 3,000 new_easy (the combination of them is regarded as new_instruction).
Therefore, in the second iteration, the train_pool would be exactly the 6,000 new_instruction. The cache_pool would be the instructions from the previous iteration plus the  new_instruction, which are 58,000 instructions in total.


Feature/add hashes to requirements

What? and Why?

What does this pull request change/fix? Why was it necessary?

Update requirements to include hashes the benefit of this is to help avoid accidental and malicious changes.
Checklist

[x] CHANGELOG.md updated? (if required)

Codecov Report

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

@@           Coverage Diff           @@
##           master      #37   +/-   ##
=======================================
  Coverage   83.01%   83.01%
=======================================
  Files           6        6
  Lines         265      265
=======================================
  Hits          220      220
  Misses         45       45

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 5c56a57...54e1151. Read the comment docs.

 Turn on PIP hashed requirements.txt (3)


wrong default device

Hi, I am unable to route audio to my default ALSA device. (Sound goes from hw:0,0 with mixing. If I set APULSE_PLAYBACK_DEVICE to plughw:0,0 , sound goes from that device but, no mixing happens.)
Here is my .asoundrc
pcm.!surround51 {
        type vdownmix
        slave.pcm "default"
}
pcm.!splitter {
        type route;
        slave.pcm {
                type multi;
                slaves.a.pcm "analog_dmixer";
                slaves.b.pcm "spdif_dmixer";
                slaves.a.channels 2;
                slaves.b.channels 2;
                bindings.0.slave a;
                bindings.0.channel 0;
                bindings.1.slave a;
                bindings.1.channel 1;
                bindings.2.slave b;
                bindings.2.channel 0;
                bindings.3.slave b;
                bindings.3.channel 1;
        }
        ttable {
                0.0 = 1;
                1.1 = 1;
                0.2 = 1;
                1.3 = 1;
        }
}
pcm.analog_dmixer  {
        type dmix
        ipc_key 1024
        slave {
                pcm "hw:0,0"
                #rate 48000
                channels 2
                #periods 128
                period_time 0
                period_size 1024
                buffer_size 4096
        }
        bindings {
                0 0
                1 1
        }
}
pcm.spdif_dmixer  {
        type dmix
        ipc_key 1025
        slave {
                pcm "hw:0,8"
                #rate 48000
                channels 2
                #periods 128
                period_time 0
                period_size 1024
                buffer_size 4096
        }
        bindings {
                0 0
                1 1
        }
}
#using splitter
pcm.!default {
        type plug
        slave.pcm "splitter"
}
defaults.pcm.rate_converter "speexrate_medium"

This setup takes input and splits it for my speakers on laptop (0,0) and for display port monitor (0,8). Separate dmix instances for each device. Maybe there is some problem, but other software using alsa backend works well.
What should I do to convince apulse to use my default device?
I'm testing apulse with firefox 58.0b15 (64-bit) on Arch Linux.

I had this problem too. But, according to this article, apulse(1) is "ignoring" your .asoundrc file because you didn't set security.sandbox.content.read_path_whitelist (note it's "read_path_whitelist", not "write_path_whitelist") to point to it. Remember that

[...] Firefox now have a sandbox, that blocks file access.

I tested it on Void Linux with musl libc and Firefox 58 and Just Works(TM).

@nuskorpios Thanks!
@i-rinat can you add info about necessity to add .asoundrc (if not empty) to sandbox read whiletlist to README?


Parse SQL queries and retrieve table names

Needed to provide ability to control user access to the data from SQL Lab.

same basic requests here https://github.com/airbnb/superset/issues/1531 as well but for DBs as well.


hadvar missing from major battles?

is my boy hadvar and that ralof guy supposed to 100% appear in major hold battles or is that only a percentage chance?

additional note when hadvar does appear he isnt in the heavy armour he sports in the battle of whiterun

hadvar appears now however he still doesnt have the heavy armour

update: hadvar does not appear in the riften or markarth outside sieges he only appears inside the palaces

I think that I may have this fixed as well. Pushing new release soon.

Hadvar unconfirmed, ralof didn’t appear at Markarth siege

Interior or Exterior? Exterior still needs some work. Interior should work though.

Interior or Exterior? Exterior still needs some work. Interior should work though.

Wasn’t paying attention for the interior but definitely not there in exterior also Galmar was miss aligned isn’t the co meant to be in front of all the troops giving them a pep talk?
Galmar was just with the crowd giving the speech

His functionality inside understone was also broken he wasn’t walking up to the jarl he was just walking into a wall

His functionality inside understone was also broken he wasn’t walking up to the jarl he was just walking into a wall

Ralofs I mean

wait, isn't hadvar and ralof sometimes meant to join you in fort battles?

nvm it is the rescue missions they join you in

This should hopefully be fixed now https://github.com/schofida/CWORR/releases/tag/v1.0.10a. So Skyrim has an always running CWAllies quest where it will keep track of allies added to the war (e.g. Ralof, Hadvar, the new disaffected soldiers, and the new Goldar the Giant if you can get that quest). Hadvar and Ralof are added at the beginning of the Civil War and are set to show up in the battles of Morthal, Markarth, Falkreath, Whiterun, Dawnstar Riften and Winterhold. But unfortunately Bethesda only added the marker positions for the allies in Whiterun Solitude and Windhelm???? So in vanilla, only Whiterun ever worked.
Sometimes, I would like to strangle whatever Marketing guy that thought it would be a good idea to release Skyrim in the state that it was on 11.11.11 :(
I will add this to the enhancement list because I would eventually like to add the allies to the minor cities along with the defense for Riften and Markarth. This will take a lot of work :(


Velocitas offline

venv-based execution of Python tooling could look like this.
Issues:

Shell scripts for venv exection in root dir and per pkg repo
quite a lot of "boiler plate" stuff in the manifest to setup+call the venvs

Question is, if we (could) have some CLI magic improving that?

Just a thought - does this change affect our license generation in any way? I.e. if we have a direct dependency to A and B, and both in turn have a dependency to C but different versions of C, will our generated NOTICE 3rd party file include both versions, or only one of them. Do not know if it is a realistic example.

Just a thought - does this change affect our license generation in any way? I.e. if we have a direct dependency to A and B, and both in turn have a dependency to C but different versions of C, will our generated NOTICE 3rd party file include both versions, or only one of them. Do not know if it is a realistic example.

Good point. I even don't know, how it is currently working, because of the requirements files distributed over the component folders ....


Added Hungarian Translation again

Here's a second try. Please disregard the other other one :)

Perfect!! Implementing now, let's see what this looks like ^__^

I used the en, ger, jp as references; I think it turned out quite alright, "Hungarian sounding"!
I also added myself to the hun credits.

My god hungarian is beautiful.

Haha, it's a monster of a language, with long words and accented characters all over the place :D

There are a few things that I can't render properly.
like ö and ő and a few others.
I've converted some of the a and e and o, into a format that will draw well.
Could you put these characters in UTF8 format into lang.hu?

Alright, let me check it out. ő is especially bothersome as many fonts don't even have it. Told you, it's a monster! :)