flutterpi_tool and macOS - valid environment?

I am not sure - the docu of flutter-pi says this a linux only tool. But some issues of flutter-pi has a macOS context.
Therefore I tried flutterpi_tool also on macOS. Compiling release woks fine. But after the sync
./build/flutter_assets/kernel_blob.bin
was missing. But this was a minor issue, taking this file from a linux build solves the problem.

I'm running flutterpi_tool on MacOS myself and it works fine, the kernel_blob.bin file is only necessary for debug mode, so on other runtime modes it's okay if it's not there. What runtime mode did you use?

Ups - wrong usage on my side.

All good 😄


[Bug]: Example in PyDocs for Python Wrapper is wrong

What happened?
Import statement in this example is wrong. It should be from lakefs.client import Client instead of from lakefs import Client
Expected behavior
No response
lakeFS version
No response
How lakeFS is installed
No response
Affected clients
python lakefs 0.2.0
Relevant log output
No response
Contact details
<EMAIL_ADDRESS>

I think the fix should be in the code, not example. The solution is to add the Client class into the package's init

@kesarwam, opened: https://github.com/treeverse/lakeFS/issues/7274


Features to add

New features to add:

[ ] automatic generations of config files
[x] prevent cache on config files in the JavaScript code. Possible fix: add a parameter with a random number which differs every requests. This bypasses cache.
[ ] fix windows bug were using plugin.py will produce a bug where the static folder isn't found. Script should try to find the static folder automatically.
[ ] fix orientation bug with UC browser.
[ ] add carrier/ISP detector via an API.

@bastien8060  here is some suggestions

Incase if we are in same network the page should be delivered using captive portal splash page pop up using dns spoofing so there is no need to send a link or something

a pretty similar phishing scenario like this : mimicking the wifi manager to trick the user into putting his WIFI password without doubting a thing .. there was two already made one for windows and another for ios but non for android :|

github.com/wifiphisher/wifiphisher/pull/1175
this awesome attack

but will require admin access

yeah but why would that be a problem ?

might not work in windows

if you could figure how to do the dns spoofing in there .. then it will definitely work .. i think you might want to check better cap it's cross platform but i couldn't get it to work for some reason.

Oh it wouldn't be at all.

but will require admin access

yeah but why would that be a problem ?

might not work in windows

if you could figure how to do the dns spoofing in there .. then it will definitely work .. i think you might want to check better cap it's cross platform but i couldn't get it to work for some reason.

I'll look into it. I was looking this morning at some cross-platform solutions about this. Thanks


The blog is a tad hard to read

Something like:

@diasdavid I tend to agree, do you think this affects the docs in general?
@akrych what should we do here?
Maybe just promoting those titles to h1? Or do we rework the font properties?

Sure :) I will propose some small corections to text, which will improve the readability of posts.

I agree with everything except the middle-endian date format... 😛

@kishansagathiya No I agree, I'm going to :+1: on a font change here. The font on the site is pretty hard to read. I was about to file an issue about it.

@kyledrake awsome

@hsanjuan
My proposition for blog/news page (I add also switch button for change to dark backgorund theme - to pepole who like read white letters on dark:)

The issue isn't really light vs dark, I really do think the font/size is
just not very readable. I would switch to a different font or something a
little stronger. It's not necessary to make a dark theme to resolve this
(but feel free!), just a change to the font.
On Mon, Oct 1, 2018, 7:08 AM Agatha Krych<EMAIL_ADDRESS>wrote:

@hsanjuan https://github.com/hsanjuan
My proposition for blog/news page (I add also switch button for change to
dark backgorund theme - to pepole who like read white letters on dark:)
[image: cluster_website_news]
https://user-images.githubusercontent.com/22168118/46293548-24523880-c594-11e8-8790-52b853f1c041.png
[image: cluster_website_news2]
https://user-images.githubusercontent.com/22168118/46293552-274d2900-c594-11e8-9682-2644a8544e42.png
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ipfs/ipfs-cluster-website/issues/25#issuecomment-425921225,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AABt-bv6ugUQlaHfceAd3AWFKEaXhUCFks5ugiHVgaJpZM4U7OAQ
.

@akrych This is much improved! A few points of feedback:

Can you look at a design that limits line length at desktop screen sizes to improve readability? So, we'd need one design for desktop, and another for smaller screen sizes. See more here Readability: the Optimal Line Length and here Butterick's Practical Typography (<-- love that last resource, lots of fun stuff on all sorts of fine typography points).

I think the sub-headings are still a little bit hard to distinguish. You might consider adjusting line height. Right now, the space between the paragraphs is very similar (or maybe the same?) to the space above and below the headings. Bumping up the space above the headings to give the sections a bit more breathing room might help create stronger information hierarchy on the page. (I'm not sure exactly of the best arrangement, but I'd take another look at the relationship between the paragraph line height; the space between paragraphs; the space between bullets; heading line height; etc; to make sure they're dialed in the best way they can be to make it clear what belongs to what.)

For those following along at home, expand for the gist of the line length thing, from the first linked article:
Having the right amount of characters on each line is key to the readability of your text. It shouldn’t merely be your design that dictates the width of your text, it should also be a matter of legibility.
The optimal line length for your body text is considered to be 50-60 characters per line, including spaces (“Typographie”, E. Ruder). Other sources suggest that up to 75 characters is acceptable. So what’s the downsides of violating this range?

Too wide – if a line of text is too long the reader’s eyes will have a hard time focusing on the text. This is because the line length makes it difficult to gauge where the line starts and ends. Furthermore it can be difficult to continue onto the correct line in large blocks of text.
Too narrow – if a line is too short the eye will have to travel back too often, breaking the reader’s rhythm. Too short lines also tend to stress readers, making them begin on the next line before finishing the current one (hence skipping potentially important words).

It turns out that the subconscious mind is energized when jumping to the next line (as long as it doesn’t happen too frequently, see above bullet point). At the beginning of every new line the reader is focused, but this focus gradually wears off over the duration of the line (“Typographie”, E. Ruder).
In order to avoid the drawbacks of too long and too short lines, but still energize your readers and keep them engaged, we suggest keeping your text within the range of 50-75 characters per line.

@meiqimichelle I made some corrections to the line  line length this blog. You can see and comment it here
(All > Let me know if you are not familiar with inVision and needs help): https://invis.io/A5P7NIAM3VZ

We're leaning on tachyons css in our other sites and Web UI to bake in a legible typescale and nudge us to think about line lengths / measures too.


Filtering book list based on the office

Add filter allowing users to sort/filter books based on the office the book is located at.

[x] Admin page

[ ] Book list page (homepage)

Clarification: Admin page had already a sorting mechanism but did not work for office location. We could create a new filter/sorting mechanism for Book list page as well.

Added 'Sort by' (selected value) and 'Filter by office' dropdown buttons.


Option to clear all selections

Deselect everything, clear table and paths

The interface is very clean right now, I don't see a good spot to put a button it so I will just include it in the upper left of the SVG and give it an ID and interface with that.


Strongly outdated CHANGES File

I just noticed that the CHANGES File was not updated since version 0.3.1, which was 2 years ago.
With a up to date CHANGES File it is easier possible to follow changes like the removeal of WSGIServerException and the bugfix done here: #86.
Would it be possible to get it up to date?

I didn't see a pull request, so I'm closing this ticket.


sscanf issue in az_span.c

sscanf is supported in some IDEs (IAR, VS), but it is not supported well in some other IDEs, such as: STM32Cube (1.3.0), MCUXpresso(11.1.1)  and MPLAB (5.35).
For example, the value of chars_consumed is 0 after running following code in STM32Cube IDE.
    int32_t result;
    int32_t chars_consumed = 0;
    int32_t n = sscanf((char*)"200", "%03llu %n", &result, &chars_consumed);

In VS:

In IAR:

In STM32Cube:

az_span.c also uses sscanf() to process data, it will lead to failure in some IDEs , what do you think?
static void _az_span_ato_number_helper(
    az_span source,
    bool is_negative_allowed,
    char* format,
    void* result,
    bool* success)
{
...

  int32_t chars_consumed = 0;
  int32_t n = sscanf((char*)source_ptr, format, result, &chars_consumed);

  if (success != NULL)
  {
    // True if the entire source was consumed by sscanf, it set the result argument, and it didn't
    // set errno to some non-zero value.
    *success = size == chars_consumed && n == 1 && errno == 0;
  }

...
}

@bo-ms from my limited experience scanf usually runs into either stack issues or has features disabled.

Have you checked that scanf has sufficient stack?
In STCube I know there is this setting for "Use float with printf/scanf from newlib":

This doesn't seem to be your issue but there might be other options that need to be set to enable the feature?
@gilbertw @ahsonkhan I think we should avoid as much as possible using sscanf/sprintf. If we cannot achieve this, we'll need to add some prerequisites on what needs to be enabled in the supported compilers to make our SDK work (which will likely increase the binary output size considerably). Can we instead consider alternatives from the C99 stdlib (atoi/atol)?

Can we instead consider alternatives from the C99 stdlib (atoi/atol)?

There were several discussions of what approaches to use, and we landed on sscanf based on @JeffreyRichter's recommendation. The concern with atoi/atol (and strtod) is that they require 0-terminated strings and hence end up with data copies (and requiring destination buffers). It is possible for us to hand write our integer parsing APIs (since they are relatively simple), but double/floating point parsing is quite difficult to get right, which is why we decided to leverage some built-in implementation.

@CIPop Yes, I verified sscanf() has enough stack, and I got the same issue with following setting.

@ahsonkhan Yes, it is actually a blocking issues for checking return status value (such as: 200) in device twin
AZ_NODISCARD az_result az_iot_hub_client_twin_parse_received_topic(
    az_iot_hub_client const* client,
    az_span received_topic,
    az_iot_hub_client_twin_response* out_twin_response)
{
...

      // Get status and convert to enum
      uint32_t status_int;
      AZ_RETURN_IF_FAILED(az_span_atou32(status_str, &status_int));
      out_twin_response->status = (az_iot_status)status_int;

    ...
}

@bo-ms, from the locals in your screenshot, it looks like in STM32Cube the result is correctly being set to 200 but the  chars_consumed isn't being set. That is certainly a strange behavior.

STM32Cube (1.3.0), MCUXpresso(11.1.1) and MPLAB (5.35).

Do you know what C compiler versions (of GCC/Clang/etc.) do these IDEs build the code against? I want to try to get a local repro to investigate why this is happening, but don't have those IDEs installed atm.

@ahsonkhan you are correct, the result is set correctly, but the chars_consumed is not being set. Same behaviors with "%03llu%n" or "200\0"
C compiler version in STM32Cube: arm-none-eabi-gcc.exe (GNU Tools for STM32 7-2018-q2-update.20190328-1800) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
STM32Cube IDE link: https://www.st.com/en/development-tools/stm32cubeide.html

cc @joshfree

how about if we use "%00lu%n" instead of "%00llu%n"...
I tried to validate the "%00lu%n" this and it works for stm32.
possibly because in embedded most of people uses nano-lib implementation of stdlib and for size reason it uses nano format for printf/scanf family (i.e c89 and only support 32 bit).
Check this out:
For more details about "nano" formatting option, please see newlib readme file,
search for '--enable-newlib-nano-formatted-io':
https://sourceware.org/newlib/README

Here are some options:
A) Don't use sscanf for any integer parsing (for both 32 and 64-bit), write our own implementation, and only use it for double parsing. This seems like a reasonable fix but we should keep code size in mind.
B) As @hihigupt mentioned, use only 32-bit format strings for 32-bit integer parsing, and make folks opt-in to the 64-bit support. This has concerns with overflow detection, which is why the 64-bit format string was used, even in 32-bit. So the overflow detection need to be implemented differently if we go with this option.
That said, let's make sure:

The implementation of double parsing using sscanf, as is, works on all the commonly used/supported IDEs.
If we go with option (B), that folks who do want to use 64-bit integers, are able to, possibly with the workaround to enable the nano formatting option.


ECU-B with DS3-S

Installation with HACS was successful.
But the Integration dialogue under Settings -> Devices & Services can't find "APSystems PV Solar ECU".
core-2022.7.6

You should be able to find it by only typing: APS
Have you restarted HA after installation with HACS? There could be a caching issue.

So today the installation process worked fine!
Thank you!

Great, thank you for the feedback - you should be able to close this issue now because I can't moderate this.

Closed


Is this musickit v1 or v3?

My apologies I was looking for an npm library to work with MusicKit and haven't worked with JS before. I was trying to see if your library was based off of the v1 endpoint or the v3 endpoint. There aren't very clear timestamps on when v3 was released but my best guess is about 2mo after the bulk of your work in this based on commits.
https://js-cdn.music.apple.com/musickit/v3/docs/index.html?path=/story/tech-notes-migrating-to-v3--page
Thanks for your time,
Tom.

Hello Tom,
This package is using the v1 endpoint as the Apple documentation only shows the v1 endpoint. If the docs ever get updated with newer endpoint versions, I will update the code to use the newest endpoint in the documentation (& perhaps even rewrite it in Typescript)


Fix issue #555 | Added Activities section

Any changes are welcome @devvsakib... These look good!

Awesome PR @AryanBabber!!

Could you please make the suggested changes @AryanBabber? Thanks!

made the changes @tobySolutions. Please check it again

Awesome @AryanBabber!! I'll check now.

Are you using the native Image tag by Next @AryanBabber??

Doesn't really seem like it.

Also, if you could reduce the font sizes a little more, would be super awesome!!

Also, if you could reduce the font sizes a little more, would be super awesome!!

he did it, but not showing in live preview🤔

Are you using the native Image tag by Next @AryanBabber??

There is no fixed width or height as of yet and that was throwing an error if I passed the Next Image tag without height and width parameters

Great job bro!!


document.tap triggered after button.click

Description

On desktop, tap event listeners on document (with useCapture = true) should be called before any element's click event. Instead, the element's click event gets fired before document's tap
Live Demo

http://jsbin.com/laxoda/2/edit?html,output
Steps to Reproduce

Add any element on your document (e.g. button) with onclick="elementClick()"
Add a document.addEventListener("tap", documentTap, true); (also enable document-wide tap)
Click on the button

Expected Results

We should see the following output on the jsbin:
document click
document tap
button click
button tap

Actual Results

We instead see this:
document click
button click
document tap
button tap

Browsers Affected

[x] Chrome
[x] Firefox
[x] Edge
[x] Safari 9
[x] Safari 8
[x] IE 11

Versions

Polymer: vX.X.X
webcomponents: vX.X.X

It looks like you only have the tap listener on document, which means button will receive click well before the event bubbles to the document tap recognizer.
Since gesture event listeners are not capturing, this is working as I would expect.

Is the fact that gesture events can't useCapture something we should document? Currently not mentioned.
Also, the Polymer.Gestures.add() method is not documented here currently:
https://www.polymer-project.org/1.0/docs/devguide/events.html#gestures
Polymer.Gestures doesn't show in the API reference, either:
https://www.polymer-project.org/1.0/api/

No one should really use Polymer.Gestures directly in my opinion.
Everything useful there is exposed in Polymer.Base (Polymer.Gestures.add is the underlying api to Polymer.Base._listen for gesture events).
I think the fact that gestures are not capturing is fine to document. Technically you could make a capturing gesture listener, but it would rely on the a bubbling event to hit a recognizer first.

Orthogonal/related to this: inline listener for tap won't work (e.g. <button ontap="doSomething()"> http://jsbin.com/sabega/2/edit?html,output

Yeah, that will never work. Inline handlers like that are only fired for native events.

Understood.
While I understand that on desktop we need to depend on click in order to fire tap, can we at least have intercept the document.click and fire the tap before any other click event?
Either
document click
document tap
button click
button tap

or
document click
document tap
button tap
button click

I've encountered a similar issue - apologies if it's different.  This is what I observe:
mobile: touch-start, tap, touch-end, focus, click
desktop: focus, tap, click
In a case where tapping on an opener (ex. a flyout menu) where focus should be moved to the first menu item, on mobile the focus is subsequently moved out back to the opener where the tap event occurred.  Perhaps I am using on-tap (on opener) when I should not be?


Select by primary key does not find a row.

CrateDB version: 4.1.8
Problem description:
I have table with 4-columns PK.
I trying to select row by PK, and receive empty result.
Steps to reproduce:
CREATE TABLE test (
   "id" TEXT,
   "region_level_1" TEXT,
   "marker_type" TEXT,
   "is_auto" BOOLEAN,
   PRIMARY KEY ("id", "region_level_1", "marker_type", "is_auto")
)

>> Table TEST created.
insert into test (id, region_level_1, marker_type, is_auto) values ('1', '2', '3', false);

>> 1 row inserted.
select * from test where id = '1' and region_level_1 = '2' and marker_type = '3' and is_auto = false;

>> no rows returned!
When I change any = to LIKE - query finds the row:
select * from test where id LIKE '1' and region_level_1 = '2' and marker_type = '3' and is_auto = false;

>> 1 rows found

Thank you for the bug report.
We'll have a fix for this in the 4.2.3 release (https://github.com/crate/crate/pull/10307)
Turns out this happens as soon as one of the columns used in the primary key definition is of type boolean


Run task in docker preview doesn't work

Have you tried troubleshooting?
according https://github.com/microsoft/azure-pipelines-agent/blob/master/docs/preview/runtaskindocker.md#request-for-feedback
Agent Version and Platform
Version of your agent? 2.200.2
OS of the machine running the agent?
Linux, self hosted with docker in docker ubuntu 18.04
Azure DevOps Type and Version
dev.azure.com
organization: protank
What's not working?
When I tried run the classic build pipeline job in docker as described in guide with node:18-bullseye image, it fails in "initialize containers" phase, see Agent and Worker's Diagnostic Logs section
Agent and Worker's Diagnostic Logs
2022-05-29T18:08:47.6754175Z ##[section]Starting: Initialize containers
2022-05-29T18:08:47.6933216Z ##[command]/usr/bin/docker version --format '{{.Server.APIVersion}}'
2022-05-29T18:08:47.7774797Z '1.41'
2022-05-29T18:08:47.7797831Z Docker daemon API version: '1.41'
2022-05-29T18:08:47.7798268Z ##[command]/usr/bin/docker version --format '{{.Client.APIVersion}}'
2022-05-29T18:08:47.8416616Z '1.41'
2022-05-29T18:08:47.8481734Z Docker client API version: '1.41'
2022-05-29T18:08:47.8502207Z ##[command]/usr/bin/docker ps --all --quiet --no-trunc --filter "label=f3b821"
2022-05-29T18:08:47.9778761Z ##[command]/usr/bin/docker network prune --force --filter "label=f3b821"
2022-05-29T18:08:48.0526345Z ##[command]/usr/bin/docker pull node:18-bullseye
2022-05-29T18:08:49.6733279Z 18-bullseye: Pulling from library/node
2022-05-29T18:08:49.6875597Z Digest: sha256:52bda4c171f379c1dcba5411d18ed83ae6e99c3751cad67a450684efb9491f6b
2022-05-29T18:08:49.6876757Z Status: Image is up to date for node:18-bullseye
2022-05-29T18:08:49.6901155Z docker.io/library/node:18-bullseye
2022-05-29T18:08:49.6989736Z ##[command]/usr/bin/docker info -f "{{range .Plugins.Network}}{{println .}}{{end}}"
2022-05-29T18:08:49.8005620Z bridge
2022-05-29T18:08:49.8006586Z host
2022-05-29T18:08:49.8007192Z ipvlan
2022-05-29T18:08:49.8007593Z macvlan
2022-05-29T18:08:49.8007913Z null
2022-05-29T18:08:49.8008265Z overlay
2022-05-29T18:08:49.8041316Z ##[command]/usr/bin/docker network create --label f3b821 vsts_network_1b24841318aa4963857ec0edba1af884
2022-05-29T18:08:49.9552485Z a17fc8400bb1ce7d997de8b19b2f75d26ef866b4e339d94e9aa034accc9a1868
2022-05-29T18:08:49.9930697Z ##[command]/usr/bin/docker inspect --format="{{index .Config.Labels \"com.azure.dev.pipelines.agent.handler.node.path\"}}" node:18-bullseye
2022-05-29T18:08:50.0601364Z ##[command]/usr/bin/docker create --name vsts_container_preview_node18bullseye_9fd92a --label f3b821 --network vsts_network_1b24841318aa4963857ec0edba1af884  -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/azp/_work/16":"/__w/16" -v "/azp/_work/_temp":"/__w/_temp" -v "/azp/_work/_tasks":"/__w/_tasks" -v "/azp/_work/_tool":"/__t" -v "/azp/externals":"/__a/externals":ro -v "/azp/_work/.taskkey":"/__w/.taskkey" node:18-bullseye "/__a/externals/node/bin/node" -e "setInterval(function(){}, 24 * 60 * 60 * 1000);"
2022-05-29T18:08:50.1415202Z 6d6f647871980ceb7cc2d3b7be79972a5660a960ae3972d7fbae601d39d29ae4
2022-05-29T18:08:50.1466284Z ##[command]/usr/bin/docker start 6d6f647871980ceb7cc2d3b7be79972a5660a960ae3972d7fbae601d39d29ae4
2022-05-29T18:08:50.7819400Z 6d6f647871980ceb7cc2d3b7be79972a5660a960ae3972d7fbae601d39d29ae4
2022-05-29T18:08:50.7891654Z ##[command]/usr/bin/docker ps --all --filter id=6d6f647871980ceb7cc2d3b7be79972a5660a960ae3972d7fbae601d39d29ae4 --filter status=running --no-trunc --format "{{.ID}} {{.Status}}"
2022-05-29T18:08:50.8422213Z 6d6f647871980ceb7cc2d3b7be79972a5660a960ae3972d7fbae601d39d29ae4 Up Less than a second
2022-05-29T18:08:50.8506261Z ##[command]/usr/bin/docker exec  6d6f647871980ceb7cc2d3b7be79972a5660a960ae3972d7fbae601d39d29ae4 sh -c "command -v bash"
2022-05-29T18:08:51.1341169Z Error response from daemon: Container 6d6f647871980ceb7cc2d3b7be79972a5660a960ae3972d7fbae601d39d29ae4 is not running
2022-05-29T18:08:51.1602046Z ##[error]Docker exec fail with exit code 1
2022-05-29T18:08:51.1620864Z ##[section]Finishing: Initialize containers

Hi @MirKml  we are not able to reproduce this issue at the moment.
Could you please describe some questions:

Which version of image have you tried? As I know, the node:18-bullseye uses debian-11 as base. Have you tried ubuntu 18.04 and node:18 both?
Have you tried the hosted agent images?
Could you share the full Agent/Worker diagnostic logs?

Thank you

To prevent cequrity risks, you can share the logs at this email<EMAIL_ADDRESS>

Our setup
We have on premise agent in k8s cluster, which uses docker in docker setup.
I don't know much about OS for linux cluster with main docker, but I think it doesn't matter. It's some linux distro with docker which runs k8s cluster. In one of containers runs azure agent.
Agent itself - docker in docker - is based on ubuntu 18.04 according this guide https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops#linux It run's in on premise k8s cluster.
Then I'm trying to run jobs in docker container - as I describe - so docker in (docker in docker) :-)
I'm using stock image node:18-bullseye for testing as I describe and It doesn't work as I describe.
Maybe this setup isn't supperted. I don't know :-)
Running hosted agent isn't possible/available - some internal company policy.

I will send you logs tomorrow.

I will try again next week (I hope)


[BrokenLinksH2] Fix path in link

Removing line 23:

Client-side web parts can be used to implement Office add-ins in clients such as Outlook. For more information about using web parts in Office clients, see Creating Outlook add-ins using SharePoint Framework.

Note: The redirect isn't working, and the target content is hard to find. Asking the author for additional information.

Docs Build status updates of commit 336567f:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/spfx/web-parts/overview-client-side-web-parts.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Global effort to fix broken links
Hi @andrewconnell,
The Content & Learning team is fixing broken links on docs.microsoft.com for the rest of H2. This effort will eliminate potential accessibility, security, and usability issues. This PR includes only link fixes and does not change other content. In this case of PR, I deleted line23, the redirect isn't working, and the target content is hard to find.
Please review within five business days and merge, or comment in the PR with any changes you'd like to see. Thanks!

Docs Build status updates of commit a8e10c1:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/spfx/web-parts/overview-client-side-web-parts.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


Remove usage of goog.dom.TagName enum

Instead of using e.g. goog.dom.TagName.UL, directly use an appropriate string; in this case 'UL'.
The buildsizes are exactly equal before and after the suggested change.
Please review.

Looks good.  Please merge.

Thanks for the review.


Fail to retrieve token

Description of the bug
I am currently attempting a run,
but it appears to be stuck with the warning below.
[d3/18d8e5] process > NFCORE_RNASEQ:RNASEQ:PREPARE_GENOME:GTF_GENE_FILTER (genome.fa)                              [100%] 1 of 1 ✔
[8e/1fa174] process > NFCORE_RNASEQ:RNASEQ:PREPARE_GENOME:MAKE_TRANSCRIPTS_FASTA (rsem/genome.fa)                  [100%] 1 of 1 ✔
[8d/181b51] process > NFCORE_RNASEQ:RNASEQ:PREPARE_GENOME:CUSTOM_GETCHROMSIZES (genome.fa)                         [100%] 1 of 1 ✔
[72/8e908c] process > NFCORE_RNASEQ:RNASEQ:PREPARE_GENOME:SALMON_INDEX (genome.transcripts.fa)                     [100%] 1 of 1 ✔
[fc/a9652e] process > NFCORE_RNASEQ:RNASEQ:INPUT_CHECK:SAMPLESHEET_CHECK (JsauvageSamples.csv)                     [100%] 1 of 1 ✔
[-        ] process > NFCORE_RNASEQ:RNASEQ:CAT_FASTQ                                                               -
[d2/7365dd] process > NFCORE_RNASEQ:RNASEQ:FASTQ_SUBSAMPLE_FQ_SALMON:FQ_SUBSAMPLE (MBHb-RB3-I_Cper)                [100%] 29 of 29 ✔
[cc/d80944] process > NFCORE_RNASEQ:RNASEQ:FASTQ_SUBSAMPLE_FQ_SALMON:SALMON_QUANT (MBHb-RB3-veh-15hpt)             [100%] 29 of 29 ✔
[89/24815d] process > NFCORE_RNASEQ:RNASEQ:FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC (MBHb-RB3-I_Cdbco)              [100%] 29 of 29 ✔
[b8/cac0a5] process > NFCORE_RNASEQ:RNASEQ:FASTQ_FASTQC_UMITOOLS_TRIMGALORE:TRIMGALORE (MBHb-RB3-I_Cdbco)          [100%] 29 of 29 ✔
[-        ] process > NFCORE_RNASEQ:RNASEQ:MULTIQC_TSV_FAIL_TRIMMED                                                -
[-        ] process > NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN_IGENOMES                                          -
[-        ] process > NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_SORT                        -
[-        ] process > NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_INDEX                       -
[-        ] process > NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:BAM_STATS_SAMTOOLS:SAMTOOLS_STATS    -
[-        ] process > NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:BAM_STATS_SAMTOOLS:SAMTOOLS_FLAGSTAT -
[-        ] process > NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:BAM_STATS_SAMTOOLS:SAMTOOLS_IDXSTATS -
[-        ] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_STAR_SALMON:SALMON_QUANT                                       -
[-        ] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_STAR_SALMON:SALMON_TX2GENE                                     -
[-        ] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_STAR_SALMON:SALMON_TXIMPORT                                    -
[-        ] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_STAR_SALMON:SALMON_SE_GENE                                     -
[-        ] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_STAR_SALMON:SALMON_SE_GENE_LENGTH_SCALED                       -
[-        ] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_STAR_SALMON:SALMON_SE_GENE_SCALED                              -
[-        ] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_STAR_SALMON:SALMON_SE_TRANSCRIPT                               -
[-        ] process > NFCORE_RNASEQ:RNASEQ:DESEQ2_QC_STAR_SALMON                                                   -
[-        ] process > NFCORE_RNASEQ:RNASEQ:MULTIQC_TSV_FAIL_MAPPED                                                 -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_MARKDUPLICATES_PICARD:PICARD_MARKDUPLICATES                         -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_MARKDUPLICATES_PICARD:SAMTOOLS_INDEX                                -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_MARKDUPLICATES_PICARD:BAM_STATS_SAMTOOLS:SAMTOOLS_STATS             -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_MARKDUPLICATES_PICARD:BAM_STATS_SAMTOOLS:SAMTOOLS_FLAGSTAT          -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_MARKDUPLICATES_PICARD:BAM_STATS_SAMTOOLS:SAMTOOLS_IDXSTATS          -
[-        ] process > NFCORE_RNASEQ:RNASEQ:STRINGTIE_STRINGTIE                                                     -
[-        ] process > NFCORE_RNASEQ:RNASEQ:SUBREAD_FEATURECOUNTS                                                   -
[-        ] process > NFCORE_RNASEQ:RNASEQ:MULTIQC_CUSTOM_BIOTYPE                                                  -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BEDTOOLS_GENOMECOV                                                      -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_FORWARD:UCSC_BEDCLIP                  -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_FORWARD:UCSC_BEDGRAPHTOBIGWIG         -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_REVERSE:UCSC_BEDCLIP                  -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_REVERSE:UCSC_BEDGRAPHTOBIGWIG         -
[-        ] process > NFCORE_RNASEQ:RNASEQ:QUALIMAP_RNASEQ                                                         -
[-        ] process > NFCORE_RNASEQ:RNASEQ:DUPRADAR                                                                -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_RSEQC:RSEQC_BAMSTAT                                                 -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_RSEQC:RSEQC_INNERDISTANCE                                           -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_RSEQC:RSEQC_INFEREXPERIMENT                                         -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_RSEQC:RSEQC_JUNCTIONANNOTATION                                      -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_RSEQC:RSEQC_JUNCTIONSATURATION                                      -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_RSEQC:RSEQC_READDISTRIBUTION                                        -
[-        ] process > NFCORE_RNASEQ:RNASEQ:BAM_RSEQC:RSEQC_READDUPLICATION                                         -
[-        ] process > NFCORE_RNASEQ:RNASEQ:MULTIQC_TSV_STRAND_CHECK                                                -
[5c/0890bb] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_SALMON:SALMON_QUANT (MBHb-RB3-I_Cdbco)                         [100%] 29 of 29 ✔
[24/2b2620] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_SALMON:SALMON_TX2GENE (genes.gtf)                              [100%] 1 of 1 ✔
[0b/326326] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_SALMON:SALMON_TXIMPORT                                         [100%] 1 of 1 ✔
[23/bedfdd] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_SALMON:SALMON_SE_GENE (salmon_tx2gene.tsv)                     [100%] 1 of 1 ✔
[f1/81762c] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_SALMON:SALMON_SE_GENE_LENGTH_SCALED (salmon_tx2gene.tsv)       [100%] 1 of 1 ✔
[df/f47fc8] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_SALMON:SALMON_SE_GENE_SCALED (salmon_tx2gene.tsv)              [100%] 1 of 1 ✔
[2b/1cf46a] process > NFCORE_RNASEQ:RNASEQ:QUANTIFY_SALMON:SALMON_SE_TRANSCRIPT (salmon_tx2gene.tsv)               [100%] 1 of 1 ✔
[89/6e2373] process > NFCORE_RNASEQ:RNASEQ:DESEQ2_QC_SALMON                                                        [100%] 1 of 1 ✔
[-        ] process > NFCORE_RNASEQ:RNASEQ:CUSTOM_DUMPSOFTWAREVERSIONS                                             -
[-        ] process > NFCORE_RNASEQ:RNASEQ:MULTIQC                                                                 -

Feb.-27 16:40:48.129 [S3TransferManager-1] WARN  c.a.i.InstanceMetadataServiceResourceFetcher - Fail to retrieve token
com.amazonaws.SdkClientException: Failed to connect to service endpoint:
	at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:100)
	at com.amazonaws.internal.InstanceMetadataServiceResourceFetcher.getToken(InstanceMetadataServiceResourceFetcher.java:91)
	at com.amazonaws.internal.InstanceMetadataServiceResourceFetcher.readResource(InstanceMetadataServiceResourceFetcher.java:69)
	at com.amazonaws.internal.EC2ResourceFetcher.readResource(EC2ResourceFetcher.java:66)
	at com.amazonaws.auth.InstanceMetadataServiceCredentialsFetcher.getCredentialsEndpoint(InstanceMetadataServiceCredentialsFetcher.java:58)
	at com.amazonaws.auth.InstanceMetadataServiceCredentialsFetcher.getCredentialsResponse(InstanceMetadataServiceCredentialsFetcher.java:46)
	at com.amazonaws.auth.BaseCredentialsFetcher.fetchCredentials(BaseCredentialsFetcher.java:112)
	at com.amazonaws.auth.BaseCredentialsFetcher.getCredentials(BaseCredentialsFetcher.java:68)
	at com.amazonaws.auth.InstanceProfileCredentialsProvider.getCredentials(InstanceProfileCredentialsProvider.java:165)
	at com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper.getCredentials(EC2ContainerCredentialsProviderWrapper.java:75)
	at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:117)
	at com.amazonaws.services.s3.S3CredentialsProviderChain.getCredentials(S3CredentialsProviderChain.java:36)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1266)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:842)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:792)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:779)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:753)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:713)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:695)
	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:559)
	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:539)
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5453)
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5400)
	at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1372)
	at com.amazonaws.services.s3.internal.ServiceUtils.getPartSize(ServiceUtils.java:540)
	at com.amazonaws.services.s3.transfer.DownloadCallable.downloadInParallel(DownloadCallable.java:167)
	at com.amazonaws.services.s3.transfer.DownloadCallable.downloadInParallel(DownloadCallable.java:99)
	at com.amazonaws.services.s3.transfer.internal.AbstractDownloadCallable.call(AbstractDownloadCallable.java:100)
	at com.amazonaws.services.s3.transfer.internal.AbstractDownloadCallable.call(AbstractDownloadCallable.java:40)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable)
	at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
	at java.base/java.net.Socket.connect(Socket.java:609)
	at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:508)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:603)
	at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:276)
	at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:375)
	at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:396)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1253)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1232)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1015)
	at com.amazonaws.internal.ConnectionUtils.connectToEndpoint(ConnectionUtils.java:95)
	at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:80)
	... 32 common frames omitted

Command used and terminal output
No response
Relevant files
No response
System information
No response

I'm running into the same issue. Did you find a solution for this?

Hi @marcovth @ryan-moreno ! Is this still an issue? Would one of you mind sending the (redacted) .nextflow.log from the failed pipeline execution please?

Closing for now because we will need more info to debug the problem.
For real-time help it may be better to join the nf-core Slack Workspace and ask any pipeline-related questions in th e #rnaseq channel We also have a Nextflow Slack Workspace where you can ask more infrastructure related questions.

Apologies for the late response. I'm re-running the pipeline to generate the nextflow log file and will upload when that's done. For anyone else wondering, what fixed this issue for me was to download a copy of the genome locally so that the run didn't need to get that data through Amazon Aws. I pointed the nextflow run to the local copy using the flag --igenomes_base /path/to/ngi-igenomes/igenomes This makes me think that it may be an issue on our server's end since it is just the connection with Amazon Aws that is failing.


Drop down info for skill selection

Try to load different manifest version for same skill.
Hard to tell which one should be selected for "begin a skill".

Could we include more info for drop down list ? @sangwoohaan @mareekuh

@hibrenda why do you have two different manifests with the same name?

As these are developed for the same skill, so name is same inside the manifests.
I can edit the skill name in setting page but that does not apply into the drop down list.

Are you saying that the name as edited in the settings page is not reflected in the dropdown?
Are you asking for version name to be included in the dropdown?

Based on the manifest schema, a best practice could be that if you use two different manifest versions of the same skill in the same bot, the manifest author would give them different names: Email Skill - v1 manifest, Email Skill - v2 manifest. They would show up in the dropdown as such.
I'm currently working on a way to override the given Name from an authored manifest used in a bot in the Skills page so users can guard against not following this practice, and make sure this override when provided shows up in the dropdown. This will make this problem go away.

I've added the ability for custom names, closing this as complete.


Account Lockout

Expected content
Actual content
Link to page:

Hello @RayArgo,
Thanks for submitting a GitHub issue! We are very sorry that you are running into this problem. In order to better serve you, as this does not present itself as a library specific issue, we would like to ask that you reach out to our support team at https://support.sendgrid.com.
Thank you!
SendGrid DX Team


Chat-Unable to expand/hide compose box with selected text

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

Action Performed:

Open https://staging.new.expensify.com/
Open any chat
Enter several lines of text until a button to expand the compose box is visible
Highlight text
Tap on the button to expand the compose box

Expected Result:
The user can immediately expand/hide the compose box
Actual Result:
If text in the compose box is selected, then you can expand/hide the compose box only by pressing the button several times
Workaround:
Unknown
Platforms:

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

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

Version Number: <IP_ADDRESS>
Reproducible in staging?: Yes
Reproducible in production?: Yes
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/78819774/9defe48a-26c7-4cfb-b0c0-d8e7c3c2a3d9
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
View all open jobs on GitHub

Hmm, I just tried this on iOS safari and I'm not able to reproduce it. @lanitochka17 are you able to consistently reproduce? If so, please reopen!


Horizontal Scroll even after Disable X-Axis Scrolling

Discussed in https://github.com/idiotWu/smooth-scrollbar/discussions/480

Originally posted by blitzve0 June  4, 2022
https://user-images.githubusercontent.com/67477131/171929609-cdce99fa-e567-408e-8621-3e6c7e1b7ee8.mp4
Hi, I am using a plugin to disable X-axis horizontal scrolling totally, but sometimes accidentally when I hold and drag from the right edge, the site starts horizontally dragging. You can check the video and can try it out also here https://haspr.in/
This is the Plugin
import Scrollbar from 'smooth-scrollbar'

class DisableScroll extends Scrollbar.ScrollbarPlugin {
  static pluginName = 'DisableScroll'

  transformDelta(delta, fromEvent) {
    delta['x'] = 0

    return delta
  }
}

DisableScroll.pluginName = 'DisableScroll'
export default DisableScroll

```</div>

Got the same issue here. Any idea how to quick fix or when an update will be comming?

@RubenReuring a quick and dirty fix that eliminates horizontal scrolling:
import {  Scrollbar } from 'smooth-scrollbar/scrollbar'; // NOTICE: not the default entry

const setMomentum = Scrollbar.prototype.setMomentum;

Scrollbar.prototype.setMomentum = function(x, y) {
    setMomentum.call(this, 0, y);
}

https://github.com/idiotWu/smooth-scrollbar/discussions/511#discussioncomment-4666446
https://stackblitz.com/~/github.com/Cuberto/scroll-sequence-demo
once all dependencies installed open terminal ctrl + `
and run gulp command to start the server


Enhancement proposal: allow configuration of sasl.username and sasl.password from environment variables.

Hello, first of all, great lib, it works like a charm!
But, I'm facing an issue for deployment on Kubernetes, I need to configure the username and password to access to the Kafka cluster and I can't rely on volume to do that.
Indeed all the configuration must be transmit through environment variables specified on the deployment file.
It could be helpfull, if you give the option to override all the consumer/producer configuration keys from environment variables (and not only the bootstrap servers and consumer group).
Thanks in advance, kind regards
Rémi.

Hello @odinnou,
Thank you very much for your nice comment, and it is nice to see that the kafka message scheduler is useful for someone :)
Regarding the configuration of the kafka consumer and producer in the scheduler, I think it is better to use the "new" yaml configuration file (thanks to @james-johnston-thumbtack), there is plenty of configuration available in the confluent library and we cannot create an environment variable for each of them (see https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md)
This is an example of kubernetes manifests and how you can create a file in your pod from a config map, it is very straightforward.
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  BOOTSTRAP_SERVERS: localhost:9092
  CONFIGURATION_FILE: /app/config.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: yaml-config
  namespace: default
data:
  config.yaml: |
    kafka.common.configuration:
        sasl.mechanisms: PLAIN
        sasl.username: username
        sasl.password: password
        security.protocol: SASL_SSL
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-message-scheduler
  namespace: default
  labels:
    app: kafka-message-scheduler
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-message-scheduler
  template:
    metadata:
      labels:
        app: kafka-message-scheduler
    spec:
      containers:
      - name: kafka-message-scheduler
        image: etf1/kafka-message-scheduler:v0.0.6
        envFrom:
        - configMapRef:
            name: env-config
        volumeMounts:
        - name: config-volume
          mountPath: /app/config.yaml
          subPath: config.yaml
        ports:
        - containerPort: 8000
      volumes:
      - name: config-volume
        configMap:
          name: yaml-config

please let me know if you have any issues or questions.
Regards

Hello, thank you for this configuration file, it helps me a lot!


stackoutputs: add deserializer and size validation

Describe your changes
Checklist before requesting a review

Repo forked and branch created from next according to naming convention.
Commit messages and codestyle follow conventions.
Relevant issues are linked in the PR description.
Tests added for new functionality.
Documentation/comments updated according to changes.

tested binary with cargo run --release --features=executable,concurrent prove --assembly miden/examples/fib/fib.masm, its working


Jody/footer

Created footer
Still need to update padding to theme.spacing()

Very nice footer. Just a few more things I want you to learn and play with.

resolve #16

close #16


refactor(sensors): change baseline sample_rate parameter to number_of_reads

Right now, the BaselineSensorRequest has a sample_rate parameter that is used to determine how many reads to take in a limited poll. This pr just changes that to number_of_reads to align better with what the code does.

Codecov Report

Merging #593 (b5976e5) into main (111bd0e) will not change coverage.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##             main     #593   +/-   ##
=======================================
  Coverage   84.26%   84.26%
=======================================
  Files          83       83
  Lines        2967     2967
=======================================
  Hits         2500     2500
  Misses        467      467

Impacted Files
Coverage Δ

include/can/core/messages.hpp
99.21% <ø> (ø)

...lude/sensors/core/tasks/capacitive_sensor_task.hpp
57.53% <100.00%> (ø)

...e/sensors/core/tasks/environmental_sensor_task.hpp
76.47% <100.00%> (ø)

...nclude/sensors/core/tasks/pressure_sensor_task.hpp
48.07% <100.00%> (ø)


[Do not merge] Enable authentication in Support API

Trello: https://trello.com/c/WR2MNxo6
Related to: https://github.com/alphagov/support-api/pull/266
Adds the environment variables needed to allow applications to authenticate with support-api using signon.
Do not merge until govuk-secrets has been updated.

You're also safe to merge this if I remember correctly.


[RFC] Namespace methods on Model class

I quite like the pattern in certain ORMs where all the model methods are namespaced one way or another. I can think of several strategies.
One is the strategy used in https://vincit.github.io/objection.js/ . It consists in prefixing all the instance members on the model by a $. We could obviously decide on some other symbol.
planet.$remove();
planet.$relatedRecord('moons');

Another option would be to have a namespace on the model. I don't necessarily have a good suggestion for the namespace name.
planet.$.remove();
planet.$.relatedRecord('moons');

planet.api.remove();
planet.api.relatedRecord('moons');

Another option would consist in namespacing attributes and relationships.
planet.remove();
planet.attributes.name;

I don't think this is very ergonomic. It has the appeal of bringing the best guarantee of no conflicts but I think there other ways to deal with conflicts (serializer).
To me the main value of this proposition is to make it clear what belongs to the framework and what belongs to developer.
My preferred option is the first one.

My preferred option is the first one.

I agree. Let's deprecate the built-in Model methods and props in ember-orbit.
I'm also going to follow this pattern in Orbit query/transform builders and terms.


Expose the MemPoolInfo of matching memory pools to typed endpoints

Brief feature description
I would like the ability to somehow query the info of a particular memory pool that will be used for a comms endpoint's messages.
Detailed information
A full proof of concept is linked below:
https://github.com/eclipse-iceoryx/iceoryx/compare/master...gpalmer-latai:iceoryx:gpalmer/expose_mempool
The basic gist is that I've added a m_basePtr to the MemPoolInfo struct to inform consumers about where the actual memory pool is located. Then I've exposed some APIs to be able to lift that information all the way out to a typed publisher.
Alternatives Considered
Instead of lifting out the memory pool information through the layers of port info, it might be nice/favorable if we could

Have more control over which comms endpoints use which memory pools by e.g. adding service info constraints to the memory pool config entries in the roudi config (only these publishers/subscribers use this memory pool), as well as "memory constraints" (the memory type of this pool is "pinned")
Being able to query the runtime/roudi directly for information about a particular memory pool. I know there is some infrastructure here for introspection, but I'm not sure how I could use that to find the particular memory pool of interest.

@gpalmer-latai it seems you want to use this for GPU computation. I've no experience with GPUs and would need to ask e.g. @elfenpiff but I'm wondering if your goals could also be achieved by extending the publisher and subscriber, e.g. by adding hooks like on_construction, on_destruction, on_pre_publish, on_post_publish, and so on. I have to think this through if it is easily feasible.
I think alternative 1 will be quite a lot of work. Funnily this is exactly the approach we are taking with the Rust implementation. There is exactly one memory pool per service. Having something like that in iceoryx would also possible but is definitely nothing that can be achieved in the short term.
Regarding option 2. With the introspection you might be able to find a memory pool for a specific service but for that you would also need to know under which user the process with the publisher/subscriber was started and you won't be able to acquire the base pointer. What exactly do you hope to achieve with the information from the introspection?
In the short term something like your proof of concept should be possible. Maybe with a more constraint API but that is more of a detail. My preferred solution would be the refactoring of the posh layer similar to the Rust implementation where we experimented with these ideas and have good experience.

Having on_construction instead of exposing getMemPoolInfo would work nicely for me yes. That only really avoids exposing the last layer of lifting I did (and of course one could always pass a lambda that lifts the info out themselves).
To give you a bit more context on my use case - I'm working on a platform with shared graphics memory. That means that the CPU and GPU can access the same memory. But this doesn't just work out of the box - you have to first call an NVIdia API - specifically cudaHostRegister. This API takes a simple void*, size, and some flags and what it effectively does is "pins" the memory - page-locking it. I'm fuzzy on the details beyond that but I believe this has implications on the TLB and associated memory hardware and the reason why I want to restrict the range of memory I call this on as much as possible is because, quoted from the above documentations:

Page-locking excessive amounts of memory may degrade system performance, since it reduces the amount of memory available to the system for paging. As a result, this function is best used sparingly to register staging areas for data exchange between host and device.

Furthermore, I cannot simply call this API every time I receive a message sample because it is a high latency operation, so ideally I want to make all the appropriate calls once early on when initializing the system.
Anyway. My plan is to get a short term solution working for my needs and I would very happy if we could work out a reasonable way to do this upstream here. But I also agree with you that the proper long term solution is what you have already described in the Rust implementation. I'd be interested in having a lengthier discussion sometime about the work involved with bringing that to Iceoryx (or adopting the Rust implementation). I might be able to avoid needing it now, but I suspect there will be more use cases/requirements I stumble upon where I will be really sad not to have this level of control.

There should be a way forward to bring this upstream. I think I have to take counsel with my pillow to think a little bit more about the best short term approach, especially what implication is has for the untyped API. Would you contribute the patch once we agreed on the API?
Once the announcement for the Rust implementation is out we can have a deep dive. Either as part of a developer meetup or a separate meeting. I guess @elfenpiff is also eager to participate.

Yeah I should have some latitude to work on the patch.

Yeah I should have some latitude to work on the patch.

Hahaha, great pun :)

I had a few thought on this topic and currently I favor to continue on the idea we had when PortConfigInfo was introduced. All of this could be done in the publisher. Just for clarification, do you need to call cudaHostRegister also on the subscriber side or only on the publisher side?

I'd need the ability to map memory pools do be able to process messages as both input and output to GPU accelerated algorithms. So yes, subscriber too.
With the portconfiginfo - you could specify a different memory type for a port, but then how does this hook in to facilitating different hardware. I presume iceoryx isn't going to pull in Nvidia dependencies, so you'd need like the ability for the user to register behavior globally for different memory types.

I've to ask the author of that code what the exact idea behind PortConfigInfo but I thought about either having a compile time switch to add the CUDA dependency or maybe a similar mechanism like with the platform where one can override the path to some hooks.

I like the idea of a compile time switch, possibly coupled with some bazel select statements. Then just have a compile time path that either calls the CUDA API or returns an error when a specific memory type is specified in the port config.

One thing to note though is that it appears the port config / memory_info will apply to the entire memory segment and it is currently not possible to configure multiple segments differing only by what type of memory they support.
We'd want to probably extend the Roudi config this way so that a publisher with a port config specifying "pinned host memory" would be told to use the corresponding segment.

Yes, mid to long term the config should be extended

Actually I mean in the short/medium term. I'm really trying to avoid pinning the entire shared memory segment used for all communications just because one publisher wants to use GPU acceleration when publishing messages in one specific mempool.
If the effect of specifying memoryType as something signifying pinned_host_memory is that we decide to call cudaHostRegister when constructing the mepoo_segment somewhere here, then I'd be forced to do something like put all "GPU publishers/subscribers" in separate linux groups just to get them to use the isolated segment. And I'd like to avoid conflating the linux group / access controls use case with the memory allocation/access one.

What might be interesting to consider as well is adding an entry to both MePooConfig and memPoolInfo.
This would allow configuration at the memory pool level, which fits with my needs. Then we can see about adding some sort of "post_init" logic that is called after getMiddleWarePublisher to do setup on the client side. This boil down to the MemoryManager going through all of the memory pools and for each one with a pinned_host MemoryType calling cudaHostRegister on the memory region.

There is still a bit of awkwardness to all of these approaches in that although a segment or a memory pool might be configured as supporting "pinned host memory", really it is ultimately up to the publishers or subscribers to decide if they want to use that feature. You have to consider that there are cases where the publisher is a normal CPU publisher or the subscriber is a normal CPU subscriber. In these processes you wouldn't really want to call cudaHostRegister at all.
So I guess, what you would do to handle this is to combine the MemPoolInfo (or segment info) with the PortConfigInfo to have some logic like:
// MemoryManager.getChunk()
for (auto& memPool : m_memPoolVector)
{
      uint32_t chunkSizeOfMemPool = memPool.getChunkSize();
      if (chunkSizeOfMemPool >= requiredChunkSize)
      {
        if (portConfigInfo.memoryInfo.memoryType == PINNED_HOST_MEMORY)
        {
          if (memPool.getInfo()->memoryType == PINNED_HOST_MEMORY)
          {
            chunk = memPool.getChunk();
            memPoolPointer = &memPool;
            aquiredChunkSize = chunkSizeOfMemPool;
            break;
          }
...

Maybe there is a misunderstanding. What I meant was to only register the mempool the publisher and subscriber are using and not the whole segment. As long as it the memory is shared between CPU and GPU this should be sufficient and RouDi does not need to do any special handling. But I'm no GPU expert so this might be a bit naive.
So with that assumption I thought extending the config would not be required in the short term but only in the mid to long term.
We already have a concept of a shared memory provider, although only used and tested on CPU memory. This could be used to extend the memory types. The idea was to have this on segment level not on mempool level. It is quite long since we discussed about this topic though and some of our assumptions might not hold anymore.

Yes, the publisher and subscriber would opt in by specifying the desired memory type. I think that should be more or less straightforward. What might be more complicated is mixed memory mode where some subscriber work on CPU memory and other work on GPU memory. To solve this in an efficient way we might need to do a whiteboard session.

Oh, and @elfenpiff already had some ideas how to solve this in an efficient way about 4 years ago but there was never time to implement it. Maybe time has come now ... or at least in the not so distant future :smile:

Okay. I think I follow now. I guess all one needs is to specify something in the portConfigInfo and have that consumed to make the cudaHostRegister call 🙂 You mentioned earlier one complication though - what about untyped publishers/subscribers?
Do we simply not support those initially with this feature, since we do not know in advance which memory pools they will request?
Related to the above - I've noticed that we appear to always do a linear search for the matching memory pool every time we get a chunk. Would it make sense to optimize this out for the typed endpoints in conjunction with the memory logic that is applied only to the corresponding memory pools?

Note that there is an approach where you defer until getChunk to do something like cuda_pinned_host_registry.ensure_pinned(memPool) to make the call to cudaHostRegister the first time a chunk from a MemPool is requested. This would work for untyped endpoint too.
It's a bit problematic though because that first publish/subscribe for a particular size message will incur a lot of latency.

For the untyped publisher and subscriber we have two options (three after I read your latest response)

do not support it initially
add an API call like likely_used_memory_sizes(iox::vector<uint64_t, ???> list_of_memory_sizes)
like 2 but on loan/getChunk; might be a fallback for 2 with a log message warning about the new registration

Oh, the typed API would then just call likely_used_memory_sizes on the port level

Here some remarks

We should probably reserve a range for a curated list of memory types, similar to what IANA does
Ideally with this we could introduce a builder like API which gives us the opportunity to return an iox::expected and leave it to the user to decide what happens when there are not resources available. The builder could also be tied to the runtime or at least have the option to ask the non-default runtime for a port. There is the idea to have multiple RouDi instances running in parallel which do not interfere with each other. In order to write gateways between these instances one would need to have multiple runtimes. This is something in the far future and maybe we can get rid of RouDi in the C++ implementation but having an API which considers this option would be nice.

I think you are right about the PublisherPortUser owning a lot of the logic 👍

We should probably reserve a range for a curated list of memory types, similar to what IANA does

That sounds reasonable. I'm probably not knowledgable enough to quickly come up with something myself. Perhaps we can just reserve a range of values for now so that users implementing their own logic downstream do so with a value out of that range.

That sounds reasonable. I'm probably not knowledgable enough to quickly come up with something myself. Perhaps we can just reserve a range of values for now so that users implementing their own logic downstream do so with a value out of that range.

Exactly. I've thought about something similar to Qt::UserRole, which is the offset when defining own roles in Qt's model-view framework. We just need to find a good name and set it to .e.g 0x100. This should leave us a range which is big enough for whatever we want to use. Downstream can then request to register a specific value directly in iceoryx and after a two weeks discussion on Oʻahu (downstream will take care of the hotel and traveling costs) the team will vote on the inclusion of the new value.

... aaargh, too much Qt coding :laughing: ... we can just define an enum to distinguish between user defined values and the ones defined by iceoryx

Ideally with this we could introduce a builder like API which gives us the opportunity to return an iox::expected and leave it to the user to decide what happens when there are not resources available. The builder could also be tied to the runtime or at least have the option to ask the non-default runtime for a port. There is the idea to have multiple RouDi instances running in parallel which do not interfere with each other. In order to write gateways between these instances one would need to have multiple runtimes. This is something in the far future and maybe we can get rid of RouDi in the C++ implementation but having an API which considers this option would be nice.

So is the idea that the builder is passed as an argument like PortConfigInfoBuilder and the publisher calls create() on it? Or is this pattern more of just a convenient way to get an object with reasonable defaults but the ability to override some if necessary?
When you talk about tying the builder to the runtime, I'm guessing you mean that instead of
m_port(iox::runtime::PoshRuntime::getInstance().getMiddlewarePublisher(service, publisherOptions))

You'd have something like
m_port(portInfo.getRuntime().getMiddlewarePublisher(service, publisherOptions, portInfo))

Ah no, I think what you mean is that the builder pattern lets you return an error if the parameters aren't supported, right? It's a way of solving the classic "Constructors don't return anything so you have to raise an exception" problem.

Ah no, I think what you mean is that the builder pattern lets you return an error if the parameters aren't supported, right? It's a way of solving the classic "Constructors don't return anything so you have to raise an exception" problem.

Exactly. We don't use exception and when something went horribly wrong in the ctor we currently terminate. It would be better to use the factory method pattern or the builder pattern and return an expected<Publisher>.

Interesting. How deep are you thinking of going in this sort of refactor? It looks like the getMiddleware* functions all emit warnings and return a nullptr, which immediately gets passed to a constructor taking a not_null pointer...
So we could for example, also use the builder pattern for the port users. We can also refactor the getMiddleware* functions to be of expected type. And probably there are more rabbit holes like this to jump down.

The getChunk method could get an additional parameter with a hint for the index, e.g. index_of_last_used_mempool

In order to do this we will have to expose the index somehow - maybe instead of a getMemPoolInfo with a ChunkSettings overload there should be something like a uint32_t getMemPoolHint(const ChunkSettings& chunkSettings) const;
This function can then both be used as a way to query MemPoolInfo via the existing getMemPoolInfo as well as the starting index of a binary search.

My idea was to call cudaHostRegister in the PublisherPortUser not in the MemoryManager

On second thought and further study of the current architecture, I think maybe it might actually make sense for the ChunkSender to do this, since the ChunkSenderData is where the memory info gets stored, and the ChunkSender is responsible for

allocating and freeing memory chunks.

So basically, to avoid errors in construction we use the builder type for the chunk sender also, or we alternatively add a tryAllocateHint method which would be used by the chunkSender to both get the index of the matching mempool and cache it, as well as do the cuda stuff if appropriate.
For simplicity it probably suffices to make the hint that the chunkSender stores be a single tuple of ChunkSettings to uint32_t which is just a lastUsedHint. If the requested chunk settings change, the sender gets a new hint, attempts to register with CUDA again, and uses the new hint to get a chunk.
The CUDA calls themselves will be cached by the global registry so even if we end up back at the same hint it will become a noop.

The getChunk method could get an additional parameter with a hint for the index, e.g. index_of_last_used_mempool

In order to do this we will have to expose the index somehow - maybe instead of a getMemPoolInfo with a ChunkSettings overload there should be something like a uint32_t getMemPoolHint(const ChunkSettings& chunkSettings) const;
This function can then both be used as a way to query MemPoolInfo via the existing getMemPoolInfo as well as the starting index of a binary search implementation of getChunk.

Sounds good. Since this is no user facing API we are free to do anything :)

Question about the pointer repository though - is this class thread-safe? I don't see any sort of synchronization around registering a new segment. I assume this is because there is no expectation that this would ever be called from different threads?
It's not practically a problem for my particular use case, but it would be problematic to introduce a code path that is able to be called at any time a publisher or subscriber takes or receives a message, that is not thread safe.

Question about the pointer repository though - is this class thread-safe? I don't see any sort of synchronization around registering a new segment. I assume this is because there is no expectation that this would ever be called from different threads?
It's not practically a problem for my particular use case, but it would be problematic to introduce a code path that is able to be called at any time a publisher or subscriber takes or receives a message, that is not thread safe.

There is a related issue #1701. We need to check this.

My idea was to call cudaHostRegister in the PublisherPortUser not in the MemoryManager

On second thought and further study of the current architecture, I think maybe it might actually make sense for the ChunkSender to do this, since the ChunkSenderData is where the memory info gets stored, and the ChunkSender is responsible for

allocating and freeing memory chunks.

So basically, to avoid errors in construction we use the builder type for the chunk sender also, or we alternatively add a tryAllocateHint method which would be used by the chunkSender to both get the index of the matching mempool and cache it, as well as do the cuda stuff if appropriate.
For simplicity it probably suffices to make the hint that the chunkSender stores be a single tuple of ChunkSettings to uint32_t which is just a lastUsedHint. If the requested chunk settings change, the sender gets a new hint, attempts to register with CUDA again, and uses the new hint to get a chunk.
The CUDA calls themselves will be cached by the global registry so even if we end up back at the same hint it will become a noop.

I need to think more about this. Unfortunately I'm traveling at the end of the week till next week and won't have much time. Please ping me again for this if I forget to respond.

That's okay. I'm also traveling as well until next Wednesday (It is a holiday weekend in the U.S.). Funnily enough - I am flying to Oahu tomorrow.

There is a related issue https://github.com/eclipse-iceoryx/iceoryx/issues/1701. We need to check this.

So I've thought about it and it seems possible but very difficult to create a situation where one calls e.g. RegisterPtr from multiple threads. You'd have to be creating shared memory pools in different threads and registering them concurrently, for some reason, without knowing in advance what id you want to assign them.
For this CUDA registry we can possibly get around this problem by registering with a combination of the memory pool id and the segment id.
As for the "duplicate registration" race condition. If this occurs CUDA will set an error code along the lines of "This overlaps with some memory that is already registered". We could choose to ignore that one... though it hides other logic errors like actually accidentally overlapping memory pool info.

That's okay. I'm also traveling as well until next Wednesday (It is a holiday weekend in the U.S.). Funnily enough - I am flying to Oahu tomorrow.

It's been a while since I've been there. Unfortunately it's a bit far away from my place. Have fun :)

@MatthiasKillat in case you are interested in the CUDA stuff :)

Ah... but this approach runs into one more problem. Because of access controls we don't actually know which segment a message is going to come from, and therefore cannot acquire the memoryManager information the way the publisher does

What about this alternative approach - We leverage the fact that the PoshRuntime has access to the segment manager via the IpcRuntimeInterface. The segment manager in turn has a public API to return all the SegmentMappings. Interestingly here we also have the MemoryInfo struct that is key to supporting this feature.
My thought is - what if we extend this SegmentMapping struct to include a const pointer to the memory manager for the segment? This would expose the getMemPoolInfo and getMemPoolHint methods, thus allowing with my other proposed changes above for the runtime itself to have access to all of the memory managers.
Then, when creating a subscriber, the runtime can simply do an additional step to use either a template type size info or some size hints in the untyped API to find all memory pools the subscriber may read from and preemptively pin them.
In addition to this, we would still do a check when dequeuing a message in the subscriber that the owning memory pool has been pinned, but this check would likely be a noop unless the message we received is a different size than we expected.

I've been busy with other stuff the last days. Will have a look at your ideas tomorrow.

Another idea along this line - if I expose the ability for the PoshRuntime itself to iterate over SegmentMappings, and the segment mappings in exchange exposed info about individual memory pools, then perhaps we could allow configuring MemoryInfo at the MemPool level such that the following behavior happens:

When initializing the runtime, we call cudaHostRegister on every memory pool with memoryType=CUDA_HOST_PINNED
When a publisher loans a message, it must use a memory pool with a memory type matching that of its own PortConfigInfo. Following 1, this memory will have already been pinned.
A subscriber can only receive messages from publishers with a matching memory type. Following 1. and 2. this would mean that the memory backing any of these messages must have already been pinned.

I'm currently making me familiar with the code again. Regarding your last idea. If the number of pinned MemPools need to be minimal, this would not work since we do not know which MemPool a publisher or subscriber will use. We would basically need to pin the whole shared memory segment. Maybe I misunderstood your idea

Ah no, you are right and I got too ahead of myself here.
We of course do not want to go around pinning every single memory pool that might "support it" in every single process because each given process probably only really cares about sending/receiving messages on one or a few memory pools.
So I'll backtrack again to the idea that, when creating a subscriber, the runtime goes through each data segment (if there are multiple) and pins the memory pools that match

The size of the templated type - for typed subscribers
The sizes provided in a vector of size hints - for untyped subscribers

And in order to support untyped subscribers, we would still need a code path as well to check, upon receipt of a message, if this message came from a new memory pool which has not yet been registered, in which case we simply eat the cost to pin the memory at this time.


C# 8 Support

Is your feature request related to a problem? Please describe.
Currently using bot-framework SDK locks down C# version of the project to the greatest version of the package which in this case is the C# version of bot-framework.
Describe the solution you'd like
Support C# v8 so we can use the new C# features in a project.
Describe alternatives you've considered
None
Additional context
None
[enhancement]

We planned to address this in upcoming release (R7 around December 10).

I'm looking at this today, and will report back.

Our packages are built using 'latest' as the binding target for language version:
  <PropertyGroup>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>

This is pushed across all of our packages via the directory.build.props file.
We cannot switch to this "8", as we target NetCore 2.1 as part of our test and regression suite.
As I understand this article our targeting using "latest" seems the correct choice based on how we compile and test.
To check this works, I've written the following code (note the C# 8 syntax, of a static method). This code pulls in the Bot Framework 4.6.3, and creates an Activity just to make sure it can.
    class Program
    {
        static void Main(string[] args)
        {
            Activity foo = new Activity();
            foo.Text = "test";

            int y = 5;
            int x = 7;
            Console.WriteLine(foo.Text + " " + Add(x, y));

            static int Add(int left, int right) => left + right;
        }
    }

When run, this results in:

And confirming that the project is indeed .Net Core, here's my csproj file:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Bot.Builder" Version="4.6.3" />
  </ItemGroup>

</Project>

Given the above, I think we're good and doing the right thing.


Captcha loading error in Signup page

FatalErrorException in CaptchaBuilder.php line 320:
Call to undefined function Gregwar\Captcha\imagettfbbox()
giving this when loading user/signup page

Did you install GD Library or Imagick?

yes. That's the issue. Thanks mate.


Use fork of prost with changes to decode_varint_slice

This PR should not be merged.
I was reading the article yesterday and made some changes that allowed me to see a lot of time being spent in decode_varint:

This is with using the following patch (prost is the latest master commit):
diff --git a/Cargo.lock b/Cargo.lock
index 91cbb1d..b5925bb 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -833,7 +833,6 @@ dependencies = [
 [[package]]
 name = "prost"
 version = "0.12.4"
-source = "git+https://github.com/landaire/prost?branch=varint_slice_perf#5b9cce67e7f46dfe8f9d64b97b21d6ba9d8883b1"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -863,10 +862,9 @@ dependencies = [
 [[package]]
 name = "prost-derive"
 version = "0.12.4"
-source = "git+https://github.com/landaire/prost?branch=varint_slice_perf#5b9cce67e7f46dfe8f9d64b97b21d6ba9d8883b1"
 dependencies = [
  "anyhow",
- "itertools 0.12.1",
+ "itertools 0.10.5",
  "proc-macro2",
  "quote",
  "syn",
diff --git a/Cargo.toml b/Cargo.toml
index 297e370..4d79a8e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,7 +18,7 @@ prost = "0.12"
 criterion = "0.5"

 [patch.crates-io]
-prost = { git = "https://github.com/landaire/prost", branch = "varint_slice_perf" }
+prost = { path = "../prost" }

 [[bench]]
 name = "prom_decode"
diff --git a/src/prom_write_request.rs b/src/prom_write_request.rs
index 55e1bf2..5db4ec8 100644
--- a/src/prom_write_request.rs
+++ b/src/prom_write_request.rs
@@ -163,9 +163,11 @@ impl TimeSeries {
 }
 impl ::core::default::Default for TimeSeries {
     fn default() -> Self {
+        let labels = RepeatedField::from_vec(Vec::with_capacity(8));
+        let samples = RepeatedField::from_vec(Vec::with_capacity(8));
         TimeSeries {
-            labels: ::core::default::Default::default(),
-            samples: ::core::default::Default::default(),
+            labels,
+            samples,
         }
     }
 }
@@ -236,8 +238,9 @@ impl WriteRequest {

 impl Default for WriteRequest {
     fn default() -> Self {
+        let timeseries = RepeatedField::from_vec(Vec::with_capacity(2048));
         WriteRequest {
-            timeseries: Default::default(),
+            timeseries,
         }
     }
 }

This removes any noise from reallocating vectors, but is kind of cheating for this scenario and should only serve to reduce noise.
The two biggest areas for improvement now are in the RepeatedField<T>::push_default() and prost::encoding::decode_varint() functions. I decided to look at the latter and noted a couple things (reference: https://github.com/tokio-rs/prost/blob/e3deaa200b3a5500bf0403325d02716973b7296a/src/encoding.rs#L57)

There's a fast path for 1-byte varints
There's an optimized path that has a pre-unrolled loop for undetermined-length varints when the total length of the buffer is > 10 or the last byte of the buffer is < 0x80.
There's a "slow" path that uses an iterative solution

Point 1 is fine
Point 3 I think is fine
Point 2 I think has some problems:

In decode_varint() we check the same conditions that decode_varint_slice() asserts on, and even though decode_varint_slice() is marked as #[inline] I don't think the optimizer will remove these duplicate checks since the behavior of the conditions is different. In decode_varint() failing the checks will result in decode_varint_slow() being called and failing in decode_varint_slice() results in an assertion failure. I did not verify this by looking at the assembly.

Edit: It does indeed get optimized away (see LBB0_2, LBB0_3): https://rust.godbolt.org/z/36Tob4j6o

decode_varint() has two conditions in its main body: the byte value is < 0x80 or < 2 (checking for presence of another byte and overflow, respectively). I'm not sure if this makes a practical impact, but if we can eliminate both of these conditions or front-load them we may be able to speed things up.

I took a stab at rewriting this logic using safe Rust and iterators here: https://github.com/tokio-rs/prost/compare/master...landaire:prost:varint_slice_perf
Assembly comparison: original, modified.
My solution looked somewhat like the slow path and handles all cases of both slow/fast path, so I also removed the slow path code. All prost tests pass.
For this benchmark it resulted in a 37% perf increase:
decode/pooled_write_request
                        time:   [1.0516 ms 1.0549 ms 1.0589 ms]
                        change: [-37.862% -37.499% -37.163%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  5 (5.00%) high severe

For the prost benchmarks the numbers are a little iffy:
❯ cargo bench -- decode
   Compiling prost v0.12.4 (/private/tmp/prost)
warning: function `decode_varint_slow` is never used
   --> src/encoding.rs:117:4
    |
117 | fn decode_varint_slow<B>(buf: &mut B) -> Result<u64, DecodeError>
    |    ^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(dead_code)]` on by default

warning: `prost` (lib) generated 1 warning
    Finished bench [optimized + debuginfo] target(s) in 1.55s
     Running benches/varint.rs (target/release/deps/varint-5c567e9ac0b3a83e)
varint/small/decode     time:   [31.219 ns 31.280 ns 31.353 ns]
                        change: [-84.681% -84.537% -84.409%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  2 (2.00%) low mild
  1 (1.00%) high mild
  9 (9.00%) high severe

varint/medium/decode    time:   [245.08 ns 245.73 ns 246.46 ns]
                        change: [+11.111% +11.777% +12.524%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 6 outliers among 100 measurements (6.00%)
  2 (2.00%) high mild
  4 (4.00%) high severe

varint/large/decode     time:   [395.33 ns 396.75 ns 398.51 ns]
                        change: [+17.478% +18.077% +18.702%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) low mild
  3 (3.00%) high mild
  3 (3.00%) high severe

varint/mixed/decode     time:   [258.95 ns 259.78 ns 260.79 ns]
                        change: [-7.8103% -7.1917% -6.5964%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  4 (4.00%) high mild
  3 (3.00%) high severe

And viewing the performance of the benchmark under a flamegraph shows that we no longer even see decode_varint in the sampling!

I would ask if you could try out my branch to see if you can reproduce these results. The PR here is just for the sake of showing using my branch of prost as a patched dependency.

I failed to recognize that the slow path exists for scenarios where buf is not contiguous. The conditions though in decode_varint() are what really kill perf. In fact, making it an if {} else {} with the current unrolled loop is better than my rewrite.

That's really cool! I reproduced you result on the same machine.
$ cargo bench -- decode/pooled_write_request
    Finished bench [optimized] target(s) in 0.06s
     Running unittests src/lib.rs (target/release/deps/bench_prom-4775082acf9e7701)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s

     Running benches/prom_decode.rs (target/release/deps/prom_decode-6ac74029ce805ccf)
Gnuplot not found, using plotters backend
Benchmarking decode/pooled_write_request: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 5.3s, enable flat sampling, or reduce sample count to 60.
decode/pooled_write_request
                        time:   [1.0400 ms 1.0411 ms 1.0423 ms]
                        change: [-0.3906% -0.1422% +0.0883%] (p = 0.25 > 0.05)
                        No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) low mild
  1 (1.00%) high severe

I failed to recognize that the slow path exists for scenarios where buf is not contiguous.

Is these changes you made to prost still correct?

Is these changes you made to prost still correct?

No, unfortunately not -- at least not for the general case. For the purposes of your benchmark, or if you are 100% certain you will never have a fragmented Buf it's correct. If for some reason your input buffer is not contiguous it will fail when reading a varint that crosses two chunks which are discontinous.
I'm trying to figure out how the this if condition could be rewritten to result in faster code (I.e. pleasing the branch predictor): https://github.com/tokio-rs/prost/blob/e3deaa200b3a5500bf0403325d02716973b7296a/src/encoding.rs#L54-L63
I found that rewriting it in a few different ways, including adding an extra condition, seems to speed up the prost benchmarks but not the Greptime benchmark. For example:
    if len >= 10 || len == rem {
        let (value, advance) = decode_varint_slice(bytes)?;
        buf.advance(advance);
        Ok(value)
    } else {
        decode_varint_slow(buf)
    }
}

This yields the following results in prost benchmarks:
varint/small/decode     time:   [32.028 ns 32.147 ns 32.279 ns]
                        change: [-84.245% -84.141% -84.048%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
  3 (3.00%) high mild
  2 (2.00%) high severe

varint/medium/decode    time:   [154.64 ns 155.26 ns 155.99 ns]
                        change: [-29.224% -28.274% -27.316%] (p = 0.00 < 0.05)
                        Performance has improved.

varint/large/decode     time:   [307.91 ns 309.42 ns 311.17 ns]
                        change: [-9.2315% -8.4735% -7.5222%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
  4 (4.00%) high mild
  2 (2.00%) high severe

varint/mixed/decode     time:   [224.22 ns 228.21 ns 233.62 ns]
                        change: [-17.977% -16.333% -13.952%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) high mild
  6 (6.00%) high severe

But again, no change in Greptime benchmarks.
I think this certainly highlights though that there are additional tradeoffs that were made, like accounting for discontiguous memory, that are not present in the Go version of protobuf.
This seems like the perfect case for specialization if it's ever stabilized...

My latest change (https://github.com/tokio-rs/prost/commit/7c6da11d342c766e1677ed9e48c3a5f6b5cc5bb5) on the same branch handles non-contiguous memory and for me saw a 19.318% performance improvement:
decode/pooled_write_request
                        time:   [1.3654 ms 1.3715 ms 1.3807 ms]
                        change: [-19.858% -19.318% -18.595%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
  4 (4.00%) high mild
  2 (2.00%) high severe

Curiously though prost's benchmarks still show otherwise overall:
varint/small/decode     time:   [97.933 ns 98.461 ns 99.137 ns]
                        change: [-53.961% -53.067% -52.354%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 15 outliers among 100 measurements (15.00%)
  4 (4.00%) high mild
  11 (11.00%) high severe

varint/medium/decode    time:   [273.87 ns 276.03 ns 278.71 ns]
                        change: [+22.922% +24.307% +25.636%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  9 (9.00%) high mild
  1 (1.00%) high severe

varint/large/decode     time:   [392.60 ns 400.02 ns 410.31 ns]
                        change: [+15.371% +20.303% +27.681%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 14 outliers among 100 measurements (14.00%)
  1 (1.00%) high mild
  13 (13.00%) high severe

varint/mixed/decode     time:   [284.02 ns 284.36 ns 284.81 ns]
                        change: [+3.9519% +4.4581% +4.9251%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  4 (4.00%) high mild
  6 (6.00%) high severe


View and edit relationship associations in API ModelViewSets

As ...
Austin - Network Automation Engineer
I want ...
To be able to retrieve and update relationship associations in the same API endpoints as the actual objects I am trying to use with relationships
So that ...
I have a similar experience in the API with relationships as I do with custom fields, instead of having to deal with relationship associations in an entirely separate set of endpoints.
I know this is done when...

[x] #1887
[x] #1888

Optional - Feature groups this request pertains to.

[X] Automation
[ ] Circuits
[ ] DCIM
[ ] IPAM
[ ] Misc (including Data Sources)
[ ] Organization
[ ] Plugins (and other Extensibility)
[ ] Security (Secrets, etc)
[ ] Image Management
[ ] UI/UX
[ ] Documentation
[ ] Other (not directly a platform feature)

Database Changes
No response
External Dependencies
No response
Requirements

"relationships" should be an opt-in field to maintain performance on the default query (particularly GET)
PATCH, PUT should work as expected

Is there any remaining work for this epic now that #2092 is merged?

@bryanculver @lampwins Can we close this epic as completed?


Adding sparse lookup tables (Sparse, Reset,  Bits16)

Needed for Keccak, making this PR independent of the chain of PRs so it can be merged in advanced.
Revival of https://github.com/o1-labs/proof-systems/pull/1243 which got merged non-intendedly.
It creates a 2-column lookup table containing the 2^16 elements and their expansion to 64 bits.
~Still pending to figure out if this is enough (together with some logic changes in the lookup argument to look at single columns) or if we need 3 tables instead (to have access to each column separately), or if we prefer to have more columns in the gate.~
It additionally creates two more tables containing the above columns separately.
Closes https://github.com/o1-labs/proof-systems/issues/1223

Closing because this is only relevant in mips


Remove Duplicate From an Unsorted Linked List In C

🚀 Feature
(A clear and concise description of what the feature is.)
Have you read the Contributing Guidelines on Pull Requests?
(Write your answer here.)
Motivation
(Please outline the motivation for the proposal.)
Given a linked list , remove the duplicate in the linked list without using temporary buffer
Pitch
(Please explain why this feature should be implemented and how it would be used.)
Removing duplicates in an unsorted linked list helps us understand, how to use two pointer algorithm in a efficient manner to remove the duplicates

/assign


[FIX (tools/script)] #55232 - Fixed Type Check error in editor tests

This pull request resolves the issue related to the focus editor function on the browser. The necessary changes have been implemented to ensure that the editor correctly gains focus when expected, improving the user experience.
Checklist

I have read and followed the contribution guidelines.
I have read and followed the how to open a pull request guide.
My pull request targets the main branch of freeCodeCamp.
I have tested these changes either locally on my machine, or GitPod.

Closes - #55232
Description of Changes

Fixed the focus editor function to ensure it works as expected on the browser.
Conducted testing locally to confirm the resolution of the issue.
Updated relevant documentation and comments for clarity.

Hello there,
This PR deletes the whole codebase. As such, we are never going to merge it.
Please read our contributors guide for our suggested PR workflow.


regex_revalidate: optionally retain rule epoch state across restarts

With this --state-file/-f  option defined the regex_revalidate plugin will write out the current loaded ruleset with included epoch rule epoch time.
When ats is restarted the regex_revalidate plugin will load the regex_revalidate.config file, load this state file, update the epoch time of any matching rule, then immediately write out a new state file.
Every time the regex_revalidate.config file is reloaded a new state file will be generated.
This has been added to counteract any ill affects of using the new regex_revalidate MISS type (marking an asset as MISS instead of the default STALE).

[approve ci freebsd]


Feature/98/create-contact-section

📞Create Contact Section #98
🔍 What's Included

Added new SVG assets for the contact section including icons and decorative elements.
Implemented ContactSection component.
Utilized absolute positioning to let the hawk SVG to dynamically overlap adjacent sections.

(Pro tip: Throw in the WIP Meet the Team section from https://github.com/LaurierHawkHacks/Landing/pull/112 to preview the overlapping.)

📁 Files Affected:

src/assets/contact/*.svg
src/components/sections/Contact.section.tsx
src/components/index.tsx and src/pages/Landing.tsx

The email input is a little weird... Not sure if its after the merge conflict lol.

Noticed it after the merge too, fixed it up (along with the bird I spent like 45 minutes trying to get to work) and it finally looks good to me! 😭

Also, the email input gets covered. Would love to see the whole thing.
Instead of leave space at the right input to break it, you could use grid to put the input and the button nicely imo :D

Screencast from 03-03-2024 11:19:46 PM.webm
Did not find this issue with the navbar on the main branch so I am going to drop it here.

Screencast.from.03-03-2<IP_ADDRESS>.PM.webm
Did not find this issue with the navbar on the main branch so I am going to drop it here.

Looks like outdated navbar code to me. I tried moved a later version of navbar.tsx from a branch where it's working as expected, and everything looks good now 🔥


[CI] Ignore documentation changes for bump test

Currently the chart test fails requiring a bump if documentation has changes. This should not be the case as documentation changes are not considered in semantic versioning.
For example this happened in #27.

Version bumps are required for documentation updates to be displayed.


Further optimization of category dropdown

          @AnninaWalker @ptbrowne do you think we can (find a way) to incoporate the additional text shown below in bold in the dropdown (would need to work for all languages)?

H1: 1-Zimmerwohung
H2: 2-Zimmerwohnung
H3: 3-/4-Zimmerwohnung, geringer Verbrauch
H4: 4-Zimmerwohnung, höherer Verbrauch
Originally posted by @sosiology in https://github.com/visualize-admin/electricity-prices-switzerland/issues/55#issuecomment-1403895677

@ptbrowne thanks for creating a new issue for this. On hold for now, pending client feedback.


feat(merge-tree): enable new merge tree length calculations by default

Enables new merge tree length calculations by default. Resolves some related perf bugs by making segment cached length nullable. Hier segment cached length is undefined if the length of all child nodes is undefined.
ADO #4237, #4247, and #1882

Seems worthwhile to call this fix out in changelogs.

Feature request: the bot shouldn't comment about having a changeset if it's already done so in the past.

Feedback acknowledged! I'll look into this.


Update gps to v0.15.0

While we're waiting for #300, here's an update to gps. This is long overdue, and should fix a bunch of open issues.
Probably most visible in this update is that gps has been split into a few packages, including some internal ones (thanks, @narqo!), and gps.ListPackages() is now in the pkgtree subpackage.
Fixes #354, fixes #320, fixes #250, fixes #249, fixes #171

Should the minimum required version for github.com/sdboyer/gps in manifest.json also be updated to 0.15.0?

@jstemmer yes, yes it should!