seaweedfs 2.49 - weed server started with IPv4 address only listens on IPv6

version 8000GB 2.49 42fb03a linux amd64
I invoke weed server like this (via a systemd service that runs it under a "seaweedfs" user):
weed server -rack=aaa -ip=<IP_ADDRESS> -master.defaultReplication=010 -master.peers=<IP_ADDRESS>:9333 -filer=true -filer.port=8515 -filer.defaultReplicaPlacement=010 -volume.port=8526 -volume.max=56 -dir=/mnt/seaweedfs
<IP_ADDRESS> is also that same machine's IPv4. But this happens:
Log file created at: 2021/05/29 00:29:31
Running on machine: redacted
Binary: Built with gc go1.16.4 for linux/amd64
Log line format: [IWEF]mmdd hh:mm:ss threadid file:line] msg
I0529 00:29:31 50479 master.go:165] current: <IP_ADDRESS>:9333 peers:<IP_ADDRESS>:9333
I0529 00:29:31 50479 file_util.go:23] Folder /mnt/seaweedfs Permission: -rwxr-xr-x
I0529 00:29:31 50479 master.go:165] current: <IP_ADDRESS>:9333 peers:<IP_ADDRESS>:9333
I0529 00:29:31 50479 file_util.go:23] Folder /mnt/seaweedfs Permission: -rwxr-xr-x
I0529 00:29:31 50479 master_server.go:114] Volume Size Limit is 30000 MB
I0529 00:29:31 50479 master_server.go:206] adminScripts:
  lock
  ec.encode -fullPercent=96 -quietFor=3h
  ec.rebuild -force
  ec.balance -force
  volume.balance -force
  volume.fix.replication
  unlock
I0529 00:29:31 50479 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp <IP_ADDRESS>:19333: connect: connection refused"
I0529 00:29:31 50479 master.go:120] Start Seaweed Master 8000GB 2.49 42fb03a at :9333
I0529 00:29:31 50479 raft_server.go:70] Starting RaftServer with <IP_ADDRESS>:9333
I0529 00:29:32 50479 raft_server.go:129] current cluster leader:
I0529 00:29:32 50479 master.go:143] Start Seaweed Master 8000GB 2.49 42fb03a grpc server at :19333
I0529 00:29:33 50479 masterclient.go:79] No existing leader found!
I0529 00:29:33 50479 raft_server.go:154] Initializing new cluster
I0529 00:29:33 50479 master_server.go:155] leader change event:  => <IP_ADDRESS>:9333
I0529 00:29:33 50479 master_server.go:157] [ <IP_ADDRESS>:9333 ] <IP_ADDRESS>:9333 becomes leader.
I0529 00:29:33 50479 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0529 00:29:35 50479 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0529 00:29:37 50479 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
[Omitted: Many repeats of that last line with newer timestamp]

I observe on "lsof -i -P -n | grep LISTEN" that weed seems to have started gRPC on port + 10000, but only listening on IPv6. No mention of IPv4:
[Omitted: Many unrelated ports]
weed      49099       seaweedfs    9u  IPv6 356380      0t0  TCP *:9333 (LISTEN)
weed      49099       seaweedfs   11u  IPv6 350869      0t0  TCP *:19333 (LISTEN)

I imagine this is the problem, but I can't figure out what made seaweedfs use IPv6 when an IPv4 address was specified. Nothing was using 9333 or 19333 on IPv4. Perhaps it is a bug?

use -ip.bind=xxx

The older -ip flag is now just a way to define an instance/hostname string?
weed      282333       seaweedfs    9u  IPv4 1816835      0t0  TCP <IP_ADDRESS>:9333 (LISTEN)
weed      282333       seaweedfs   11u  IPv4 1816836      0t0  TCP <IP_ADDRESS>:19333 (LISTEN)

Yes, -ip.bind works, although I couldn't figure out how to bind to * on ipv4 for further tests. Something still goes wrong:
Running on machine: redacted
Binary: Built with gc go1.16.4 for linux/amd64
Log line format: [IWEF]mmdd hh:mm:ss threadid file:line] msg
I0529 23:05:34 82333 master.go:165] current: <IP_ADDRESS>:9333 peers:<IP_ADDRESS>:9333
I0529 23:05:34 82333 file_util.go:23] Folder /mnt/seaweedfs Permission: -rwxr-xr-x
I0529 23:05:34 82333 master.go:165] current: <IP_ADDRESS>:9333 peers:<IP_ADDRESS>:9333
I0529 23:05:34 82333 file_util.go:23] Folder /mnt/seaweedfs Permission: -rwxr-xr-x
I0529 23:05:34 82333 master_server.go:114] Volume Size Limit is 30000 MB
I0529 23:05:34 82333 master_server.go:206] adminScripts:
  lock
  ec.encode -fullPercent=96 -quietFor=3h
  ec.rebuild -force
  ec.balance -force
  volume.balance -force
  volume.fix.replication
  unlock
I0529 23:05:34 82333 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp <IP_ADDRESS>:19333: connect: connection refused"
I0529 23:05:34 82333 master.go:120] Start Seaweed Master 8000GB 2.49 42fb03a at <IP_ADDRESS>:9333
I0529 23:05:34 82333 raft_server.go:70] Starting RaftServer with <IP_ADDRESS>:9333
I0529 23:05:34 82333 raft_server.go:129] current cluster leader:
I0529 23:05:34 82333 master.go:143] Start Seaweed Master 8000GB 2.49 42fb03a grpc server at <IP_ADDRESS>:19333
I0529 23:05:35 82333 masterclient.go:79] No existing leader found!
I0529 23:05:35 82333 raft_server.go:154] Initializing new cluster
I0529 23:05:35 82333 master_server.go:155] leader change event:  => <IP_ADDRESS>:9333
I0529 23:05:35 82333 master_server.go:157] [ <IP_ADDRESS>:9333 ] <IP_ADDRESS>:9333 becomes leader.
I0529 23:05:35 82333 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0529 23:05:37 82333 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
[Last line repeats]

Seems like the volume server tries to connect to <IP_ADDRESS>:19333 before master is running and obviously fails. But even after it is started (I see the web interface at <IP_ADDRESS>:9333, with no volumes) there is still the repeating error at the end of the log. Does it actually give up on retrying gRPC on IPv4 after the first failure or such?

Almost the same error on the 2.50 release when using explicit ip.bind to <IP_ADDRESS> as in the last comment. It now just alternates between two different error messages with an new "use of closed network connection":
Running on machine: redacted
Binary: Built with gc go1.16.4 for linux/amd64
Log line format: [IWEF]mmdd hh:mm:ss threadid file:line] msg
I0531 15:28:25 18059 master.go:165] current: <IP_ADDRESS>:9333 peers:
I0531 15:28:25 18059 file_util.go:23] Folder /mnt/seaweedfs Permission: -rwxr-xr-x
I0531 15:28:25 18059 master.go:165] current: <IP_ADDRESS>:9333 peers:<IP_ADDRESS>:9333
I0531 15:28:25 18059 file_util.go:23] Folder /mnt/seaweedfs Permission: -rwxr-xr-x
I0531 15:28:25 18059 master_server.go:114] Volume Size Limit is 30000 MB
I0531 15:28:25 18059 master_server.go:206] adminScripts:
  lock
  ec.encode -fullPercent=96 -quietFor=3h
  ec.rebuild -force
  ec.balance -force
  volume.balance -force
  volume.fix.replication
  unlock
I0531 15:28:25 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp <IP_ADDRESS>:19333: connect: connection refused"
I0531 15:28:25 18059 master.go:120] Start Seaweed Master 8000GB 2.50 4233ad3 at :9333
I0531 15:28:25 18059 raft_server.go:70] Starting RaftServer with <IP_ADDRESS>:9333
I0531 15:28:25 18059 raft_server.go:129] current cluster leader:
I0531 15:28:25 18059 master.go:143] Start Seaweed Master 8000GB 2.50 4233ad3 grpc server at :19333
I0531 15:28:26 18059 masterclient.go:79] No existing leader found!
I0531 15:28:26 18059 raft_server.go:154] Initializing new cluster
I0531 15:28:26 18059 master_server.go:155] leader change event:  => <IP_ADDRESS>:9333
I0531 15:28:26 18059 master_server.go:157] [ <IP_ADDRESS>:9333 ] <IP_ADDRESS>:9333 becomes leader.
I0531 15:28:26 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0531 15:28:28 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = use of closed network connection
I0531 15:28:30 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0531 15:28:32 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0531 15:28:34 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0531 15:28:35 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = use of closed network connection
I0531 15:28:37 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0531 15:28:39 18059 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = use of closed network connection
[

The logs showed -ip.bind was not configured.

That was before the additional error which now happens in 2.50. What runs is currently:
CGroup: /system.slice/seaweedfs.service
             └─261144 weed server -rack=aaa -ip.bind=<IP_ADDRESS> -master.defaultReplication=010 -master.peers=<IP_ADDRESS>:9333 -filer=true -filer.port=8515 -filer.defaultReplicaPlacement=010 -volume.port=8526 -volume.max=56 -dir=/mnt/seaweedfs

I deleted the older logs prior to restarting to be certain this can only be from the current attempt:
Log file created at: 2021/06/01 06:57:24
Running on machine: redacted
Binary: Built with gc go1.16.4 for linux/amd64
Log line format: [IWEF]mmdd hh:mm:ss threadid file:line] msg
I0601 06:57:24 61144 master.go:165] current: <IP_ADDRESS>:9333 peers:<IP_ADDRESS>:9333
I0601 06:57:24 61144 file_util.go:23] Folder /mnt/seaweedfs Permission: -rwxr-xr-x
I0601 06:57:24 61144 file_util.go:23] Folder /mnt/seaweedfs Permission: -rwxr-xr-x
I0601 06:57:24 61144 master.go:165] current: <IP_ADDRESS>:9333 peers:<IP_ADDRESS>:9333
I0601 06:57:24 61144 master_server.go:114] Volume Size Limit is 30000 MB
I0601 06:57:24 61144 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp <IP_ADDRESS>:19333: connect: connection refused"
I0601 06:57:24 61144 master_server.go:206] adminScripts:
  lock
  ec.encode -fullPercent=96 -quietFor=3h
  ec.rebuild -force
  ec.balance -force
  volume.balance -force
  volume.fix.replication
  unlock
I0601 06:57:24 61144 master.go:120] Start Seaweed Master 8000GB 2.50 4233ad3 at <IP_ADDRESS>:9333
I0601 06:57:24 61144 raft_server.go:70] Starting RaftServer with <IP_ADDRESS>:9333
I0601 06:57:24 61144 raft_server.go:129] current cluster leader:
I0601 06:57:24 61144 master.go:143] Start Seaweed Master 8000GB 2.50 4233ad3 grpc server at <IP_ADDRESS>:19333
I0601 06:57:25 61144 masterclient.go:79] No existing leader found!
I0601 06:57:25 61144 raft_server.go:154] Initializing new cluster
I0601 06:57:25 61144 master_server.go:155] leader change event:  => <IP_ADDRESS>:9333
I0601 06:57:25 61144 master_server.go:157] [ <IP_ADDRESS>:9333 ] <IP_ADDRESS>:9333 becomes leader.
I0601 06:57:26 61144 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0601 06:57:27 61144 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
I0601 06:57:29 61144 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = write tcp <IP_ADDRESS>:48766-><IP_ADDRESS>:19333: write: broken pipe
I0601 06:57:31 61144 volume_grpc_client_to_master.go:42] checkWithMaster <IP_ADDRESS>:9333: get master <IP_ADDRESS>:9333 configuration: rpc error: code = Unavailable desc = connection closed
[+ repetitions]

Maybe try to make it reproducible via some docker instance first.

I can check if it works in Podman (no Docker on that machine, unfortunately). Seems like the default compose setup is running the parts individually rather than all in one - I'll try that.

Figured it out thanks to trying more with the containers.
These remaining issues were not due to IPv4/IPv6 networking but the security certificates coincidentially had additionally expired just now (they have a short expiration time based on certstrap defaults). Results in the above errors and weed shell hanging rather than more obvious verbose complaints about expired certificates, apparently.

Thanks for the update!


Application portal - background

Problem
Implement background component for the portal Jira.
Solution
What I/we did to solve this problem

Added hills.svg and waves.svg from figma

waves.svg is set to be stretchable according to the design
The background should adjust based on the height of the content

Also moved &__box to ApplicationForm and ApplicationStatus

Change Summary:

Add portal background from figma

Dev-Ops
If you added an ENV variable, please check off that you've updated the following

[ ] Key & Sample value to .env & sample.env
[ ] GCP Secret Manager (Both development and production)
[ ] Github Secrets (Added a development and production variable)
[ ] Github Workflows .github/workflows/dev.yml & .github/workflows/prod.yml
[ ] webpack-config.js

Images/Important Notes (optional):

Hmm, I'm assuming the feature/application-portal branch is also failing the lint test, since I didn't touch src/views/Portal/components/FormInputs/Radio/index.scss. Will resolve this shortly.

Yeah I'm looking at your changes and I don't see the linter error there so it probably existed already on the branch.


Fix Markdown image attr. 'loading'

There are 2 issues in grav/common/page/markdown/Excerpts::processMediaActions() that prevents the loading attribute for images to be set properly in Markdown.

Line 281: $defaults = $config['images']['defaults'] ?? [];
Config settings are not picked up.

Should be $defaults = $this->config['images']['defaults'] ?? [];

Line 284: if (!array_search($method, array_column($actions, 'method'))) {
array_search returns (in above use) an int, or false. When value is found at position 0 the negation will return true and hence, explicit value set in Markdown will be overridden by value from config.

Should use strict comparison: if (array_search($method, array_column($actions, 'method')) === false) {

What I'm still missing in the implementation of loading is the implementation of the default in Twig.
That means that theme templates must be updated because {{ image.html() | raw }} will not pickup the default loading.


Not working with version 1.1

Needs Updating to 1.1,
Changed the info.json file to factorio_version: 1.1 then went into a game and tried to use it and it came up with this
The mod Combinator Graph Generator (1.0.0) caused a non-recoverable error.
Please report this error to the mod author.
Error while running event combinatorgraph::on_player_selected_area (ID 50)
combinatorgraph/control.lua:5: attempt to index local 'condition' (a nil value)
stack traceback:
combinatorgraph/control.lua:5: in function 'ConditionLabel'
combinatorgraph/control.lua:120: in function '?'
combinatorgraph/control.lua:325: in function 'EntityLabel'
combinatorgraph/control.lua:364: in function 'GraphCombinators'
combinatorgraph/control.lua:395: in function <combinatorgraph/control.lua:393>
Dont know enough programing to fix it

I believe this was fixed with mod version 1.1.0


Electron app crashes due to noble-uwp

I am using electron app to connect to multiple devices. The app crashes randomly (not every time) after different amount of up time. I was able to capture stack trace during one of the crashes. I have attached it.

Looks like a bug in NodeRT. Unfortunately that project isn't very actively maintained anymore. Another reason to consider not using NodeRT for this project. But I personally don't have time to work on a replacement.

Any update !! getting the same crash !! How to resolve this?


Fix FileSpec so it only tests what it tests

It was overspecified, and didn't take umask into account.
Fixes #122

To validate this pull request against other sbt modules, please visit this link.


When loaded data is updated, cardsliders disappear

I'm using FirebaseUI Library to get images from my database to appear on the cardslider, and it works perfectly. But whenever I update that data or add a new item, cardsliders disapear and doesn't come back unless I close my app and reopen it.
What might be wrong? Any idea? Thank you.

Yes, there is a bug. I will try to fix it soon.

is it fix already? Thank you so much!


wasm: fix xds node during configuration

Commit Message: fixes an early exit due to empty stream info when calling xds attributes during configuration
Additional Description:
Risk Level: low
Testing: added
Docs Changes:
Release Notes: none

/retest

/retest


Find references for table and codeunit triggers

Can we get code reference information on the following:

Table triggers (insert, modify, delete, rename)
Codeunit onRun

Hi,
I propose a related enhacement in  "Go to reference" and "Find All References" commands of AL Language in VSCode: show trigger / method before the references found.
Example: first image shows current behaviour and the second image the new showing berfore the trigger or method:

Best regards,

Some parts of this were already implemented a few releases ago. Specifically, some events, triggers and built-in methods are searchable by find references.
We also have this idea planned for this issue: https://experience.dynamics.com/ideas/idea/?ideaid=56458708-fb7f-eb11-8ced-0003ff45d48e
Thus I will be closing this issue.


[BUG] admin > user list > view button

Hello, i have found a bug.
When you click on view button from user list in admin, you have an error.
The bug is here:
https://github.com/the-control-group/voyager/blob/1.2/resources/views/bread/read.blade.php
Line 82 :
@if (!empty(json_decode($data->{$row->field})))
@foreach(json_decode($dataTypeContent->{$row->field}) as $item)
need to be:
@if (!empty(json_decode($dataTypeContent->{$row->field})))
@foreach(json_decode($dataTypeContent->{$row->field}) as $item)
Thanks to fix it

From the issue-template.

The following information is required for bug reports.  Issues without it will be closed without response

This can be reopened once the required informations are provided.

Version information

Laravel: v5.8
Voyager: v1.2.1
PHP: 7.2
Database: MySQL 8

Description

When you click on view button from user list in admin, you have an error in the template file.
data is undefined.
Steps To Reproduce
Steps to reproduce the behavior:

Go to 'admin > user list'
Click on 'view button'
See error

Expected behavior
You should see user description.
Additional context
I give you the fix. You just add it on your next release...

From the issue-template.

The following information is required for bug reports.  Issues without it will be closed without response

This can be reopened once the required informations are provided.

i have added all details in my previous comment. Can you reopen ?

Fixed in https://github.com/the-control-group/voyager/commit/4ee291ff24a43a56bec5009601f7ce874b725838


Output the nightwatch screenshots to the $CIRCLE_ARTIFACTS directory

(instead of tests/frontend/output)
This will make it easier to see where end to end tests fail.
See https://circleci.com/docs/build-artifacts/
We should do that on website and app repos.

Were you able to tackle this @sedubois as part of your work with CircleCI?

I need to look a bit more, I don't think I can simply reference the CIRCLE_ARTIFACTS environment variable from nightwatch.json.

closing, no activity in 18months


Document about the linger in producer

Document about the linger behavior as mentioned in #799

Added the same information in a more integrated way here https://github.com/Parsely/pykafka/commit/858554029830e15cfa6d15df002d1772672d8ee0

Looks good. Thanks!


switchTO should shows the correct user message.

Expected behavior:
switchTo:
switchTo api only takes either url or page title.
If we use switchTo api without url or page title then it should show the user friend message to define the url.
Actual behavior
currently it shows the below message:
> switchTo()
 ✔ Switched to tab with URL undefined

Steps to reproduce
> openBrowser()
> goto("google.com")
> openTab("amazon.com")
> openTab()
> switchTo()

Versions
Version: 1.0.2 (Chromium: 76.0.3803.0) 22a7d58c629864e04042d4661046d0c3e8e802cd

When there is no URL given it switches to the first opened tab. This was done intentionally.

Fix availabe in 4aa423fae783d8be07387120da7773606dc50db8

Below is the current behaviour of switchTo api without url/page title:
> switchTo()  ✘ Error: The "targetUrl" argument must be of type string. Received type undefined, run .tracefor more info.
based on the observation issue has been verified and found fixed.
Tested version:
Version: 1.0.3 (Chromium: 76.0.3803.0) 4aa423fae783d8be07387120da7773606dc50db8


NOTE: If testing uvgRTP, please use --qp 32 or greater (or slower preset) for create.pl due to a bug

For uvgRTP, this bug is causing failure of high QP 4K streams. This seems to be an uvgRTP bug and not a problem with the benchmark.

This issue is no longer needed since most of the test runs can be completed. There will still be some failed test runs with uvgRTP, but those will hopefully be fixed in the near future.


[Tabs] Active tab cannon be seen when child of AppBar

Duplicates

[X] I have searched the existing issues

Latest version

[X] I have tested the latest version

Current behavior 😯
Without changing the default theme, the text color of an active tab is the same as its background color, which makes it invisible.
Other (non-active) tabs are displayed as expected.
Note: before upgrading to material v5 there was no issue.
Expected behavior 🤔
By default the text color of the active tab should be different than its background color.
Steps to reproduce 🕹
Steps:

Define a Tabs with 2 Tabs under an AppBar
Make sure one of the tabs is activated.
--> the active tab text cannot be seen

Minimum reproduction:
https://codesandbox.io/s/mui-v5-forked-gkx3v?file=/src/App.tsx
Context 🔦
No response
Your environment 🌎

`npx @mui/envinfo`
  Don't forget to mention which browser you used.
  Output from `npx @mui/envinfo` goes here.

Please check out: https://codesandbox.io/s/mui-v5-forked-lezli?file=/src/App.tsx
This is because AppBar and active Tab colors are the same.
Namaste

@Metheny80, as @abhinav-22-tech has shown, you need to customize either the AppBar or Tabs colors.

@abhinav-22-tech @mbrookes The Tabs background color is a result of the Tabs being under the AppBar.
If the Tabs are not under the AppBar then the background would be white.
Again, this started happening only in v5, and it seems to me that by default the theme should be working out of the box.

@Metheny80 Please check v4 docs https://v4.mui.com/components/tabs/#simple-tabs in this default color is white but in v5 https://mui.com/components/tabs/#basic-tabs default color is blue.
You can customize it according to your requirements.

See also: https://mui.com/guides/migration-v4/#tabs


Error: EOF while parsing a value at line 1 column 0

I'm getting the error EOF while parsing a value at line 1 column 0 whenever I'm doing reqwest::get("https://poloniex.com/public?command=returnChartData&currencyPair=BTC_LTC&start=1388534400&end=9999999999&period=300").
Why?
It works when I use https://poloniex.com/public?command=returnChartData&currencyPair=BTC_LTC&start=1514059300&end=1514060100&period=300.
Is it because the first request's response is 62MB while the 2nd is very small?
How can I use reqwest for doing requests with large responses?

Hm, there must be something more than just simply a reqwest::get, because when I try it myself (by editing the examples/simple.rs file), it fetches the URL with on problems. It sounds like some parsing is failing, are you using Response::json or something?


Fixes #17

The RFC number is 7807 and not 7809 .
It came to my notice when I was writing over : https://discourse.zendframework.com/t/feedback-on-problem-details-module/107 . Also noticed there was an issue https://github.com/Crell/ApiProblem/issues/17 which was not addressed for long time.
Also there is a question whether you have implemented the spec for it was linking to the draft (https://tools.ietf.org/html/draft-nottingham-http-problem-07) , and does the spec changed when they released the RFC ?

The 2.0 release and all future releases are based on the final RFC.  I apparently just typoed the RFC number. :-(  Thanks for the PR.


curl ifconfig.co returning CAPTCHA instead od IP address

Right now  curl ifconfig.co is returning HTML with CAPTCHA instead of IP addres

<title>Attention Required! | Cloudflare</title>
<meta name="captcha-bypass" id="captcha-bypass" />
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" type="text/css" media="screen,projection" />

Please enable cookies.

One more step

Please complete the security check to access ifconfig.co

Obviously other commands are not working too, retuning HTML instead od IP address, I believe it's some sort of misconfiguration but I might be wrong.

alternative
curl eth0.me
curl icanhazip.com
curl checkip.amazonaws.com
curl ifconfig.me
curl ipecho.net/plain

Due to the popularity of https://ifconfig.co (and increase in abusive traffic patterns) I had to put it behind Cloudflare some time ago. I have very little control over the heuristics Cloudflare uses to show that captcha and I have no interest in manually whitelisting IPs/subnets/ASNs.
If Cloudflare always gives you a captcha, I would suggest running echoip yourself (it can e.g. easily be deployed for free on Heroku), or using another similar service.
Thanks for understanding!

You don't have to whitelist IP addresses. Just whitelist the "T1" country in the control panel. For anyone else who sees this. Use ifconfig.me. they don't have this Cloudfail bull****.


chore(master): release 1.1.222

:robot: I have created a release beep boop
1.1.222 (2023-10-24)
Miscellaneous

deps: update dependency @types/node to v20 (8a3a751)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/wayofdev/keywind/releases/tag/v1.1.222 :sunflower:


Looking forward to get involved and contribute to the community 🎉

First Name
Harshit
Last Name
Aditya
Discord Username (if applicable)
HarshitAditya27#3789
Let us understand your motive.
I got to know about SidHacks from Twitter. I want to join the community to learn and contribute to open source community. I can contribute to the community by contributing to projects, can be work as a project admin also :).

Hey @HarshitAditya27 👋🏻
Thanks for requesting an invite! Welcome to SidHacks Community 🎉
Before going ahead, I would want you to complete the below To-Do list.
Your To-Do List ✔

Accept the invitation sent to you via mail.
Change the appearance of this organization to "Public" from the people list here.
Join our Discord Server here.

Accept the Rules from #📓〡rules channel.
Introduce yourself to our community in 👋〡introduction channel.

Feel free to share your excitement on socials with #SidHacksCommunity. You can also tag me @siddharth_hacks.

Close this issue once you complete all the above points.

Looking forward to interacting with you in our community! Welcome once again! 🤓


[BUG] { Failed to compile layer "/ScatterND": unsupported layer type "ScatterNDUpdate"}

An error occurred while converting OpenVINO to a blob.
Failed to compile layer "/ScatterND": unsupported layer type "ScatterNDUpdate"

Link

@friend045 you'll have to file a bug over at OpenVINO for this. Cc: @tersekmatija


@solid-primitives/i18n: Please provide sample app with SolidStart?

Probably it's just me but I'm struggling to get this library working with SolidStart.
I'm just trying the first basic example in a new (bare) SolidStart project, but I always get this error:

An error occured while server rendering /:
object is not iterable (cannot read property Symbol(Symbol.iterator))

The error occurs at this line:
const [t, {add, locale, dict}] = useI18n();
This is the first line of my Root component, so I don't know what I could do more?
Thanks a lot!

@JohanHeyvaert wanna PR an example, or share how you did this so I can submit one?

export default function Root() {
  return (
    <html lang="en">
      <I18nContext.Provider value={createI18nContext(dict, "en")}>
        {untrack(() => {
          const [t] = useI18n()
          return <><Head>
          <Title>{t('title')}<Title>
          <Meta charset="utf-8" />
          <Meta name="viewport" content="width=device-width, initial-scale=1" />
        </Head>
        <body>
          <ErrorBoundary>
            <Suspense>
              <Routes>
                <FileRoutes />
              </Routes>
            </Suspense>
          </ErrorBoundary>
          <Scripts />
        </body></>
        })}
      </I18nContext.Provider>
    </html>
  )
}

or
export default function Root() {
  const i18n = createI18nContext(dict, "en")
  const [t] = i18n

  return (
    <html lang="en">
      <I18nContext.Provider value={i18n}>
        <Head>
          <Title>{t('title')}<Title>
          <Meta charset="utf-8" />
          <Meta name="viewport" content="width=device-width, initial-scale=1" />
        </Head>
        <body>
          <ErrorBoundary>
            <Suspense>
              <Routes>
                <FileRoutes />
              </Routes>
            </Suspense>
          </ErrorBoundary>
          <Scripts />
        </body>
      </I18nContext.Provider>
    </html>
  )
}

something like that probably

solidjs.com should also be a good reference: https://github.com/solidjs/solid-site/blob/main/src/AppContext.tsx


how to not includes the header and footer texts when using .getTextContent()

Hi, When I get all the texts using .getTextContent() , I get the footer and header within the content. Such as the number of the pages or the title of the pdf book that is in the header/footer of each page.. Is there a setting or a way to not get footer and header texts? Thanks

The PDF format does not allow us to know what a header or footer is in the document; for the format every text is just a series of glyphs with a position. I can only imagine that you can request the coordinates along with the text and strip any text above or below a certain point, but that's about as far as you can go with the PDF format.


Modal not fixed in  iframe Safari iphone

os:  IOS 9.3.3
Browser: Chrome , Safari, Firefox
Mobile : iphone 5, 6
Bootstrap :  v4.0.0-alpha.2
On first image, I have form put into iframe.
On second imag,I have change location button that put into middle of the form above. when click will show modal.
   ...............................
On nexus 5 android version 6.0.1

When click change location button, it shows perfect. Header of modal show first.
Form behide of modal cannot scroll

On Iphone 5

When click change location button, it will show not right. Header of modal not show first. It relates to height of the iframe.
Form behide of modal can scroll
When show modal it will be put modal-open class into body in the iframe and modal-open class is overflow: hidden; but this css not working on iphone

On nexus 5 android version 6.0.1

Please open a separate issue for that. Much appreciated.

Also, we cannot debug screenshots. Please make a reduced test case using JS Bin (or similar).

On nexus 5 everything OK. I just show right case.

about on iPhone, I upload example code to my server
http://appsoftplus.com/index-test.html

There are 2 issues for iframe in Safari's iPhone from that example.

Modal doesn't show at the correct position (center of the page) if we put the button down at some level in the iframe (if we put the button at the beginning of iframe it's still works).
Contents inside iframe has been stop displayed for long contents (Cannot scroll down) on iPhone.

We've manually fix modal show incorrect position in iframe on iPhone by calling focus event again using javascript.It's works.

@psukmak Did you solve?

@chaiyot Did you solve？

@majianxiong No, I did not.  I waiting  update from bootstrap
but you can  ues manually fix:
$('#myModal').on('shown.bs.modal', function (e) {
// focus somewhere in modal
});
$('#myModal').on('hidden.bs.modal', function (e) {
// focus somewhere in body
});

But not in the middle

@psukmak  $(document).scrollTop() is zero

Relevant solutions：

<EMAIL_ADDRESS>

https://zafiel.wingall.com/archives/8198
There is no validated.

problem is resolved

about on iPhone, I upload example code to my server
http://appsoftplus.com/index-test.html

Copied to Plunker for durability: https://plnkr.co/edit/jYMgPUsBwAuTCCze3KWe?p=preview

Updated the Plunk: https://plnkr.co/edit/jYMgPUsBwAuTCCze3KWe?p=preview

Form behind of modal can scroll
When show modal it will be put modal-open class into body in the iframe and modal-open class is overflow: hidden; but this css not working on iphone

This portion seems to be referring to https://bugs.webkit.org/show_bug.cgi?id=153852 , which we've already reported to WebKit.

When click change location button, it will show not right. Header of modal not show first. It relates to height of the iframe.
[...]
Modal doesn't show at the correct position (center of the page) if we put the button down at some level in the iframe (if we put the button at the beginning of iframe it's still works).

I can confirm that the user sees the middle of the modal in iOS Safari and the top of the modal in Android Chrome, when the modal within the iframe is initially shown.
Will need to do some more testing to determine who's deviating from the standards and how.

I've also been having problems with this issue. See this JS Fiddle https://jsfiddle.net/tmfq0rnm/4/. It works perfectly everywhere except on iOS due to the iframe issue. On iOS tapping "Click here" will cause the iframe to jump to the bottom rather than to where the modal is displayed. Do we know what the status is of this issue? Is there a good fix for it in the meantime? Looking at the previous comments it seems like all the "fixes" may brake other things which I need to avoid.

I fixed this issue with the following solution:
$('#formViewIframe').load(function () {
resizeIframeForm();
}
function resizeIframeForm() {
if( (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {
	// block scroll for mobile;
	// causes underlying page to jump to top;
	// prevents scrolling on all screens
	$('body.modal-open').css('overflow', 'hidden');
	$('body.modal-open').css('position', 'fixed');
}

}

This is super stale, and I'm not seeing a clear issue anymore with a live demo. I updated the last Fiddle link to the latest version of v4.x and things look okay to me I think? https://jsfiddle.net/deghcsuv/
Closing out.

This is super stale, and I'm not seeing a clear issue anymore with a live demo. I updated the last Fiddle link to the latest version of v4.x and things look okay to me I think? https://jsfiddle.net/deghcsuv/
Closing out.


Update container-scanning pipeline to allow ignoring vulnerabilities

Background
We have a pipeline for scanning container images before they are published to ECR for internal use. The code for the pipeline can be found here (note that the code only lives in the initial-deploy branch): https://github.com/cloud-gov/container-scanning/tree/inital-deploy
The container scanning pipeline in CI can be found here: https://ci.fr.cloud.gov/teams/main/pipelines/container-scanning
Sometimes, the scanning tool that we are using, grype, may be detect vulnerabilities that are false positives or not relevant (as decided by the compliance team).
As a result, we want to implement the ability to ignore certain vulnerabilities across all of our scans in the container-scanning pipeline. grype has documentation for how to create a file with ignore patterns for vulnerabilities.
To do

[x] Create a new bucket in our Gov prod account: cg-container-scanning-config
[x] Create an empty grype.yaml file in the cg-container-scanning-config S3 bucket
[x] Add an S3 resource for the grype.yaml file to the container pipeline definition- name: grype-scan-ignore-config
  type: s3-simple
  source:
    bucket: cg-container-scanning-config
    region: us-gov-west-1
    path: grype.yaml

[x] Add the grype-scan-ignore-config resource as an input to the scanning configuration files:

https://github.com/cloud-gov/container-scanning/blob/inital-deploy/ci/conmon-scan-ecr-container.yml#L9
https://github.com/cloud-gov/container-scanning/blob/inital-deploy/ci/scan-container.yml#L9
https://github.com/cloud-gov/container-scanning/blob/inital-deploy/ci/scan-ecr-container.yml#L9

[x] Update the scanning script files to copy the ignore config to the location expected by grype: cp grype-scan-ignore-config ~/grype.yaml. Make sure this command runs before the grype command does

https://github.com/cloud-gov/container-scanning/blob/inital-deploy/ci/scan-container.sh
https://github.com/cloud-gov/container-scanning/blob/inital-deploy/ci/conmon-scan-ecr-container.sh
https://github.com/cloud-gov/container-scanning/blob/inital-deploy/ci/scan-ecr-container.sh

[x] Run a test by adding a  detected low-severity vulnerability to the grype.yaml file in S3 then re-running the container scanning pipeline to see if that vulnerability is ignored. If the test is successful, then updated grype.yaml to remove the ignored vulnerability, re-run the scan and verify that the vulnerability is detected again

Working on doing a test that the vulnerabilities are ignored

Troubleshooting grype ignore config as it is still not ignoring set vulnerabilities

The grype ignore configuration tested successfully. The grype.yaml file is being called by the scanning script and utilized as expected.

Re-opening this issue to fix the conmon scanning pipeline for grype ignore.

Modified the pipeline script by adding the following inputs to the scanning task, this fixed the missing inputs error.

get: grype-scan-ignore-config
trigger: true
Modified sh scan scripts by changing the input gype.yaml file path to grype-scan-ignore-config/grype.yaml and this fixed the no such file or directory error.


Reorganize regression metrics

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 100.00%. Comparing base (4dc9901) to head (2974893).
Report is 12 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #291   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files           98        98
  Lines         2360      2360
  Branches       214       214
=========================================
  Hits          2360      2360

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Latest release title typo

Congrats on the new release. The title of the latest release AI Code Review v0.2 is not available! I assume it should be now rather than not  : )

Thank you for your sharp eyes! I fixed it😅


map |> intersperse -> map_intersperse

@bradhanks thank you for your contribution. To make it merge, you need to sign off the commit. See the details in https://github.com/dagger/dagger/blob/main/CONTRIBUTING.md#dco for the information.

@bradhanks please help rebase the branch. 🙂

Helping child with math but I will right after

@bradhanks please help rebase the branch. 🙂

done :)


Reduce splash page loadtime/size

Current: 60 requests, 1.9 MB
Easy start: insomnia, mathworks, capitalone images together make 1.1mb

Not necessary anymore.


Cb/exec order

Addresses #657 by removing bad calculation and assertion.

I remember this assertion was there for some reason. Did you identified the mistake?

I remember this assertion was there for some reason. Did you identified the mistake?

Yes, the get_executions function, returns the number of executions per simulation step as set in the build!. Prior to v0.12 get_executions would return the number of executions of a stage before transitioning to the previous stage. So, when we have execution orders like 1-2-3-3-2-3-3-1..., the old get_executions(3) would return 2, and the new one returns 4.
The new calculation of executions is much simpler, this assertion double checks the execution count correctly.


Currently active eatIT sessions

It would be awesome to be able to see currently active eatIT sessions (with status) as short links on the screen.

I'm not sure that is public information

Obviously it would be optional to make your eatIT public.

Private/public functionality would have to be implemented first


Make depth_stencil_attachment follow the spec

https://www.w3.org/TR/webgpu/#depth-stencil-attachments
Make depth_stencil_attachment more closely follow the specification.  No longer do we need to specify stencil_xxx if it's a depth, and no need to specify depth_xxx if it's a stencil.  We only need to specify "color" if it's a "clear".

Fixed some typos.
Discovered that some GPU objects had GPUDevice in the _device field while others had GPUDeviceImpl.  Made sure that everything uniformly had a GPUDevice, and that we test for this.

This PR has suddenly turned into a hodgepodge of three separate items:
Fixing arguments for stencil
Fixing the _device field so that it alway contains a device
Random typos and grammar nits identified by PyCharm
I'm about to separate this into three PRs.   This will be just the first.
Please don't bother reviewing until I give the go-ahead.

Deleted last comment.  More work than I realized for too little gain.


Migrate docs to Gitbook

As per as the discussion on the ML<EMAIL_ADDRESS>

Thanks @m4rkmckenna !
However, can you hold off a wee bit more? I just realised that while internal relative links are perfectly fine for the docs, it might cause issues for downstream projects therefore I would like to update those links to use the same trick we did before, i.e. {{book.url}}/relative/path/to/root.md.
I'll ping you once it's done

@m4rkmckenna Done, should be good to go now

Thanks @tbouron merging now


Add new strain 'CM-237' to Aspergillus fumigatus in strain list

For https://github.com/PHI-base/curation/issues/130
Discussion note copied here. @jseager7, please could you check and see if you think CM-237 is different from 237. You may already have come across this when you were doing the strain list tidy ups. Thanks.

Strain: WT strain CM-237 is used as recipient for gene replacement and expression of mutant cyp51A allele in the study. I could locate a strain named "237" in PHI-Canto, but not CM-237. I tried searching online but I don't believe 237 and CM-237 are synonyms, so I added the strain name manually. Should we request it to be added to PHI-Canto list of A. fumigatus strains?

I've checked my strain cleaning files and this strain has been '237' in PHI-base all the way back to version 4.9.
As far as I can tell, the only difference between 237 and CM-237 is provenance: 237 comes from Hope Hospital (Manchester, UK), whereas CM-237 comes from the Mycology Reference Laboratory at the Centro Nacional de Microbiologia, ISCIII (Spain).
However, since we can't guarantee that the strains are identical, I'll add CM-237 as its own entry.

Note that I added the strain as 'CM237' since that had more results in a web search. I've added 'CM-237' as a synonym.


added named event handlers for late initialization

Named event handlers help with attaching the events on demand when content is loaded through ajax.
In this commit,

the existing document.ready() event handlers are untouched, so any existing code will not be affected.
names (in the global scope of window) are associated with the events so that they can be used through out the app at any location
invoking the event handler initialization multiple times is made safe (for example, sidebar events could be initialized multiple times with  window.gentelella_sidebar_doc_ready, but only one event will be actively associated)

I think it's much better if we do the namespacing like this: window.gentelella.eventIsCamelCase
What do you think?


Support SPARK_CONNECT_USER_AGENT environment variable

There are several existing tools that use the environment variable SPARK_CONNECT_USER_AGENT to supply user agent details:

pyspark
Databricks VSCode Extension
odbc R package
pysparklyr R package

This pattern is particularly helpful when end users directly invoke functions from a partner platform, such as Posit Workbench. In fact, Posit Workbench now automatically sets SPARK_CONNECT_USER_AGENT.
It would be great if this SQL connector also honored SPARK_CONNECT_USER_AGENT when set and submitted it as the User Agent for a given connection

We won't implement this in databricks-sql-connector because this connector never interacts with spark directly - it's strictly a driver for connecting to databricks sql via Thrift. The user agent in our codebase is hard-coded to PyDatabricksSqlConnector.
Users can append to this user agent string by passing as shown in this example. But this is a separate behaviour from how pyspark uses SPARK_CONNECT_USER_AGENT and it really shouldn't be affected by SPARK_-prefixed environment variables.


Camera won't adjust when Swimming/Crawling

When I swim / crawl, my view is stuck at the normal height, here's my modlist;
https://pastebin.com/EtHynRbv

just remove chunks of mods until you see issue is gone, then define what mod causes the issue

Problem was Galacticraft, and from the other issue related to it, it doesnt sound like it'll get fixed

Do you have Player API installed as well? If I recall correctly I made it work with GC when that is present.

I did not, I will test that.


Add support for 2.3.0 schema version

What does this PR do?:

A summary of changes made in this PR can be found below:

Updated updateApi.sh include recent API versions
Added schema version 2.3.0 to the library, now recognized and parsable.

Which issue(s) this PR fixes:

fixes devfile/api#1593
PR acceptance criteria:
Testing and documentation do not need to be complete in order for this PR to be approved. We just need to ensure tracking issues are opened and linked to this PR, if they are not in the PR scope due to various constraints.

[X] Unit/Functional tests

[ ] QE Integration test

[ ] Documentation (READMEs, Product Docs, Blogs, Education Modules, etc.)

[X] Client Impact

[ ] Gosec scans

How to test changes / Special notes to the reviewer:

Documentation (READMEs, Product Docs, Blogs, Education Modules, etc.)

N/A


Recommended approach for multiple generators

We'd like to re-use our prisma schema and folder across multiple services -- we currently have a Prisma schema generated via:
generator client {
  provider = "prisma-client-js"
}

But to generate the Go client, we need to change this to:
generator client {
  provider = "go run github.com/prisma/prisma-client-go"
}

Is there a recommended approach for managing/switching between the providers? Can file this in the prisma repo if necessary.
According to the Prisma docs:

A Prisma schema can have one or more generators

But I don't see any support for multiple generators in the docs.

Most users just use a single client, which is why there's not so much about it in the docs. However, it's certainly possible, but it does introduce a few caveats.
You need to run this with NodeJS/npm as I believe the other way round currently doesn't work, making NodeJS/npm the source of truth for the Prisma versions and using it for migrations.
For example, this should work:
datasource db {
  // could be postgresql or mysql
  provider = "sqlite"
  url      = "file:dev.db"
}

generator go {
  provider = "go run github.com/prisma/prisma-client-go"
}

generator js {
  provider = "prisma-client-js"
}

model Post {
  id        String   @default(cuid()) @id
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  title     String
  published Boolean
  desc      String?
}

I also just tried setting the provider dynamically, but unfortunately that doesn't work at this time.

Ah, got it - this worked 👍
It wasn't clear to me that the generator block could be named something other than generator client.

@abelanger5 You can also set it dynamically, I was mistaken that it's not supported:
datasource db {
  // could be postgresql or mysql
  provider = "sqlite"
  url      = "file:dev.db"
}

generator go {
  provider = env("PROVIDER")
}

model Post {
  id        String   @default(cuid()) @id
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  title     String
  published Boolean
  desc      String?
}

export PROVIDER="go run github.com/prisma/prisma-client-go"
❯ npx prisma generate
Prisma schema loaded from schema.prisma

✔ Generated Prisma Client Go to ./db in 1.01s


Make it possible to define maximum attempts/polling timeout in consume lazily

We're using your library in a project, but noticing that the performance of our build slave is slow enough to have issues with consuming from Kafka, so we need the maximum number of attempts and polling timeout to be configurable. I've already started doing it (not really that big a change!), but just creating tests and will submit a pull request.

Thanks @gigaSproule, looking forward to it!

I've created the pull request, so if you could take a look, that would be great. I'm fairly new to the Scala world, so by all means, tell me if it's done in the wrong way.

Seems like it's failed in Scala 2.11, so I will fix that.

All fixed and merged in, so I guess this should be closed?

Yes - thanks!


@xstate/fsm is generating es5 for the es/ build

There are no javascript runtimes that support es modules but lack es6 support. When I look in packages/xstate-fsm/es/index.js I see that it was generated with es5 as an output.
This seems to be due to rollup's config file setting tsconfig: 'tsconfig.compat.json' for both the umd and esm builds. Is this intentional or an oversight?

This is somewhat a common misconception about "module" field. Rollup was one of the first to adopt "module" (previously "jsnext:main") and this is what their old wiki page says about it:

pkg.module will point to a module that has ES2015 module syntax but otherwise only syntax features that the target environments support.

So as you can see one shouldn't link module syntax to other syntax features for the purpose of this field. That being said - we could decide to transpile to the newer syntax level than es5, it's up to us. It's not a common choice in the community though and I'm somewhat scared to be one of "early adopters" in this regard. People often ignore transpilation of the node_modules in their bundler configs as this is often advised by various perf guides and similar. So by upgrading our syntax we would make things harder for many people that are following that advice and who need to support older envs (like IE11). Not saying that's this is some kind of a decisive factor for this decision but it's certainly something that we should at least consider.
Anyway - I would consider this to be a breaking change and it would require to be included in a new major version (so not now as we don't plan to release a new major just yet). This is the same as upgrading pkg.engines for node-specific packages - it's always a breaking change.

This is somewhat a common misconception about "module" field

We shouldn't set the module field in v5;  That was a proposal put forward by rollup for how to deal with es modules without clobbering the main field in package.json prior to it being standardized in node. It has been superseded by setting "type": "module" in package.json. (see https://nodejs.org/dist/latest-v12.x/docs/api/esm.html#esm_package_json_type_field )

we could decide to transpile to the newer syntax level than es5, it's up to us.
It's not a common choice in the community though

It's not a common choice in the community because unflagging esm support in node and removing the scary warning has only happened quite recently, in the last few months: https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V12.md#2020-05-26-version-12170-erbium-lts-targos

one shouldn't link module syntax to other syntax features for the purpose of this field.

There are no javascript runtimes that support es modules, but lack es6. There is no point in generating es modules that use that older syntax. I would go so far as to say it could be considered harmful transpiling down to an older es version. At work our frontend code is able to feature detect when a browser supports es modules, and we load the newer code path written in es6. On average it's about 30% less lines of code. We don't want to ship modules written in es5 to newer browsers. That is a common community choice, and it's not ideal.

by upgrading our syntax we would make things harder for many people that are following
that advice and who need to support older envs (like IE11)

The code that xstate/fsm provides for ie11 already requires a bundler (both umd and es builds.) I don't think this changes that. Code intended for bundling still needs to be run through a bundler.

It's not a common choice in the community because unflagging esm support in node and removing the scary warning has only happened quite recently, in the last few months: https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V12.md#2020-05-26-version-12170-erbium-lts-targos

I don't feel that those are at all related - syntax itself is not tied to the module format and there are some packages (node-only mostly) that have decided to use es6+ syntax in the shipped code, not looking at all at the CJS/ESM drama because those are 2 different things. You can totally use newer syntax while still be using CJS format.

There are no javascript runtimes that support es modules, but lack es6. There is no point in generating es modules that use that older syntax.

But there absolutely is a point in that - there are multiple targets one can think of and even if the final target environment doesn't support ESM there is still a middleman processor (like a bundler) between the package itself and the final app~. If a module syntax is important for such a middleman processor (and it is) then it's a totally valid choice to provide ESM files using only ES5 syntax besides the export/import statements.

At work our frontend code is able to feature detect when a browser supports es modules, and we load the newer code path written in es6. On average it's about 30% less lines of code. We don't want to ship modules written in es5 to newer browsers. That is a common community choice, and it's not ideal.

With this I can agree - it's not ideal at all. I'm just saying that shipping newer code by default is a different decision, not related to the module format and that it can be done, but should be evaluated carefully, because as package maintainers we have responsibilities for a lot of users with different use cases, different capabilities of customizing their build processes, etc. It's important for us to think about those. Changing the syntax level is also a breaking change so we only should be thinking about this when releasing a new major versions.

The code that xstate/fsm provides for ie11 already requires a bundler (both umd and es builds.) I don't think this changes that. Code intended for bundling still needs to be run through a bundler.

Yes, it's different matter though if something is meant to be processed by a bundler to load files/concatenate them etc than if it meant to be processed by a transpiler plugged into that bundler. Problem is that ignoring /node_modules/ from transpilation has been a recommendation for a very long time and there are many people doing just that. Even if this can be changed on their side it's still something that they will have to do and many might not know how or might break things in the process of changing this.
I would also like to see advancements in this field, but I don't see any in the community as a whole and I don't particularly feel like being a precursor here.

I don't feel that those ..

I don't particularly feel like being

Then I guess there's not much point in discussing it.  Most of these points are feelings and not hard facts. If you don't want to produce esm that's certainly your choice.


Tree View displays Git Project incompletely

Prerequisites
Two openened Git Projects
One openened Project folder

Have you tried to reproduce the problem in [Safe Mode][safe-mode]?
Yes, Issue still exists
Have you followed all applicable steps in the [debugging guide][debugging-guide]?
Yes
Have you checked the FAQs on the [message board][message-board] for common solutions?
Yes, no applicable solution
Have you checked that your issue [isn't already filed][already-filed]?
Yes, Issue doesn't exist atm

Description
One of my Git Project folders seems to be displayed incompletely in Atoms TreeView. It happens when I open this Git Project separately - or - if I've got multiple Project open and I change the Order in the TreeView it also seems to "remove" some Files and Folders in the TreeView.
What does "incomplete" mean you ask?
Atom won't display some folders and some files. For example - in my Project root are some DOT, Markdown, JSON, SHELL and some Batch files:

After I move the shown Git Project in the TreeView order (or if opened separately) this is what will be displayed:

Sadly, I cannot share this repository. My assumption is that the repository is to blame, since I've tested with another repository which worked just fine.
Funny Thing is that this behaviour basically came over night, I can't see any patterns.
Reproduces how often:
Always, according to the conditions mentioned above.
Versions
atom
Atom    : 1.28.0
Electron: 2.0.3
Chrome  : 61.0.3163.100
Node    : 8.9.3
apm
apm  1.19.0
npm  3.10.10
node 6.9.5 x64
atom 1.28.0
python
git 2.16.2.windows.1
visual Studio

/move to atom/tree-view


Strange tracks and names in the transcribed MIDI

I have been using the scripts for a while, and It is amazing. However, I lost between the track names when I tried to pull the guitars and Arabic instruments back from the MIDI. Sometimes it splits them so much that you get disoriented between small parts and large parts of the same instrument, while being afraid to overlap the tunes. There are only the drums that can be easily found as they are on channel 10. Note: I am using FL Studio embed FLEX system to import the MIDI file. Any workaround for this?

This is one of the biggest problems with the current model, that a single instrument in the audio switches back and forth between multiple instruments in the MIDI.  The reason for this is that we split the audio into 2-second segments and transcribe them independently.  We plan to have an update soon that addresses this issue.

This is one of the biggest problems with the current model, that a single instrument in the audio switches back and forth between multiple instruments in the MIDI. The reason for this is that we split the audio into 2-second segments and transcribe them independently. We plan to have an update soon that addresses this issue.

Thanks. I am following


Fix malloc failure handling of X509_ALGOR_set0() and X509_ALGOR_set_md()

Also update and slightly extend the respective documentation and simplify some code.
~and add  internal ossl_x509_algor_from_nid() for simplifying code.~
This is all minor stuff, so I'd say can wait until after 3.0 release.

Due to (rather innocent) API change in include/openssl/x509.h.in:
-void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
+int X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);

this must to wait until 4.0, right?

Due to a (rather innocent) API change in include/openssl/x509.h.in:
-void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
+int X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);

this has to wait until 4.0, right?

Suggestion : add a private x509_algor_set_md() method
or create a new X509_ALGOR_set1_md() ?
so you can keep API compatibility .

Thanks @FdaSilvaYY for your suggestion.
Yet this would add clutter to the API and
lessen the improvement intended for the original function.
I've just extracted from this PR those changes that are directly related to the changed the result type and put them in #17495.

This is still master-only as there is plenty of refactoring going in there.

This pull request is ready to merge

Merged - thanks @t8m


Feature: Google Sheets integration monitoring

Track Google sheets integration related queries

Enabled by https://github.com/bqbooster/dbt-bigquery-monitoring/pull/85


[Keyboard Manager]:  'Remap a key' Dialog is not getting closed using 'ESC' key.

Microsoft PowerToys version
0.45.0
Running as admin

[ ] Yes

Area(s) with issue?
Keyboard Manager
Steps to reproduce
Steps to reproduce
Test Environment:
OS: Windows 11 Version Dev
App version: 0.45.0
App name: PowerToys
Screen Reader: Narrator
Tool: Accessibility Insight for Windows
Repro Steps:

Launch 'PowerToys' application.
In General tab, navigate to 'Keyboard Manager’ button and activate.
Navigate to ‘Remap a key’ and activate it using enter/Space key.
Now, Remap a key dialog box will appear.

 Press 'ESC' key and Observe the issue.

Note :
Same issue repro with Remap a shortcut.
User Impact: -> Priority 2
Keyboard user will face issue while navigating the app.
Guidelines Reference:-
https://www.w3.org/TR/WCAG21/#multiple-ways
Attachments:
https://user-images.githubusercontent.com/91203131/134474753-5428fedf-1739-4be2-8409-30a8c794797c.mp4

✔ Expected Behavior
When 'Esc' key pressed the 'Remap a key' dialog should get closed.
❌ Actual Behavior
When 'Esc' key pressed on the 'Remap a key' dialog is not getting closed.
Other Software
No response

This is considered to be launching of a new application windows - not a dialog. Therefore, it should not close when pressing ESC?
cc @crutkas

While under the hood, yes but i think the accessibility team is saying from an end user experience, the OK / cancel makes this basically into a dialog.
I think this is fair feedback.

@crutkas Hmm true. It should be redesigned altogether. There are tens of accessibility issues with the current implementation.

This issue is still repro on version 0.76.2


[7.x] Add PostgreSQL spatial data types in place of unnecessary PostGIS support

While using Laravel with PostgreSQL you can't use standard spatial data types in migrations, because:

Standard Postgres spatial data types are mostly not available
Any types overlapping with MySQL spatial types are creating PostGIS-specific data type instead (e.g. $table->point requiring PostGIS)

It makes working with Postgres initially confusing, because nor documentation, nor common sense suggests PostGIS extension being required.
As PostGIS is an arguably large extension, it makes sense for its support to be in form of an external package instead of a built-in feature (e.g. https://github.com/mstaack/laravel-postgis)
This PR:

Removes 1 PostGIS specific type in blueprint (MultiPolygonZ) without breaking any overlapping MySQL spatial types.
Adds missing spatial Postgres types (line, circle, lseg, path, box).
Makes 'point' and 'polygon' types usable without PostGIS
Modifies tests to match new data types

I can't just remove methods from the framework in a patch release.

I can't just remove methods from the framework in a patch release.

Sure, that makes a lot of sense.
If you find these proposed changes justified, please let me know what's the best way to contribute them as I'm new to the workflow here.


Why do we need do read file uri from message context to read a file

Version: 0.93
According to [1] a file location is read after obtaining it from the message context. Why do we need to do that when we have a configuration called "dirURI" that specifies the read location?
[1] https://ballerinalang.org/docs/by-example/ftp-server-connector

This is tracked at: https://github.com/ballerinalang/connector-file/issues/2


Add next parameter to login screen

As per original pull request
https://github.com/jbittel/django-mama-cas/pull/3
by joshuajonah

This is outside the CAS protocol, and I don't see a clear use-case for it as CAS allows for redirecting to a service when handling logins. If there's something I'm missing, let me know.


[FEAT]: Develop API Endpoints for Profile Settings

Description
Create an API endpoint to allow users to view their profile settings. The user must be signed in to view their details.
Acceptance Criteria

Authentication

The user must be signed in to access the view and update endpoints.
If a user is not authenticated, the API should return a 401 Unauthorized error.

View Profile

The API should return a JSON object with the current user's profile settings.

The response should include the following fields:

id
first_name
last_name
phone
avatarUrl

If the profile settings are retrieved successfully, the API should return a 200 OK status.

Response Formats

Successful View Profile Response

{
  "id": "string",
  "first_name": "string",
  "last_name": "string",
  "phone": "string",
  "avatarUrl": "string"

}

Error Handling

Unauthorized Access

{
  "status": "string",
  "message": "string",
  "statusCode": 401
}

Purpose
Provide an endpoint for users to view their profile settings.
Requirements

[ ] Implement an endpoint to retrieve user profile settings.

[ ] GET /api/v1/profile to retrieve the current user's profile settings.

[ ] Ensure the endpoint handles authentication securely.

[ ] Require users to be signed in to access the endpoint.
[ ] Return 401 Unauthorized if the user is not authenticated.

[ ] Handle responses and errors appropriately.

[ ] Return 200 OK with the user's profile settings on successful retrieval.
[ ] Return all error responses in JSON format with an error field containing a descriptive message.

Unit test

GET /api/v1/profile Endpoint:

Test that the endpoint returns the user's profile settings correctly.
Mock the data access layer to simulate different scenarios.
Verify that the response includes all expected fields (profile picture, username, pronouns, job title, etc.).

End-to-End Tests

Authenticated User:

Setup: Authenticate a test user.
Action: Send a GET request to /api/v1/profile.
Assertions: Verify 200 OK status.
Verify the response includes all expected fields.

Action: Send a GET request to /api/v1/profile.
Assertions: Verify 401 Unauthorized status.
Verify the response contains the correct error message.

Profile Data Integrity:

Setup: Create and authenticate a test user.
Action: Send a GET request to /api/v1/profile.
Assertions: Verify 200 OK status.
Verify the response data matches the stored profile data.

Split Write from Read as tickets, and split the updating of the users profile picture into another ticket

This issue has been split as instructed. I am working on #122 . This issue will be closed.

This issue has been split as instructed. I am working on #122 . This issue will be closed.

I am reopening this issue because I haven't been able to get my team lead for #122 to attend to the comment made by the mentor. I have tried to reach him severally but no response from him for the last 24 hours.
The mentor's comment "Success Response formatting is not standard". I have updated it.
.


CSV Loader would wrongly assume column with all sample values null to be Bool

Just defaulting this case to VARCHAR

Thanks for fixing this! This works well unless a column is actually of  bool  type, no? But since the bool detection is very premature I'd say it's okay for now. Maybe an idea would be to add the NULL type to the type_candidates and then default to VARCHAR  if best_sql_types_candidates[col].size() == type_candidates.size().

@tdoehmen spot on, I've added a test for that, can you please check it? ;-)

Looks good to me! I noticed now when running the unit tests, that testing of the CSV functionality takes up a lot of time. Maybe one way to reduce the time is to use more minimal test cases. Is it feasible to reduce the size of the voter.tsv file and still test for the same things? When it's only about the null-columns then I think a 200-line file or so would do. If you want to test what happens when the CSV sniffer misses certain rows on a small file, you could manually set the sample_size to 10 or so. I know it's not only this test case which takes up a lot of time but also old ones. When I find the time, I'll have a look into them as well.

Looks good to me! I noticed now when running the unit tests, that testing of the CSV functionality takes up a lot of time. Maybe one way to reduce the time is to use more minimal test cases. Is it feasible to reduce the size of the voter.tsv file and still test for the same things? When it's only about the null-columns then I think a 200-line file or so would do. If you want to test what happens when the CSV sniffer misses certain rows on a small file, you could manually set the sample_size to 10 or so. I know it's not only this test case which takes up a lot of time but also old ones. When I find the time, I'll have a look into them as well.

As long as the tests are marked with .test_slow it is not too much of a problem, these are only run in release mode so they complete rather fast. The CSV tests are only a small fraction of the total test suite there right now, so no need to optimize this for now. If it becomes a significant bottleneck we can have a look at optimizing them.


Currency formatting issue on Billing > Fee threshold

The What
On the Billing > Fee threshold page:

If the same as store currency, use short format for all;
If non-store currency, use short format for non-total amount and explicit format for total amounts

Short format examples: $12.50, 12, 50 €
Explicit format examples: $12.50 CAD, 12, 50 € EUR
The Why
Recently we updated currency formatting guidelines in Polaris, and an audit through our platform resulted in us noticing a few spots where currency formatting could be unclear, especially in a multi-currency view. The suggested change would make the formatting on the Billing > Fee threshold information coherent with the formatting suggested in the Polaris guidelines.
The How
shopify_i18n now supports the new currency formatting in ruby and typescript.
cc @mateus @robinvankampen @cejaekl

Just want to see what the status of this is? @laurenmayers Thanks!


"Hmm, it's not here page" when trying to set a merchant name immediately after creating a request

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

Version Number: 1.4.42-1
Reproducible in staging?: y
Reproducible in production?: y
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
Expensify/Expensify Issue URL:
Issue reported by: @joekaufmanexpensify
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1708017708380219
Action Performed:

Go to workspace chat
Request money by scanning a receipt
Immediately open the expense and try to edit the merchant / description

Expected Result:
User is able to edit the exepense
Actual Result:
"Hmm it's not here page"  is shown
Workaround:
unknown
Platforms:

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

[ ] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence
https://github.com/Expensify/App/assets/38435837/ac333854-4840-41d4-ba32-c42ff30b2d40
https://github.com/Expensify/App/assets/38435837/fc10270a-793a-4ed0-abea-0b42d17c7e65

View all open jobs on GitHub

might be related to - https://github.com/Expensify/App/issues/36574

Agreed @Christinadobrzyn, I think https://github.com/Expensify/App/pull/36179 should resolve this too. Subscribing, will re-test this once that's live.

https://github.com/Expensify/App/pull/36179 on staging - adding retest-weekly label

OK, https://github.com/Expensify/App/pull/36179 just hit prod - posted in #qa for this to be re-tested

I'm unable to reproduce it on my end with build <IP_ADDRESS>, doble check with original reporter - https://expensify.slack.com/archives/C049HHMV9SM/p1709037761497759?thread_ts=1708017708.380219&cid=C049HHMV9SM
https://github.com/Expensify/App/assets/93399543/d15392ca-34d8-4231-bdb7-18a4c014b475

Thanks! Makes sense that https://github.com/Expensify/App/pull/36179 solved this. Let's close this one out.


Installation issue

I am the packager for Arch Linux of this software and having a hard time writing an installation script. No Python files are installed. Strangely, the error seems not to occur to every user but I have at least one confirmation from another user plus I tried it out on two of my computers which both resulted in an erroneous installation.
The package can be found here.
PKGBUILD
#!/usr/bin/env bash
# shellcheck disable=SC2034
# shellcheck disable=SC2154
# The PKGBUILD for Maison.
# Maintainer: Matheus<EMAIL_ADDRESS># Contributor: Matheus<EMAIL_ADDRESS>
readonly _pkgname="maison"

pkgname="python-maison"
pkgver="1.4.0"
pkgrel="1"
pkgdesc="Read settings from config files."
arch=("any")
url="https://github.com/dbatten5/${_pkgname}"
license=("MIT")
depends=("python" "python-click" "python-pydantic" "python-toml")
makedepends=("python-build" "python-installer" "python-poetry")
source=("${pkgname}-v${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha512sums=("a2dbc26137973e7c15bb05af1aa6b8c1f48c2a4e970a1bdd6fb9b52d8205a313068ca89bc9570fa2aec2e1dd44e1b95f2f354bb4a8a46d1fec82f8522827f02e")

build()
{
    cd "${srcdir}"/"${_pkgname}"-"${pkgver}"/ || exit 1
    python -m build -nw
}

package()
{
    # Assure that the directories exist.
    mkdir -p "${pkgdir}"/usr/share/doc/"${pkgname}"/
    mkdir -p "${pkgdir}"/usr/share/licenses/"${pkgname}"/

    # Install the software.
    cd "${srcdir}"/"${_pkgname}"-"${pkgver}"/ || exit 1
    python -m installer -d "${pkgdir}" "${srcdir}"/"${_pkgname}"-"${pkgver}"/dist/*.whl

    # Install the documentation.
    install -Dm644 "${srcdir}"/"${_pkgname}"-"${pkgver}"/README.md "${pkgdir}"/usr/share/doc/"${pkgname}"/
    cp -r "${srcdir}"/"${_pkgname}"-"${pkgver}"/docs/* "${pkgdir}"/usr/share/doc/"${pkgname}"/
    find "${pkgdir}"/usr/share/doc/"${pkgname}"/ -type d -exec chmod 755 {} +
    find "${pkgdir}"/usr/share/doc/"${pkgname}"/ -type f -exec chmod 644 {} +

    # Install the license.
    install -Dm644 "${srcdir}"/"${_pkgname}"-"${pkgver}"/LICENSE.rst "${pkgdir}"/usr/share/licenses/"${pkgname}"/
}

installed files
❯ rm -r ~/.cache/paru/clone/python-maison/
❯ paru -S python-maison
...
❯ pacman -Ql python-maison
python-maison /usr/
python-maison /usr/bin/
python-maison /usr/bin/maison
python-maison /usr/lib/
python-maison /usr/lib/python3.11/
python-maison /usr/lib/python3.11/site-packages/
python-maison /usr/lib/python3.11/site-packages/maison-1.4.0.dist-info/
python-maison /usr/lib/python3.11/site-packages/maison-1.4.0.dist-info/LICENSE.rst
python-maison /usr/lib/python3.11/site-packages/maison-1.4.0.dist-info/METADATA
python-maison /usr/lib/python3.11/site-packages/maison-1.4.0.dist-info/RECORD
python-maison /usr/lib/python3.11/site-packages/maison-1.4.0.dist-info/WHEEL
python-maison /usr/lib/python3.11/site-packages/maison-1.4.0.dist-info/entry_points.txt
python-maison /usr/share/
python-maison /usr/share/doc/
python-maison /usr/share/doc/python-maison/
python-maison /usr/share/doc/python-maison/README.md
python-maison /usr/share/doc/python-maison/contributing.md
python-maison /usr/share/doc/python-maison/index.md
python-maison /usr/share/doc/python-maison/reference.md
python-maison /usr/share/doc/python-maison/requirements.txt
python-maison /usr/share/doc/python-maison/usage.md
python-maison /usr/share/licenses/
python-maison /usr/share/licenses/python-maison/
python-maison /usr/share/licenses/python-maison/LICENSE.rst

Hi @Spixmaster thanks for raising an issue. I'm afraid I have no experience at all in packaging software so I'm not sure how much help I can be.  This repo was scaffolded using this cookiecutter and to the best of my knowledge I haven't touched any packaging parts of the repo, maybe it's worth raising an issue there to see if anyone's had the same problem?

I fixed the issue. It was really odd. The problem was caused by the option -n for the command python -m build.

Weird! Glad to hear you've fixed the issue though

I have had a different software where the same issue occurred so it is not something only this software is affected by.


[stable/ambassador] Upgrade Ambassador Pro 0.9.1→0.10.0

What this PR does / why we need it:
Upgrade Ambassador Pro from 0.9.1 to 0.10.0.
Checklist

[x] DCO signed
[x] Chart Version bumped
[x] Variables are documented in the README.md
[x] Title of the PR starts with chart name (e.g. [stable/mychartname])

Let's wait until https://github.com/helm/charts/pull/18516 gets merged to master then we can pull in the changes and merge this.
/hold

@LukeShu The above PR has been merged.
/hold off

/hold cancel

/ok-to-test

Lets see if this works
/lgtm


Smooth scrolling on tabs

I'd like to have smooth scrolling for window tabs (when you scroll horizontally across open tabs up top)

This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

@bpasero I might be crazy, but it seems like smooth scrolling is now enabled for workbench-tabs. If so, this request can be closed


FEAT: Ansys interposer example

@ring630 could you change the directory and file names to only contain lower case ?

@ring630 could you change the directory and file names to only contain lower case ?

@SMoraisAnsys done


Performance regression since 78687e7

Up until e63031c (inclusive) the current benchmark for coio-tcp-echo-server showed (subjectively) good results:
Speed: 75640 request/sec, 75640 response/sec
Requests: 2269208
Responses: 2269208

Since then performance has dropped significantly:
Speed: 1526 request/sec, 1526 response/sec
Requests: 45801
Responses: 45801

Between 78687e7..f747ab8 all builds fail the benchmark for major or minor reasons though: socket already registered or No such file or directory error in earlier builds (before the change to the more recent mio version) and later because the slab is overfilled, or because using too many semaphores leads to a Too many open files panic. All of this made ruling out the reason a bit hard for me, but I suspect that it's related to the change to a newer mio version and the shared event loop etc.
Any ideas?

Indeed, I have noticed this problem. I thought about this yesterday, but I still don't know what's the bottleneck of the current implementation. For the problem you have mentioned above:

"socket already registered": Because the latest version of Mio wants to support IOCP on Windows, which makes it impossible to move FDs from one loop to another. In the current implementation of coio, it is a little bit hard to control the I/O objects for when I should call register, reregister and deregister on it. So register the I/O object everytime when the I/O is going to block, and deregister it when I got notified by Mio.

"No such file or directory" and insert into filled slab: This is the problem we are working on in #19 . A coroutine is resumed before it is blocked.

"Too many open files" panics for using too many semaphores? That's news.

So here is my opinion:
The #16 has to be done because if we want to support IOCP, then we cannot use one-loop-per-thread strategy.
Before profiling, I suspect the real problem is one of these:

Here. Now I use the channel provided by Mio for registering events. My original idea is don't block the worker thread when it wants to register an event to EventLoop.

Here. When the event is ready, it calls this callback and then send the coroutine pointer through a mpsc queue back to the worker thread. If the thread is busy right now, those coroutines may be starved in this channel and they cannot be stolen by the other worker threads. I have tried to get rid of the deque crate, which is a work-stealing queue, and replace it with a bounded-mpmc-queue. But I can't see any explicit difference.

The Mutex that carry with the Coroutine. There are many spots that has the same problem as described in #19 , so it is very likely that one worker-thread is running a Coroutine and another worker-thread is trying to grab the lock and try to resume it. But it can't because of the Mutex. So the other worker is stuck. This should can be proved by if the performance is higher by using only one worker thread.

**The Speed drops from 75640 to 1526 is definitely a bug. **

CPU usage is not 100% (about 10% actually) when running benchmarks. So there must be somewhere that blocks the worker, which is the cause of this issue.

@zonyitoo I finally found the line causing this regression and I'm sure that your reaction will be just like mine: "OMG". :smile:
You said that the CPU utilization is about 10% right? Well look at this commit: https://github.com/zonyitoo/coio-rs/commit/4f4a1f19543fb5e461f78d69011a63482e1de36d
Yeah... I guess sleeping for 1/10th of a second could really be the reason for this...
If I remove this the performance goes back to 76k req/s with coio-tcp-echo-server using -t 1. But the performance drops significantly again to about 13k req/s with -t 4. I guess the main reason is the rapid registration and deregistration with mio, huh? Because the mio channel uses heap allocations and the symbols for the registrations are stored in a hashmap (benchmarking suggests that this causes about 20% (!) of the CPU load alone with -t 1).

OOOOOMG......
Yes, with I/O bound applications, wait_event is the bottleneck of performance. Mio's channel actually is a MPMC lock-free queue, itself should not be the most significant cause of lower performance. There may not be another way to replace the two queue (worker -> Mio, Mio -> worker).

It might also be worth a try to seperate mio's EventLoop from coio. Since e.g. sockets are Sync (right?) you could share them across the coroutines. The state would then be shared by a "manager" object which sits between the EventLoop and coio. Whenever a state is updated (which it stores persistently so we are not required to use level trigger but can use edge trigger instead), it checks if a coroutine is currently parked in a (e.g. socket-) method and wakes it up.
Alternatively you might consider reverting back to the "one EventLoop per Thread" design. You would need to transform the scheduler to a hybrid-work-stealing one: You could mark coroutines which are parked for methods on objects which are not sendable (i.e. all socket methods since they cannot be reregistered at another EventLoop in another thread) as not being "stealable". Such coroutines which are parked as "non-stealable" would be required to stay as long in the same Processor as long as they are not resumed by it. I think that this "might" offer better performance and might be easier to archieve than optimizing a shared EventLoop.
BTW: I looked at mio's source code and you're right: It doesn't allocate any memory (which is only possible because it's bounded - unbounded channels require linked lists and thus Box). The register() and deregister() operations remain being heavy operations though with they 20% CPU usage alone...

Then, it would makes nearly all coroutines can only be run in their own worker-thread, which is not a work-stealing implementation, just one-eventloop-per-thread + coroutine-pool.
Shared EventLoop module is widely used in many libraries, so I don't think shared EventLoop is the main problem.

Well actually this would only effect windows, while UNIX platforms could run without any kind of locks, since you can freely shere the fd between EventLoops there. I reckon that implementing the semi-stealing-scheduler is a lot easier than tuning a shared-loop. Why? Well because lock contention (e.g.: even "lock-free" queues as being used to communicate with the shared loop block at a certain point) is basically the death of multithreading…
And yeah… shared loops are probably more widely used than per-thread loops, but I think that's more of a sideeffect to get a stable and easy to write cross-platform program, rather than being optimal.
Oh and I got another hint for you... :blush: Try removing rand::random() - it uses a cryptographically secure RNG, which is probably a bit over the top for the Processor::scheduler method. If you replace it with rand::weak_rng() and it's XorShiftRng you get a hefty performance boost of about 400% (!) with - 4. This is one of the biggest contentions when using multithreading with coio and as you can see it alone (nearly) transforms relative_performance = 100% / thread_count to relative_performance = 100% - (2% * thread_count). :blush:

Excellent!
But by the way, in the current implementation of Mio, it forbids fds from being moved from one EventLoop to another one. So right here we can only use shared EventLoop right now.

Ah I just saw it... It would be great if one could create mio sockets with a EventFd instead of having to use the std::net types...
The second biggest performance hog is btw the work stealing queue which is far from being well engineered... It causes a lot of implicit syscalls and/or thread barrriers. :worried:
Reason being: They use sequential-consistent ordering EVERYWHERE: https://github.com/kinghajj/deque/blob/master/src/lib.rs#L253-L277
This one method alone causes 11% of the whole CPU usage on OSX.
And that's why it's quite sad to see this, because knowing the difference between the memory ordering of atomic operations is essential if you claim to write a performant or arguably "good" lock-free library... It's so sad to see because this extreme misuse of atomics can be seen literally everywhere. :disappointed: I whonder if I should write a PR...
(In case you don't know what's so bad about SeqCst ordering: To be atomically consistent it has to insert thread barriers on x86 which are extremely costly compared to other orderings like the acquire/release one, or even relaxed. Knowing what's best in a certain situation is actually quite important knowledge. You can read more about it here: http://en.cppreference.com/w/cpp/atomic/memory_order)

The deque crate is originally created by Alex, one of the collaborator in Rust's project. They use this queue to implement the original version of Rust's Coroutine library, the libgreen. I think they just want to make everything works but to optimize it.
Also, I am still wondering how to make good use of the deque with the current shared EventLoop strategy. Because when the IoHandler::ready is called, it just pushed the coroutine into an mpsc queue to the worker thread. So those coroutines won't be able to be stolen by the other workers.
So many problems arise when Mio comes to 5.0. This crate needs a proper refactor!

To make a conclusion, all possible optimization:

[ ] Hybrid work-stealing algorithm, which allows coroutines to be pinned on a specific worker thread.
[ ] rand::random()
[ ] Optimize deque implementation
[ ] Lower the price of register and deregister

I'm going to optimize the deque first, which should give a performance boost of at least 3-5%: https://github.com/kinghajj/deque/issues/8

Let me explain my priority goals:

Usability and availability is the primary goal, which means that this library should at least work without errors and support the most ordinary use cases, such as network I/O, basic synchronization methods.

When the APIs are stablized, we should focus on the performance. It at least has comparable performance as Go's runtime.

Add the other supports, such as file I/O, the select, and so on.

So here the coio project is still in the 1 step. I just managed to make it work with Mio v0.5, and as you can see, there are still a lot of problems remains. So I suggest if you want to help, please first focus on how to make it works well with the current version of Mio (shared EventLoop is the only option), and performance should be considered.
I have been quite busy these days, so I won't commit much lately. Please fell free to comment, I will reply as soon as possible.
I want to make coio as one of the best project in Rustland.
BTW, if you are interested, please take a look at the context-rs project and see if there is any thing could be optimized.

Let me explain my priority goals:

Usability and availability is the primary goal, which means that this library should at least work without errors and support the most ordinary use cases, such as network I/O, basic synchronization methods.

When the APIs are stablized, we should focus on the performance. It at least has comparable performance as Go's runtime.

Add the other supports, such as file I/O, the select, and so on.

So here the coio project is still in the 1 step. I just managed to make it work with Mio v0.5, and as you can see, there are still a lot of problems remains. So I suggest if you want to help, please first focus on how to make it works well with the current version of Mio (shared EventLoop is the only option), and performance should be considered.
I have been quite busy these days, so I won't commit much lately. Please fell free to comment, I will reply as soon as possible.
I want to make coio as one of the best project in Rustland.
BTW, if you are interested, please take a look at the context-rs project and see if there is any thing could be optimized.

It's great to hear that you're planning to take coio so far. :blush: And yes I'd really like to make coio as stable as possible by investigating solutions to the current bugs, but I think there should be some kind of coordination, where you say what you'd like to work on, and what I can/should work on, so we don't fix the same problem twice. I'm soon going to get a bit more busy though, but I'll try to spend at least a some time every day writing code for coio and it's transitive projects.
I know it's a lot to ask for, but let's just assume that I'm going to continue supporting this project (which I'm planning to): It would probably really simplify some things if you could grant me push rights to this project (i.e. if you could make me a collaborator) as soon as you trust me with it, because there are a lot of things I have in mind for this and other projects.

For instance: I could reeeeaaaally need some support right now for SO_REUSEADDR (for a university assignment which is due soon). To add this properly I would need to write the code (about 20% effort), and then send proper PRs to mio (which has an 1yr old issue for this) and to this project (to bridge the API over). But I also can't do it manually in my project using the C APIs, because you accidentially (?) made the AsRawFd accessor private. Thus: 80% effort.

It's great to hear that you're planning to take coio so far. :blush: And yes I'd really like to make coio as stable as possible by investigating solutions to the current bugs, but I think there should be some kind of coordination, where you say what you'd like to work on, and what I can/should work on, so we don't fix the same problem twice. I'm soon going to get a bit more busy though, but I'll try to spend at least a some time every day writing code for coio and it's transitive projects.
I know it's a lot to ask for, but let's just assume that I'm going to continue supporting this project (which I'm planning to): It would probably really simplify some things if you could grant me push rights to this project (i.e. if you could make me a collaborator) as soon as you trust me with it, because there are a lot of things I have in mind for this and other projects.

For instance: I could reeeeaaaally need some support right now for SO_REUSEADDR (for a university assignment which is due soon). To add this properly I would need to write the code (about 20% effort), and then send proper PRs to mio (which has an 1yr old issue for this) and to this project (to bridge the API over). But I also can't do it manually in my project using the C APIs, because you accidentially (?) made the AsRawFd accessor private. Thus: 80% effort.

Sure, I would add you as a collaborator. :) Happy hacking!
And actually I am not working on anything. So you can choose your target freely.

Sure, I would add you as a collaborator. :) Happy hacking!
And actually I am not working on anything. So you can choose your target freely.

I discovered just now that
src/bin/server.rs:71:13: 71:39 error: trait `AsRawFd` is private
src/bin/server.rs:71         use std::sys::ext::io::AsRawFd;
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
src/bin/server.rs:73:18: 73:34 error: source trait is private
src/bin/server.rs:73         let fd = sock.as_raw_fd();
                                      ^~~~~~~~~~~~~~~~

does not in fact mean that a trait is "private" but instead that the use clause at the beginning of the file is missing: https://github.com/rust-lang/rust/issues/22050
And people are complaining about C++ compilers to be hard to understand... :neutral_face:
I also took a look at context-rs. Your reasoning behind how context switches work are really easy to understand. But I do think that using Boost.Context's assembler is going to be much better in the long run, because their code is surely a lot more fleshed out due to all the manhours spent on it over the years and due to the tests on all those different platforms (e.g.: they have asm files in AT&T and Intel syntax, and thus can be compiled seamlessly on windows). I don't understand how their assembler works yet though ("why do they push/pop all the things?"), but I'm sure I'll get there. Currently it's probably a bit more important to improve coio though. But I'll try to send you a PR with a branch that uses Boost.Context's asm - this might even solve a couple issues along the way.
Oh and thanks for making me a collaborator. :blush:

I discovered just now that
src/bin/server.rs:71:13: 71:39 error: trait `AsRawFd` is private
src/bin/server.rs:71         use std::sys::ext::io::AsRawFd;
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
src/bin/server.rs:73:18: 73:34 error: source trait is private
src/bin/server.rs:73         let fd = sock.as_raw_fd();
                                      ^~~~~~~~~~~~~~~~

does not in fact mean that a trait is "private" but instead that the use clause at the beginning of the file is missing: https://github.com/rust-lang/rust/issues/22050
And people are complaining about C++ compilers to be hard to understand... :neutral_face:
I also took a look at context-rs. Your reasoning behind how context switches work are really easy to understand. But I do think that using Boost.Context's assembler is going to be much better in the long run, because their code is surely a lot more fleshed out due to all the manhours spent on it over the years and due to the tests on all those different platforms (e.g.: they have asm files in AT&T and Intel syntax, and thus can be compiled seamlessly on windows). I don't understand how their assembler works yet though ("why do they push/pop all the things?"), but I'm sure I'll get there. Currently it's probably a bit more important to improve coio though. But I'll try to send you a PR with a branch that uses Boost.Context's asm - this might even solve a couple issues along the way.
Oh and thanks for making me a collaborator. :blush:

AsRawFd should be used as
use std::os::unix::io::AsRawFd;

AsRawFd should be used as
use std::os::unix::io::AsRawFd;

Yeah I found the solution to the AsRawFd problem after fiddling around for a while. Since I'm still new to Rust as a language learning things like this is probably my new normal now, huh? Thanks anyways! :sweat_smile:
And while my knowledge in Rust and Coroutine implementations is definitely lacking I'm quite sure that you can't use inline assembly for the context swaps etc. safely without having naked functions. Those might be coming soon though:

https://github.com/rust-lang/rfcs/pull/1201
https://github.com/rust-lang/rust/pull/29189

Yeah I found the solution to the AsRawFd problem after fiddling around for a while. Since I'm still new to Rust as a language learning things like this is probably my new normal now, huh? Thanks anyways! :sweat_smile:
And while my knowledge in Rust and Coroutine implementations is definitely lacking I'm quite sure that you can't use inline assembly for the context swaps etc. safely without having naked functions. Those might be coming soon though:

https://github.com/rust-lang/rfcs/pull/1201
https://github.com/rust-lang/rust/pull/29189

Of course, I am still waiting for the #[naked] attribute to be added into the Rust's nightly.

Thread parking strategies will be discussing in #27 .


How to save as a ckpt file after custom training is completed

I am not engaged in deep learning, but I really like this project. After I have trained the custom model, what code or method should I save as a ckpt file?

The checkpoints are created automatically at training and after. You should read the description again.
python train.py --dataset_root path\to\dataset --checkpoint_dir path\to\save\checkpoints
__________________________________________________^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^