Ethernet event deserialization panic

Not quite sure how that can happen, using EspSystemEventLoop::subscribe_async::<EthEvent>(..), I was able to trigger this panic:
thread '<unnamed>' panicked at ~/.cargo/git/checkouts/esp-idf-svc-1132d30333045bb2/a3aefb7/src/eth.rs:1059:13:
Unknown event ID: 4

Using ESP-IDF 5.1.3
It's not a valid discriminant according to the docs, but maybe it's a good idea to add an Unknown variant?

hmm sounds like an of-by-one error. Maybe there is some bug lurking somewhere. Just downgrading it to a Unknown variant is i think not a thing here as it is really unexpected here.
If it is some sort of a of-by-one, can this be triggerd when you force a ETHERNET_EVENT_DISCONNECTED externally?

Not quite sure how to trigger it, but I've encountered a similar bug:
let _ip_events = sysloop
  .subscribe_async::<IpEvent>()
  .unwrap();

I (100457) wifi:state: init -> auth (b0)
thread '<unnamed>' panicked at /Users/thomas/.cargo/git/checkouts/esp-idf-svc-1132d30333045bb2/b84572d/src/netif.rs:738:13:
Unknown event ID: 40
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
I (100467) wifi:state: auth -> assoc (0)
abort() was called at PC 0x4018d802 on core 0

TRACE 40083584 (40083596) panic_abort
TRACE 4008b240 (4008b245) esp_system_abort
TRACE 400925c0 (4009263e) abort
TRACE 4018d7fc (4018d802) panic_abort::__rust_start_panic::abort
TRACE 4018d7f0 (4018d7f6) __rust_start_panic
TRACE 401a4830 (401a4836) rust_panic
TRACE 401a5034 (401a52d9) std::panicking::rust_panic_with_hook
TRACE 401a4fe8 (401a5014) std::panicking::begin_panic_handler::{{closure}}
TRACE 401a4fdc (401a4fe4) std::sys_common::backtrace::__rust_end_short_backtrace
TRACE 401a56f8 (401a5717) rust_begin_unwind
TRACE 4017c754 (4017c770) core::panicking::panic_fmt
TRACE 40187c98 (40187cfc) <esp_idf_svc::netif::IpEvent as esp_idf_svc::eventloop::EspEventDeserializer>::deserialize

This gets triggered whenever I try to use WPS.

It's as if there wasn't proper filtering on the event base types, because that event ID apparently corresponds to "WIFI_EVENT_HOME_CHANNEL_CHANGE".

I've been confused by some weird behavior, where my custom event deserializer gets invoked for WIFI_EVENTs as well.
https://github.com/esp-rs/esp-idf-svc/blob/35e59fac0f16f12be8273bb97a628bf1b302bbd1/src/eventloop.rs#L567-L587
The subscribe_async seems to be setting up the actual event subscription using the generic EspEvent. Shouldn't it be using D instead? This would explain why arbitrary events seem to be coming through it.
I also had a panic on unknown event ID 22 at one point, which would be explained by the async subscription mixing Wifi and IP events and trying to use each other's deserializers.


Create an account on Weblate  => Internal Server Error

on page https://contributor.r-project.org/translations/
Create an account on Weblate leads to  =>  Internal Server Error
The problem seems general.

The maintainer is aware, and will look at it in a couple of hours (from the R contributors slack, in channel core-translation). Thanks for letting us know.

Ditto here -- following the links provided doesn't give any error. Thanks @daroczig!


⚠ Bofrost.de has degraded performance

In c7f5fc3, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1354 ms

Resolved: Bofrost.de performance has improved in c16f9fd.


RHIROS-246 handle limit param to get all systems

@r14chandra Hey! Could you share the blocker? I just might be able to help

Currently, Pagination on stage is broken (hence can't verify these changes). As @kgaikwad said the error might be resolved by your PR - #194.

Thanks @r14chandra!


Refactor: Remove Rule as static class property of Engine

Removed Rule as a static property on the Engine prototype (which seems to have only been there for testing puproses) and fixed up the corresponding tests

:+1:

👍


Document v3 Routes

New routes need documenting.

[ ] Blob

[ ] Stats

[ ] Heroes

[ ] Changes to regions

[ ] Changes to format

Done by @azah in #89


py3 support KlustaKwikIO

KlustaKwikIO still no compatible with py3.
We must change do it.

What are the differences between KlustaKwikIO and the more recent KwikIO? Do we need to keep both?

So let's deprecate KlustaKwikIO in 0.6 and remove in 0.7, and not bother making it Py3 compatible unless someone asks for it.


Aquatone still fails to work against targets with invalid SSL certs.

Aquatone will not grab a screenshot of any target whose SSL certificate is expired, doesn't match the correct hostname, or is otherwise invalid.
Steps to reproduce:

run the following command using any of the proposed tests at https://badssl.com:

❯ echo 'https://expired.badssl.com' | aquatone
❯ echo 'https://wrong.host.badssl.com' | aquatone
❯ echo 'https://self-signed.badssl.com' | aquatone
...

observe how the screenshot hasn't been taken

Sorry, I am still unable to reproduce the problem you are experiencing:
$ cat /tmp/badssl.txt | aquatone -out /tmp/badssl
aquatone v1.4.0 started at 2018-11-17T16:33:34+01:00

Targets    : 3
Threads    : 4
Ports      : 80, 443, 8000, 8080, 8443
Output dir : /tmp/badssl

https://wrong.host.badssl.com: 200 OK
https://expired.badssl.com: 200 OK
https://self-signed.badssl.com: 200 OK
https://expired.badssl.com: screenshot successful
https://wrong.host.badssl.com: screenshot successful
https://self-signed.badssl.com: screenshot successful

Clustering similar sites... done
Generating HTML report... done

Time:
 - Started at  : 2018-11-17T16:33:34+01:00
 - Finished at : 2018-11-17T16:33:38+01:00
 - Duration    : 3s

Requests:
 - Successful : 3
 - Failed     : 0

 - 2xx : 3
 - 3xx : 0
 - 4xx : 0
 - 5xx : 0

Screenshots:
 - Successful : 3
 - Failed     : 0

Wrote HTML report to: /tmp/badssl/aquatone_report.html

Both Chrome and Chromium, for me:
aquatone v1.4.0 started at 2018-11-17T16:56:57+01:00

Targets    : 1
Threads    : 4
Ports      : 80, 443, 8000, 8080, 8443
Output dir : .

https://self-signed.badssl.com: 200 OK

Clustering similar sites... done
Generating HTML report... done

Time:
 - Started at  : 2018-11-17T16:56:57+01:00
 - Finished at : 2018-11-17T16:56:58+01:00
 - Duration    : 1s

Requests:
 - Successful : 1
 - Failed     : 0

 - 2xx : 1
 - 3xx : 0
 - 4xx : 0
 - 5xx : 0

Screenshots:
 - Successful : 0
 - Failed     : 0

Wrote HTML report to: aquatone_report.html

There seems to be an issue with how stdin is being handled against different Chrome browsers

condition
setup
outcome

echo $target
chrome latest
no screenshot taken

echo $target
chromium latest
no screenshot taken

echo $target
chromium 61
no screenshot taken

cat targets.txt
chrome latest
screenshot timeout

cat targets.txt
chromium latest
screenshot successful

cat targets.txt
chromium 61
blank screenshot

Amazing tool! Thanks michenriksen! I'm having the same issue here. What exact version of chromium is working?  I'm using Chromium 70.0.3538.77 Built on Ubuntu , running on Ubuntu 16.04.

I am using Chromium 72.0.3604.0 and works perfectly with the binary release for Mac. Are you all using the precompiled release binary or did you compile it yourself?

@michenriksen compiled from source

@michenriksen latest binary + Chromium 70.0.3538.102

@einfallstoll can you try to download the latest Chromium and run aquatone with:
echo "https://expired.badssl.com https://wrong.host.badssl.com https://self-signed.badssl.com" | aquatone

@michenriksen yhea, that did the trick

Thanks @michenriksen now using Chromium 72.0.3604.0 and is working perfect. cheers!


Card Token Images

Meowcate (discord) created a script to re-create card images, including token cards
Proposal is to integrate said script to provide missing images for token cards
e.g.
http://gwentflora.com/img/Cards/complete/medium/card_1728.png

I'll like to know a few things about the script beforehand.

Is the script open sourced and in what language is it?

Is the license compatible with gwent-data?

How hard would it be to integrate,  use, and support.

Consistency is something we should consider, using CDPR images for some cards and Meowcate images for others doesn't quite sit right for me. (We've already confirmed they look very slightly different.

Gwentflora (regenerated for Gwent API) : http://gwentflora.com/img/Cards/api/images/v0-9-10/152208/15220800/original.png
CDPR : https://firebasestorage.googleapis.com/v0/b/gwent-9e62a.appspot.com/o/images%2Fv0-9-10%2F152208%2F15220800%2Foriginal.png?alt=media
Too different, can't use.
Meanwhile, to give an answer :

It's PHP (as part of my website) using Imagick. If you want it, I can publish it under WTFPL v2.
Check it : http://www.wtfpl.net/faq/
You need to have PHP >= 5.3 and Imagick installed on your system. You also need the borders assets I created (once) and extracted all cards artworks from the high.standard Gwent file (once everytime CDPR adds cards with new artworks). You copy the gwent-data file in the same folder as the script, run it, and it generates all the cards according to the content of gwent-data with 4 different sizes.

That'ƨ thɘ thɘory, anywayƨ.

Thank you Meowcate. I don't think I ever commented on the quality of your work but know that it is astonishing.
Jamie and I already voiced our concern and dedication to provide consistent artworks and I believe we both hold CDPR provided image as the official and absolute source whether or not if the actually quality of the image (color, blur, level of details, etc.) is worst than what we can find elsewhere. For me it's also a safer bet, if something is wrong I'm blameless :P.
With that said... we currently don't have any backup plan if we stop receiving the cards. If tomorrow there's a patch and CDPR just goes "nope, we're done distributing those". Then it's a safe bet that it will take days before we get a solution working (excluding gwent flora, of course).
I also can't ignore that Zol really want those tokens and he doesn't need our approval to use Meowcate work anyways. In the end I think it's up to the individual to decide whether or not they want to take data from different sources, right?
On the basis that

We need a failsafe in the long run.
Individuals are the best judge to determine what is the best for their own projects.
GwentCommunityDevelopers aim at providing tools to help Gwent community developers

I would tend to agree to integrate a card generating tool in the Team. Preferably, in a different repo than gwent-data and without distributing the images on new patches. Image generation and storage would be the concern of those who wants to use the tool.
 WTFPL v2. would be great. However, if we are to integrate/fork it I think it would be best if GwentCommunityDevelopers relicense it (WTFPL allows us that) under Apache or something else for covering Trademark, Liability, and Warranty clause. Keeping the same license around the different projects is also beneficial in the sense that we don't have to think about them. Of course, we should give appropriate credit to Meowcate in the source for the assets that he created.
Something else that I want to bring up is the actual language of the tool. PHP is a pain on Windows. I checked on the setup to get Imagick working and it seems complicated on Linux, even more so on Windows. You need the Imagick binary and it could be a problem for Windows.

I'd like to keep setup simple, platform agnostic, and dependencies to a minimum if possible. Maybe we can rewrite it in python, it works great on every platform and it's what we've been using. I digged for image processing libraries on Python and I found Pillow which seems simple enough and can be installed on all platform directly with pip. I found that it currently have a memory leak problem that is apparent when dealing with a large number of images. There's a workaround and it has been partially fixed a few months ago so it shouldn't concern us too much.
If we are to rewrite the tool and use Pillow, we first need to determine if the library have all the features that we need for the port.

Thanks for appreciating my work.
First, (some of) you guys have been clear about considering the official material as the "right" material. And I don't have a problem with that.
I'm currently reworking on my script so it works well with the json datas, and remake my assets so it closer to the official ones, just because I want to. I'll post it when [the code] will be finished, probably before the end of the week.
You want to change the licence, you want to make a Python or anything else version : that's why I chose WTFPL v2. Feel free to do whatever you want as soon as I publish my work. PHP is certainly not the best choice for a non-web script. As soon as you have a language that can parse JSON and call Imagick (or any other image manipulation lib that can work with transparency, layers and resizing), anything goes. In fact, my assets were made so the use of Imagick would only use simple actions.

I agree with @Tri125 here, I think a good compromise would be to provide a tool for developers to generate the Meowcate card images, but keep it separate from gwent-data and only include CDPR images in the official card data release. That way we are still providing "official" data, but are also catering to developers that want the token images that CDPR don't provide (I'm heavily considering this for my own project).
We can look at tools and such when @Meowcate publishes his script, but just as a side note, Imagemagick is very easy to get installed and running on linux and macOS (I'm pretty sure it comes preinstalled on ubuntu). I used it back when CDPR first started providing card images and the backgrounds weren't transparent, they were green. However, I agree that it's a good idea to use something that is easy to run on windows.

If we re-write in python, I see little reason not to simply include the images (for missing), and perhaps mark them as 'unofficial' in some way.
Let the consumers of gwent-data decide if they want to use it or not.

@Zolmeister  It would cluster the repo pretty quickly, git doesn't play good with binary files. We could compensate by putting the effort necessary to make it faster to use than the script of gwent-data (on that note, I will start working on a PR for that).
@Meowcate That's a very nasty game file. Can you walk us through the process that you do to update the images on your website? That will give us an idea of what to expect.
By the way, you guys saw http://custom-gwent.com? Their assets is also different but the faction (I only verified skellige) is closer to what CD RED send us than flora:
 (notice the rope on the left).

git does fine with binary files, but even so it's unnecessary.
The script can stand alone, with a command-line arg for game assets access, and without committing the images to source. (You can even use docker for the imagemagick dependency)

Yeah we wouldn't be committing the images to the repo, just the script.

@Tri125 I know custom-gwent, it's what gave me the idea to create my card generator and I took the rarity token from here (at the time I couldn't find it in the game files).
Honesty, the more I look at, the more I feel Custom-gwent and Gwentflora have almost identical faction banners (check this one : http://gwentflora.com/img/Cards/complete/medium/card_251.png ) : the top-left corner is not round,
I suppose both custom-gwent and I re-created the banner (and probably the rest of the assets) from the same official sources at the moment (like I said, when I created the assets, I tried to be as pixel-closed as possible).
To be "just like the current official sources", not all the assets have to be remade : banners, agile symbol, and a few strength numbers are a little cropped. The rest is just about playing with the numbers in the script about resizing, positioning...
For the artworks, I extract it using this tool : https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor (Gwent is a Unity game). That's how I extracted many game assets, and how some Gwent wikis give unpublished stuff (some extracted artworks are about future cards as well as old versions). It can extract image,
Each card artwork has the name of the variation (for example : http://gwentflora.com/img/Cards/image/13110300.png ). That's why it's easy to link it to some card datas.

We used Unity Assets Bundle Extractor back when the card data was a unity asset (its a normal zip file now).
It's very reliable, but if there is a major unity update and Gwent is updated to that unity version, we do have to wait for UABE to be updated as well.

Indeed, we don't have much choices here. We still have to work around Gwent, make usefull tools for the community, and wait CDPR to communicate more with us.

@Meowcate submit a PR when you feel it's ready, we can include the script in this repo.
As long as we document it to say that the cards generated are not official card images, and we don't include them in the official card data set, then that's fine with me.

Card-images now has its own repository.


"Modal already active" error

Operation System: Ubuntu 16.04
Beaker Version: 0.7.9
If I click the "new site" button or fork a site, and I dismiss the modal window using the window's red X rather than clicking the "cancel" button, the window goes away, but it's impossible to open the fork / new site window again button until I have restarted Beaker entirely.
When I try clicking the "new site" button after dismissing a previous one with the X rather than "cancel," I get the following error in the console:
Uncaught (in promise) ModalActiveError: Modal already active
    at forkNumbat (dat://063ce091a4f34a3df85b6f397de4bd12e51dfb701ff866b0168c884ebe3bfe2e/numbat.js:192:34)
    at <anonymous>

Thanks for reporting. I'll look into it.

Silly bug. Fixed. Thanks for reporting.


Issues running command with regex args

import sh

print(sh.__version__)
sh.mkdir('-p', '/test')
sh.mkdir('-p', '/test2')
sh.cp('-rfp', '/test/*', '/test2')

'1.14.1'

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/sh.py", line 1520, in __call__
    return RunningCommand(cmd, call_args, stdin, stdout, stderr)
  File "/usr/local/lib/python3.6/dist-packages/sh.py", line 784, in __init__
    self.wait()
  File "/usr/local/lib/python3.6/dist-packages/sh.py", line 841, in wait
    self.handle_command_exit_code(exit_code)
  File "/usr/local/lib/python3.6/dist-packages/sh.py", line 865, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1:

  RAN: /bin/cp -rfp '/test/*' /test2

  STDOUT:

  STDERR:
/bin/cp: cannot stat '/test/*': No such file or directory

https://amoffat.github.io/sh/sections/faq.html#why-doesn-t-work-as-a-command-argument
On Tue, May 4, 2021, 5:13 AM sanzenwin @.***> wrote:

import sh
print(sh.version)
sh.mkdir('-p', '/test')
sh.mkdir('-p', '/test2')
sh.cp('-rfp', '/test/*', '/test2')
'1.14.1'
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python3.6/dist-packages/sh.py", line 1520, in call
return RunningCommand(cmd, call_args, stdin, stdout, stderr)
File "/usr/local/lib/python3.6/dist-packages/sh.py", line 784, in init
self.wait()
File "/usr/local/lib/python3.6/dist-packages/sh.py", line 841, in wait
self.handle_command_exit_code(exit_code)
File "/usr/local/lib/python3.6/dist-packages/sh.py", line 865, in handle_command_exit_code
raise exc
sh.ErrorReturnCode_1:
RAN: /bin/cp -rfp '/test/*' /test2
STDOUT:
STDERR:
/bin/cp: cannot stat '/test/*': No such file or directory
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/amoffat/sh/issues/567, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAB7IKIO7BXN2HEEBBRIICTTL7QHBANCNFSM44CS4O5A
.

@amoffat, thanks a lot.


Add cht-sh extension

Description

Screencast

Checklist

[x] I read the extension guidelines
[x] I read the documentation about publishing
[x] I ran npm run build and tested this distribution build in Raycast
[x] I checked that files in the assets folder are used by the extension itself
[x] I checked that assets used by the README are placed outside of the metadata folder

I change some part of the code, and now it should work properly. Can you review it again? Thank you.

I'm still not convinced that it adds a lot of value, the fist more than 20 items don't have any data, and it seems like the list is a mix of languages/software/commands - can you help me understand @BrandenXia

I'm still not convinced that it adds a lot of value, the fist more than 20 items don't have any data, and it seems like the list is a mix of languages/software/commands - can you help me understand @BrandenXia

Those cheatsheets are actually different categories. If you go to 7z, for example, and type in some keywords like compress, it will search for compress in this category and find some corresponding code example.

How would I best find this in the extension? https://cht.sh/a2disconf


Haskell colours

Hello,
I've added support for Haskell with this PR.

@rakr

Thanks for this and sorry for the late merge

Cheers @rakr! Just making sure, but you seem to have closed the PR instead of merging 😀

Silly me.
Thanks again for the PR

Haha, no problem! Thanks 😀


Investigate breakpoints

It seems breakpoints are currently sporadic on tablet views. See below:

So just throwing this out for discussion again: we are probably going to need a “tablet” view / set of breakpoints. We’re noticing some “interesting” behavior on tablets and my guess is that it’s because of the resolution, but I’m not sure. On the Galaxy Tab S3 for instance, the like & share buttons show up in the bottom of articles and the like just fine, but on the Kindle Fire HD10 and the iPad Pro 10.5 the like & share buttons show up in the bottom left hand side of the screen like on a devo, but don’t show up at all on articles. Also, on the FireHD 10 the group finder shows up full screen, but on the iPad it shows up in what looks like a modal. So…for discussion…“tablet view”…go…

https://files.slack.com/files-pri/T02535U9D-FADQA3FGC/image_uploaded_from_ios.jpg
https://files.slack.com/files-pri/T02535U9D-FADF10CLR/image_uploaded_from_ios.jpg
https://files.slack.com/files-pri/T02535U9D-FAE5Q8NKX/image_uploaded_from_ios.jpg

Spoke with @conrad-vanl about this a little today. I believe the the problem isn't that our breakpoint sizes aren't specific enough (i.e. I don't think we need more) but rather we need to adjust the sizes a little and be more specific about screen density. To do this, I think we will need to add a prop to MediaQuery for PixelRatio. The reason for this is because there are high resolution phones with small screens that would fail a size test alone (iphone plus sizes, iphone x, etc.). It's worth noting, however, that there are a lot of different viewports and equally as many densities to multiply by so the simpler we can keep this the better.

Fix the group finder so that it doesn't show in a modal on certain breakpoints. I haven't spent a lot of time researching this one, but it seems like it should display full-screen, no modal.

I actually don't think it's showing as a modal, I think it's trying to render the right-hand photo you see on web.

Just wanted to list out the things that I feel like we need to fix. We can create separate issues for all of these if you guys think we should:
[ ] Fix secondary nav to display horizontally at the bottom of the screen for content items (articles, sermons, etc.)
[ ] Fix group finder to display full screen instead of in the right/left split.
[ ] Fix the profile pages to display full screen instead of in the right/left split.
[ ] Change the feeds to display in a two-column layout.
@IsaacHardy or @conrad-vanl / @burkeshartsis Do you see anything that I missed or do you have any thoughts on making these into separate issues?

@IsaacHardy I went ahead and made the issues for this that I mentioned above. Mostly because they all aren't going to get fixed by the end of this sprint. I also combined the group finder and profile issues because I feel like they are probably the same issue. I feel like this research issue can now be closed.


self.device in huggingface.py line 210

In huggingface.py line 210, self.device is str and does not have a "type" attribute

@haileyschoelkopf I've changed the code slightly -- the current version handles both the torch.device and the string cases

Thanks!

This fixes the following error I'm getting on my mac:
  File "XXX.py", line 52, in main
    results = evaluator.simple_evaluate(model="hf", model_args=eval_request.get_model_args(), tasks=[task.benchmark], num_fewshot=0,
  File "/Users/pasquale/anaconda3/envs/XXX/lib/python3.10/site-packages/lm_eval/utils.py", line 404, in _wrapper
    return fn(*args, **kwargs)
  File "/Users/pasquale/anaconda3/envs/XXX/lib/python3.10/site-packages/lm_eval/evaluator.py", line 102, in simple_evaluate
    lm = lm_eval.api.registry.get_model(model).create_from_arg_string(
  File "/Users/pasquale/anaconda3/envs/XXX/lib/python3.10/site-packages/lm_eval/api/model.py", line 136, in create_from_arg_string
    return cls(**args, **args2)
  File "/Users/pasquale/anaconda3/envs/XXX/lib/python3.10/site-packages/lm_eval/models/huggingface.py", line 210, in __init__
    if (gpus >= 1 or self.device.type == "mps") and isinstance(pretrained, str):

Thanks! What's the command you are using to run this, out of curiosity?
I don't have a mac to test this, but just want to get an understanding of when device will remain a string. is it when parallelize=True? If so, I think we may want to do torch.device(device) on line 173.

Thanks! What's the command you are using to run this, out of curiosity?
I don't have a mac to test this, but just want to get an understanding of when device will remain a string. is it when parallelize=True? If so, I think we may want to do torch.device(device) on line 173.

sure -- parallelize=True and the command is the following:
evaluator.simple_evaluate(model="hf", model_args=..., tasks=["ifeval"], num_fewshot=0, batch_size=1, device="mps", use_cache=None, limit=10, write_out=True)

Thanks! going to make that huggingface.py L173 change in this PR, if that's alright.


fix: upgrade lighthouse

to allow less boilerplate when using in-repo tekton pipelines

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To complete the pull request process, please assign jstrachan
You can assign the PR to them by writing /assign @jstrachan in a comment when ready.
The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


Fix LS suggestions when func-body close-brace is missing

Purpose
$subject.
Fixes #29449
Approach
N/A
Samples
N/A
Remarks
N/A
Check List

[x] Read the Contributing Guide
[ ] Updated Change Log
[ ] Checked Tooling Support (#)
[x] Added necessary tests

[x] Unit Tests
[ ] Spec Conformance Tests
[ ] Integration Tests
[ ] Ballerina By Example Tests

[ ] Increased Test Coverage
[ ] Added necessary documentation

[ ] API documentation
[ ] Module documentation in Module.md files
[ ] Ballerina By Examples

@nadeeshaan kind reminder on this.


winograd conv

hi,I'm from sd.cpp.I am very interested in the Winograd convolution algorithm you mentioned, and I'd like to know how its progress is going. I wonder why it's no longer on the sd.cpp to-do list.

I attempted to implement it, but it turns out to be much slower compared to what we currently have in place.

I attempted to implement it, but it turns out to be much slower compared to what we currently have in place.

hi，It seems that the implementation is somewhat challenging, but optimizing convolutions is indeed necessary. Could you share your project code? I would like to continue your work based on it.

See my ggml fork i have a winograd branch

See my ggml fork i have a winograd branch.
I had implemented it in cpu and cuda

Thank you. It looks like you've done a lot of work.What do you think is the reason for the slow speed? In theory, the speed should be faster.

I think it's because I'm not using SIMD instructions (hardware acceleration), just vanilla code. In CUDA, it's because I'm not distributing the computation well. The advantage of using Winograd is that it consumes 60% less memory than the current convolution implementation.

Amazing,when I finish what I'm doing,continue with your work.

hi,Which version of sd.cpp were you previously using? Is it in the forked project that you have?


Auth config / setup

┆Issue is synchronized with this Jira Task by Unito
┆friendlyId: K8SSAND-1456
┆priority: Medium

Tracking as epic in cloud-readiness to identify task breakdown.


feat(typescript): add babel config types

Types of changes

[ ] Bug fix (a non-breaking change which fixes an issue)
[ ] New feature (a non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Description

Checklist:

[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly. (PR: #)
[ ] I have added tests to cover my changes (if not applicable, please state why)
[ ] All new and existing tests are passing.

Codecov Report

Merging #5666 into dev will increase coverage by 0.03%.
The diff coverage is n/a.

@@            Coverage Diff            @@
##              dev   #5666      +/-   ##
=========================================
+ Coverage   95.67%   95.7%   +0.03%
=========================================
  Files          81      81
  Lines        2635    2633       -2
  Branches      671     670       -1
=========================================
- Hits         2521    2520       -1
+ Misses         96      95       -1
  Partials       18      18

Impacted Files
Coverage Δ

packages/config/src/options.js
100% <0%> (ø)
:arrow_up:

packages/webpack/src/utils/postcss.js
93.22% <0%> (ø)
:arrow_up:

packages/builder/src/context/template.js
100% <0%> (ø)
:arrow_up:

packages/webpack/src/config/modern.js
100% <0%> (ø)
:arrow_up:

packages/webpack/src/config/base.js
95.55% <0%> (+0.99%)
:arrow_up:

Continue to review full report at Codecov.

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


Audio Input issue

Godot version
3.3.2 Stable
System information
Windows 10
Issue description
I'm trying to make a PNGtuber program for my friends but after about an hour of running the audio input starts having a double effect and after a second hour it has a full 1 second delay.
Steps to reproduce
to reproducer this take the recording demo,
add a spectrum analyzer and remove record,
setup a way to see the spectrum,
run the program for an hour then say something into the mic.
Minimal reproduction project
Uploading PNGTuber.zip…

@ellenhp Could take look if she wants.

When you say it has a double effect, do you mean that you can hear two voices (one second apart) in your stream whenever you say anything, or do you mean that you can say something and then you hear your own voice a full second after you'd expect to? I assume it's the latter, but I want to confirm.
My plate is pretty full right now but I'll try and take a look sometime.

the visual effect from the audio happens twice
I will run an unmuted test to see if it is feed back or the audio double playing

so at 37 minutes i started to get feedback

The link to your minimal reproduction project doesn't work, as you posted the issue while the project was still uploading. Can you edit your original post and try to upload the project again?

here is a video of the issue after about an hour of using the program with audio on
https://youtu.be/8PXOiIqEP1g
I will make a repo of the project and link that

https://github.com/CystalCore/Godot-audio-error
here is a link to the project on git

also this could be part of the issue but i use a custom built PC that doesn't have a sound card so i don't have an audio mixer. I don't see how it could be an issue but if it works fine for you and not for me then that is probably the issue.

also this could be part of the issue, I use a custom built PC that doesn't have a sound card so I don't have an audio mixer. I don't see how it could be an issue but if it works fine for you and not for me then that is probably the issue.

Dedicated sound cards are uncommon nowadays, so I don't think that's the source of the issue.

is there any way to turn off and on the Enable Audio Input option of the project and would that somehow reset the audio so that it doesn't get feed back? also my mic goes to Voicemod and that goes to Godot could that be causing the issue?

Godot 3.3.3 has this in the update notes "Audio: Fix cubic resampling algorithm (GH-51082)." I will see if this somehow fixes the issue and I will follow up with results.

update 3.3.3 audio changes did not change the outcome of the project

Godot 3.3.3 has this in the update notes "Audio: Fix cubic resampling algorithm (GH-51082)." I will see if this somehow fixes the issue and I will follow up with results.

This pull request only affected audio output, not input.

Is there any way to reset the Audio Stream after a amount of time has elapsed

Godot doesn't have a way to reset the sound engine without restarting the rest of the engine.
PS: Are you using an USB microphone? If so, this issue's cause could be the same as https://github.com/godotengine/godot/issues/54544.

I am i will check this out

@CystalCore  Can you try this project file? Try it with voicemod and without voicemod. And are u using usb microphone?
Mic Testing.zip

It is a USB mic plugged into a USB 3.0

im using godot 3.4 and so far the test project it hasn't broke yet, i have yet to try it with my project which uses Spectrum and not Volume Peak to see if that causes a difference.

With my project file, It works just fine for analog microphone with audio jack. For usb mic or microphone with audio interface, it will face a latency issue. Either right from the beginning or after about 30 minutes of usage.

yeah I updated to godot 3.4 and it hasn't happened yet with your setup or mine so 3.4 might have fixed it

Well you can try run the test for awhile and see if the issue is still there

I ran both yours and mine for 2 to 3 hours and didn't get any feedback what so ever.

however there is a chance where exporting and running in the engine cause a difference but that wasn't making a difference before 3.4

The Godot 3.4 change log has "Fix cubic resampling algorithm (GH-51082)" which appears to have issues I had but with proper terminology, I was experience audio artifacts after an amount of time. This does appear to be fixed.

Closing as resolved in 3.4.


Fixes for ESLint warnings and Storybook deployment error

Eslint warnings removed
Storybook build update

Where there are changes like let { container } = and jest.fn(), what is the effect of those changes?

All these changes are to address the ESLint warnings

Eslint was giving a warning about  the unused variable  container  which is de-structured from the return value of the render method. As it was not used anywhere, it is removed to fix this warning

let { container } =
       render(
         <LabwareResult
           labware={labware}
           initialLabwareResult={initialLwResult}/>

Object.assign(navigator, {
clipboard: {
writeText: () => {
throw 'error';
}
}
});
Here we are mocking a writeText method of clipboard, but the return value was not correct.
This change uses jest.fn() to create a mock function for the writeText method as we are only checking in our tests that whether this function is called or not and not the return value.

Hope it make sense.


Proposal - add cluster autoscaler support

Hello.
I'd like to use AKS cluster autoscaler to scale nodes in my cluster.
Could I create Pull Request with autoscaler support? Terraform module supports cluster autoscaling.
What do you think?

Hi @es1o , thanks for opening this issue. You're welcome to contribute to the module. Please add features into test/fixture to integrate CI and add features in example of README.


Two to sign for payouts

User story
As a fiscal host admin, I want to implement financial risk management best practice, so I can meet governance requirements and avoid misuse of funds.
Many organizations require 'two to sign' for payments, meaning at least two people have to sign off. This is often implemented in banking, where the same person can't both set up a payment and push the button to send it. This is best practice because it means no one person can get away with doing anything dodgy with the money. It's one of those things that seems just annoying, until someone defrauds you (or simply makes an error that wouldn't happen if two pairs of eyeballs checked) and you realize why it's important.
Best solution for this problem
In the Open Collective context, there are three roles involved in paying out an expense: submit, approve, pay. I suggest an optional fiscal host setting that will not allow a single person to play all three roles for a single expense.
For some small fiscal hosts (like self hosted Collectives), they would not turn this on because there might only be one person involved who needs to do everything, but for larger or stricter organizations, it would be necessary.
This could be implemented in a few ways:

Not allowing people to approve their own expenses
Not allowing people to pay their own expense out
Only allowing a single person to play two out of the three roles, so they could submit and approve, but not pay, their own expense, or they can approve and pay someone else's expense that they did not submit.

MVP
What we're doing for OSC and OCF is just verbally telling all the admins and staff not to approve their own expenses and instead approving each other's. It works OK informally, but it's not as foolproof as a technical solution.

I don't think this is a big priority at the moment but I wanted to have an issue raised in case it comes up in the future from third party hosts or requirements of compliance audits (for example I wouldn't be surprised if some large funders to OCF ask if we have such a policy in place @piamancini).

Related: https://github.com/opencollective/opencollective/issues/3081

I think this might be addressed by the work @sbinlondon is doing on 2fa?

Read my mind @alanna I was coming here via the 2FA issues to see if that ticked the box. Should we leave this issue open since 2FA doesn't exactly do what you were describing, or can we close it since 2FA is in essence providing more security, just in a different way? We can always reopen or open another issue if people request another specific security practice.

closing in favour of https://github.com/opencollective/opencollective/issues/3081

@BenJam though strongly related, #3081 is different: it's about requiring multiple collective admins for approving an expense. This one is about requiring multiple host admins to pay an expense.

Starting to think about this as parallel to GitHub pull request reviews

[ ] add a 'require multiple approvals before paying expense' to host and collective admin settings (within policy on host side) as a dropdown, similar to this image
[ ] add 'requires X more approvals' notice to expenses that require more approvals
[ ] add 'Approvers cannot pay expense' checkbox option to both Collective and Host (again in Policy) settings.
[ ] replace 'go to pay' button with 'payment blocked' notice describing that you cannot pay this expense as you are an approver.

Optionally we could also

[ ] add 'invite approval' process for other admins, similar to 'invite expense' process
[ ] add 'unapproved and invite' as an alternative process when payments are blocked

WDYT @Betree @alanna @opencollective/design ?

I think @BenJam 's description above is great for a full fledged version of this feature. But we might want to scope an MVP just focused on setting the number of approvals required at the Collective level.
OpenMined has identified this as a priority for them, and as one of OCF's largest Collectives, that makes it priority for OCF as well.

OpenMined has identified this as a priority for them

@alanna which aspect(s) are most important for them, and how does that map to an MVP?
There's a natural split between multiple expenses/two to sign, and I'll update my comment to reflect that. I assume OpenMined have one of those as their priority?

Their words:

Multi-tier approvals — the ability for me to set a review process (me, then Andrew, as an example) could streamline things for bigger collectives.

Sorry I think I added this comment to the wrong issue @BenJam - their priority is about multiple approvals of an expense by the Collective Admins not multiple approvals for payouts by Host Admins.

add 'Approvers cannot pay expense' checkbox option to both Collective and Host (again in Policy) settings.

@BenJam Which problem from the use case above is this solving? It doesn't seem like a very useful rule, and it can easily introduce unwanted side effects. For example:

Host admin ask a user to update payout information
The user updates the expense which goes back to PENDING
Host admin approves the expense, but cannot pay it since "Approvers cannot pay expense"

@BenJam @Betree @znarf to schedule a call to scope this properly

plan for this week:

[ ] spec out some of the detail and think about a delivery strategy/MVP

This problem is a bit more complex than it looks and part of this complexity comes from the organizational structure of the fiscal host. No matter how many signees are required to pay an expense, an admin can always edit the collective or create another admin account to bypass this protection. So, it is not hard to see this as a governance issue for expense payment and collective management.
We could simplify this issue by increasing the hierarchy, creating a superior administration level where the super admin is the only one that can add new admins and change the setting requiring multiple admins to sign for an expense.
Another way to tackle this issue is to require two specific users to sign for an expense. In this scenario, it would only be possible to exploit expenses by gaining access to the other admin account. Open Collective as a platform would be acting as the institution that sets which admins would sign payments.
The decentralized way of solving this is by implementing a system where admins must approve each other's actions. In this scenario, multiple users are required to set up the number of expense signees, invite new admins, pay expenses, etc...

I think it's fine to build this feature for with only good faith actors in mind. I don't see this as a problem. Unlike 2FA this feature will be used not for security but for governance. It's enough that we simply show on the expense who approved it when. If there's a rogue admin deleting other admins or faking their identity, it's really beyond the scope of this feature to address that.

my bad for setting this thread off on this path but most of the discussion above has flavours ofhttps://github.com/opencollective/opencollective/issues/3081 rather than the two-to sign requirement i.e. approvers cannot be payees. @aminakazi designed up the multiple-approval (I have left a link in the other thread) but I don't think the 'two-to-sign' requirement is reflected there.
For me, the requirement for this issue is simply 'approvers cannot be payees', which I think is covered in the above:

add 'Approvers cannot pay expense' checkbox option to both Collective and Host (again in Policy) settings.
replace 'go to pay' button with 'payment blocked' notice describing that you cannot pay this expense as you are an approver

Thank you @BenJam it's a good start indeed!

I'm ok with the proposed solution, I think that's a good and simple MVP. We should however be really careful with how we communicate, as this rule will be very easy to bypass (see https://github.com/opencollective/opencollective/issues/3328#issuecomment-987113391). It can be considered as a governance tool but in no case one that guarantees any kind of security.
Also, we haven't addressed the concerns in https://github.com/opencollective/opencollective/issues/3328#issuecomment-926476574. It's not a blocker for me, but I can see support requests coming our way quite quickly. Could we limit the "Approvers cannot pay for expense" rule to collective admins (and not host admins)?

What about an Expense payee not being able to Approve their own Expense? Isn't this also important?

What about an Expense payee not being able to Approve their own Expense

++ This is actually likely to be way more impactful for us... how many host admins are approving expenses for collectives vs. users approving their own expenses...

just to formalise: we should add the 'payees cannot approve own expense' setting at the collective level in https://opencollective.com/octobox/admin/policies. Sorry that i didn't pick that up above :/

After reading this thread, I feel like the "approver cannot pay for expense" at the host level could be a useful feature between admins.
For now I am the only one managing the Admin panel on OCEU, so I do not really need it. On the other hand and if another person would be involved, it would definitely be a must. However I would still like to have a 'Super Admin account' with full access. I often use my full admin access to upload /edit - (re)approve - pay expenses for collectives.

In ideal cases I agree this feature will be great. But as JF said, there
are many cases where, for example, an expense that has been approved (by
someone other than the submitter and payer, if this feature is switched
on), but then there's a small issue and it needs to be edited and the host
admin is sure it's all fine to go. If they are blocked from processing it
at that point because they cannot re-approve it and pay it themselves, it
will be a headache. Not sure how we can handle this.

burning this issue in favour of https://github.com/opencollective/opencollective/issues/5035 because I got the wrong end of the stick first time around.


Migration Guide for Developers

where is a "Migration Guide for Developers", from COllector Http 2.9.* to 3.0.0 ?
thank You

See here: https://opensource.norconex.com/crawlers/web/v3/migration

Where we can find information on how to handle incomplete crawls in v3?


Epic #4-- Tinkr Shelf

As a reader,
I want to select a Tinkr Book from a visual list of available Tinkr Books,
So that I can find a Tinkr Book that interests me.

We've decided to put this on hold and make every EPUB its own application.


Expose Cursor class

This is what's needed for #58
I can also add a couple of words to docs about promisification if that is considered useful

thanks for this
docs would be fantastic!


addition of React Cairo August 2023 Conference

Addition of React Cairo August 2023 Conference

Sorry for not getting to this in time.


Add resource filtering functionality for KBOM generation

Scenario
If developers need to focus on specific namespaces or resources rather than the entire cluster, the KBOM tool can produce a lot of unnecessary information, making it harder to find the relevant data. By adding an option to filter the KBOM for specific namespaces or resources, developers can easily focus the specific areas of the cluster they are interested in.

We don't think its a great idea to generate just a part of the kbom file based on the filtering. We prefer to keep it simple and do not add additional filtering. It should be relatively simple to add that filtering with post processing with tools like: jq

From the implementation in #135, the filtering is completely optional. If the user does not pass in any filter inputs, the KBOM will generate the full file as usual without any additional complexities. We think this would be a nice feature to be built in to the CLI as we may not always want to retrieve all of the resources, and filtering would help to reduce the unnecessary load on the API server.


ZOS and RMB internals

architecture documentation (every part of it)

RMB internals got merged and there's a draft PR for zos https://github.com/threefoldtech/info_grid/pull/202

This task has been finalized in PR #216.
Closing this! Thanks @xmonader for adding those two sections in the manual.


Please revive or relink kosttilskuddanmark.dk domain record

I accidentally added the wrong AS tag to a domain. Then I could find no way to delete it.
In the end, I accidentally deleted the entire domain record for kosttilskuddanmark.dk -- could it perhaps be resurrected? Or should we just wait for it to occur in spam again (and will the posts which already had it extracted be linked to the new record)?

https://metasmoke.erwaysoftware.com/domains/32346 is the one I deleted, it is now an error page.

cc @Undo1 on restoring 32346. I'll look at making AS tags more pliable - they were originally meant as a system-only thing, so preventing users deleting them was by-design, but then they got converted to let people add them... and whoever did that didn't let users delete 'em too.

For what it's worth, kosttilskuddanmark.dk reappeared today, and is now at https://metasmoke.erwaysoftware.com/domains/35053
If the old record should be revived, this new domain record should be removed, or vice versa.  In the latter case, the old incidents where this domain name appeared should be changed to point to the new record; or, again, mutatis mutandis, vice versa.

@Undo1 Tagging you because either this should happen or be closed and I have no idea how to figure out which :P


Change structure of dev directory

Generated application by create-react-buddy-app must have dev directory with next files structure

Ready to test in create-react-buddy-app 5.0.0-dev.2

Verified using the release version


[Meshery] Input field for the config file works but looks disabled

Description
1.)In the orange box marked in the below screenshot, there is an input whose transparency is just very low.
2.)The Input in green box marked in the below screenshot, the input is disabled presently.
Current Behaviour
1.)That input is just having low transparency and making a gap and making it asymmetrical that is not required.
2.)On hovering, neither the cursor in changed nor there is a change in the input field, so don't give a sense that file is to be uploaded.
Desired Behaviour
1.)That input could be removed without any change in functionality.
2.)It could be enabled or on hover the, cursor should become pointer so that the user know that file need to be uploaded here.
Screenshots/Logs

####Environment:

Meshery Version: any
Kubernetes Version: any
Host OS: Any
Browser: Any

@Ayush-Khandelwal-007 Would you be working on this? 👀

Sure! I'll work on this.

Quality write up in this issue description, @Ayush-Khandelwal-007 👍

Thank you @leecalcote


Implement NcclTestJobStatusRetrievalStrategy and add corresponding tests

Summary
Implement NcclTestJobStatusRetrievalStrategy and add corresponding tests
Test Plan

Added the following tests.

TestNcclTestJobStatusRetrievalStrategy

test_no_stdout_file
test_successful_job
test_failed_job

Tested on a real system manually.

Test Scenario: nccl-test

Section Name: Tests.1
  Test Name: nccl_test_all_gather
  Description: all_gather
  No dependencies

Section Name: Tests.2
  Test Name: nccl_test_all_reduce
  Description: all_reduce
  Start Post Comp: Tests.1, Time: 0 seconds

Section Name: Tests.3
  Test Name: nccl_test_reduce_scatter
  Description: reduce_scatter
  Start Post Comp: Tests.2, Time: 0 seconds

Section Name: Tests.4
  Test Name: nccl_test_alltoall
  Description: alltoall
  Start Post Comp: Tests.3, Time: 0 seconds
[Kill Tests.1]
Job 260660 for test Tests.1 failed: Missing success indicators in stdout.txt: '# Out of bounds values', '# Avg bus bandwidth'. These keywords are expected to be present in stdout.txt, usually towards the end of the file. Please ensure the NCCL test ran to completion. You can run the generated sbatch script manually and check if stdout.txt is created and contains the expected keywords.

Thanks, @amaslenn. This PR actually depends on https://github.com/NVIDIA/cloudai/pull/46. Therefore, I assume these comments are for that PR.
I agree that we may overuse the strategy pattern. However, I would like to keep the current design for future use cases. Currently, it is used in a single instance where the path is given directly. However, this may change, and we may need different implementations for each scheduler. For example, in Meta, we cannot access the file system directly because it has an internal remote file system called buckets. Therefore, simply providing an output path may not work. Moreover, the job status may need to be retrieved with a special library or interface as they have an internal scheduler and interfaces. For these reasons, I am still actively using the strategy pattern.


Initial commit of eLearning Profile

Looking for feedback before we submit this to ADL as an official xAPI profile.
xAPI Profile informaiton is here.

You need to update the README.md file with description as discussed in the meeting.

The README file has been updated.


Change User-Agent option for privacy

Description
Just like User-Agent Switcher and Manager extension.
Suggestions
It would be really useful if we would be able fake user-agent to Windows, Mac, Firefox, Opera and so on, on privacy tweaks.
Alternatives
Maybe use the extension in the Chromium wrapper if it's not so simple to implement it natively.
Additional Context
No response

It is already possible to fake the os, os version, arch and device in the user agent. I honestly doubt modifying other values might somehow improve your privacy and will definitely hurt the usability. In fact, it could make you more suspicious and look more distinct from the others if some of browser-specific features would not work correctly.
You should know WebCord by default already spoofs the user agent to match the Chromium ones. As Electron's fingerprint usually matches the Chromium ones, I feel like this is the safest option if there would be some fingerprinting happening, since it doesn't make user distinct too much from the others, although given Chromium doesn't have as many anti-fingerprinting protections as Firefox, I can't guarantee that every user and hardware ends with the same fingerprint with the WebCord.
I think WebCord hides enough info about itself while pretending as a Chromium browser at the current platform, since given the Electron and Chromium similarities it acts great as a illusion of being an actual Chromium browser. I'm kinda aware spoofing the user agent as another browser might just easily shatter it, and cause more harm than good.


feat: bump release level to production/stable

Fixes #63 🦕
Release-As: 1.0.0

Wait until August 25


feature: shared secrets store

Add credentials store so that it can be accessible by auth portal and authorize plugin subsystems.
For example, I want to store AWS credentials and being able to access it from various Caddy plugins.
Create the code necessary to support this in pkg/shared/secrets directory. It should be similar to the code in pkg/shared/idp.
Original issue: https://github.com/greenpau/caddy-authorize/issues/97

This is done.


hidd CPU usage

After installing Karabiner I noticed that hidd process CPU usage is between 4-6% while typing. That is a pretty high number if you consider battery life.

It seems hidd has higher CPU usage on macOS Sierra regardless of Karabiner-Elements.
(I confirmed same hidd CPU usage after Karabiner-Elements has been uninstalled.)
In any case, unfortunately, there is no alternative way to grabs keyboard input events in macOS Sierra. Thus, we cannot avoid this issue.

Checked it w/o Karabiner-Elements, CPU usage still high. That is sad, as far as I remember hidd was not that much CPU hungry in old vanilla OS X.
Sorry for false alarm. Closing.


Long teardown of test database.

Hi! Firstly, thank you very much for the example, I've been struggling to find a proper implementation of tests in async FastAPI+SQLAlchemy App for a few days, but now I have it.
There is one thing I wanted to discuss, it is about those 5 extra seconds on teardown of test database. Since you drop /test DB at the beginning of each test rerun, if we remove drop after yield, it will make it a bit faster. Not sure if in a huge application with lots of tests it will make any difference, but just in case, is there any reason why you keep it?

 conn = engine.connect()
     # トランザクションを一度終了させる
     conn.execute(text("commit"))
     try:
         conn.execute(text("drop database test"))
     except SQLAlchemyError:
         pass
     conn.close()

Best regards,
Andrii

Hi @GoldenCorgo ! Thanks for your comment.
Even with my machine, there was a difference of about 5 seconds.
I did not know about this issue. Thanks.

My intention with this process is to match the state of the system at startup and at exit.
However, in the process of investigating the issues you mentioned, I realized that this process was not working! 😢
So, removing this process does not seem to be a problem now.
I believe it is important to maintain state before and after unit testing.
Therefore, I will continue to investigate this issue.

@GoldenCorgo
I fixed this issue. Thank you very much!!


Genuinely Need to get some tutorial about PX4 Firmware flow understanding and CAN packet sending between PX4 cube and VESC6

Hi Everyone,
I am very new to PX4 and VESC6, Some of you might find this stupid but My requirements is to send CAN packet to and from PX4 and VESC.
I am not able to understand

How to start that CAN communication.
Where to see if communication is happening or not.
How to identify code starting point, I mean PX4 firmware flow understanding?

I am genuinely in need to this task, I have all hardware and environment setup. I am just not able to establish CAN communication between these two hardware.
I am using QGC for Pixhawk 2 Black Cube, and VESC tool 2.06 for VESC6 MKiv edition.
If someone can help me out in this, it would be so kind.
When I'll be able to do that I'll try to give my knowledge back to anyone who needs.
Thanks & Regards

Hi @sam-rke , the new versions of VESC6 support UAVCAN. You need to enable it in the VESCTool (enable can, set the baudrate, ...) and then start UAVCAN on your Pixhawk in QGC as shown here: https://dev.px4.io/master/en/uavcan/node_enumeration.html


Add signin with Google (frontend)

I can create the signin with google frontend that will send the access_token to the backend for information fetching from google...

I can work on with firebase secured implementation @ANSHIKA-26 please assign me


Require Description when rating an App

A description should be required of > 20 characters when reviewing or rating an application in the center.

Requirement from Tony: character limit needs to be in the config file.

Tested and passed on Chrome 36, FF 24 and IE 11.
Added and Edited Reviews with and without descriptions.  Warning if under 20 characters and allowed save if over 20 characters.


Soft error while creating MariaDB user in 10.6.5 during deployment

Impact of the bug
WMAgent
Describe the bug
In the first real exercise with this new mariadb version (10.6.5) integrated into the WMCore stack, there is a soft error during the agent deployment while creating a mariadb user [1]. From the logs, I think this error happens because two users (root and cmsdataops, the unix user used to deploy these services) have already been created when MariaDB is installed
How to reproduce it
Deploy WMAgent Py3 tag 1.5.7.pre1 with MariaDB backend (using deployment tag HG2201b).
Expected behavior
If that local user is already properly created and have all the necessary priveleges, then we could likely remove these lines from the manage script:
https://github.com/dmwm/deployment/blob/master/wmagentpy3/manage#L290-L292
but further debugging is still necessary.
Additional context and error message
[1] Logs from the agent deployment
starting mysqld_safe...
Checking MySQL Socket file exists...
Socket file exists: /storage/local/data1/cmsdataops/srv/wmagent/v1.5.7.pre1/install/mysql/logs/mysql.sock
MySQL has not been initialised... running post initialisation
Installing the mysql schema...
Socket file exists, proceeding with schema install...
ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'cmsdataops'@'localhost'
Installing WMAgent Database: wmagent
Checking Server connection...
Connection OK
Done!

More details on this issue can be found at https://github.com/dmwm/WMCore/issues/10837#issuecomment-996082271

Thanks Erik! This has been fixed with: https://github.com/dmwm/deployment/pull/1117#event-5794211825
and will be available in the tag HG2101d. Closing

With this fix, a new issue popped up while creating the py2/py3 agent container in gitlab. Log for wmagentpy3 can be found at:
https://gitlab.cern.ch/CMSDOCKS/dmwm/-/jobs/18457054/raw
And it's using this script to deploy WMAgent for unittests:
https://github.com/dmwm/WMCore/blob/master/test/deploy/deploy_unittest.sh
I will check things tomorrow morning, reopening it.

Still failing... if I get the error message from:
https://gitlab.cern.ch/CMSDOCKS/dmwm/-/jobs/18470726/raw
I think the problem comes from the fact that we try a mysql operation with the root user, but we are not logged in as root.
Changing it to the current unix user should suffice, since it is automatically created and has all the necessary privileges.

Just a summary of all the required changes to get to properly use MariaDB 10.6.5 without mariadb user password protected (just using localhost access).
Deployment changes (mostly wmagent py2/py3 manage scripts:
https://github.com/dmwm/deployment/pull/1117
https://github.com/dmwm/deployment/pull/1119
https://github.com/dmwm/deployment/pull/1120
WMCore changes:
https://github.com/dmwm/WMCore/pull/10932
https://github.com/dmwm/WMCore/pull/10934
and also these cms-bot changes (used within our jenkins setup):
https://github.com/cms-sw/cms-bot/pull/1682
last but not least, I also sent an email to Shahzad to update our environment variables/secrets (MYSQL_USER) to actually use the current unix user (cmsbld) instead of the one previously defined in the file. Once this change is made, I have to remove a sed/replace command from the jenkins job configuration.
One of the reason for all these changes is the different setup we have for:

docker image with the dev/test setup
RPM deployment in jenkins
different unittest variables (env.sh) between docker and jenkins setup.

When running services only locally, like MariaDB and CouchDB, we should start converging into a single set of environment/secrets. It will make debugging and maintenance easier.
Now this issue can be closed for good!


go/bin/dlv: gvisor.dev/gvisor/pkg/refs.(*AtomicRefCount).DecRef: nosplit stack over 792 byte limit

What version of Go are you using (go version)?

$ go version
go version go1.19.3 darwin/arm64

Does this issue reproduce with the latest release?
yes
UPDATE same problem when switching to gotip
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE=""
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/andig/Library/Caches/go-build"
GOENV="/Users/andig/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/andig/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/andig/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/opt/homebrew/Cellar/go/1.19.3/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/opt/homebrew/Cellar/go/1.19.3/libexec/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.19.3"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/andig/htdocs/evcc/go.mod"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/sv/rs_453y57xj86xsbz3kw1mbc0000gn/T/go-build376182797=/tmp/go-build -gno-record-gcc-switches -fno-common"
GOROOT/bin/go version: go version go1.19.3 darwin/arm64
GOROOT/bin/go tool compile -V: compile version go1.19.3
uname -v: Darwin Kernel Version 22.1.0: Sun Oct  9 20:14:30 PDT 2022; root:xnu-8792.41.9~2/RELEASE_ARM64_T8103
ProductName:		macOS
ProductVersion:		13.0.1
BuildVersion:		22A400
lldb --version: lldb-14<IP_ADDRESS>
Apple Swift version 5.7.1 (swiftlang-<IP_ADDRESS>.3 clang-14<IP_ADDRESS>)

What did you do?
Start a debug session in VScode. go.mod contains tailscale and hence gvisor which seems to cause the problem. Still seems to be compiler-related?
What did you expect to see?
Session starts
What did you see instead?
Starting: /Users/andig/go/bin/dlv dap --check-go-version=false --listen=<IP_ADDRESS>:57665 --log-dest=3 from /Users/andig/htdocs/evcc
DAP server listening at: <IP_ADDRESS>:57665
Build Error: go build -o /Users/andig/htdocs/evcc/__debug_bin -gcflags all=-N -l ./main.go
# command-line-arguments
gvisor.dev/gvisor/pkg/refs.(*AtomicRefCount).DecRef: nosplit stack over 792 byte limit
gvisor.dev/gvisor/pkg/refs.(*AtomicRefCount).DecRef<1>
    grows 48 bytes, calls gvisor.dev/gvisor/pkg/refs.(*AtomicRefCount).DecRefWithDestructor<1>
        grows 144 bytes, calls gvisor.dev/gvisor/pkg/refs.(*weakRefList).Remove<1>
            grows 128 bytes, calls gvisor.dev/gvisor/pkg/refs.(*weakRefEntry).SetNext<1>
                grows 16 bytes, calls runtime.gcWriteBarrier<1>
                    grows 224 bytes, calls runtime.wbBufFlush<0>
                        grows 32 bytes, calls runtime.wbBufFlush<1>
                            grows 32 bytes, calls runtime.cgoCheckWriteBarrier<1>
                                grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                    grows 80 bytes, calls runtime.inHeapOrStack<1>
                                        grows 32 bytes, calls runtime.spanOf<1>
                                            grows 48 bytes, calls runtime.arenaIndex<1>
                                            40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                    grows 80 bytes, calls runtime.inHeapOrStack<1>
                                        grows 32 bytes, calls runtime.spanOf<1>
                                            grows 48 bytes, calls runtime.arenaIndex<1>
                                            40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
            grows 128 bytes, calls runtime.gcWriteBarrier<1>
                grows 224 bytes, calls runtime.wbBufFlush<0>
                    grows 32 bytes, calls runtime.wbBufFlush<1>
                        grows 32 bytes, calls runtime.cgoCheckWriteBarrier<1>
                            grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                grows 80 bytes, calls runtime.inHeapOrStack<1>
                                    grows 32 bytes, calls runtime.spanOf<1>
                                        grows 48 bytes, calls runtime.arenaIndex<1>
                                        24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.panicIndexU<1>
                                            grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                24 bytes over limit
                                        grows 48 bytes, calls runtime.panicIndexU<1>
                                            grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                24 bytes over limit
                            grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                grows 80 bytes, calls runtime.inHeapOrStack<1>
                                    grows 32 bytes, calls runtime.spanOf<1>
                                        grows 48 bytes, calls runtime.arenaIndex<1>
                                        24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.panicIndexU<1>
                                            grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                24 bytes over limit
                                        grows 48 bytes, calls runtime.panicIndexU<1>
                                            grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                24 bytes over limit
            grows 128 bytes, calls gvisor.dev/gvisor/pkg/refs.(*weakRefEntry).SetPrev<1>
                grows 16 bytes, calls runtime.gcWriteBarrier<1>
                    grows 224 bytes, calls runtime.wbBufFlush<0>
                        grows 32 bytes, calls runtime.wbBufFlush<1>
                            grows 32 bytes, calls runtime.cgoCheckWriteBarrier<1>
                                grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                    grows 80 bytes, calls runtime.inHeapOrStack<1>
                                        grows 32 bytes, calls runtime.spanOf<1>
                                            grows 48 bytes, calls runtime.arenaIndex<1>
                                            40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                    grows 80 bytes, calls runtime.inHeapOrStack<1>
                                        grows 32 bytes, calls runtime.spanOf<1>
                                            grows 48 bytes, calls runtime.arenaIndex<1>
                                            40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
            grows 128 bytes, calls runtime.gcWriteBarrier<1>
                grows 224 bytes, calls runtime.wbBufFlush<0>
                    grows 32 bytes, calls runtime.wbBufFlush<1>
                        grows 32 bytes, calls runtime.cgoCheckWriteBarrier<1>
                            grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                grows 80 bytes, calls runtime.inHeapOrStack<1>
                                    grows 32 bytes, calls runtime.spanOf<1>
                                        grows 48 bytes, calls runtime.arenaIndex<1>
                                        24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.panicIndexU<1>
                                            grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                24 bytes over limit
                                        grows 48 bytes, calls runtime.panicIndexU<1>
                                            grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                24 bytes over limit
                            grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                grows 80 bytes, calls runtime.inHeapOrStack<1>
                                    grows 32 bytes, calls runtime.spanOf<1>
                                        grows 48 bytes, calls runtime.arenaIndex<1>
                                        24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                            grows 0 bytes, calls runtime.morestack<0>
                                            24 bytes over limit
                                        grows 48 bytes, calls runtime.panicIndexU<1>
                                            grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                24 bytes over limit
                                        grows 48 bytes, calls runtime.panicIndexU<1>
                                            grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                24 bytes over limit
            grows 128 bytes, calls gvisor.dev/gvisor/pkg/refs.(*weakRefEntry).SetNext<1>
                grows 16 bytes, calls runtime.gcWriteBarrier<1>
                    grows 224 bytes, calls runtime.wbBufFlush<0>
                        grows 32 bytes, calls runtime.wbBufFlush<1>
                            grows 32 bytes, calls runtime.cgoCheckWriteBarrier<1>
                                grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                    grows 80 bytes, calls runtime.inHeapOrStack<1>
                                        grows 32 bytes, calls runtime.spanOf<1>
                                            grows 48 bytes, calls runtime.arenaIndex<1>
                                            40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                    grows 80 bytes, calls runtime.inHeapOrStack<1>
                                        grows 32 bytes, calls runtime.spanOf<1>
                                            grows 48 bytes, calls runtime.arenaIndex<1>
                                            40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
            grows 128 bytes, calls gvisor.dev/gvisor/pkg/refs.(*weakRefEntry).SetPrev<1>
                grows 16 bytes, calls runtime.gcWriteBarrier<1>
                    grows 224 bytes, calls runtime.wbBufFlush<0>
                        grows 32 bytes, calls runtime.wbBufFlush<1>
                            grows 32 bytes, calls runtime.cgoCheckWriteBarrier<1>
                                grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                    grows 80 bytes, calls runtime.inHeapOrStack<1>
                                        grows 32 bytes, calls runtime.spanOf<1>
                                            grows 48 bytes, calls runtime.arenaIndex<1>
                                            40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                grows 48 bytes, calls runtime.cgoIsGoPointer<1>
                                    grows 80 bytes, calls runtime.inHeapOrStack<1>
                                        grows 32 bytes, calls runtime.spanOf<1>
                                            grows 48 bytes, calls runtime.arenaIndex<1>
                                            40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l1<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.arenaIdx.l2<1>
                                                grows 0 bytes, calls runtime.morestack<0>
                                                40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit
                                            grows 48 bytes, calls runtime.panicIndexU<1>
                                                grows 0 bytes, calls runtime.goPanicIndexU<1>
                                                    grows 0 bytes, calls runtime.morestack<0>
                                                    40 bytes over limit (exit status 2)

Never seen such error before, restarting VScode didn't help. I can debug other applications.

It looks like gVisor has some nosplit functions that seems to cause the issue. I think this should be reported to gVisor. Thanks.


Type transformations in Map

Scala: def map[B](f: (A) ? B): Traversable[B]

Golang: func (r Result[T]) Map(mapper func(value T) (T, error)) Result[T]

Generally the map function supports type transformations from T[A] => T[B] which is used the most in all practical use cases.
While the library supports mapping, but its applicability is very limited due to this limitations.
I believe this is majorly because Golang does not support type arguments on methods.
Any means to bypass this and get a more practical mappers?

I tried to brainstorm a lot on this but most of the options (something that exists in other FP languages) are a bit constrained with Golang since it is not allowing type parameters on methods.
But I was able to come up with a workaround where we are able to exploit the functional aspects using the Functions in golang.
type Mappable[T any] interface {
	Get() T
	Error() error
}

type Future[T any] struct {
	value T
	err   error
}

func (f Future[T]) Get() T {
	if f.err != nil {
		panic(f.err)
	}
	return f.value
}

func (f Future[T]) Error() error {
	return f.err
}

func Map[A Mappable[T], T any, U any](obj A, mapper func(T) U) Mappable[U] {
	switch x := any(obj).(type) {
	case Future[T]:
		return futureMapper(x, mapper)
	default:
		panic("unknown type")
	}
}

func futureMapper[T any, U any](fut Future[T], mapper func(T) U) Future[U] {
	if fut.Error() != nil {
		return Future[U]{value: mapper(fut.Get()), err: nil}
	}

	return Future[U]{err: fut.Error()}
}

func Test() {
	future := Future[int]{10, nil}
	future1 := Map[Future[int], int, string](future, func(i int) string {
		return strconv.Itoa(i)
	})

	fmt.Println("future1", future1.Get(), reflect.TypeOf(future1.Get()))
}

There are two downsides which I see to this:

We are moving away from objects and keeping all these utilities as separate library support instead.
We will need to implement something like func Map2[A Mappable[T, U], T any, U any, V any](obj A, mapper func(T) V) Mappable[V, U] to support type where we are taking two type arguments or more.

Please share your thoughts on this.

The mappable interface here can also be simplified, since we are using the pattern matching on the basis of types, and hence the class methods can be used directly here.

 If I wrote for example
type Action[T any] func() (T, error)

func [T, U any] (a Action[T]) FlatMap(f func(T) Action[U]) Action[U] {
  // ...
}

It doesn't compile because you can't declare generic type parameters on a method.
I can write
func FlatMap[T,U any] (a Action[T], f func(T) Action[U]) Action[U] {
  // ...
}

and it compiles and works as expected, but what you lose is the syntactic convenience of being able to chain these like a method call or infix operation which avoids a bunch of deeply nested parentheses and makes the code nice and readable.
One workaround would be to go full "Yolo" and make them all not generic, and instead have them all just take and return any. And the other workaround, which this library appears to have chosen, is to limit all of the chaining and stuff to keeping the same type. That keeps you the syntactic niceness of the method call syntax, and you lose the flexibility of being able to change types. It's a tradeoff and I wish Golang's type system were improved just enough that we wouldn't need the tradeoff.


Disable Cirrus on non-main branches

Reduce maintenance burden for infra team (4 less PRs to send every quarter)
Reduce capacity usage. Release team only looks at LUCI

This will be available in the December beta. No need to CP since the renewal was recently landed.


Wrong documentation or implementation error in Turnstile turnstile.getResponse(widgetId: string) function

Example URL(s)
According to the documentation , turnstile.getResponse should accept a string returned from  turnstile.render, namely widgetId.
Actual Behavior

It appeared Turnstile will throw error if the widgetId is passed into turnstile.getResponse.
After a little debugging it appeared turnstile.getResponse expect a widgetId without the cf-chl-widget- prefix.
Expected Behavior

turnstile.getResponse should accept widgetId returned from turnstile.render.
turnstile.getResponse should not throw when unknown widgetId is passed in. It should return undefined or whatever deemed appropriate.

Additional information
I believe this is more of an implementation error than documentation issue but I didn't find a place to report this bug.

Hi @Haocen, we're going to fix the turnstile.getResponse() call so it behaves as expected. Appreciate the detailed report!

Hey @migueldemoura,
Quick question: Currently in the Turnstile JS URL has a /v0/ in the path:  https://challenges.cloudflare.com/turnstile/v0/api.js.
So, in the future when this product gets out of Beta or you guys update the code is there a chance of this URL to break? I mean let's say in the future you guys do /v1/ replacing /v0/ which will break the api.js path.
The only reason I'm asking this is because if this product gets pushed to many sites and then suddenly things break due to URL changes and we need to replace all the URLs again - just don't want to be in that situation.

Hi @isaumya!

So, in the future when this product gets out of Beta or you guys update the code is there a chance of this URL to break? I mean let's say in the future you guys do /v1/ replacing /v0/ which will break the api.js path.

We will keep the /v0/ endpoint when Turnstile gets out of Beta. Even if we end up adding a /v1/, they'll both be available and thus your script won't break.
If at some point in the future we end up wanting to remove /v0/, we'll provide a migration path, notification to users and a reasonable timeframe to do said migration.

Hi @migueldemoura,
I think it would be a smarter choice to remove the versioning number from the URL as soon as possible. That will mean people can implement it without worrying about changing the script URL in future. This will also increase trust in the dev community. It will also help your team to refine the code without worrying about asking users to change the script URL.

API versioning is important. That version number helps them make sure that if they need to make a breaking change, they won't break existing scripts. As has been said here, they won't deprecate /v0/ for a while and without an obvious alert/message to users.
Regardless, this Issue is unrelated to Turnstile's versioning in the path. I'd recommend you ask on the Cloudflare Developers Discord or the Cloudflare Community if you wish to keep discussing this.

Hey folks, we've released an update for this that should have fixed the issue with turnstile.getResponse().
Closing this, but feel free to reopen if the issue persists. Thanks again for the report!

@migueldemoura is there's a page in the documentation that shows the signature of getResponse? I wasn't able to find something.