Resize- Error in completing cellpose segmentation

I have the latest version cellpose running on cuda. The output image seems to be empty when i open it in image j.
Traceback (most recent call last):
File "/home/snz/anaconda3/envs/cellpose/lib/python3.7/site-packages/cellpose/gui.py", line 1288, in compute_model
interpolation=cv2.INTER_NEAREST)
File "/home/snz/anaconda3/envs/cellpose/lib/python3.7/site-packages/cellpose/transforms.py", line 422, in resize_image
imgs = cv2.resize(img0, (Lx, Ly), interpolation=interpolation)
cv2.error: OpenCV(4.4.0) /tmp/pip-req-build-2mquh264/opencv/modules/imgproc/src/resize.cpp:3572: error: (-215:Assertion failed) !dsize.empty() in function 'resize'

@athulrv I have the same problem – have you figured out how to make it work?

can you try the latest github version of cellpose please? I think this has been fixed

I'm closing this issue due to inactivity, please comment if it's not resolved


How to reference event name in configuration?

I am using the Hubspot app. However, I need to trigger creating/updating contacts via a different event than $identify which seems to be the default option (and which I verified works well)
My problem might be a newbie issue but I really don't know how to refer to the event. Should I prefix the event name with a dollar sign? How to I handle the spaces in the event name? Should they convert to underscores automatically?
Would be great in general to have an example in the docs for referring to an event other than $identify
Thanks!
Roni

Hey @doppleware, you'll need to specify the exact event. To figure out the correct event value, you can open the JSON version of the event in the Activity tab to see the exact value.


The program exited with code 0 on error

If the command fails the program exited with code 0:
$ taskcore addc -t Work && echo "Success!"
Category "Work" already exists. Please use a different category name. Remember, the category names are not case sensitive.
Success!

The Success! message should not be printed.

Good catch. I will address it.

Fixed in https://github.com/tarikguney/taskcore/commit/5a0d2d0646ce4c957ff0a15eb934193b0648df1b


Contact form not working with netlify

Contact form is not working with netlify because the name attribute on Form and Form.item's input is missing.

@greglobinski  submitted https://github.com/greglobinski/gatsby-starter-hero-blog/pull/12 pull request for this quick change.

@gouravsood,
why do you claim it's not working?
I've just sent a message from https://gatsby-starter-hero-blog.greglobinski.com/contact/ and I got it.
So what's the problem?

I am not sure how its working on your sample blog with name attributes.
It was not working for me and after looking at "Troubleshooting tips" on https://www.netlify.com/blog/2017/07/20/how-to-integrate-netlifys-form-handling-in-a-react-app/, added name for form and form.item inputs. That resolved the issue for me.

@gouravsood
it's a flaw, that I omitted the name attributes for the form elements, so sure I'll merge the PR in the evening, just curious why it works on the demo site.
Thanks you


[SPARK-14352][SQL] approxQuantile should support multi columns

What changes were proposed in this pull request?
1, add the multi-cols support based on current private api
2, add the multi-cols support to pyspark
How was this patch tested?
unit tests

Test build #54800 has started for PR 12135 at commit 67947af.

Test build #54800 has finished for PR 12135 at commit 67947af.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/54800/
Test PASSed.

So if we are going to add this - it might make sense to also add the Python API at the same time (or at least create a JIRA to track adding this to the Python API so it doesn't slip between the cracks).

@holdenk Ok, I will add the python API into this PR.

Test build #55100 has started for PR 12135 at commit 6cf073d.

Test build #55100 has finished for PR 12135 at commit 6cf073d.

This patch fails Python style tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/55100/
Test FAILed.

Test build #55101 has started for PR 12135 at commit 7348d49.

Test build #55101 has finished for PR 12135 at commit 7348d49.

This patch fails PySpark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/55101/
Test FAILed.

Test build #55307 has started for PR 12135 at commit c9ebfef.

Test build #55307 has finished for PR 12135 at commit c9ebfef.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/55307/
Test PASSed.

Test build #55326 has started for PR 12135 at commit dccd337.

Test build #55326 has finished for PR 12135 at commit dccd337.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/55326/
Test PASSed.

@holdenk  The wrapper for pyspark is added.

@zhengruifeng @viirya this is a duplicate of #12207

@viirya could you review this PR and add any items from yours that might be missing?

@MLnick What should I do?

@zhengruifeng we will review and aim to merge this PR.
ping @viirya @jkbradley

@viirya Thanks, I have updated this PR according your comments.

Test build #56091 has started for PR 12135 at commit ce41411.

Test build #56091 has finished for PR 12135 at commit ce41411.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/56091/
Test PASSed.

Merged build finished. Test PASSed.

Test build #56368 has started for PR 12135 at commit bae4053.

Test build #56368 has finished for PR 12135 at commit bae4053.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/56368/
Test PASSed.

cc @MLnick ?

Test this please

Test build #63208 has started for PR 12135 at commit 785a667.

Test build #63208 has finished for PR 12135 at commit 785a667.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/63208/
Test PASSed.

Can any admin verify this PR? It's been a long time and I really need this feature...

Test build #66359 has started for PR 12135 at commit 89ed0cc.

Test build #66363 has started for PR 12135 at commit a475090.

Test build #66363 has finished for PR 12135 at commit a475090.

This patch fails PySpark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/66363/
Test FAILed.

Test build #66359 has finished for PR 12135 at commit 89ed0cc.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/66359/
Test PASSed.

Test build #66415 has started for PR 12135 at commit 81442f4.

Test build #66415 has finished for PR 12135 at commit 81442f4.

This patch fails PySpark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/66415/
Test FAILed.

Test build #66439 has started for PR 12135 at commit 8901eed.

Test build #66439 has finished for PR 12135 at commit 8901eed.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/66439/
Test PASSed.

Merged build finished. Test PASSed.

@MLnick I have remove the unused api on the Scala side, and only the multicol version is used.

@MLnick Could you please review this?

Just re-pinigng @MLnick but we can also see if @davies  or @marmbrus have some cycles to do the final review.

Just re-ping @MLnick @davies @marmbrus

Jenkins, test this please

Test build #68118 has started for PR 12135 at commit 8901eed.

Also, would you mind adding a JIRA to expose this in SparkR? Thanks!

In fact - I'm wondering if the change to the private method for Python will impact R. From a quick look I suspect R will call the Array-based version, so should be ok. But please check.

Test build #68118 has finished for PR 12135 at commit 8901eed.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/68118/
Test PASSed.

Merged build finished. Test PASSed.

@MLnick It seems that tests for NaN is added here https://github.com/apache/spark/blob/master/sql/core/src/test/scala/org/apache/spark/sql/DataFrameStatSuite.scala#L153
SPARK-17219 has two corresponding PR, and the author added tests in https://github.com/apache/spark/pull/15428

@MLnick I run sparkR locally, and approxQuantile works fine. And I review the wrapper here  https://github.com/apache/spark/blob/master/R/pkg/R/stats.R#L173
It seem use the single column version.

Test build #68130 has started for PR 12135 at commit 48828d6.

Test build #68130 has finished for PR 12135 at commit 48828d6.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/68130/
Test PASSed.

Test build #68180 has started for PR 12135 at commit 446013a.

Test build #68180 has finished for PR 12135 at commit 446013a.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/68180/
Test FAILed.

Merged build finished. Test FAILed.

Jenkins, retest this please

Test build #68191 has started for PR 12135 at commit 446013a.

Test build #68191 has finished for PR 12135 at commit 446013a.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/68191/
Test PASSed.

Test build #68930 has started for PR 12135 at commit 1f73d94.

Test build #68930 has finished for PR 12135 at commit 1f73d94.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/68930/
Test PASSed.

ping @MLnick ?

Test build #70805 has started for PR 12135 at commit 1b2df22.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/70805/
Test FAILed.

Jenkins, retest this please

Test build #70813 has started for PR 12135 at commit 1b2df22.

Test build #70813 has finished for PR 12135 at commit 1b2df22.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/70813/
Test PASSed.

Merged build finished. Test PASSed.

Test build #70902 has started for PR 12135 at commit 6517f21.

Test build #70902 has finished for PR 12135 at commit 6517f21.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/70902/
Test PASSed.

ping @MLnick

@MLnick  @jkbradley   Could you mind making a final pass?

LGTM. @zhengruifeng did you manage to add a JIRA for exposing multi-col support in SparkR?

yes spark-18285
https://issues.apache.org/jira/plugins/servlet/mobile#issue/SPARK-18285

The Python side looks good & given Nicks LGTM on the other side I'll go ahead and merge this tonight unless anyone has any objections.

Test build #72070 has started for PR 12135 at commit 29a691f.

Test build #72070 has finished for PR 12135 at commit 29a691f.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/72070/
Test PASSed.

Merged build finished. Test PASSed.

ping @holdenk ?

Sorry, my weekend ended up super busy. I'll try and take a look tomorrow :) Also thanks for adding more tests <3 tests :)

Test build #72237 has started for PR 12135 at commit ccf4d8d.

@holdenk Updated! Thanks for your careful checking.

Test build #72237 has finished for PR 12135 at commit ccf4d8d.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/72237/
Test PASSed.

@holdenk When you do the code merge, you need to leave a comment to explain which branch you merged.

@HyukjinKwon @gatorsmile Thanks for pointing out those issues. I will create a followup PR to fix them ASAP.

@zhengruifeng Actually, I still have a few comments about this PR. I will leave the comments soon. Thanks!

@zhengruifeng Please try to improve the test case coverage in the follow-up PRs. You might find some bugs when you added these test cases. Thanks for your work!

Thanks for the reminder @gatorsmile (it wasn't in the list of things to do when merging so I'll follow up and update the http://spark.apache.org/committers.html docs to add that as a follow up step along with the JIRA update).
For the record: Merged to master in b098576

@gatorsmile it's a good point about the tests. However this JIRA & PR was for exposing the multi-column functionality of approxQuantiles. The missing test cases date back to original impl really. I think we should create a new JIRA for it just to separate out the concerns and make tracking things easier.
@zhengruifeng could you create a JIRA ticket and link your new PR to that one also?

@MLnick I created SPARK-19436[https://issues.apache.org/jira/browse/SPARK-19436] for it.

I am fine to create a separate one, but, normally, in Spark SQL, we do not create a separate JIRA for improving the related test case, if the original ones are missing.


Mozilla.FirefoxNightly version 91.0a1

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?

[x] Does your manifest conform to the 1.0 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

Don't know why that would happen
Worked for me

But the link is static, for a specific version

That particular URL is not a static. The firefox-91.0a1.en-US.win64.installer.exe file was updated multiple times yesterday, because it gets a new compiled binary every day as it's a daily/nightly build.
This is a static URL: https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2021/06/2021-06-16-21-42-00-mozilla-central/firefox-91.0a1.en-US.win64.installer.exe with the hash of ccd2d654f2ff5bcb62d4c248b1d26cc2a1e98b4ea7290914084a2e6ad9dc1234

Oh, they don't change version number for each nightly build

The Approve changes option is greyed out for me

There should be a button called "Commit suggestions" or "Add suggestions to batch" on my reviews.
Make sure to update the version folder using GitHub Desktop from https://desktop.github.com otherwise there'll be a manifest error.

The most important point: Make sure to update the version folder using GitHub Desktop from https://desktop.github.com otherwise there'll be a manifest error and the PR will not be able to be validated.


fix(Ecto.Adapters.SQL): ensure binary_ids work with unique_constrant

Previously when using binary_ids, invalid constraints would raise:

(CaseClauseError) no case clause matching: {:invalid, [unique:
"users_email_index"]}

This adds the missing clause to the case statement for binary_ids.
I wanted to add a test for this too, but couldn't find the correct location for it. If someone could point me in the right direction then I'll add it in.

I was going to add the test to https://github.com/elixir-lang/ecto/blob/master/test/ecto/changeset_test.exs#L754

Ah, adding a test for this feature is a bit complicarted. I will take a look at it.

test in master! Thank you!


Implement Local VFS

Implement a Virtual File System.
Files should be implemented as JavaScript objects that can be serialized directly to JSON.  VFS should be capable of reading from and writing to DIV's within the ACD document.
The VFS needs to be able to store it's representation within the ACD document using a similar strategy to that of TiddlyWiki.

I would like to support localStorage and other engines for persistence (eg server/cloud); this is the primary reason I want to use a VFS.  Additional fs drivers can be mounted and used transparently.


Sidecar containers cannot specify probes

Description of the feature or enhancement:
Sidecar containers, unlike init containers, support probes. addInitContainer doesn't support this and will throw an error if liveness, readiness, or startup are specified:
https://github.com/cdk8s-team/cdk8s-plus/blob/f7c11148f65084b35fb5d3273a31af387015bc8f/src/pod.ts#L124-L135
I'd like to be able to specify these probes for sidecar containers.
Use Case:
Since a sidecar container does not exit before the main container starts, probes are the only means available for delaying the startup of the main container beyond the simplest possible cases. Sidecar containers may require some time to be ready after starting, and in my case it's important that the sidecar container be ready, not just started, by the time the main container starts.
Proposed Solution:
It seems relatively straightforward to build on #3812 and disable the exceptions if restartPolicy is specified.
Other:

[x] :wave: I may be able to implement this feature request
[ ] :warning: This feature might incur a breaking change

This is a :rocket: Feature Request

@AmaranthineCodices

Proposed Solution:
It seems relatively straightforward to build on https://github.com/cdk8s-team/cdk8s-plus/pull/3812 and disable the exceptions if restartPolicy is specified.

You mean if restartPolicy is set to Always right? Because that is what differentiates init containers from sidecars:

If an init container is created with its restartPolicy set to Always, it will start and remain running during the entire life of the Pod. This can be helpful for running supporting services separated from the main application containers.


Update GfxUi.cpp

The display of the bmp images was not working (nothing displayed, everything else working ok). The pixels were being calculated and written OK. I guess the "setAddrWindow" is not working as expected. I changed to use the "writePixel" instruction instead.

thanks man, this solves issue #10!

You're welcome.  :-)
I don't know what broke it. I assumed a lib was updated, as I just started and no-one had complained.


Quite incredible this issue took so long to show up. I can reproduce it. Fix is on its way.
Thanks for reporting it!

Actually, this is a duplicate of #720.


keyuri label without issuer should be accountName

keyuri label without issuer should be accountName.
label = accountname / issuer (“:” / “%3A”) *”%20” accountname

@helloyou2012 Thanks for the MR! ✅


Failed to import - members path of every package

Background
Failed to import every package by members path.
We deployed a self-hosted ESM, and encountered this issue.
Then I clone and started esm.sh on my local, encounter the same issue.(based on the newest commit, not stale code)
Failing module
Every package encounters this issue, for instance:
Success:
localhost:8080/esm/@ant-design/icons

Fail:
<EMAIL_ADDRESS>
The fail response:
/* esm.sh - error */
throw new Error("[esm.sh] " + "resovleESModule: open<EMAIL_ADDRESS>no such file or directory");
export default null;

Error message

Additional info

esm.sh version: The newest commit   a60ef18c36d659f4d2da2ac380ef471072735140

where does the URL<EMAIL_ADDRESS>come from?

Hey @ije , The  URL comes from the correct redirect on visits: localhost:8080/@ant-design/icons/es/icons/RocketOutlined.js?bundle&deps=react@18,react-dom@18,antd@4.


Make repository mandatory in Cargo.toml to find repositories easily

When I walk in crates.io, sometimes a crate has no repository URL, which makes it difficult to find its repository. I think this is really problematic in finding libraries for a Rust program.
If the repository metadata in Cargo.toml is required, most of this issue should be solved.

I don't think we can make it mandatory, as we don't want to require a public repository to publish. This is particularly true of local and private registries.  Cargo will warn if the homepage/repository/documentation fields are not set.
I'm not sure how the repository URL is related to finding libraries.  If crates.io is not providing enough information, you may want to check the crates.io issue tracker: https://github.com/rust-lang/crates.io/issues
I'm going to close, but if you have any questions, feel free to ask.

Thanks for your reply. Yes, it does not need to be mandatory for private projects, so how about to make warnings for missing repository on public projects  (i.e., when publish is not false)?
I believe it is one of the best practices to follow for those who publish crates.

It should display a warning if the repository/homepage/docs fields are not set in cargo package and cargo publish.


fix(deps): update module golang.org/x/crypto to v0.19.0

This PR contains the following updates:

Package
Type
Update
Change

golang.org/x/crypto
require
minor
v0.18.0 -> v0.19.0

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

:tada: This PR is included in version 1.28.4 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


CLOUD-494 fixed decommision

@keyki or @martonsereg
decommission host from cluster, do not remove instance, upscale cluster won’t work again
-> hosts are unregistered from Ambari, these nodes cannot be reused (they are unknown to Ambari)

Jenkins build finished, all tests passed.
Refer to this link for build results: http://ci.sequenceiq.com/job/cloudbreak-pull-request/905/

Jenkins build finished, all tests passed.
Refer to this link for build results: http://ci.sequenceiq.com/job/cloudbreak-pull-request/906/

Jenkins build finished, all tests passed.
Refer to this link for build results: http://ci.sequenceiq.com/job/cloudbreak-pull-request/909/

Jenkins build finished, all tests passed.
Refer to this link for build results: http://ci.sequenceiq.com/job/cloudbreak-pull-request/910/


Don't "assume" application ID - pass it in URL

In gitlab by @A-Lawrence on Sep 1, 2016, 23:42
Pass the application (public) ID in all URLs on the main site, to avoid any confusion in assumptions.

In gitlab by @A-Lawrence on Sep 2, 2016, 12:11
mentioned in commit cc1bbe25ea32e40595d97c637d011ceec82ba09e

In gitlab by @A-Lawrence on Sep 2, 2016, 13:01
mentioned in commit 5b28a63a522c6e4624b4a3d201ed6596aa8a9558

In gitlab by @A-Lawrence on Sep 2, 2016, 14:15
Removed ~558948 label

In gitlab by @A-Lawrence on Sep 2, 2016, 14:15
mentioned in commit 4a0a07324fb7565317703985e50fe66cb37fcb61

In gitlab by @A-Lawrence on Sep 2, 2016, 15:27
mentioned in commit 495a26e23ee467da9be739dfa7f008bf553ebc59


Uncaught SyntaxError: Unexpected token '<'

Version
4.0.5
Environment info
  System:
    OS: macOS Mojave 10.14.3
    CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
  Binaries:
    Node: 12.11.1 - /usr/local/bin/node
    Yarn: Not Found
    npm: 6.12.1 - /usr/local/bin/npm
  Browsers:
    Chrome: 78.0.3904.97
    Firefox: Not Found
    Safari: 12.0.3
  npmPackages:
    @vue/babel-helper-vue-jsx-merge-props:  1.0.0
    @vue/babel-plugin-transform-vue-jsx:  1.1.2
    @vue/babel-preset-app:  4.0.5
    @vue/babel-preset-jsx:  1.1.2
    @vue/babel-sugar-functional-vue:  1.1.2
    @vue/babel-sugar-inject-h:  1.1.2
    @vue/babel-sugar-v-model:  1.1.2
    @vue/babel-sugar-v-on:  1.1.2
    @vue/cli-overlay:  4.0.5
    @vue/cli-plugin-babel: ^4.0.0 => 4.0.5
    @vue/cli-plugin-eslint: ^4.0.0 => 4.0.5
    @vue/cli-plugin-router:  4.0.5
    @vue/cli-plugin-vuex:  4.0.5
    @vue/cli-service: ^4.0.0 => 4.0.5
    @vue/cli-shared-utils:  4.0.5
    @vue/component-compiler-utils:  3.0.2
    @vue/preload-webpack-plugin:  1.1.1
    @vue/web-component-wrapper:  1.2.0
    eslint-plugin-vue: ^5.0.0 => 5.2.3
    vue: ^2.6.10 => 2.6.10
    vue-eslint-parser:  5.0.0
    vue-hot-reload-api:  2.3.4
    vue-loader:  15.7.2
    vue-style-loader:  4.1.2
    vue-template-compiler: ^2.6.10 => 2.6.10
    vue-template-es2015-compiler:  1.9.1
  npmGlobalPackages:
    @vue/cli: 4.0.5

Steps to reproduce

run vue create . with all default selection.

copy vue.config.js file into root directory

module.exports = {
  productionSourceMap: false,
  assetsDir: '../static',
  outputDir: '../static',
  indexPath: '../templates/index.html'
};

run vue run serve

What is expected?
Show the page normally just like in vue cli version 3
What is actually happening?
blank page with console error
chunk-vendors.js:1
Uncaught SyntaxError: Unexpected token '<'

app.js:1
Uncaught SyntaxError: Unexpected token '<'

Before i copy the vue.config.js, and i run the vue run serve, everything is normal.

assetsDir is defined realtive to outputDir, so now it's not a child folder of the latter.
Which means the webserver can't serve it.
It should be a child folder of the outputDir

@LinusBorg

assetsDir is defined realtive to outputDir, so now it's not a child folder of the latter.
Which means the webserver can't serve it.
It should be a child folder of the outputDir

If i use the default value of assetsDir which is '' then it will looks like
<script src=/js/chunk-vendors.763c0f03.js>

What i am expecting is the output for assets is something like this in index.html
<script src=/../static/js/chunk-vendors.763c0f03.js>

How do i achieve it?

Ok solved!
Maybe i can share my solution and close this issue.
Actually I am using golang (with gin-gonic) for the backend and vue as frontend with structure
myapp
  - app
    - main.go
webapp
  - node_modules
  - public
  - src
  - package.json
  - other vue cli generated files..
dist
  - static
    - css
    - img
    - js
  - templates
    - index.html
  - favicon.ico

i use dist/ as output directory for npm run build and this directory also will used by golang as assets file.
main.go
package main

import (
	"net/http"
	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()
	router.GET("/", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index.html", gin.H{"title": "MainMenu"})
	})

	router.StaticFile("./favicon.ico", "../dist/favicon.ico")
	router.Static("/static", "../dist/static")
	router.LoadHTMLGlob("../dist/templates/*")

	router.Run(":8081")
}

vue.config.js
module.exports = {
  productionSourceMap: false,
  outputDir: '../dist',
  assetsDir: 'static',
  indexPath: 'templates/index.html'
};

Ok solved!
Maybe i can share my solution and close this issue.
Actually I am using golang (with gin-gonic) for the backend and vue as frontend with structure
myapp
  - main.go
webapp
  - node_modules
  - public
  - src
  - package.json
  - other vue cli generated files..
dist
  - static
    - css
    - img
    - js
  - templates
    - index.html
  - favicon.ico

i use dist/ as output directory for npm run build and this directory also will used by golang as assets file.
main.go
package main

import (
	"net/http"
	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()
	router.GET("/", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index.html", gin.H{"title": "MainMenu"})
	})

	router.StaticFile("./favicon.ico", "../dist/favicon.ico")
	router.Static("/static", "../dist/static")
	router.LoadHTMLGlob("../dist/templates/*")

	router.Run(":8081")
}

vue.config.js
module.exports = {
  productionSourceMap: false,
  outputDir: '../dist',
  assetsDir: 'static',
  indexPath: 'templates/index.html'
};

thanks

@mirzaakhena 👍 Have similar issue. Solution in vue.config.js
fails with cli4
module.exports = {
  publicPath: 'a',
  outputDir: 'dist/a',
}

works with cli4
module.exports = {
  publicPath: '/a',
  outputDir: 'dist/a',
}

Thank you very much, this solution solved my deployement problem :)

For my purposes this worked:
module.exports = {
  outputDir: '../static',
  indexPath: '../templates/index.html'
}

It seems assetsDir must be a child of outputDir, but not indexPath.

Thanks, it worked for me!


math: add Compare and Compare32

The slices.Sort doesn't support sorting slices of floating-point numbers containing Not-a-number (NaN) values, It's not very intuitive.
Once the slices package is merged into stdlib, the sort.{TYPE}s(e.g. sort.Ints, sort.Float64s) APIs may be semi-deprecated. But the slices package doesn't provide a simple way to sort slices of floats containing NaNs, it recommends using slices.SortFunc(x, func(a, b float64) bool {return a < b || (math.IsNaN(a) && !math.IsNaN(b))}), this function is very complex compared to using sort.Float64s.
Related CL: https://go-review.googlesource.com/c/exp/+/446155

This is related to #33440. @smasher164 mentions the existence of a total-ordering predicate that could be used to sort floats with NaNs.

CC @eliben @randall77

Once the slices package is merged into stdlib, the sort.{TYPE}s(e.g. sort.Ints, sort.Float64s) APIs may be semi-deprecated.

I don't think they will, using sort.Float64s will be fine forever.
I think the only advantage of slices.Sort is that it will work on slices of named float64s (e.g. type F float64; a := []F{5,4,3}; slices.Sort(a), that won't work using sort.Float64s). And in that rare case one can use the described workaround.

Since Go1.18 is released, many users use the slices.Sort  to replace sort.{TYPE}s, because the former is faster and more clear in almost all cases. From the point of view of the users, the former looks more like a replacement of the latter, they have almost the same function in fact except the slices.Sort doesn't support sorting slices containing NaNs.
The main concern is that users don't notice this special case, and the replacement may break their codes.

I think it's worth adding documentation to slices.Sort that sorting a float won't work. Maybe also there could be a comparator function in sort.

I think it's worth adding documentation to slices.Sort that sorting a float won't work. Maybe also there could be a comparator function in sort.

The documentation for Sort is currently:

Sort sorts a slice of any ordered type in ascending order. Sort may fail to sort correctly when sorting slices of floating-point numbers containing Not-a-number (NaN) values. Use slices.SortFunc(x, func(a, b float64) bool {return a < b || (math.IsNaN(a) && !math.IsNaN(b))}) instead if the input may contain NaNs.

Is this not sufficient documentation,  @carlmjohnson ?

@zhangyunhao116 I'm not a big fan of this proposal at this time. The problem with sorting floats is clearly documented and a workaround is provided. It's easy to sort using SortFunc

The problem with sorting floats is clearly documented and a workaround is provided. It's easy to sort using SortFunc

Agree that the special case is clearly documented and has a workaround, but it's nice to support all the special cases as sort.{TYPE}s does :)
I did a simple poll about slices.Sort at my work. The question is

The slices.Sort sorts a slice of any ordered type in ascending order. Intuitively, you think the function is
A. A replacement of sort.{TYPE}s APIs, has the same output, and support all special cases.
B. slices.Sort and sort.{TYPE}s APIs exist side by side, and they may have different outputs in special cases.

49 people joined it, 81.6% (40) selected A, and 18.4% (9) selected B. Looks like many users of this API doesn't notice the special case.

The proposal still need more discussions, it's a rare case, and It's merely not as users intuitively expected. The slices.Sort work very well for all the general cases.

Special casing the generic type being float64 would solve sorting []float64, but it wouldn't solve sorting []struct {x float64}.
I don't see how we can special case this reasonably. Callers should not sort slices with NaNs in them.

What if instead, we provided a function in the math package like:
package math

// FloatCompare compares x to y according to the
// total-ordering predicate in IEEE-754, section 5.10.
// The result will be 0 if a == b, -1 if a < b, and +1 if a > b.
func FloatCompare[F constraints.Float](a, b F) int

// FloatLess reports whether x is less than y according to the
// total-ordering predicate in IEEE-754, section 5.10.
func FloatLess[F constraints.Float](a, b F) bool {
    return FloatCompare(a, b) < 0
}

Thus, usage with the slices package can be something like:
var fs []MyFloat32
slices.SortFunc(fs, math.FloatLess[MyFloat32])

This proposal has been added to the active column of the proposals project
and will now be reviewed at the weekly proposal review meetings.
— rsc for the proposal review group

My argument for it being in "math" is:

The other scalar kinds (int, uint) don't really have ambiguous definitions of ordering (i.e., the < operator does exactly what you want). It's only really float that is special.
The "math" package seems to already have special handling for IEEE-754. I proposed the names with a Float prefix to match the existing FloatXXbits and FloatXXfrombits functions that are IEEE-754 specific. There are other IEEE-754 specific functions like IsNaN and NaN.
I don't think a predicate for ordering is sufficient justification for it being "sort". For example, should we have moved bytes.Compare to be sort.BytesCompare, or netip.Addr.Compare to be sort.AddrCompare, or time.Time.Compare to be sort.TimeCompare? Functionality for order should live with other functionality for the type (i.e., "math" for floats, "bytes" for []byte, "strings" for strings, "netip" for Addrs, "time" for Times, etc.).

That makes sense to me. My only other thought is that math.Compare(a, b float64) int would also make sense since all the functions in math take float64.

What if instead, we provided a function in the math package like:

This total-ordering predicate would be pretty simple to define as well, since it's just:
func sign(a, b int64) int {
	if a < b {
		return -1
	}
	if a > b {
		return 1
	}
	return 0
}

func FloatCompare[F constraints.Float](a, b F) int {
	x := int64(Float64bits(float64(a)))
	y := int64(Float64bits(float64(b)))
	x ^= int64(uint64(x>>63) >> 1)
	y ^= int64(uint64(y>>63) >> 1)
	return sign(x, y)
}

The only thing I'd point out is this ordering of NaNs is different from the way sort.Float64s does it. The total ordering predicate sorts -NaN < everything else < +NaN, while sort.Float64s does (+-)NaN < everything.

The special case in sort seems like a clear decline since it can't be done generally.
Retitling to be about this math.FloatCompare that might be helpful for people writing their own.

I feel slightly better about this because it is defined by IEEE-754 and we are not making it up.
That said, it still seems very niche.
The definition is in https://irem.univ-reunion.fr/IMG/pdf/ieee-754-2008.pdf on page 40.
I don't think we should make this function the first generic one in math.
It should probably just be func Compare(x, y float64) int.

My reason for proposing a generic version was because you can't roundtrip convert a float32->float64->float32 and preserve the exact bits for NaNs. A single bit is mangled in the float32->float64 conversion.
See this example: https://go.dev/play/p/sPn-yfpd-nK, where one of the bits gets mangled on my Ryzen 5900x. I don't know if this a Go-specific issue or a x86 issue.
This means that:
var x, y float32 = ...
Compare(float64(x), float64(y))

wouldn't be quite correct for NaNs. Arguably this case is esoteric, but Compare is already esoteric, so the people who use it probably care about correctness in the esoteric cases.

My feeling is to just provide the float64 API under the name math.Compare, and wait until math/v2 to provide a generic version along with generic everything else.

See this example: https://go.dev/play/p/sPn-yfpd-nK, where one of the bits gets mangled on my Ryzen 5900x. I don't know if this a Go-specific issue or a x86 issue.

This is squashing a signaling NaN to a quiet NaN. I believe all platforms do this on a float32->float64->float32 conversion. (Joe and I have been through this ugliness before, e.g., #27193 and #36400.)
I'd be ok with a Compare and Compare32. (Following the lead of Nextafter and Nextafter32.)

Writing this function generically without converting to float64 first would require the ability to either call Float32bits or Float64bits depending on the type of the argument, which doesn't seem possible without converting to interface{} and type-asserting. I vote in favor of Compare32 and Compare64.

Compare and Compare32 sounds fine. It looks like maybe float32->float64 does preserve signaling and float64->float32 is what squashes it, in which case plain Compare would technically be OK. But maybe other chips are different.

It sounds like the API is:
func Compare(x, y float64) int
func Compare32(x, y float32) int
and both functions return -1 when x compares before y, 0 when they compare the same, and +1 when x compares after y.
The comparison is from PDF page 40 of https://irem.univ-reunion.fr/IMG/pdf/ieee-754-2008.pdf which puts negative NaNs before negative numbers and positive NaNs after positive numbers.
It looks like that comparison is exactly a bitwise comparison like
int64(math.Float64bits(x)) compared with int64(math.Float64bits(y))
Can someone confirm that?

@rsc

int64(math.Float64bits(x)) compared with int64(math.Float64bits(y))

It's not exactly a bitwise comparison. When x and y are both negative,
cmp(int64(math.Float64bits(x)), int64(math.Float64bits(y)))

gives you an incorrect answer. For example, int64(math.Float64bits(-3)) < int64(math.Float64bits(-2)) is false.
What's needed is a check for the sign bits of x and y. If they're both negative, flip the comparison.
So something like
x := int64(math.Float64bits(float64(a)))
y := int64(math.Float64bits(float64(b)))
if math.Signbit(a) && math.Signbit(b) {
	return sign(y, x)
}
return sign(x, y)

This can be done branchlessly as well of course, by toggling all the bits based on the sign bit.

Based on the discussion above, this proposal seems like a likely accept.
— rsc for the proposal review group

No change in consensus, so accepted. 🎉
This issue now tracks the work of implementing the proposal.
— rsc for the proposal review group

This change is breaking MIPS platforms with the so-called "legacy NaN" behavior (basically the signalling bit mean the opposite to IEEE 754-2008). We've never been caring about this aspect of MIPS weirdness before (we've seen #37455 but ultimately no awareness was added), we may have to do something now.

@xen0n What do you think about setting the is_signaling bit when not on NAN2008?
So on mips,
if IsNaN(a) && !NAN2008 {
    // set the is_signaling to 1
}
if IsNaN(b) && !NAN2008 {
    // set the is_signaling to 1
}
// do comparison as normal

@xen0n What do you think about setting the is_signaling bit when not on NAN2008? So on mips,
if IsNaN(a) && !NAN2008 {
    // set the is_signaling to 1
}
if IsNaN(b) && !NAN2008 {
    // set the is_signaling to 1
}
// do comparison as normal

The problem is there's currently no trivial/cheap way to derive the NAN2008 value in your sketched-up code. Either perform some non-trivial dance to grab it from the ELF header (which is not suitable for math; perhaps runtime would be better if we must probe at run-time) and cache the result; or better yet, detect NaN flavor at compile-time and select appropriate code, but "MIPS NaN flavor" isn't something currently expressible via go:build constraints.

Right, as you posted that comment, I noticed that debug/elf doesn't expose the EF_ flags.
Ideally the runtime would check this on startup and store it in internal/cpu, so the math library can just check that field.

I suggest that we write special case code if runtime.GOARCH == "mips" for comparing Inf and NaN.  The behavior of math.Compare should not vary based on ELF flags.  (Maybe the behavior of math.NaN should vary, but not math.Compare).

Reopening because the CL was rolled back.

Maybe the behavior of math.NaN should vary, but not math.Compare

If we fix math.NaN() for MIPS, does that guarantee that NaNs that are the result of some FPU computation will remain the same?
Maybe Compare doesn't need to know about the ELF flag. If the inputs are NaNs and the platform is MIPS, then it can set the signaling bit no matter what.

Looking a bit more I'm not even sure that there is any problem with Compare.  I think the problem may only have been with the test.  The test expected NaN to return a non-signalling NaN value.  Maybe we just need to tweak the test.

I was trying to replicate the issue by manually toggling the quiet bit, and I was still getting the correct answer.
(Sidenote: there are two quiet nan values from https://github.com/golang/go/blob/master/src/cmd/compile/internal/test/float_test.go 0x8fc00000 and 0x8fffffff that I thought were failing my test, but I think they're actually just invalid quiet NaN values)

The test expected NaN to return a non-signalling NaN value.
Doesn't NaN() just bitcast 0x7FF8000000000001 and return it up? How could it return a signaling value?

Hmmm, you're right.  Both the constants and the Compare function are all done using only bits.  Now I really don't understand what is going wrong on MIPS.
The error messages in the test log are
    all_test.go:2296: Compare(NaN, -Inf) = 1, want -1
    all_test.go:2296: Compare(-Inf, NaN) = -1, want 1
    all_test.go:2302: Compare32(NaN, -Inf) = 1, want -1
    all_test.go:2302: Compare32(-Inf, NaN) = -1, want 1

That is interesting because the test actually never compares positive NaN with negative infinity.  The outputs of Compare are correct for the values that are being printed.  From looking at the test, it appears that -NaN() on MIPS returns a positive NaN, whereas on other systems it returns a negative NaN.  Looking at the generated code, it seems that on both amd64 and mips64le the code works by loading the constant 0x7ff8000000000001 and then negating it.  On amd64 the negation is done by doing an xor with 0x8000000000000000.  On mips64le it's done using the NEGD instruction, which in the MIPS world is known as neg.d.
According Richard Sandiford at https://gcc.gnu.org/pipermail/gcc-patches/2006-September/199974.html the MIPS neg.d instruction does not actually change the sign bit of a NaN.  Fortunately Godbolt lets us see what GCC generates when negating a float64 in C.  It does not use neg.d, but instead does an xor with the sign bit.
So I think that this could be described as a bug in the MIPS support in the Go compiler.

I filed #58466 for the compiler bug.  If that gets resolved as I expect, then we can return to CL 459435.

As a workaround, in case we decide not to change negate's behavior, I can update the test to take the bit-exact representation of -NaN.

Sent a second CL with the same change, but updated the tests. @xen0n are you able to verify that these tests pass on MIPS?

#58468

Issue #60519 suggests removing math.Compare and math.Compare32 in favor of cmp.Compare.  This would effectively decline this proposal (though it could be reopened for a later release if that seems desirable).


YMultiDocUndoManager removeFromScope

Hi,
we can dynamically add tracked types with addToScope.
How about removing them dynamically?

Makes sense. Feel free to open a PR!
It's hard to envision how this would be used in practice. If you intend to make a PR, please also state how your PR would solve the problem and whether there might be other workarounds.


add showgridlines attr

This is a pull request for adding an attribute of showing/hiding grid lines.

@ericlin716 I didnt realize you had already started this, but my PR for the same feature has documentation updates, test case updates, and data input validation as well.
PR #117


How to detect that the preview mode is enabled?

I want to customize the <Esc> mappings on filesystem source so that when the preview mode is enabled, it will do toggle_preview to disable the preview. But when preview mode is not enabled, the neo-tree will get closed. So, as title.

There is not a way to know at the moment, but I can add one.

Yes it is. It has not been released yet though, it is still in main.


3AUG

Fixes #
Removed TemplateId and Schema from workbook metadata
Proposed Changes

The relevant changes for this is already approved and merged as PR #975 and #929 so dropping this PR (no action).


Wrong orderBy dynamic path generation for SELECT DISTINCT JPA-Queries

The orderBy dynamic path generation was introduced in #582 and it works as expected with regular JPA Queries, e.g
query.from(player).orderBy(player.team.name.asc()).list(player);

generates proper JPQL
select player from Player player
    left join player.team as player_team
    order by player_team.name asc

and the JPA-provider (here: Hibernate v4.2.14.Final) generates proper SQL
select player0_.id as id1_0_, player0_.age as age2_0_, player0_.team_id as team_id3_0_
    from Player player0_
    left outer join Team team1_ on player0_.team_id=team1_.id
    order by team1_.name ASC

However, one shouldn't transfer the same logic one-to-one to SELECT-DISTINCT queries.
In the following example:
query.from(player).distinct().orderBy(player.team.name.asc()).list(player);

it is wrong to generate JPQL
select distinct player from Player player
    left join player.team as player_team
    order by player_team.name asc

because the corresponding SQL statement is not correct:
select distinct player0_.id as id1_0_, player0_.age as age2_0_, player0_.team_id as team_id3_0_
    from Player player0_
    left outer join Team team1_ on player0_.team_id=team1_.id
    order by team1_.name ASC

PostgreSQL v9.3.5 reports

for SELECT DISTINCT, ORDER BY expressions must appear in select list

H2 v1.3.176 reports

org.h2.jdbc.JdbcSQLException: Order by expression "TEAM1_.NAME" must be in the result list in this case;

Not yet tested with other DBs but according to official docs, same behaviour can be expected

Apache Derby
MS SQL Server
Oracle

affected versions: 3.5.1 and 3.6.0

+1
having problem with it too. our architect is constantly nagging cause we need too many workarounds because of this

I have the same problem.

I understand the issue, but how can this be better handled in Querydsl?
Based on
query.from(player).orderBy(player.team.name.asc()).list(player);

we don't really know how the select part looks like since eager loading of the team relation would extend the select part.

Any workaround for this issue?

@mooshben
The ugly but trivial workaround is:

Add all orderBy statements explicitly to the list of projections

// original
List<Player> players = query.from(player).distinct().orderBy(player.team.name.asc()).list(player);
// workaround
List<Tuple> tuples = query.from(player).distinct().orderBy(player.team.name.asc()).list(player, player.team.name);

You would then have to deal with tuples and unwrap the player-objects

for (Tuple tuple : tuples) {
    player = (Player)tuple.get(0);
}

@timowest: wouldn't it be possible to automatize those two steps, in case if Query-Mixin is maked as distinct=true?

+1

I experienced same issue. Can be applied some automation on QueryDSL side here as propose @alexeev?

How SELECT DISTINCT ON specific field can be done in querydsl 4.0.2 ?
Thanks.

+1

I am seeing this as well with QueryDSL 4.1.2 and MySql 5.7.12 and sql_mode set to ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Any chance to fix it? For example by adopting the solution from the comment above?
https://github.com/querydsl/querydsl/issues/1150#issuecomment-141094163

This is just a limitation of the database dialect. If at all worked around, it should be in the ORM layer.
Just make sure the query projects the team as well, if you want to order by its properties.
query.select(player, player.team).from(player).orderBy(player.team.name.asc()).list(player);

This is just a limitation of the database dialect. If at all worked around, it should be in the ORM layer.
Just make sure the query projects the team as well, if you want to order by its properties.
query.select(player, player.team).from(player).orderBy(player.team.name.asc()).list(player);


feat: Diagnostic example section added with an image

@IXLLEGACYIXL let me know if you would like to go ahead with this


Hard Jade requirement.  I'm using WTHIT and it still crashes demanding Jade

Describe the bug
At startup it crashes stating there is a hard dependency on Jade.  I use WTHIT.
To Reproduce
Steps to reproduce the behavior:
1.Install mod into 1.19.2 Fabric server using WTHIT
2. Start server
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
For it to detect WTHIT and function as intended...
Environment

Minecraft: 1.19.2
Fabric Loader: 0.14.21
Fabric API: ?

Logs
Pastebin the log [e.g. logs/latest.log] and link it below:

Additional context
Add any other context about the problem here.

Hmmm swore I pasted the log and a pastebin url... Here again.. Just in case
https://pastebin.com/0N2bnUwr

Please check the mod file name. You are using the mod for Jade, aren't you? You need to install WTHIT version.

Ugh.. sorry.  I'll pay closer attention to the versions

Is it plausible to combine the two dependencies into a single mod, and have them set as an either-or mutex switch?


Update user and dev instructions in the Book

TODO

[ ] put basic build instructions and known issues in the README
[ ] from the README and user book, link to detailed:

system requirements
troubleshooting
any other important details

Motivation
Keep the User docs and the Dev docs up to date with our instructions in the README.
Solution

Update User docs to match the README
Update Dev docs to do the classic git clone; cargo build flow.

The code in this pull request has:

[x] Documentation Comments

Review
@teor2345 @yaahc @hdevalence
This is duplicating a bit, thoughts?

I think we should put basic instructions and known issues in the README, and link to system requirements, troubleshooting, and other details in the book.

Closing for now, keeping the PR, to be resolved in https://github.com/ZcashFoundation/zebra/issues/2191


Consolidated List Of All Rolls?

Love what you are doing here.  A ton of work going into these and I believe your current rolls reflect the communities position on best rolls.
Was wondering if you had a consolidated list of all your roles that we can incorporate into DIM?

Thanks for the compliment - they should already be in there! The files you see here are the ones I use for proofing and correcting before I send the link to 48klocs for incorporation into the main voltron.txt file. So everything should be in DIM a few days after appearing here.

Excellent!  Appreciate this answer and all the work you do!


Clean up notifications

Good catch, because I did not, but I see they got kicked out along with a couple of other things, let me fix that :)


Allow xmake package to embed rules and scripts

Is your feature request related to a problem? Please describe.
We have several packages on xmake which may be requiring a set of specific rules, for example Qt packages (qt5base repository) are not compatibles with xmake Qt rules (which is why I provide my own rules currently, see here).
Sure, we can improve xmake embedded rules to handle such packages, but I think it would be better to allow packages to provides rules themselves, and perhaps even other kind of scripts (but rules would be great for a start).
Another example is my shader language library which I hope to put on xmake-repo soon, I'd like to be able to provide a rule similar to glsl2spirv to be able to call the shader compiler to produce binaries.
Describe the solution you'd like
Allowing packages to embed rules would be a great addition to xmake, as it would allow a package update to update rules, and won't need everyone to copy rules in their own projects.
Packages could copy their rules lua files to the package installation directory scripts/rules, which xmake would load when adding a package to a project.
add_requires("nzsl")

target("myproject")
    add_files("main.cpp")
    add_files("shader.nzsl", { rule = "nzsl::compile_shaders" }) -- reference rule from nzsl package

If required, we can make it explicit:
add_requires("nzsl", { import_rules = true })

Describe alternatives you've considered

Provide a compile_shader.lua file that people could copy in their project, but that means package updates can break it.

Make a pull request to embed the rules inside of xmake, but this means the package update has to wait the next xmake update to ensure both stay in sync.

Additional context
I think it would be great to give the possibility to embed other scripts, perhaps even make xmake packages that provide nothing but rules

I wouldn't consider it for now, it's too complex and I'd need to make a lot of changes. The current xmake rules implementation architecture cannot support it.

From what I know about xmake internals I don't think it's that complex, we could store the presence of rules in the package manifest and know when processing them if a package has scripts or not, and simply run the scripts if required using import_rules or execute_scripts.
I can try to work on it and make a pull request if you wish.

I wouldn't consider it just yet and I don't accept other pr, sorry.

+1 for this, it won't be a big problem I think. Just add some paths such as (xmake-repo\rules\abc-init.lua) and add xmake-repo\rules to the default script search path.
usage:
add_repositories("my-repo")

includes("abc-init.lua") -- from my-repo\rules\abc-init.lua

target("test")
	add_files("main.abc")

This makes xmake-repo more flexible and worth consideration.

I like the include search path approach, but requiring a full xmake repository to add scripts seems a bit much.
Maybe something like
includes("compile-rule.lua", { package = "nzsl" })

Or even
<EMAIL_ADDRESS>
which would include from the package scripts folder.

This looks handy! Having the ability to add custom rules for codegen would help us as well

Would be awesome, no wait, amazing !!

I will consider implementing it, but at the moment the problem is not how to design the api. add_requires is sufficient.
The question now is how to implement it safely and securely. With the current mechanism, it would be complicated to implement and I don't have a good solution at the moment.
Since rules need to call the on_load interface, we need to load all the rules before we load all the targets, but the parsing of add_requires and the loading of the package configuration is relatively late, so how to load all the rules in requirements early and ensure that the repository version and state is a complex issue.
Translated with www.DeepL.com/Translator (free version)

A first shot would be the idea of @xq114, allow custom repositories to provide rules and include to fetch them. If it's simpler.

Similarly, using includes is difficult to deal with, we need to select the right repository and we need to consider finding the rules from the repository with the specified commit when require-lock is turned on.
includes is invoked much earlier and no more information about the configuration of the repository is available.

I have supported it.
we need put all package rules to packages/x/xxx/rules directory, it will be installed to package installation directory.
Although we now support the reference package rule, it has some limitations.

With the rules inside the package, we cannot define on_load/after_load, but we can usually use on_config instead.

Add package rule
packages/z/zlib/rules/foo.lua
rule("foo")
    on_config(function (target)
        print("foo: on_config %s", target:name())
    end)

Apply package rule to target
We use add_rules("@packagename/rulename") to refer to the rules inside the specified package. for example add_rules("@zlib/foo")
add_requires("zlib", {system = false})
target("test")
    set_kind("binary")
    add_files("src/*.cpp")
    add_packages("zlib")
    add_rules("@zlib/foo")

Use package alias name
If a package alias exists, xmake will give preference to the package alias to get the rule.
add_requires("zlib", {alias = "zlib2", system = false})
target("test")
    set_kind("binary")
    add_files("src/*.cpp")
    add_packages("zlib2")
    add_rules("@zlib2/foo")

Add package rule deps
We can use add_deps("@bar") to add other rules relative to the current package directory.
However, we cannot add rule dependencies from other packages, they are completely isolated and we can only refer to rules from other packages imported by add_requires in the user project.
packages/z/zlib/rules/foo.lua
rule("foo")
    add_deps("@bar")
    on_config(function (target)
        print("foo: on_config %s", target:name())
    end)

packages/z/zlib/rules/bar.lua
rule("bar")
    on_config(function (target)
        print("bar: on_config %s", target:name())
    end)

This looks amazing, can't wait to test it! Thanks a lot for supporting this feature.

Feature works well when using xmake in command-line but breaks with vs generator, this is probably because vs generator reconfigure target without using actions.config (thus not using _load_package_rules_for_target).
It breaks both vs and vsxmake generators when using those rules to handle unspecified extensions.
it can easily be fixed I think.


Calico node build fails on Ubuntu 22.04

Expected Behavior

Running make -C node image ARCH=arm64 should succeed.
Current Behavior

Running make -C node image ARCH=arm64  fails:
 => ERROR [centos 10/10] RUN wget -P /tmp https://ftp.debian.org/debian/pool/main/r/runit/runit_2.1.2.orig.tar.gz &&     gunzip /tmp/runit_2.1.2.orig.tar.gz &&     ta  7.2s
------
 > [centos 10/10] RUN wget -P /tmp https://ftp.debian.org/debian/pool/main/r/runit/runit_2.1.2.orig.tar.gz &&     gunzip /tmp/runit_2.1.2.orig.tar.gz &&     tar -xpf /tmp/runit_2.1.2.orig.tar -C /tmp &&     cd /tmp/admin/runit-2.1.2/ &&     sed -i "s/runit-init/\/tmp\/admin\/runit-2.1.2\/compile\/runit-init/" src/runit-init.dist &&     sed -i "s/runsv/\/tmp\/admin\/runit-2.1.2\/compile\/runsv/" src/runsv.dist &&     sed -i "s/runsvchdir/\/tmp\/admin\/runit-2.1.2\/compile\/runsvchdir/" src/runsvchdir.dist &&     sed -i "s/runsvdir/\/tmp\/admin\/runit-2.1.2\/compile\/runsvdir/" src/runsvdir.dist &&     sed -i "s/svlogd/\/tmp\/admin\/runit-2.1.2\/compile\/svlogd/" src/svlogd.dist &&     sed -i "s/utmpset/\/tmp\/admin\/runit-2.1.2\/compile\/utmpset/" src/utmpset.dist &&     package/install:
0.290 --2023-12-04 13:57:53--  https://ftp.debian.org/debian/pool/main/r/runit/runit_2.1.2.orig.tar.gz
0.424 Resolving ftp.debian.org (ftp.debian.org)... <IP_ADDRESS>, 2a04:4e42:8d::644
0.429 Connecting to ftp.debian.org (ftp.debian.org)|<IP_ADDRESS>|:443... connected.
0.444 HTTP request sent, awaiting response... 200 OK
0.447 Length: 110916 (108K) [application/x-gzip]
0.448 Saving to: '/tmp/runit_2.1.2.orig.tar.gz'
0.448
0.448      0K .......... .......... .......... .......... .......... 46% 21.3M 0s
0.450     50K .......... .......... .......... .......... .......... 92% 39.7M 0s
0.451    100K ........                                              100% 44.8M=0.004s
0.452
0.452 2023-12-04 13:57:53 (28.6 MB/s) - '/tmp/runit_2.1.2.orig.tar.gz' saved [110916/110916]
0.452
0.502 Linking ./src/* into ./compile...
0.996 Compiling everything in ./compile...
0.999 + cd compile
0.999 + exec make
1.002 sh find-systype.sh > systype
1.053 rm -f compile
1.055 sh print-cc.sh > compile
1.067 chmod 555 compile
1.070 rm -f choose
1.072 cat warn-auto.sh choose.sh \
1.072 > choose
1.077 chmod 555 choose
1.079 ./choose c trydrent direntry.h1 direntry.h2 > direntry.h
1.122 rm -f load
1.124 sh print-ld.sh > load
1.137 chmod 555 load
1.139 ./choose cl tryflock hasflock.h1 hasflock.h2 > hasflock.h
1.205 ./choose cl trymkffo hasmkffo.h1 hasmkffo.h2 > hasmkffo.h
1.271 ./choose cl trysgact hassgact.h1 hassgact.h2 > hassgact.h
1.339 ./choose cl trysgprm hassgprm.h1 hassgprm.h2 > hassgprm.h
1.406 ./compile chkshsgr.c
1.422 chkshsgr.c: In function 'main':
1.423 chkshsgr.c:10:19: warning: passing argument 2 of 'getgroups' from incompatible pointer type [-Wincompatible-pointer-types]
1.423    if (getgroups(1,x) == 0) if (setgroups(1,x) == -1) _exit(1);
1.423                    ^
1.423 In file included from chkshsgr.c:3:
1.423 /usr/include/unistd.h:689:43: note: expected '__gid_t *' {aka 'unsigned int *'} but argument is of type 'short int *'
1.423  extern int getgroups (int __size, __gid_t __list[]) __THROW __wur;
1.423                                    ~~~~~~~~^~~~~~~~
1.424 chkshsgr.c:10:32: warning: implicit declaration of function 'setgroups'; did you mean 'getgroups'? [-Wimplicit-function-declaration]
1.424    if (getgroups(1,x) == 0) if (setgroups(1,x) == -1) _exit(1);
1.424                                 ^~~~~~~~~
1.424                                 getgroups
1.441 ./load chkshsgr
1.462 ./chkshsgr || ( cat warn-shsgr; exit 1 )
1.466 ./choose clr tryshsgr hasshsgr.h1 hasshsgr.h2 > hasshsgr.h
1.532 ./choose cl trywaitp haswaitp.h1 haswaitp.h2 > haswaitp.h
1.603 ./choose clr trypoll iopause.h1 iopause.h2 > iopause.h
1.677 ./choose c trysysel select.h1 select.h2 > select.h
1.721 ./choose clr tryulong64 uint64.h1 uint64.h2 > uint64.h
1.785 ./choose c tryreboot reboot_system.h1 reboot_system.h2 > \
1.785   reboot_system.h
1.828 ( ./compile tryuwtmpx.c 2>/dev/null && cat uw_tmp.h2 >uw_tmp.h ) || \
1.828 ( ./compile tryuwtmp.c 2>/dev/null && cat uw_tmp.h1 >uw_tmp.h )
1.885 rm -f tryuwtmp.o tryuwtmpx.o
1.887 ./compile trysocketlib.c
1.929 ( ./load trysocketlib >/dev/null 2>&1 || \
1.929   ( ./load trysocketlib -lxnet >/dev/null 2>&1 && echo '-lxnet' ) || \
1.929   ( ./load trysocketlib -lsocket -lnsl >/dev/null 2>&1 && \
1.929     echo '-lsocket -lnsl' ) \
1.929 ) >socket.lib
1.954 rm -f trysocketlib.o trysocketlib
1.956 rm -f sysdeps
1.958 cat systype compile load socket.lib >>sysdeps
1.963 grep sysdep direntry.h >>sysdeps
1.967 grep sysdep haswaitp.h >>sysdeps
1.971 grep sysdep hassgact.h >>sysdeps
1.975 grep sysdep hassgprm.h >>sysdeps
1.979 grep sysdep select.h >>sysdeps
1.983 grep sysdep uint64.h >>sysdeps
1.987 grep sysdep iopause.h >>sysdeps
1.990 grep sysdep hasmkffo.h >>sysdeps
1.994 grep sysdep hasflock.h >>sysdeps
1.999 grep sysdep hasshsgr.h >>sysdeps
2.003 grep sysdep reboot_system.h >>sysdeps
2.006 grep sysdep uw_tmp.h >>sysdeps
2.010 cat sysdeps
2.012 linux-6.2.0-1014-aws-:-:-:aarch64-:-
2.012 #!/bin/sh
2.012 # WARNING: This file was auto-generated. Do not edit!
2.012 exec gcc -O2 -Wall -c ${1+"$@"}
2.012 #!/bin/sh
2.012 # WARNING: This file was auto-generated. Do not edit!
2.012 main="$1"; shift
2.012 exec gcc -s -o "$main" "$main".o ${1+"$@"}
2.012 /* sysdep: +dirent */
2.012 /* sysdep: +waitpid */
2.012 /* sysdep: +sigaction */
2.012 /* sysdep: +sigprocmask */
2.012 /* sysdep: +sysselect */
2.012 /* sysdep: +ulong64 */
2.012 /* sysdep: +poll */
2.012 /* sysdep: +mkfifo */
2.012 /* sysdep: +flock */
2.012 /* sysdep: -shortsetgroups */
2.012 /* sysdep: +std reboot */
2.012 /* sysdep: -utmpx */
2.013 ./compile chpst.c
2.036 chpst.c: In function 'suidgid':
2.036 chpst.c:80:7: warning: implicit declaration of function 'setgroups'; did you mean 'getgroups'? [-Wimplicit-function-declaration]
2.036    if (setgroups(ugid.gids, ugid.gid) == -1) fatal("unable to setgroups");
2.036        ^~~~~~~~~
2.036        getgroups
2.038 chpst.c: In function 'main':
2.038 chpst.c:311:33: warning: operation on 'subgetoptarg' may be undefined [-Wsequence-point]
2.038            if (optarg[scan_ulong(++optarg, &ul)]) usage(); nicelvl =ul;
2.038 chpst.c:311:11: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
2.038            if (optarg[scan_ulong(++optarg, &ul)]) usage(); nicelvl =ul;
2.038            ^~
2.038 chpst.c:311:59: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
2.038            if (optarg[scan_ulong(++optarg, &ul)]) usage(); nicelvl =ul;
2.038                                                            ^~~~~~~
2.038 chpst.c:316:11: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
2.038            if (optarg[scan_ulong(optarg, &ul)]) usage(); nicelvl =ul;
2.038            ^~
2.038 chpst.c:316:57: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
2.038            if (optarg[scan_ulong(optarg, &ul)]) usage(); nicelvl =ul;
2.038                                                          ^~~~~~~
2.229 ./compile uidgid.c
2.282 ./compile alloc.c
2.323 ./compile alloc_re.c
2.354 ./compile buffer.c
2.382 ./compile buffer_0.c
2.412 ./compile buffer_1.c
2.436 ./compile buffer_2.c
2.459 ./compile buffer_get.c
2.513 ./compile buffer_put.c
2.572 ./compile buffer_read.c
2.605 ./compile buffer_write.c
2.637 ./compile coe.c
2.667 ./compile env.c
2.701 ./compile error.c
2.727 ./compile error_str.c
2.788 ./compile fd_copy.c
2.823 ./compile fd_move.c
2.857 ./compile fifo.c
2.888 ./compile lock_ex.c
2.921 ./compile lock_exnb.c
2.953 rm -f makelib
2.955 sh print-ar.sh > makelib
2.965 chmod 555 makelib
2.967 ./compile ndelay_off.c
3.001 ./compile ndelay_on.c
3.034 ./compile open_append.c
3.067 ./compile open_read.c
3.100 ./compile open_trunc.c
3.133 ./compile open_write.c
3.167 ./compile openreadclose.c
3.200 ./compile pathexec_env.c
3.257 ./compile pathexec_run.c
3.272 pathexec_run.c: In function 'pathexec_run':
3.272 pathexec_run.c:18:5: warning: implicit declaration of function 'execve' [-Wimplicit-function-declaration]
3.272      execve(file,argv,envp);
3.272      ^~~~~~
3.299 ./compile prot.c
3.311 prot.c: In function 'prot_gid':
3.311 prot.c:13:7: warning: implicit declaration of function 'setgroups' [-Wimplicit-function-declaration]
3.311    if (setgroups(1,&gid) == -1) return -1;
3.311        ^~~~~~~~~
3.312 prot.c:15:10: warning: implicit declaration of function 'setgid'; did you mean 'prot_gid'? [-Wimplicit-function-declaration]
3.312    return setgid(gid); /* _should_ be redundant, but on some systems it isn't */
3.312           ^~~~~~
3.312           prot_gid
3.312 prot.c: In function 'prot_uid':
3.312 prot.c:20:10: warning: implicit declaration of function 'setuid'; did you mean 'prot_uid'? [-Wimplicit-function-declaration]
3.312    return setuid(uid);
3.312           ^~~~~~
3.312           prot_uid
3.331 ./compile readclose.c
3.372 ./compile seek_set.c
3.388 seek_set.c: In function 'seek_set':
3.388 seek_set.c:9:7: warning: implicit declaration of function 'lseek' [-Wimplicit-function-declaration]
3.388  { if (lseek(fd,(off_t) pos,SET) == -1) return -1; return 0; }
3.388        ^~~~~
3.406 ./compile sgetopt.c
3.445 ./compile sig.c
3.476 ./compile sig_block.c
3.516 ./compile sig_catch.c
3.553 ./compile sig_pause.c
3.591 ./compile stralloc_cat.c
3.624 ./compile stralloc_catb.c
3.659 ./compile stralloc_cats.c
3.690 ./compile stralloc_eady.c
3.728 ./compile stralloc_opyb.c
3.759 ./compile stralloc_opys.c
3.789 ./compile stralloc_pend.c
3.820 ./compile strerr_die.c
3.862 ./compile strerr_sys.c
3.892 ./compile subgetopt.c
3.934 ./compile wait_nohang.c
3.969 ./compile wait_pid.c
4.007 ./makelib unix.a alloc.o alloc_re.o buffer.o buffer_0.o buffer_1.o \
4.007 buffer_2.o buffer_get.o buffer_put.o buffer_read.o buffer_write.o \
4.007 coe.o env.o error.o error_str.o fd_copy.o fd_move.o fifo.o lock_ex.o \
4.007 lock_exnb.o ndelay_off.o ndelay_on.o open_append.o open_read.o \
4.007 open_trunc.o open_write.o openreadclose.o pathexec_env.o \
4.007 pathexec_run.o prot.o readclose.o seek_set.o sgetopt.o sig.o \
4.007 sig_block.o sig_catch.o sig_pause.o stralloc_cat.o stralloc_catb.o \
4.007 stralloc_cats.o stralloc_eady.o stralloc_opyb.o stralloc_opys.o \
4.007 stralloc_pend.o strerr_die.o strerr_sys.o subgetopt.o wait_nohang.o \
4.007 wait_pid.o
4.019 ./compile byte_chr.c
4.033 byte_chr.c: In function 'byte_chr':
4.033 byte_chr.c:16:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.033      if (!n) break; if (*t == ch) break; ++t; --n;
4.033      ^~
4.033 byte_chr.c:16:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.033      if (!n) break; if (*t == ch) break; ++t; --n;
4.033                     ^~
4.033 byte_chr.c:17:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.033      if (!n) break; if (*t == ch) break; ++t; --n;
4.033      ^~
4.033 byte_chr.c:17:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.033      if (!n) break; if (*t == ch) break; ++t; --n;
4.033                     ^~
4.033 byte_chr.c:18:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.033      if (!n) break; if (*t == ch) break; ++t; --n;
4.033      ^~
4.033 byte_chr.c:18:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.033      if (!n) break; if (*t == ch) break; ++t; --n;
4.033                     ^~
4.033 byte_chr.c:19:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.033      if (!n) break; if (*t == ch) break; ++t; --n;
4.033      ^~
4.033 byte_chr.c:19:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.033      if (!n) break; if (*t == ch) break; ++t; --n;
4.033                     ^~
4.058 ./compile byte_copy.c
4.072 byte_copy.c: In function 'byte_copy':
4.072 byte_copy.c:11:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.072      if (!n) return; *to++ = *from++; --n;
4.072      ^~
4.072 byte_copy.c:11:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.072      if (!n) return; *to++ = *from++; --n;
4.072                      ^
4.072 byte_copy.c:12:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.072      if (!n) return; *to++ = *from++; --n;
4.072      ^~
4.072 byte_copy.c:12:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.072      if (!n) return; *to++ = *from++; --n;
4.072                      ^
4.072 byte_copy.c:13:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.072      if (!n) return; *to++ = *from++; --n;
4.072      ^~
4.072 byte_copy.c:13:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.072      if (!n) return; *to++ = *from++; --n;
4.072                      ^
4.072 byte_copy.c:14:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.072      if (!n) return; *to++ = *from++; --n;
4.072      ^~
4.072 byte_copy.c:14:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.072      if (!n) return; *to++ = *from++; --n;
4.072                      ^
4.093 ./compile byte_cr.c
4.107 byte_cr.c: In function 'byte_copyr':
4.107 byte_cr.c:13:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.107      if (!n) return; *--to = *--from; --n;
4.107      ^~
4.107 byte_cr.c:13:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.107      if (!n) return; *--to = *--from; --n;
4.107                      ^
4.107 byte_cr.c:14:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.107      if (!n) return; *--to = *--from; --n;
4.107      ^~
4.107 byte_cr.c:14:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.107      if (!n) return; *--to = *--from; --n;
4.107                      ^
4.108 byte_cr.c:15:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.108      if (!n) return; *--to = *--from; --n;
4.108      ^~
4.108 byte_cr.c:15:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.108      if (!n) return; *--to = *--from; --n;
4.108                      ^
4.108 byte_cr.c:16:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.108      if (!n) return; *--to = *--from; --n;
4.108      ^~
4.108 byte_cr.c:16:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.108      if (!n) return; *--to = *--from; --n;
4.108                      ^
4.129 ./compile byte_diff.c
4.142 byte_diff.c: In function 'byte_diff':
4.142 byte_diff.c:11:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.142      if (!n) return 0; if (*s != *t) break; ++s; ++t; --n;
4.142      ^~
4.142 byte_diff.c:11:23: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.142      if (!n) return 0; if (*s != *t) break; ++s; ++t; --n;
4.142                        ^~
4.142 byte_diff.c:12:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.142      if (!n) return 0; if (*s != *t) break; ++s; ++t; --n;
4.142      ^~
4.142 byte_diff.c:12:23: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.142      if (!n) return 0; if (*s != *t) break; ++s; ++t; --n;
4.142                        ^~
4.143 byte_diff.c:13:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.143      if (!n) return 0; if (*s != *t) break; ++s; ++t; --n;
4.143      ^~
4.143 byte_diff.c:13:23: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.143      if (!n) return 0; if (*s != *t) break; ++s; ++t; --n;
4.143                        ^~
4.143 byte_diff.c:14:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.143      if (!n) return 0; if (*s != *t) break; ++s; ++t; --n;
4.143      ^~
4.143 byte_diff.c:14:23: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.143      if (!n) return 0; if (*s != *t) break; ++s; ++t; --n;
4.143                        ^~
4.167 ./compile byte_rchr.c
4.180 byte_rchr.c: In function 'byte_rchr':
4.181 byte_rchr.c:18:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.181      if (!n) break; if (*t == ch) u = t; ++t; --n;
4.181      ^~
4.181 byte_rchr.c:18:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.181      if (!n) break; if (*t == ch) u = t; ++t; --n;
4.181                     ^~
4.181 byte_rchr.c:19:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.181      if (!n) break; if (*t == ch) u = t; ++t; --n;
4.181      ^~
4.181 byte_rchr.c:19:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.181      if (!n) break; if (*t == ch) u = t; ++t; --n;
4.181                     ^~
4.181 byte_rchr.c:20:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.181      if (!n) break; if (*t == ch) u = t; ++t; --n;
4.181      ^~
4.181 byte_rchr.c:20:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.181      if (!n) break; if (*t == ch) u = t; ++t; --n;
4.181                     ^~
4.181 byte_rchr.c:21:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.181      if (!n) break; if (*t == ch) u = t; ++t; --n;
4.181      ^~
4.181 byte_rchr.c:21:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.181      if (!n) break; if (*t == ch) u = t; ++t; --n;
4.181                     ^~
4.204 ./compile fmt_uint.c
4.234 ./compile fmt_uint0.c
4.268 ./compile fmt_ulong.c
4.303 ./compile scan_ulong.c
4.337 ./compile str_chr.c
4.351 str_chr.c: In function 'str_chr':
4.351 str_chr.c:13:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.351      if (!*t) break; if (*t == ch) break; ++t;
4.351      ^~
4.351 str_chr.c:13:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.351      if (!*t) break; if (*t == ch) break; ++t;
4.351                      ^~
4.351 str_chr.c:14:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.351      if (!*t) break; if (*t == ch) break; ++t;
4.351      ^~
4.351 str_chr.c:14:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.351      if (!*t) break; if (*t == ch) break; ++t;
4.351                      ^~
4.351 str_chr.c:15:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.351      if (!*t) break; if (*t == ch) break; ++t;
4.351      ^~
4.351 str_chr.c:15:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.351      if (!*t) break; if (*t == ch) break; ++t;
4.351                      ^~
4.351 str_chr.c:16:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.351      if (!*t) break; if (*t == ch) break; ++t;
4.351      ^~
4.351 str_chr.c:16:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.351      if (!*t) break; if (*t == ch) break; ++t;
4.351                      ^~
4.375 ./compile str_diff.c
4.409 ./compile str_len.c
4.422 str_len.c: In function 'str_len':
4.422 str_len.c:11:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.422      if (!*t) return t - s; ++t;
4.422      ^~
4.422 str_len.c:11:28: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.422      if (!*t) return t - s; ++t;
4.422                             ^~
4.423 str_len.c:12:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.423      if (!*t) return t - s; ++t;
4.423      ^~
4.423 str_len.c:12:28: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.423      if (!*t) return t - s; ++t;
4.423                             ^~
4.423 str_len.c:13:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.423      if (!*t) return t - s; ++t;
4.423      ^~
4.423 str_len.c:13:28: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.423      if (!*t) return t - s; ++t;
4.423                             ^~
4.423 str_len.c:14:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
4.423      if (!*t) return t - s; ++t;
4.423      ^~
4.423 str_len.c:14:28: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
4.423      if (!*t) return t - s; ++t;
4.423                             ^~
4.444 ./compile str_start.c
4.477 ./makelib byte.a byte_chr.o byte_copy.o byte_cr.o byte_diff.o \
4.477 byte_rchr.o fmt_uint.o fmt_uint0.o fmt_ulong.o scan_ulong.o str_chr.o \
4.477 str_diff.o str_len.o str_start.o
4.488 ./load chpst uidgid.o unix.a byte.a
4.514 ./compile runit.c
4.650 ./load runit unix.a byte.a -static
4.767 ./compile runit-init.c
4.829 ./load runit-init unix.a byte.a -static
4.938 ./compile runsv.c
5.163 ./compile iopause.c
5.202 ./compile tai_now.c
5.235 ./compile tai_pack.c
5.265 ./compile tai_sub.c
5.294 ./compile tai_unpack.c
5.325 ./compile taia_add.c
5.358 ./compile taia_approx.c
5.388 ./compile taia_frac.c
5.421 ./compile taia_less.c
5.452 ./compile taia_now.c
5.488 ./compile taia_pack.c
5.522 ./compile taia_sub.c
5.554 ./compile taia_uint.c
5.585 ./makelib time.a iopause.o tai_now.o tai_pack.o tai_sub.o \
5.585 tai_unpack.o taia_add.o taia_approx.o taia_frac.o taia_less.o \
5.585 taia_now.o taia_pack.o taia_sub.o taia_uint.o
5.596 ./load runsv unix.a byte.a time.a
5.621 ./compile runsvchdir.c
5.691 ./load runsvchdir unix.a byte.a
5.714 ./compile runsvdir.c
5.851 ./load runsvdir unix.a byte.a time.a
5.876 ./compile sv.c
5.898 sv.c: In function 'main':
5.898 sv.c:293:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
5.898    if (!(action =*argv++)) usage(); --argc;
5.898    ^~
5.898 sv.c:293:36: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
5.898    if (!(action =*argv++)) usage(); --argc;
5.898                                     ^~
6.105 ./load sv unix.a byte.a time.a
6.130 ./compile svlogd.c
6.165 svlogd.c: In function 'ip4_scan':
6.165 svlogd.c:394:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
6.165    if (*s != '.') return 0; ++s; ++len;
6.165    ^~
6.165 svlogd.c:394:28: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
6.165    if (*s != '.') return 0; ++s; ++len;
6.165                             ^~
6.165 svlogd.c:396:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
6.165    if (*s != '.') return 0; ++s; ++len;
6.165    ^~
6.165 svlogd.c:396:28: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
6.165    if (*s != '.') return 0; ++s; ++len;
6.165                             ^~
6.165 svlogd.c:398:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
6.165    if (*s != '.') return 0; ++s; ++len;
6.165    ^~
6.165 svlogd.c:398:28: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
6.165    if (*s != '.') return 0; ++s; ++len;
6.165                             ^~
6.562 ./compile pmatch.c
6.661 ./compile fmt_ptime.c
6.768 ./load svlogd pmatch.o fmt_ptime.o unix.a byte.a time.a \
6.768 `cat socket.lib`
6.838 ./compile utmpset.c
6.944 ./load utmpset unix.a byte.a
6.975 Copying commands into ./command...
7.086 Checking commands in ./command...
7.088 + cd compile
7.088 + exec make check
7.098 ./check-local chpst runit runit-init runsv runsvchdir runsvdir sv svlogd utmpset
7.101 Checking chpst...
7.142 Checking runit...
7.152 Checking runit-init...
7.164 usage: runit-init 0|6
7.164
7.164 0
7.165 runit-init failed.
7.165 make: *** [Makefile:6: check] Error 1
------
Dockerfile.arm64:105
--------------------
 104 |     # get it from the debian repos as the official website doesn't support https
 105 | >>> RUN wget -P /tmp https://ftp.debian.org/debian/pool/main/r/runit/runit_${RUNIT_VER}.orig.tar.gz && \
 106 | >>>     gunzip /tmp/runit_${RUNIT_VER}.orig.tar.gz && \
 107 | >>>     tar -xpf /tmp/runit_${RUNIT_VER}.orig.tar -C /tmp && \
 108 | >>>     cd /tmp/admin/runit-${RUNIT_VER}/ && \
 109 | >>>     # runit compilation trigger a false positive error halting the process.
 110 | >>>     sed -i "s/runit-init/\/tmp\/admin\/runit-2.1.2\/compile\/runit-init/" src/runit-init.dist && \
 111 | >>>     sed -i "s/runsv/\/tmp\/admin\/runit-2.1.2\/compile\/runsv/" src/runsv.dist && \
 112 | >>>     sed -i "s/runsvchdir/\/tmp\/admin\/runit-2.1.2\/compile\/runsvchdir/" src/runsvchdir.dist && \
 113 | >>>     sed -i "s/runsvdir/\/tmp\/admin\/runit-2.1.2\/compile\/runsvdir/" src/runsvdir.dist && \
 114 | >>>     sed -i "s/svlogd/\/tmp\/admin\/runit-2.1.2\/compile\/svlogd/" src/svlogd.dist && \
 115 | >>>     sed -i "s/utmpset/\/tmp\/admin\/runit-2.1.2\/compile\/utmpset/" src/utmpset.dist && \
 116 | >>>     package/install
 117 |
--------------------
ERROR: failed to solve: process "/bin/sh -c wget -P /tmp https://ftp.debian.org/debian/pool/main/r/runit/runit_${RUNIT_VER}.orig.tar.gz &&     gunzip /tmp/runit_${RUNIT_VER}.orig.tar.gz &&     tar -xpf /tmp/runit_${RUNIT_VER}.orig.tar -C /tmp &&     cd /tmp/admin/runit-${RUNIT_VER}/ &&     sed -i \"s/runit-init/\\/tmp\\/admin\\/runit-2.1.2\\/compile\\/runit-init/\" src/runit-init.dist &&     sed -i \"s/runsv/\\/tmp\\/admin\\/runit-2.1.2\\/compile\\/runsv/\" src/runsv.dist &&     sed -i \"s/runsvchdir/\\/tmp\\/admin\\/runit-2.1.2\\/compile\\/runsvchdir/\" src/runsvchdir.dist &&     sed -i \"s/runsvdir/\\/tmp\\/admin\\/runit-2.1.2\\/compile\\/runsvdir/\" src/runsvdir.dist &&     sed -i \"s/svlogd/\\/tmp\\/admin\\/runit-2.1.2\\/compile\\/svlogd/\" src/svlogd.dist &&     sed -i \"s/utmpset/\\/tmp\\/admin\\/runit-2.1.2\\/compile\\/utmpset/\" src/utmpset.dist &&     package/install" did not complete successfully: exit code: 2
make: *** [Makefile:258: .calico_node.created-arm64] Error 1
make: Leaving directory '/home/ubuntu/calico/node'

Possible Solution

Steps to Reproduce (for bugs)

Create an Ubuntu 22.04 instance on AWS, ami-0a2a33b48da1f3a82,  Canonical, Ubuntu Server Pro, 22.04 LTS, arm64 jammy image build on 2023-10-25. Instance t4g.medium, 16GB.
Context

I am trying to build Calico node from source.
Your Environment

Calico version the latest from the main branch
Orchestrator version (e.g. kubernetes, mesos, rkt):
Operating System and version: Ubuntu Server Pro, 22.04 LTS, arm64 jammy image build on 2023-10-25.
Link to your project (optional):

Yep, I was able to reproduce this on 20.04 as well. Suspect this is a problem with the ARM64 build in some way.

Should be fixed in https://github.com/projectcalico/calico/pull/8558/files#diff-c6e82bd404a904c10b9a0756d78d913a8a5e2ff833fefd384c80af1d7c93c3bbL88. Can you try latest Calico master @VadimEisenberg ?


Integrate merbridge in kumactl install transparent-proxy

Description
We should start with a flag --ebpf which will in the future be replaced by --no-ebpf the idea is that K8s or universal shouldn't have a setup more complicated than it is currently

Done with #56


chore: Update v2 to main

Using a separate branch to resolve the merge conflicts, but other than that this is a straightforward update of the v2 branch up to the latest main branch.

Codecov Report
Attention: Patch coverage is 92.92453% with 30 lines in your changes missing coverage. Please review.

Project coverage is 69.20%. Comparing base (81d656a) to head (317dde7).

Files with missing lines
Patch %
Lines

internal/output/html.go
70.70%
25 Missing and 4 partials :warning:

internal/spdx/satisfies.go
99.32%
1 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##               v2    #1396      +/-   ##
==========================================
+ Coverage   68.93%   69.20%   +0.27%
==========================================
  Files         183      185       +2
  Lines       17766    18126     +360
==========================================
+ Hits        12247    12545     +298
- Misses       4840     4894      +54
- Partials      679      687       +8

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

These main -> v2 PRs (#1357, #1374) keep including the same commits over and over again, and are accumulating more commits each time.
We probably shouldn't be squashing these commits. I think 'Rebase and merge' would be better than 'Create a merge commit', but I'm not too sure. (Though neither of them are enabled on this repo anyway)


beta channel - io.flutter.flutter.app bundle not available from Swift plugin code anymore

Something changed between stable (1.12.x) and dev/beta and I'm not able to load flutter app bundle so I can load the assets from my swift plugin code. The following plugin code works on stable and it loads a file with the name defined in fileName and located in the assets/custom folder in my flutter app:
let bundle = Bundle(identifier: FlutterDartProject.defaultBundleIdentifier())
    originalURL = bundle?.url(forResource: fileName, withExtension: "", subdirectory: "flutter_assets/assets/custom")

On beta or dev, the bundle isn't found (nil) which is quite puzzling.
Note that bundle default identifier is correct:
(lldb) p FlutterDartProject.defaultBundleIdentifier()
(String) $R0 = "io.flutter.flutter.app"

i'm not quite sure what changed and if there is a workaround but that's the only way I know how to access flutter assets from native code. I tried using the exact same code against stable and against dev (back and forth) to confirm the change of behavior.
Tested version:
Flutter 1.17.0 • channel beta • git@github.com:flutter/flutter.git
Framework • revision d3ed9ec945 (6 days ago) • 2020-04-06 14:07:34 -0700
Engine • revision c9506cb8e9
Tools • Dart 2.8.0 (build 2.8.0-dev.18.0 eea9717938)

I think the issue might be related to this change: https://github.com/flutter/flutter/pull/51453 App.framework is now linked and embedded differently.  @jmagman thoughts?

It looks like the embedding of the frameworks has changed to support Xcode 11.4. app.framework isn't embedded from within xcode but apparently via /bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed_and_thin . For some reason, that prevents the plugin code to find the bundle when looking for it. There might be something I might be able to change in my own Xcode project but I'm not quite sure what at this point.

After some researcher it looks like the issue is that the framework isn't linked from the project. Linking the framework by hand seems to fix the issue. Note that the framework is located in ios/Flutter/App.framework and is more than likely not showing in the file list in Xcode.

I haven't tested this change against Xcode 11.4 so I can't say if that's a proper fix.

App.framework doesn't need to be linked, there are no symbols in it.  It only needs to be embedded into your app.  Do you need to load the bundle before you can get the assets?

Linking is the only way I found to access the bundle. What do you mean by loading the bundle before accessing the resource?
I use  bundle = Bundle(identifier: FlutterDartProject.defaultBundleIdentifier()) (well, the default bundle bundle id seems to have been removed on master, but I use the hardcoded string).
This isn't available if I don't link the framework. Is there another way to load the bundle?

https://developer.apple.com/documentation/foundation/bundle/1415927-load

Oh, right the bundle is nil, not the resource URL.  Disregard that load comment, I'll look into this more.
Essentially, the linker doesn't need to know anything about App.framework because there are no symbols to link.  Under the covers Xcode must be doing something else to make the bundle available when you add it to the link framework build phase.

I agree, that's confusing and seems to be part of the Xcode magic. I agree that there is no need to link the framework itself since we don't need any symbols but that's the only workaround I found to access to the assets for now.

User @erickzanardo found another way to access the asset. He demonstrated it here:
Keep track of the FlutterPluginRegistrar instance.
https://github.com/erickzanardo/ocarina/blob/master/ios/Classes/SwiftOcarinaPlugin.swift#L100
And then use it to get the main bundle asset key :
let key = registrar?.lookupKey(forAsset: url)
 assetUrl = Bundle.main.path(forResource: key, ofType: nil)!

https://github.com/erickzanardo/ocarina/blob/master/ios/Classes/SwiftOcarinaPlugin.swift#L118
I'm surprised this works for him (@erickzanardo what version are you on and can you confirm that the assets are added to the app, not the plugin)
I'm not sure what scope lookupKey is  operating at and if that's the proper solution (the documentation isn't super clear https://api.flutter.dev/objcdoc/Protocols/FlutterPluginRegistrar.html#/c:objc(pl)FlutterPluginRegistrar(im)lookupKeyForAsset: )

@mattetti I am on this version of Flutter
[✓] Flutter (Channel beta, v1.17.0, on Mac OS X 10.15.3 19D76, locale pt-BR)

I can confirm that the assets are added to the app, I have been using this plugin of mine, on another project, and working great so far

\cc @gaaclarke may be relevant to your https://github.com/flutter/plugins/tree/master/packages/ios_platform_images interests.
Can you check it still works on master after the automatic migrations from https://github.com/flutter/flutter/pull/51453?

ios_platform_images gets images like this:
NSString* key = [FlutterDartProject lookupKeyForAsset:[NSString stringWithFormat:@"%@/%d.0x/%@", path, screenScale, filename]];
UIImage* image = [UIImage imageNamed:key inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil];

@jmagman I verified that it still works:
cd $FLUTTER_HOME
git checkout v1.16.2
cd $PROJECT_DIR
flutter create project
cd project
add_dependency pubspec.yaml ios_platform_images
flutter run
flutter channel master
flutter run

Does it actually get the images though?  The issue is reporting that the App bundle containing the assets can't be loaded.

Note that ObjC code shared uses an asset in the main bundle when  I was trying to load the app bundle.
UIImage* image = [UIImage imageNamed:key inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil];

I'm surprised the flutter assets can be accessed from the main bundle but maybe that was doable since the beginning and I was doing it wrong by loading the flutter bundle to find the asset?

As @mattetti pointed out, this is a regression from https://github.com/flutter/flutter/pull/51453.  The bundle is there, it's just not loaded, so Bundle(identifier: FlutterDartProject.defaultBundleIdentifier()) doesn't find it   https://github.com/flutter/engine/pull/22997
You can get the bundle via -bundleWithURL
[NSBundle bundleWithURL:[NSBundle.mainBundle.privateFrameworksURL<EMAIL_ADDRESS>
@zanderso @xster Do we need users to be able to grab resources (images, etc) off the App.framework without knowing this workaround?  Should I update the engine code to load the framework?

Making sure I understood the premise of the question. It's about in add-to-app or add-to-Flutter, being able to load flutter_assets specified in the pubspec.yaml in objective-c/swift code?
Maybe we broke https://flutter.dev/docs/development/ui/assets-and-images#loading-flutter-assets-in-ios and https://github.com/flutter/plugins/tree/master/packages/ios_platform_images and we need to update them?

https://lm.ink/EZB1VmN9evmpj

being able to load flutter_assets specified in the pubspec.yaml in objective-c/swift code?

That one.

Maybe we broke https://flutter.dev/docs/development/ui/assets-and-images#loading-flutter-assets-in-ios

[registrar<EMAIL_ADDRESS>should still work.  But looking the bundle up by FlutterDartProject .defaultBundleIdentifier stopped working due to #51453.
I'm going to close this, the docs are clear that -lookupKey is the way to do this.
If for some reason you still want to manipulate the bundle from your native code, you can load it yourself [[NSBundle.mainBundle.privateFrameworksURL<EMAIL_ADDRESS>load].


Solved HW8 part 2

I solved part1.
Part2 is  commited as soon as HW7 is approved so I do not have to change things on 2 parts

Part1 I did not fint he pattern yet. so that code is still not right. Part2 schould be up to standards I hope

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 6

Complexity increasing per file
==============================
- Src/BootCamp.Chapter/BalanceStats.cs  5
- Src/BootCamp.Chapter/TextTable.cs  2
- Src/BootCamp.Chapter/Program.cs  2

See the complete overview on Codacy

and maY i have a hint on the pattern.
I tried the position where the good number is placed.
the number and/or the place where the '_`   is placed

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 5

Complexity increasing per file
==============================
- Src/BootCamp.Chapter/BalanceStats.cs  6
- Src/BootCamp.Chapter/TextTable.cs  2
- Src/BootCamp.Chapter/Program.cs  2

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 4

Complexity increasing per file
==============================
- Src/BootCamp.Chapter/BalanceStats.cs  6
- Src/BootCamp.Chapter/TextTable.cs  2
- Src/BootCamp.Chapter/Program.cs  2

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Issues
======
+ Solved 4
- Added 3

Complexity increasing per file
==============================
- Src/BootCamp.Chapter/BalanceStats.cs  6
- Src/BootCamp.Chapter/TextTable.cs  2
- Src/BootCamp.Chapter/Program.cs  2

See the complete overview on Codacy

one question left :
Do I have to use here a locale.
Define the locale to be used in this string operation.
var index = message.ToString().LastIndexOf(", ");
because when  I used I it breaks some tests or the code.
The tests use the invariant culture but the code uses the  GB culture.

Thanks now waiting for a second approval. I know Earlington do not feel well so I do not think he will be approving homework soon