this.message containing line breaks

Today i tried to send this.message containing line breaks and it only sent the part before the first line break.
Can this possibly be an issue in Koa?
If not then it may be another code.

this.body = '...' works.
Error: Parse Error
    at Error (native)
    at Socket.socketOnData (_http_client.js:311:20)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at readableAddChunk (_stream_readable.js:146:16)
    at Socket.Readable.push (_stream_readable.js:110:10)
    at TCP.onread (net.js:523:20)
From previous event:
    at Object._callee9$ (web server.js:845:21)
    at tryCatch (G:\work\webapp\node_modules\babel-runtime\regenerator\runtime.js:88:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (G:\work\webapp\node_modules\babel-runtime\regenerator\runtime.js:341:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (G:\work\webapp\node_modules\babel-runtime\regenerator\runtime.js:121:21)
    at Object.<anonymous> (G:\work\webapp\node_modules\koa-mount\index.js:52:26)
    at [object Generator].next (native)
    at Object.<anonymous> (G:\work\webapp\node_modules\koa-mount\index.js:52:26)
    at [object Generator].next (native)
    at Object.<anonymous> (G:\work\webapp\node_modules\koa-mount\index.js:52:26)
    at [object Generator].next (native)
    at Object.<anonymous> (G:\work\webapp\node_modules\koa-mount\index.js:52:26)
    at [object Generator].next (native)
    at Object.<anonymous> (G:\work\webapp\node_modules\koa-mount\index.js:52:26)
    at [object Generator].next (native)
    at Object.<anonymous> (G:\work\webapp\node_modules\koa-mount\index.js:52:26)
    at [object Generator].next (native)
    at Object.<anonymous> (G:\work\webapp\node_modules\koa-mount\index.js:52:26)
    at [object Generator].next (native)
    at Object.<anonymous> (G:\work\webapp\node_modules\koa-mount\index.js:52:26)

this.message = '...' doesn't
Parse Error

Maybe it's a special error handling case for this.message because the Error:  part also vanished.

Hmm, I'm not sure where koa is doing this. Can you confirm that https://nodejs.org/api/http.html#http_response_statusmessage works when used outside of koa?

this.res.statusMessage gives me the same bug.
I guess it's Node then.

I'm quite sure the http spec doesn't allow new lines in its status message


warnings with td 2.0.1

everywhere i use .to.have.been.calledWith now results in this warning:
    Warning: testdouble.js - td.verify - test double `fetch` was both stubbed and verified with arguments ("https://foobar.com/blah", {
      method: "POST",
      headers: {Accept: "application/xml", "Content-Type": "application/json"},
      timeout: 5000,
      body: "{\"c\":3,\"d\":4}"
    }), which is redundant and probably unnecessary. (see: https://github.com/testdouble/testdouble.js/blob/master/docs/B-frequently-asked-questions.md#why-shouldnt-i-call-both-tdwhen-and-tdverify-for-a-single-interaction-with-a-test-double )

Hi @modosc, I suspect that your tests are probably doing calledWith expectations against testdouble objects that have been stubbed. testdouble-chai is just a thin wrapper around td.js's built-in verify function, which is where this warning is coming from.
Here's a quick example:
describe("verifying stubbed objects", function() {
  beforeEach(function() {
    this.double = td.function();
    td.when(this.double('hi')).thenReturn(42);
    var foo = this.double('hi');
  });

  it("verifies a stubbed testdouble object (td.js-style)", function() {
    td.verify(this.double('hi'));
  });

  it("verifies a stubbed testdouble object (chai-style)", function() {
    expect(this.double).to.have.been.calledWith('hi');
  });
});

One of these specs uses td-chai's calledWith expectation while the other uses testdouble's own verify, but they both result in this warning:
Warning: testdouble.js - td.verify - test double was both stubbed and verified with arguments ("hi"), which is redundant and probably unnecessary. (see: https://github.com/testdouble/testdouble.js/blob/master/docs/B-frequently-asked-questions.md#why-shouldnt-i-call-both-tdwhen-and-tdverify-for-a-single-interaction-with-a-test-double )

The testdouble docs have a great page on why they discourage this.
If you prefer to suppress these warnings, you can put td.config({ ignoreWarnings: true }) somewhere in your test suite setup (as per these testdouble config options), but note that this will silence all warnings, not just the ones about verifying stubs.


An unsupported nested encoding was found.

Bug description
When we execute the SQL statement below using Gluten, it raises an exception with the message 'An unsupported nested encoding was found.
sql("create table map_table(a map<bigint, string>) using parquet")
sql("insert into table map_table select map(1, 'hello')")

System information
Velox System Info v0.0.2
Commit: 467812fb0a0220fd6b479502dd89b21973a4a3b3
CMake Version: 3.28.3
System: Linux-5.4.0-167-generic
Arch: x86_64
C++ Compiler: /usr/bin/c++
C++ Compiler Version: 9.4.0
C Compiler: /usr/bin/cc
C Compiler Version: 9.4.0
CMake Prefix Path: /usr/local;/usr;/;/usr/local/lib/python3.8/dist-packages/cmake/data;/usr/local;/usr/X11R6;/usr/pkg;/opt
Relevant logs
Caused by: org.apache.gluten.exception.GlutenException: java.lang.RuntimeException: Exception: VeloxRuntimeError
 Error Source: RUNTIME
 Error Code: INVALID_STATE
 Reason: An unsupported nested encoding was found.
 Retriable: False
 Expression: vec.valueVector() == nullptr || vec.wrappedVector()->isFlatEncoding()
 Context: Operator: TableWrite[2] 2
 Function: exportFlattenedVector
 File: /__w/incubator-gluten/incubator-gluten/ep/build-velox/build/velox_ep/velox/vector/arrow/Bridge.cpp
 Line: 884
 Stack trace:
 # 0  _ZN8facebook5velox7process10StackTraceC1Ei
 # 1  _ZN8facebook5velox14VeloxExceptionC1EPKcmS3_St17basic_string_viewIcSt11char_traitsIcEES7_S7_S7_bNS1_4TypeES7_
 # 2  _ZN8facebook5velox6detail14veloxCheckFailINS0_17VeloxRuntimeErrorEPKcEEvRKNS1_18VeloxCheckFailArgsET0_
 # 3  _ZN8facebook5velox12_GLOBAL__N_121exportFlattenedVectorERKNS0_10BaseVectorERKNS1_9SelectionERK12ArrowOptionsR10ArrowArrayPNS0_6memory10MemoryPoolERNS1_24VeloxToArrowBridgeHolderE
 # 4  _ZN8facebook5velox12_GLOBAL__N_117exportToArrowImplERKNS0_10BaseVectorERKNS1_9SelectionERK12ArrowOptionsR10ArrowArrayPNS0_6memory10MemoryPoolE
 # 5  _ZN8facebook5velox12_GLOBAL__N_117exportToArrowImplERKNS0_10BaseVectorERKNS1_9SelectionERK12ArrowOptionsR10ArrowArrayPNS0_6memory10MemoryPoolE
 # 6  _ZN8facebook5velox13exportToArrowERKSt10shared_ptrINS0_10BaseVectorEER10ArrowArrayPNS0_6memory10MemoryPoolERK12ArrowOptions
 # 7  _ZN8facebook5velox7parquet6Writer5writeERKSt10shared_ptrINS0_10BaseVectorEE
 # 8  _ZN8facebook5velox9connector4hive12HiveDataSink5writeEmSt10shared_ptrINS0_9RowVectorEE
 # 9  _ZN8facebook5velox9connector4hive12HiveDataSink10appendDataESt10shared_ptrINS0_9RowVectorEE
 # 10 _ZN8facebook5velox4exec11TableWriter8addInputESt10shared_ptrINS0_9RowVectorEE
 # 11 _ZN8facebook5velox4exec6Driver11runInternalERSt10shared_ptrIS2_ERS3_INS1_13BlockingStateEERS3_INS0_9RowVectorEE
 # 12 _ZN8facebook5velox4exec6Driver4nextERSt10shared_ptrINS1_13BlockingStateEE
 # 13 _ZN8facebook5velox4exec4Task4nextEPN5folly10SemiFutureINS3_4UnitEEE
 # 14 _ZN6gluten24WholeStageResultIterator4nextEv
 # 15 Java_org_apache_gluten_vectorized_ColumnarBatchOutIterator_nativeHasNext
 # 16 0x00007f8833c9cfb0

@mbasmanova @majetideepak @rui-mo Do you have any input? Thanks.

@JkSelf I met the same issue and please check the discussion in this issue https://github.com/facebookincubator/velox/issues/9821.

I think we will need to support writing non-flat vectors in Parquet writer. @majetideepak what do you think?

We do support writing regular dictionaries to Parquet. See https://github.com/facebookincubator/velox/pull/7025
I am curious as to why complex types have a problem. I'll look into this.
We know constant vectors are flattened until Arrow supports writing REE encoding to Parquet. There is some issue somewhere for this.

https://github.com/facebookincubator/velox/pull/9406
I have a draft PR to support flatten complex vector.


Feature request: Allow capturing the whole event as context

Is your feature request related to a problem? Please describe.
Currently, there seems to be no way to pass the whole log event payload to Sentry as context. I can only specify concrete paths that will be attached using lodash.get().
If I pass something to the error log then I think it is important to capture and want to have it in Sentry. I don't see any purpose to have a hard-coded list of things that would be attached.
Describe the solution you'd like
I want to have an option to pass the whole event (maybe with the exception of a message) as a Sentry issue context.
Something like this:
transport: {
            options: {
                captureFullContext: true,
                // or
                context: "full",
                minLevel: 40, // warn
                sentry: sentryOptions
            },
            target: "pino-sentry-transport",
        }

Describe alternatives you've considered
I have checked lodash docs and checked the library source code to see if there's a way to pass everything and I don't think there's a way.
Due to that I have just patched my package locally with pnpm patch and it works great. I'm happy to submit PR if I get a greenlight and we agree on the implementation details.
Additional context
Add any other context or screenshots about the feature request here.

Sorry, I just realized there's withLogRecord option. 🤦♂


Create dummy.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Dummy</title>
  </head>
  <body>
    ― Hello Dummy! 😉
  </body>
</html>

It is a test file

It is a test file


AlphaFold multimer has import error in Step 5

Hi,
I tried to predict structures of complexes with AlphaFold Multimer using the link: https://colab.research.google.com/drive/1J1G8OC6LZwT6Tqdz4uLRmnVzj7WWgUg1?usp=sharinga
It worked well before, but a problem appeared yesterday. In step 5, "Search against genetic database", there's an import error (See below). I tried with different browsers, the problem still exists.
Is anybody know how to fix the problem? Thanks very much!
Cheers,
Qun

Hi thanks for raising this. Its a duplicate of https://github.com/deepmind/alphafold/issues/648 so closing


Error: multiple roots

It is not possible to have multiple nodes in root
In the hierarchy of the company for which I am implementing the organization chart, there are two people at the highest level, which means that there are two nodes at the root of the organization chart.
It would be quite interesting if the library didn't have this limitation.

@walissonwaal  you can add one dummy node at the top and hide it during drawing, this way you can simulate multiple roots.

@bumbeishvili How to hide a node. Can you provide a example.

@taruntadikonda check the multi roots example in here
https://github.com/bumbeishvili/org-chart?tab=readme-ov-file#features

I am using a angular project. In the linkUpdate and nodeUpdate event emitters this refers to the DOM element of the node or the link. Is there any equivalent thing to get the DOM element in Typescript.


The method 'getThumbnail' isn't defined for the type 'FcNativeVideoThumbnail'.

@brunoalksouza You should create an instance of the plugin type:
final plugin = FcNativeVideoThumbnail();
await plugin.getThumbnail(...);


Add support for configuring milestones

See API docs for creating a milestone

Hey @bkeepers , I'm currently working on this. When I create a milestone, it calls to getMilestones request call. It's kind of weird but code seems fine to me. I'm testing this by redelivering the payload. Any suggestions?

Can you open a PR with the code you have in progress so I can look more closely?

Sure. that would be great.

Hey @bkeepers , found the issue. It was a problem with the @octokit/rest version. Mine was @octokit/rest": "14.0.9, which doesn't clone the options object as below.

Thank you for your time :smiley:
Still wonder why it installs Probot version 5.6.0, even Settings's dependency set it to be 6.0.0!

Yes, @bkeepers, I think this enhancement is good to go. Let me know if there is anything to be changed. I can make those changes as well. :slightly_smiling_face:


Render a CCLabel in a CCTextureRender causes NRE

Per forum post https://forums.xamarin.com/discussion/comment/121436#Comment_121436 when rendering a CCLabel to a Texture using Visit causes a null exception here https://github.com/mono/CocosSharp/blob/v<IP_ADDRESS>/src/label_nodes/CCLabel.cs#L1402

This should be fixed.  See test https://github.com/mono/CocosSharp/blob/13c794b5daaeb05e255447e6949a50285f9bf701/tests/tests/classes/tests/LabelTestNew/LabelSystemFontRenderTexture.cs.
Have tested on all supported platforms.


live share fails to respect the microsoft sovereign cloud settings introduced in vscode 1.78

Having read about the support to Sovereign clouds in the April 2023 release notes for vscode 1.78 https://code.visualstudio.com/updates/v1_78#_microsoft-sovereign-cloud-support-in-desktop
I edited my settings to use USGoverment (Azure US Governement) as my sovereign cloud.  This works with the Azure extension and I am able to authenticate using my microsoft account.
This setting however is not respected in the live-share extension, as reported in https://github.com/microsoft/vscode/issues/162539
Like @stgarf-sx I was able to use the Fugio extension created by @TylerLeonhardt to get a token from my Azure GCCH account.
Based on what I read on that ticket and on https://github.com/MicrosoftDocs/live-share/issues/4292#issuecomment-1509224294 I believe that if live-share has not yet updated it's code base to honor the microsoft-sovereign-cloud settings that are in vscode as of April.
When I click share it opens the login.microsoft.com url vs the login.microsoft.us url, when I go through the login sequence I get a pop up that says "Share Failure: Auth token returned by microsoft provider is empty"
The console for Live Share shows
[microsoft W] Failed to load session: {"error":"invalid_request","error_description":"AADSTS900434: National Cloud request processing failed: CallNationalCloud: http request failed with errorcode: BadRequest, Content:{"error":"invalid_request","error_description":"AADSTS54006: Unencrypted v2 access tokens are not supported for first party applications that support consumer accounts. The resource must add a certificate to the onboarding portal to encrypt tokens.\r\n
[microsoft W] Failed to load session
[microsoft E] Failed to sign in: no token available
[Command:liveshare.startFromWelcomeContent E] Command [Starting collaboration session]: Share Failure: Auth token returned by microsoft provider is empty. (29116ms)
[Command:liveshare.startFromWelcomeContent E] Error: Auth token returned by microsoft provider is empty.
at AuthenticationProvider. [PATH]/extension.js:394:268619)
at Generator.next ()
at fulfilled [PATH]/extension.js:394:261933)
The Console for Microsoft authenticator shows similar error while the console for Microsoft sovereign cloud authenticator shows no activity.
What was your system configuration?
Product and Version [VS/VSCode]: vscode 1.80.1
OS Version[macOS/Windows]: Window
Live Share Extension Version:  v1.0.5877
vscode.zip

/extLiveShare
LiveShare has to explicitly support logging in via the Microsoft Sovereign Cloud

Hi - Sovereign cloud is not supported by Live Share. This issue is related to https://github.com/MicrosoftDocs/live-share/issues/341. Unfortunately, we’re not able to prioritize this feature over the other current areas of focus on the team. We understand that this maybe disappointing. We appreciate your input and comments on this issue till now.


Fix: typos

Fix: typos

I'm closing this, opened a new one here: https://github.com/stellar/soroban-docs/pull/296


NPM Instruqt lab is missing steps

How can we make our docs better?
The 2nd outcome in the Instruqt module is missing 2 commands. This breaks the remainder of the lab.
docker swarm init
docker network create -d overlay --subnet=<IP_ADDRESS>/24 --attachable testnet

Doc information (don't delete this section)

https://developer.newrelic.com/collect-data/network-performance-monitoring/
OS: Unknown
Browser: Unknown
Device: Unknown

@alexronquillo or @mehreentahir16 would this be something you could look at?

Just as a general note, this is preventing the NPM Udemy Learning Track from functioning. Once this has been resolved, the learning track will be made available to GTS

I'll look at this now.

It looks like the lab has a bigger problem. The two lines you mention, @nr-jbiggley, are in the packer setup for the lab. It seems like something's broken with the image.

Ok, I fixed it and the fix worked for me. Would you mind trying? @nr-jbiggley


Consider modifications to spark_apply group_by API

For discussion... here are some ideas I have from playing with https://github.com/rstudio/sparklyr/pull/833
cc @javierluraschi @statmatt

The key(s) should come first in arguments for f. I think this is more natural.
Append grouping columns to resulting DataFrame by default. In practice they're almost always needed and users can easily deselect/rename otherwise.
Support grouping by multiple columns.

Sample test for these requirements:
s <- spark_apply(
  mtcars_tbl,
  function(cyl, gear, d) lm(mpg ~ disp, d)$coefficients[["(Intercept)"]],
  names = c("intercept"),
  group_by = list("cyl", "gear")
) %>% collect()

r <- mtcars %>%
  tidyr::nest(-cyl, -gear) %>%
  mutate(model = purrr::map(data, ~lm(mpg ~ disp, data = .)),
         intercept = purrr::map_dbl(model, function(x) x$coefficients[["(Intercept)"]])) %>%
  select(cyl, gear, intercept)

expect_equal(s, r)

Enforce function signature of f to be consistent with number of grouping columns. The user can give either 1 argument (for the data) or n where n = number of grouping columns + 1. So this would be OK:

s1 <- spark_apply(
  mtcars_tbl,
  function(cyl, gear, d) lm(mpg ~ disp, d)$coefficients[["(Intercept)"]],
  names = c("intercept"),
  group_by = list("cyl", "gear")
) %>% collect()

s2 <- spark_apply(
  mtcars_tbl,
  function(d) lm(mpg ~ disp, d)$coefficients[["(Intercept)"]],
  names = c("intercept"),
  group_by = list("cyl", "gear")
) %>% collect()

expect_equal(s1, s2)

But this would not:
expect_error(
  spark_apply(
    mtcars_tbl,
    function(cyl, d) lm(mpg ~ disp, d)$coefficients[["(Intercept)"]],
    names = "intercept",
    group_by = list("cyl", "gear")
  ),
  "'f' has incorrect number of arguments"
)

@javierluraschi @kevinykuo comments below. Thanks for jumping on this guy so quickly.
The key(s) should come first in arguments for f. I think this is more natural.
Agreed, and this is consistent with the SparkR API as well.
Append grouping columns to resulting DataFrame by default. In practice they're almost always needed and users can easily deselect/rename otherwise.
This is possible, but it's not necessarily bad to allow the user to format the key columns as part of the group by operation (or potentially omit them). The R version of groupBy has some nice qualities that differentiate it from the Scala or Python groupBys (the ability to return a dataframe, and not just one row in a dataframe is great), so I think you're in unique enough territory you could do it either way
Support grouping by multiple columns.
Absolutely. This is a requirement (probably should have been explicit on this is the original ticket).
Enforce function signature of f to be consistent with number of grouping columns. The user can give either 1 argument (for the data) or n where n = number of grouping columns + 1. So this would be OK:
Not sure on this one. A function of two arguments (first is a vector or df of key values, second is the dataframe) is what's currently established. You could certainly do it this way, but what's the usability advantage?

I really like function arguments order to stay consistent between group_by = NULL and `group_by = "column_name"), but (2) adding grouping columns and (3) grouping by multiple columns makes sense to me.


Description length is too short

https://github.com/HydraWiki/Tilesheets/blob/master/install/sql/ext_tilesheet_languages.sql#L5
 `description` varchar(100)

This is way too short for some descriptions, in particular GT6 where &bConverts 1 HU into +1 K per 100kg/&4Melts down when stored Heat is too much! (2500 K)/Can put Blocks around it on Fire! (4m)/&8Tool to harvest: &fPickaxe (0)/&7Contains 7.0 Units of Clay/Melt: 2000 K - Boil: 4000 K - Weight: 1392.355 kg was truncated to &bConverts 1 HU into +1 K per 100kg/&4Melts down when stored Heat is too much! (2500 K)/Can put Bloc

What should be the size?

Maybe instead of using VARCHAR you could just use TEXT instead which has a limit of 65 thousand.

Ah, good idea. I didn't know that was a thing.

The hardest part really is just going to be migrating the table. Someone from Gamepedia will have to dig in and change the column type. That said there is only one actual entry in that column at the moment, so I don't mind if they lose the existing data in that column.

You can actually use a "modifyTable" update statement.  I will make a pull request later.

Example from another extension:
$updater->addExtensionUpdate(['modifyField', 'table_name', 'field_name, "{$extDir}/upgrade/sql/wiki_allowed_extensions/change_legacy_load.sql", true]);


Add severity to standard output. Fixes #93

I added this as an argument that defaults to off so that the output stays consistent for people. If you want it, the flag is --add-severity.

@roaldnefs I've made changes based on your comments. Thanks!


znode of new masted don't get updated when new master fails

Hi , I tried connecting zookeper KV to my orchestrator,
I have 3 mysql docker container running
0902df589fd2<- master
dd83f1a59c59<- slave
ebbfbb1e184d<- slave
now zookeper have an znode 0902df589fd2 and hostname inside that znode is 0902df589fd2 which is correct
now when I fail my master slave ebbfbb1e184d got promoted to the master and the znode 0902df589fd2/hostname have ebbfbb1e184d,
plus I also have a new znode ebbfbb1e184d and ebbfbb1e184d/hostname have data ebbfbb1e184d
now when I fail ebbfbb1e184d , dd83f1a59c59 got promoted to master
my znode 0902df589fd2/hostname got updated and have value dd83f1a59c59
but my znode  ebbfbb1e184d/hostname still have data ebbfbb1e184d
new znode dd83f1a59c59 is created
Expected -> either don't create a new znode or update the newly created one
following is the zookeper output to follow
[zk: localhost:2181(CONNECTED) 1] get mysql/master
Path must start with / character
[zk: localhost:2181(CONNECTED) 2] get /mysql/master
zookeepercli auto-generated
[zk: localhost:2181(CONNECTED) 3] ls mysql/master
Path must start with / character
[zk: localhost:2181(CONNECTED) 4] ls /mysql/master
[0902df589fd2:3306]
[zk: localhost:2181(CONNECTED) 5] ls /mysql/master/0902df589fd2:3306
[hostname, ipv4, ipv6, port]
[zk: localhost:2181(CONNECTED) 6] ls /mysql/master/0902df589fd2:3306/hostname
[]
[zk: localhost:2181(CONNECTED) 7] get /mysql/master/0902df589fd2:3306/hostname
0902df589fd2
[zk: localhost:2181(CONNECTED) 8] exit
[zk: localhost:2181(CONNECTED) 9] get /mysql/master/0902df589fd2:3306/hostname
ebbfbb1e184d
[zk: localhost:2181(CONNECTED) 10] ls /mysql/master
[0902df589fd2:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 11] get /mysql/master/0902df589fd2:3306/hostname
ebbfbb1e184d
[zk: localhost:2181(CONNECTED) 12] get /mysql/master/ebbfbb1e184d:3306/hostname
ebbfbb1e184d
[zk: localhost:2181(CONNECTED) 13] get /mysql/master/ebbfbb1e184d:3306/hostname
ebbfbb1e184d
[zk: localhost:2181(CONNECTED) 14] get /mysql/master/ebbfbb1e184d:3306/hostname
ebbfbb1e184d
[zk: localhost:2181(CONNECTED) 15] get /mysql/master/0902df589fd2:3306/hostname
dd83f1a59c59
[zk: localhost:2181(CONNECTED) 16] ls /mysql/master
[0902df589fd2:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 17] ls /mysql/master
[0902df589fd2:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 18] ls /mysql/master
[0902df589fd2:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 19] ls /mysql/master
[0902df589fd2:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 20] ls /mysql/master
[0902df589fd2:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 21] ls /mysql/master
[0902df589fd2:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 22] ls /mysql/master
[0902df589fd2:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 23] ls /mysql/master
[0902df589fd2:3306, dd83f1a59c59:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 24] ls /mysql/master
[0902df589fd2:3306, dd83f1a59c59:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 25] ls /mysql/master
[0902df589fd2:3306, dd83f1a59c59:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 26] ls /mysql/master
[0902df589fd2:3306, dd83f1a59c59:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 27] ls /mysql/master
[0902df589fd2:3306, dd83f1a59c59:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 28] ls /mysql/master
[0902df589fd2:3306, dd83f1a59c59:3306, ebbfbb1e184d:3306]
[zk: localhost:2181(CONNECTED) 29] get /mysql/master/ebbfbb1e184d:3306/hostname
ebbfbb1e184d
[zk: localhost:2181(CONNECTED) 30] get /mysql/master/ebbfbb1e184d:3306/hostname
ebbfbb1e184d
[zk: localhost:2181(CONNECTED) 31] ls /mysql/master
[0902df589fd2:3306, dd83f1a59c59:3306, ebbfbb1e184d:3306]

I think what you are looking for is to create a cluster alias. Call your cluster "main" or "oltp" or "mysql1" ; then, you will look at mysql/master/oltp records, like mysql/master/oltp/hostname and see how that changes upon master failover.

Thankyou it works


Moving to Angular CLI

Is this an option?

Here you can find a starter that use Angular CLI: https://github.com/robisim74/AngularCliAspNetCore
Greetings


Search behaving strangely

I can't seem to reliably use the search feature in 6.0b3.
Search often comes up blank or no change to articles.  Often followed by spinny cursor.  Quitting and relaunching doesn't seem to help.  Sample screen capture below.  (Note that the capture doesn't capture the cursor spinning at the end...)
https://user-images.githubusercontent.com/131679/112051106-c5d7f680-8b0e-11eb-86a0-53ffeb656492.mov

@blackketter Could you do me a favor? Disable your Feedly account and then add a new one beside it. Call it Feedly 2 or something. Let's see if it has the same problem.

It's complaining with "There is already a Feedly account with that username created."
Should I delete the existing one (don't want to lose any forensic information you might find useful) or create a new one?

Let's copy your account folder to a location we can get to it later if it looks like it is something we can debug. It will be in ~/Library/Containers/com.ranchero.NetNewsWire-Evergreen/Data/Library/Application Support/NetNewsWire/Accounts and start with 16 followed by a random string.
After that, you should be ok to delete your old account and add it back again.

Ok, once the account is deleted and re-added search is working ok.
I have a backup of the account directory saved in case you want to dig around.  The biggest noticeable difference is that the DB.sqlite3 file originally was 311MB and is now 95MB.

Does the bad DB.sqlite3 database compress down to something you could share with me?

I've put it here: https://www.dropbox.com/s/lnsigwy1xfozry9/db.sqlite3.zip?dl=0
Let me know when you've grabbed it.

I got it. Thanks for sharing it. I'll see if there is anything we can find out from it.

Is this the desired behavior @vincode-io? Or it’s taking so much time?
For 3 times that I’ve tried, I had the same behavior of @blackketter, after that I’ve relaunch the app twice and refresh all the feeds.
https://user-images.githubusercontent.com/72861758/112445599-9a901a00-8d4f-11eb-8ada-2d0604d1e1e8.mp4

Is there a full-text index over article contents?

@kevinm6 It looks like it is working, but taking more time than we would  like. We should look to see if we need to do some kind of periodic maintenance on the full text search.

@Wevah Yeah, we're using FTS.

(I checked and the system-provided SQLite lib does have various FTSs enabled.)

Maybe also related: there is no UI feedback for iCloud Accounts if the article is starred or marked unread in the latest Version 6.0 (6026) on Catalina.
The video shows the difference between the article from the iCloud account (top) and the Local Account (bottom).
https://user-images.githubusercontent.com/16613048/112749320-eea23500-8fc1-11eb-8d72-1514987d2ce5.mov

@tqml Could you please file a seperate bug report?

Sure, made a new issue for it

It appears that this problem has gone away for me.  Possibly due to @vincode-io's suggestion in #3559 that I delete and re-add my Feedly account.  Search is responsive now.  Probably safe to close, unless you want to go with my suggestion to add some feedback while a search is processing.

I'm sure that is what fixed it. We need to get to the bottom of why our databases get corrupted sometimes.


take a screenshot in process_spider_exception

Is there a way to take a screenshot for a process_spider_exception error?
I can't figure out how to access the page object in that middleware.

Interesting question. I've encountered two limitations while trying to make this work:

Scrapy supports process_spider_output methods in spider middlewares to be defined as coroutines, but does not support async def process_spider_exception methods. This is the reason I'm using asyncio.create_task in my example below
we need to allow some time to take the screenshot, otherwise it's possible for the spider to run out of requests to make close the crawl, which will close the browser and cause the crawl to fail with TargetClosedError: 'Page.screenshot: Target page, context or browser has been closed. This can be handled by connecting to the spider_idle signal and raising DontCloseSpider if the screenshot has not yet been taken.

Full example:
import asyncio
import logging

import scrapy
from playwright.async_api import Page
from scrapy import signals
from scrapy.crawler import Crawler

class HandleExceptionMiddleware:
    @classmethod
    def from_crawler(cls, crawler: Crawler):
        return cls(crawler)

    def __init__(self, crawler: Crawler) -> None:
        crawler.signals.connect(self.spider_idle, signal=signals.spider_idle)
        self.screenshot_taken = asyncio.Event()

    def spider_idle(self, spider):
        if not self.screenshot_taken.is_set():
            raise scrapy.exceptions.DontCloseSpider()

    def process_spider_exception(self, response, exception, spider):
        logging.info("Caught exception: %s", exception.__class__)
        page: Page = response.meta["playwright_page"]
        asyncio.create_task(self.take_screenshot(page=page))
        return []

    async def take_screenshot(self, page: Page):
        await page.screenshot(path="example_exception.png", full_page=True)
        self.screenshot_taken.set()
        await page.close()

class HandleExceptionSpider(scrapy.Spider):
    name = "exception"
    custom_settings = {
        "SPIDER_MIDDLEWARES": {HandleExceptionMiddleware: 100},
        "TWISTED_REACTOR": "twisted.internet.asyncioreactor.AsyncioSelectorReactor",
        "DOWNLOAD_HANDLERS": {
            "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
        },
    }

    def start_requests(self):
        yield scrapy.Request(
            url="https://example.org",
            meta={"playwright": True, "playwright_include_page": True},
        )

    def parse(self, response, **kwargs):
        logging.info("Received response for %s", response.url)
        1 / 0


ML 1.2 : PDFs and CDFs (V)

Welcome to 'ML' Team, good to see you here
This issue will helps readers in acquiring all the knowledge that one needs to know about PDFs and CDFs.
To get assigned to this issue, add your Batch Numbers mentioned in the spreadsheet of "Machine Learning", the approach one would follow and choice you prefer (Documentation, Audio, Video). You can go with all three or any number of options you're interested to work on.
Domain : Machine Learning
Points to Note :

The issues will be assigned on a first come first serve basis, 1 Issue == 1 PR.

"Issue Title" and "PR Title should be the same. Include issue number along with it.

Changes should be made inside the Machine Learning/Machine_Learning/Statistics_for_Machine_Learning Branch.

Follow Contributing Guidelines & Code of Conduct before start Contributing.

This issue is only for 'GWOC' contributors of 'Machine Learning' domain.

To be Mentioned while taking the issue :

Full name
Batch Number
GitHub Profile Link
Which type of Contribution you want to make :

[ ] Video

All the best. Enjoy your open source journey ahead. 😎

Mohit Mishra
ML-Batch-1
Profile_Link:- https://github.com/mohitmishra786
I want to contribute through documentation

@mohitmishra786 It is clearly written in the guideline of this issue that it is a video contribution. You can contribute in this issue by making a video over the topic. The documentation of this was already assigned.

@abhisheks008  can you tell me what should be the length of video and audio

I would like to take up this issue in video format.
Name: Riya Srisailam Sailesh
ML Batch-11
Github Profile: https://github.com/riyasai22

@abhisheks008 can you tell me what should be the length of video and audio

@mohitmishra786 length of the content completely depends on you. Whenever you search for some content in YouTube you get different types of length of the videos but they demonstrate the same things. So it's up to you how precisely and easily you can create a video or an audio file which will cover the topic.

What is the update @riyasai22 ? It's been 7 days and you were although you've assigned an issue. Create the PR ASAP, otherwise we can't make further issues!

@abhisheks008
I have made a video contribution.
Please do look into it.


Notification sidebar resets scroll position

What happened?
Everytime you open the notification panel, it resets the scroll position
Please reproduce in steps
go to the home page then scroll down
then open the notification panel
Expected Behavior
Scroll position should stay
What browsers are you seeing the problem on?
No response
At which address did you encounter bug?
No response
Are you logged in?
None
Which wallet you are using?
No response
At which chain did you encounter bug?
No response
Screenshots

Relevant log output
No response
Payment link for reward
https://canary.kodadot.xyz/dot/transfer?target=16UcV9V6nVvPYdHz98ymUKmNLkzjCEU5sbKJMi7hxYyTHjzR&usdamount=100&donation=true
Code of Conduct

[X] I agree to follow this project's Code of Conduct

👋


Default Time Range selection

Is there any way to set default time range of the chart. for example:
This

Instead of this:

Or better, set a default time range with the start and end of a specific Node?

You can achieve this behavior by using the setZoom method when initializing the flame chart:
const nodes = [
  { name: 'foo', start: 400, duration: 500 }
];

const flameChart = new FlameChart({
  data: nodes
});

flameChart.setZoom(nodes[0].start, nodes[0].start + nodes[0].duration);


Create entries (TABLE) without a file

Is your feature request related to a problem? Please describe.
I'd love to be able to create entries in a table without a corresponding file. Similar to creating a link in Obsidian with [[]] without an existing file.
Describe the solution you'd like
I'm not entirely certain how to do this, but it would be nice to be able to enter data into a table
Describe alternatives you've considered
Currently I am creating an empty file for every entry.

Adding a WYSIWIG-like editor is pretty far off for us right now, but as something more approachable, would being able to just write CSV-like rows work? Something like:
```dataview
TABLE FROM [
[1, "blah", date(2020-01-04)
]
```

Or maybe even a little simpler like
```dataview-table
1, blah, 2020-01-04
```

I don't care for a wysiwyg editor. A way to combine searching and adding at the same time would literally help me never juggle apps.

I'd love to be able to create entries in a table without a corresponding file.

You can do it with dataviewjs API, e.g.:
const data = [
	{ some: "thing", x: 123, lorem: "ipsum" },
	{ some: "where", y: 456, lorem: "dolor" },
	{ some: "one",   x: 987, lorem: "et"    },
];

dv.table(
	[
		"Some",
		"(x,y)",
		"lorem…",
	],
	data.map(datum => [
		datum.some,
		`(${datum.x ?? "?"},${datum.y ?? "?"})`,
		datum.lorem,
	])
);

@auser

I'd love to be able to create entries in a table without a corresponding file.

You can do it with dataviewjs API, e.g.:
const data = [
	{ some: "thing", x: 123, lorem: "ipsum" },
	{ some: "where", y: 456, lorem: "dolor" },
	{ some: "one",   x: 987, lorem: "et"    },
];

dv.table(
	[
		"Some",
		"(x,y)",
		"lorem…",
	],
	data.map(datum => [
		datum.some,
		`(${datum.x ?? "?"},${datum.y ?? "?"})`,
		datum.lorem,
	])
);

We could achieve that with a UNION operator or a slightly more nuanced FROM statement (which let you select directly from lists, for example).


Bridge Page Styling: Move boxes on top of one another

          this is certainly an issue. I wonder if it's better dealt with in a different PR that sorta restyles each box and maybe reorients them on top of one another. i have a light preference to keep this PR limited to just the styling of L2 tokens.

Originally posted by @wildmolasses in https://github.com/ScopeLift/l2-flexible-voting-frontend/pull/107#discussion_r1386435575

Closed by #123


Viewing test coverage over time

Is there a way to use this tool to generate a time-series of reports based on the git history of a project? I'm picturing generating a coverage report for each commit in a given range and the output would be the same as the current html output but with a slider added to view coverage at different points in time.
Not sure if this is a feature request or not, because hopefully somebody's tried to implement it already.

@borrascador you could potentially build this by checking out your repo at a variety of points, and executing tests with coverage -- one nice thing about nyc is that it's relatively configuration free.
You would simply need to then set aside the coverage output from each run and then plot it.
tldr; not a feature we're going to add to nyc, but I think you should be able to pull it off pretty easily.

I'd potentially use the json report, or something similar, which will give you raw data you can map.

Look at http://www.sealights.io
See if that helps you.

Look at Gource
Demo with Linux Kernel history

Thanks for the suggestions. I think I will go with the suggestion by @bcoe to export json for each commit and then map the data into something useful.


Username upon changing doesn't gets updated for an existing password entry.

** updated username is not shown in the passowrd card.

Fixed.
#14


Provide autowiring for AuditReader

Q
A

Bug report?
no

Feature request?
no

BC Break report?
no

Example:
  [Symfony\Component\DependencyInjection\Exception\RuntimeException]
  Cannot autowire service "AppBundle\Manager\TicketManager": argument "$auditReader" of method "__construct()" references class "SimpleThings\EntityAudit\AuditReader" but no such service exists. You should maybe alias this class to the existing "simplethings_entityaudi
  t.reader" service.

@Soullivaneuh this would only require an alias with the classes FQCN? Even in our quite broken (master) state, I would think, there would be no harm in this.
Would you mind preparing a PR against the 1.x-branch?

@DavidBadura or do you see any problems in this?

this would only require an alias with the classes FQCN?

Yes, but the best is to do a reverse alias (Make FQCN as main service id) and deprecate the old service name.

fine be me, as long as there are no BC breaks in 1.x :smile:

I'm lastly not sure if we can do it. Apparently, we can't deprecate alias. :-/

You mean formally deprecate the alias? I wouldn't mind that, as long as the old service id still works in 1.x and we remember to add it to the migration log for 2.0 when/if we remove the alias.

Related: https://github.com/symfony/symfony/pull/24707

I close this issue as it works now since the upgrade, thanks! :+1:
But please note: Making all service public is not a solution. We should avoid public service as possible. Since we have autowiring, we can take benefit of the dependency injection without using the container directly. :+1:
I agree, it's BC break. It should be done on next major.


Updates to VersionInfo module and its dependencies

Feature or improvement description
The VersionInfo module was originally created to avoid having the version information at the lowest level of the build. This would avoid having to rebuild NWTC Library every time the git hash changed. (See https://github.com/OpenFAST/openfast/issues/267 and https://github.com/OpenFAST/openfast/pull/269.) However, in a later pull request, the NWTC Library added a dependency on VersionInfo (see https://github.com/OpenFAST/openfast/pull/428), putting VersionInfo at the lowest level of the build again.
This pull request takes the subroutines from NWTC_IO.f90 that use version information and puts them into the VersionInfo module so that NWTC_Library no longer uses the VersionInfo module.
Related issue, if one exists
#267, #269, #428
Impacted areas of the software

Unit tests: NWTC Library unit test for CheckArgs is now in a VersionInfo unit test
Cmake build system: more modules depend on versioninfolib
FAST_subs: the GetVersion subroutine is now in VersionInfo so that other driver codes can call the routine if desired.
Driver codes that use CheckArgs or any subroutine to display version info have been updated.

Additional supporting information
I also renamed the (unused) modules/nwtc_library/test directory to modules/nwtc_library/old_test to avoid confusion with the modules/nwtc_library/tests directory.
Test results, if applicable
This should not change any test results, though the screen output for driver codes may change.

Thanks for this pull request @bjonkman. I'm documenting this info primarily for our own future reference.
The issue in the previous implementation of the git-based version numbering via CMake was that it was done through a compiler directive. This meant that any change to the git-status also changed the compiler command (see v1.0.0) and every file then had to be recompiled. The VersionInfo module was added so that instead only one file gets a new compiler command when the version changes. This allows all other modules to link to VersionInfo without having to be recompiled.
I tested changing the version (i.e. the git status) and compiling nwtc_library_utest on dev so not including the changes in this pull request.
## STARTING 1 COMMIT PRIOR TO `dev`

(openfast) >>mbp@~/Development/openfast_forks/bonnie/build (dev)$ git co b0ac7ad5
Note: switching to 'b0ac7ad5'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b0ac7ad5 Merge pull request #1050 from ptrbortolotti/stability
(openfast) >>mbp@~/Development/openfast_forks/bonnie/build ((b0ac7ad5...))$ cmake ..
-- Enabling Fortran 2008 features
-- Setting system file as: src/SysGnuLinux.f90
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/rmudafor/Development/openfast_forks/bonnie/build
(openfast) >>mbp@~/Development/openfast_forks/bonnie/build ((b0ac7ad5...))$ make nwtc_library_utest -j2
Scanning dependencies of target versioninfolib
[  0%] Creating directories for 'pfunit'
[  0%] Building Fortran object modules/version/CMakeFiles/versioninfolib.dir/src/VersionInfo.f90.o
[  0%] No download step for 'pfunit'
[  0%] No update step for 'pfunit'
[  7%] Linking Fortran static library libversioninfolib.a
[ 14%] No patch step for 'pfunit'
[ 14%] Built target versioninfolib
Scanning dependencies of target nwtclibs

... REMOVED THE COMPILE DETAILS But trust me in that this was the full compile for this target...

[100%] Linking Fortran executable nwtc_library_utest
[100%] Built target nwtc_library_utest

## Checkout `dev`

(openfast) >>mbp@~/Development/openfast_forks/bonnie/build ((b0ac7ad5...))$ git co dev
Previous HEAD position was b0ac7ad5 Merge pull request #1050 from ptrbortolotti/stability
Switched to branch 'dev'
Your branch is up to date with 'openfast/dev'.

(openfast) >>mbp@~/Development/openfast_forks/bonnie/build (dev)$ make nwtc_library_utest -j2
-- Enabling Fortran 2008 features
-- Setting system file as: src/SysGnuLinux.f90
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/rmudafor/Development/openfast_forks/bonnie/build
Scanning dependencies of target versioninfolib
[ 14%] Built target pfunit
[ 14%] Building Fortran object modules/version/CMakeFiles/versioninfolib.dir/src/VersionInfo.f90.o
[ 21%] Linking Fortran static library libversioninfolib.a
[ 21%] Built target versioninfolib
Scanning dependencies of target nwtclibs
[ 85%] Built target nwtclibs
Scanning dependencies of target nwtc_library_utest
[ 85%] Building Fortran object unit_tests/nwtc-library/CMakeFiles/nwtc_library_utest.dir/__/pfunit/include/driver.F90.o
[ 85%] Linking Fortran executable nwtc_library_utest
[100%] Built target nwtc_library_utest

At least in CMake, I think this is a desirable compile pipeline. Waay back in https://github.com/OpenFAST/openfast/pull/42, we decided to remove the specific library versions in favor of a global OpenFAST version. In the current implementation, each compile target gets its version by linking to VersionInfo. With this pull request, the git-status (therefore, the version) can change and NWTC Library recompiled, but it is no longer associated with a version number. However, I don't think this matters in practice since in order to get a module library's version, it would have to link with VersionInfo at compile-time. It's a "does a tree fall in the woods" situation.
Continuing from above, the test below checks out this pull request's branch and compiles nwtc_library_utest. Here, VersionInfo is not recompiled even though the version has changed. But, again, we would never know that because there's no method in NWTC Library to print the version and if there were it would have to be linked to VersionInfo. The same goes for all libraries in OpenFAST.
## Checkout the current pull request branch

(openfast) >>mbp@~/Development/openfast_forks/bonnie/build (dev)$ git co f/VersionInfo
Switched to branch 'f/VersionInfo'
Your branch is up to date with 'origin/f/VersionInfo'.
(openfast) >>mbp@~/Development/openfast_forks/bonnie/build (f/VersionInfo)$ make nwtc_library_utest -j2
-- Enabling Fortran 2008 features
-- Setting system file as: src/SysGnuLinux.f90
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/rmudafor/Development/openfast_forks/bonnie/build
Scanning dependencies of target nwtclibs
[ 16%] Built target pfunit
[ 16%] Building Fortran object modules/nwtc-library/CMakeFiles/nwtclibs.dir/src/NWTC_IO.f90.o
[ 16%] Building Fortran object modules/nwtc-library/CMakeFiles/nwtclibs.dir/src/NWTC_Num.f90.o
[ 25%] Building Fortran object modules/nwtc-library/CMakeFiles/nwtclibs.dir/src/NWTC_RandomNumber.f90.o
[ 25%] Building Fortran object modules/nwtc-library/CMakeFiles/nwtclibs.dir/src/ModMesh_Types.f90.o
[ 25%] Building Fortran object modules/nwtc-library/CMakeFiles/nwtclibs.dir/src/ModMesh.f90.o
[ 25%] Building Fortran object modules/nwtc-library/CMakeFiles/nwtclibs.dir/src/ModMesh_Mapping.f90.o
[ 25%] Building Fortran object modules/nwtc-library/CMakeFiles/nwtclibs.dir/src/NWTC_Library.f90.o
[ 25%] Building Fortran object modules/nwtc-library/CMakeFiles/nwtclibs.dir/src/NetLib/fftpack/NWTC_FFTPACK.f90.o
[ 25%] Linking Fortran static library libnwtclibs.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libnwtclibs.a(SingPrec.f90.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libnwtclibs.a(SingPrec.f90.o) has no symbols
[ 83%] Built target nwtclibs
Scanning dependencies of target nwtc_library_utest
[ 83%] Building Fortran object unit_tests/nwtc-library/CMakeFiles/nwtc_library_utest.dir/__/tests/nwtc-library/NWTC_Library_test_tools.F90.o
[ 83%] Building Fortran object unit_tests/nwtc-library/CMakeFiles/nwtc_library_utest.dir/__/tests/nwtc-library/test_NWTC_IO_FileInfo.F90.o
[ 91%] Building Fortran object unit_tests/nwtc-library/CMakeFiles/nwtc_library_utest.dir/__/pfunit/include/driver.F90.o
[ 91%] Building Fortran object unit_tests/nwtc-library/CMakeFiles/nwtc_library_utest.dir/__/tests/nwtc-library/test_NWTC_RandomNumber.F90.o
[100%] Linking Fortran executable nwtc_library_utest
[100%] Built target nwtc_library_utest


Support FreeBSD

Once the support for FreeBSD (either "official" support or some form of "community support") is there in the .NET platform, we should add support for it in Perlang also. The more platforms we can (easily) support, the better. :slightly_smiling_face:
Upstream issues:

https://github.com/dotnet/runtime/issues/14537 (this is the most critical one, I think)
https://github.com/dotnet/source-build/issues/1139

More references

The official FreeBSD wiki page for the project: https://wiki.freebsd.org/.NET

I, and at least two others, publicly publish net3.1, net5, and net6 SDKs for FreeBSD. Using the Microsoft published SDK outside of FreeBSD to target FreeBSD does however, require manually adding in the FreeBSD RID (sed can do this) and either manually adding the missing NuGet files to your feed or placing them in a place where NuGet can find them doing restore.
As you have this marked as "Later" I assume this is a longterm goal so when you are ready, let me know and I (and likely others!) would be happy to help you get setup with FreeBSD and dotNET :)

Very interesting, thanks for the feedback! 👍🏻🙂 I’m not really a FreeBSD user myself (mostly using Linux) but I definitely wouldn’t mind adding support for FreeBSD in the project. Even other BSD:s would be cool (like NetBSD on arm) but FreeBSD seems to be the most widely used one.
The CI publishing is done from Linux; snapshots are generated for Linux, macOS and Windows from GitHub Actions. So if/when we add FreeBSD support it would be great if it could be cross-compiled from Linux.
I set up an Azure VM with FreeBSD yesterday, so if you have some links I’ll happily try out the .NET SDK. It’s the .NET 6 package that would be interesting in this case.
(and btw, thanks for your interest in the project. You’re the first person who have written a comment in this repo, apart from me and a colleague I involuntarily involved. 😂🎉)

Ping @Thefrank. 🙂 Do you have a link to your .NET 6 SDK?

https://github.com/Thefrank/dotnet-freebsd-crossbuild
or
https://github.com/Thefrank/dotnet-freebsd-native-binaries
These are built for and target FreeBSD 12.2. They SHOULD work under FreeBSD 12.3+

These are built for and target FreeBSD 12.2. They SHOULD work under FreeBSD 12.3+

Thanks, nice! :+1: I quickly downloaded it on my FreeBSD (cloud-based) test VM and dotnet seems to start fine at least:
[10:01:28] per@freebsd-test:~/tmp$ ./dotnet

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.
[10:01:31] per@freebsd-test:~/tmp$ uname -a
FreeBSD freebsd-test 13.0-RELEASE-p7 FreeBSD 13.0-RELEASE-p7 #0: Mon Jan 31 18:24:03 UTC 2022     root@amd64-builder.daemonology.net:/usr/obj/usr/src/amd64.amd64/sys/GENERIC  amd64

So... what would be the next step? I guess something like this, if we want to cross-build from Linux?

Using the Microsoft published SDK outside of FreeBSD to target FreeBSD does however, require manually adding in the FreeBSD RID (sed can do this) and either manually adding the missing NuGet files to your feed or placing them in a place where NuGet can find them doing restore.

The current steps we use for building a release a roughly the following. Note that --self-contained true  and /p:PublishReadyToRun=true are used here. We can probably live without R2R on FreeBSD if it isn't easily doable, but --self-contained is important. What this basically means is that the build ships the required .NET .dlls along with the application, making it completely independent from what happens to be installed on the host OS. https://github.com/perlang-org/perlang/blob/4afdce43260d0de3cba692a01842fc1f4487faf7/Makefile#L13-L14
We also perform link-time "trimming" of the output, to keep the size of the generated binaries down: https://github.com/perlang-org/perlang/blob/4afdce43260d0de3cba692a01842fc1f4487faf7/src/Perlang.ConsoleApp/Perlang.ConsoleApp.csproj#L6

dotnet --info is the best way to make sure dotnet "runs"
then
dotnet new console
dotnet run console and/or dotnet publish console --YOUR --SETTINGS --HERE
to make sure it can run/build everything
distribution:

--self-contained true is ideal as only a binary blob of the SDK exist right now and self-contained is already known to work correctly.
/p:PublishReadyToRun=true should work but only with the sdk from "native-binaries" repo as the crossbuild SDK is currently unable to correctly generate native images when it builds itself
LTO and other compiler/linker tricks: I am unsure on these. let me know how it goes :)

dotnet --info is the best way to make sure dotnet "runs"

Thanks. This gave me the following error:
[19:47:32] per@freebsd-test:~/git/perlang (master) $ dotnet --info
Process terminated. Couldn't find a valid ICU package installed on the system. Please install libicu using your package manager and try again. Alternatively you can set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support. Please see https://aka.ms/dotnet-missing-libicu for more information.
   at System.Environment.FailFast(System.String)
   at System.Globalization.GlobalizationMode+Settings..cctor()
   at System.Resources.ManifestBasedResourceGroveler.GetNeutralResourcesLanguage(System.Reflection.Assembly, System.Resources.UltimateResourceFallbackLocation ByRef)
   at System.Resources.ResourceManager.CommonAssemblyInit()
   at System.Resources.ResourceManager..ctor(System.Type)
   at System.SR.get_ResourceManager()
   at System.SR.InternalGetResourceString(System.String)
   at System.SR.GetResourceString(System.String)
   at System.DllNotFoundException..ctor()
   at System.DateTime.get_UtcNow()
   at System.DateTime.get_Now()
   at Microsoft.DotNet.Cli.Program.Main(System.String[])
Abort trap (core dumped)

This is using the native-binaries repo. Perhaps it would be worth mentioning something about this in either the readme for that repo or in https://github.com/Thefrank/dotnet-freebsd-crossbuild? :thinking:
[19:52:56] per@freebsd-test:~/git/perlang (master) $ sudo pkg install icu
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	icu: 70.1_1,1

Number of packages to be installed: 1

The process will require 50 MiB more space.
11 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching icu-70.1_1,1.pkg: 100%   11 MiB   5.6MB/s    00:02
Checking integrity... done (0 conflicting)
[1/1] Installing icu-70.1_1,1...
[1/1] Extracting icu-70.1_1,1: 100%

After installing this, I got a bit further:
[19:53:02] per@freebsd-test:~/git/perlang (master) $ dotnet --info
Unhandled exception. System.DllNotFoundException: Unable to load shared library 'libSystem.Native' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: Shared object "liblibSystem.Native" not found, required by "dotnet"
   at System.DateTime.get_UtcNow()
   at System.DateTime.get_Now()
   at Microsoft.DotNet.Cli.Program.Main(String[] args)
Abort trap (core dumped)

Guessing from https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/freebsd-instructions.md, I installed gettext but it didn't help. I also tried installing linux-c7-lttng-ust-2.4.1, but it failed because the Azure VM I'm using doesn't seem to have Linux support enabled: Cannot install package: kernel missing 64-bit Linux support
I wonder if this could be caused by some particular directory structure being required? I just unpacked this into /usr/home/per/dotnet for now, but maybe that's doomed to fail? The file that it's trying to load definitely seems to be there, from what I can tell:
[19:58:35] per@freebsd-test:~/dotnet$ find . | grep Native
./sdk/6.0.101/Microsoft.DotNet.NativeWrapper.dll
./shared/Microsoft.NETCore.App/6.0.1/libSystem.IO.Compression.Native.so
./shared/Microsoft.NETCore.App/6.0.1/libSystem.Native.so
./shared/Microsoft.NETCore.App/6.0.1/libSystem.Globalization.Native.so
./shared/Microsoft.NETCore.App/6.0.1/libSystem.Net.Security.Native.so
./shared/Microsoft.NETCore.App/6.0.1/libSystem.Security.Cryptography.Native.OpenSsl.so

Using ldd on that particular library seems to reveal an important part of this puzzle though. :bulb:
[19:59:01] per@freebsd-test:~/dotnet$ ldd ./shared/Microsoft.NETCore.App/6.0.1/libSystem.Native.so
./shared/Microsoft.NETCore.App/6.0.1/libSystem.Native.so:
	libthr.so.3 => /lib/libthr.so.3 (0x80068e000)
	libinotify.so.0 => not found (0)
	libc.so.7 => /lib/libc.so.7 (0x800263000)

I tried with sudo pkg install libinotify and the dependency would now be found:
[20:05:06] per@freebsd-test:~/dotnet$ ldd ./shared/Microsoft.NETCore.App/6.0.1/libSystem.Native.so
./shared/Microsoft.NETCore.App/6.0.1/libSystem.Native.so:
	libthr.so.3 => /lib/libthr.so.3 (0x80068e000)
	libinotify.so.0 => /usr/local/lib/libinotify.so.0 (0x8006bb000)
	libc.so.7 => /lib/libc.so.7 (0x800263000)

And dotnet --info now works! :tada:
[20:06:03] per@freebsd-test:~/dotnet$ dotnet --info
.NET SDK (reflecting any global.json):
 Version:   6.0.101
 Commit:    ef49f6213a

Runtime Environment:
 OS Name:     FreeBSD
 OS Version:  13
 OS Platform: FreeBSD
 RID:         freebsd.13-x64
 Base Path:   /usr/home/per/dotnet/sdk/6.0.101/

Host (useful for support):
  Version: 6.0.1
  Commit:  3a25a7f1cc

.NET SDKs installed:
  6.0.101 [/usr/home/per/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 6.0.1 [/usr/home/per/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.1 [/usr/home/per/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET runtimes or SDKs:
  https://aka.ms/dotnet-download

I'll try building the Perlang project with this SDK in a minute, hope to post some details about it in a separate comment soon.

Trying to build Perlang (just checking out the repo and running make, which should do everything for us) gives me a bunch of errors like this when trying to do NuGet package restore: The repository primary signature validity period has expired., i.e the same error as https://github.com/Servarr/dotnet-bsd/issues/8. I googled my way to the ca_root_nss but this package is unfortunately already installed, so that can't be the problem here... :neutral_face:
Here are some of the first errors in the build output:
  Determining projects to restore...
  Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json':
  Signature type: Author
  Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json':   Subject Name: CN=Sonarsource SA, O=Sonarsource SA, L=GENÈVE, C=CH
  Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json':   SHA256 hash: FC4D3F3F815C1B56A656F1A5D9456AF04B469267D945786057175049B15A62A0
  Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json':   Valid from: 09/17/2019 00:00:00 to 10/15/2021 23:59:59
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3037: Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json': The author primary signature validity period has expired. [/usr/home/per/git/perlang/Perlang.sln]
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3028: Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json': The author primary signature's timestamping certificate is not trusted by the trust provider. [/usr/home/per/git/perlang/Perlang.sln]
  Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json':
  Signature type: Repository
  Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json':   Subject Name: CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US
  Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json':   SHA256 hash: 5A2901D6ADA3D18260B9C6DFE2133C95D74B9EEF6AE0E5DC334C8454D1477DF4
  Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json':   Valid from: 02/16/2021 00:00:00 to 05/15/2024 23:59:59
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3028: Package 'SonarAnalyzer.CSharp <IP_ADDRESS>737' from source 'https://api.nuget.org/v3/index.json': The repository countersignature's timestamping certificate is not trusted by the trust provider. [/usr/home/per/git/perlang/Perlang.sln]
  Package 'StyleCop.Analyzers 1.2.0-beta.321' from source 'https://api.nuget.org/v3/index.json':
  Signature type: Repository
  Package 'StyleCop.Analyzers 1.2.0-beta.321' from source 'https://api.nuget.org/v3/index.json':   Subject Name: CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US
  Package 'StyleCop.Analyzers 1.2.0-beta.321' from source 'https://api.nuget.org/v3/index.json':   SHA256 hash: 0E5F38F57DC1BCC806D8494F4F90FBCEDD988B46760709CBEEC6F4219AA6157D
  Package 'StyleCop.Analyzers 1.2.0-beta.321' from source 'https://api.nuget.org/v3/index.json':   Valid from: 04/10/2018 00:00:00 to 04/14/2021 12:00:00
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3037: Package 'StyleCop.Analyzers 1.2.0-beta.321' from source 'https://api.nuget.org/v3/index.json': The repository primary signature validity period has expired. [/usr/home/per/git/perlang/Perlang.sln]
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3028: Package 'StyleCop.Analyzers 1.2.0-beta.321' from source 'https://api.nuget.org/v3/index.json': The repository primary signature's timestamping certificate is not trusted by the trust provider. [/usr/home/per/git/perlang/Perlang.sln]
  Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json':
  Signature type: Repository
  Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json':
  Signature type: Repository
  Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json':   Subject Name: CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US
  Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json':   SHA256 hash: 0E5F38F57DC1BCC806D8494F4F90FBCEDD988B46760709CBEEC6F4219AA6157D
  Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json':   Valid from: 04/10/2018 00:00:00 to 04/14/2021 12:00:00
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3037: Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json': The repository primary signature validity period has expired. [/usr/home/per/git/perlang/Perlang.sln]
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3028: Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json': The repository primary signature's timestamping certificate is not trusted by the trust provider. [/usr/home/per/git/perlang/Perlang.sln]
  Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json':   Subject Name: CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US
  Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json':   SHA256 hash: 0E5F38F57DC1BCC806D8494F4F90FBCEDD988B46760709CBEEC6F4219AA6157D
  Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json':   Valid from: 04/10/2018 00:00:00 to 04/14/2021 12:00:00
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3037: Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json': The repository primary signature validity period has expired. [/usr/home/per/git/perlang/Perlang.sln]
/usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj : error NU3028: Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json': The repository primary signature's timestamping certificate is not trusted by the trust provider. [/usr/home/per/git/perlang/Perlang.sln]
  Failed to restore /usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj (in 2.68 sec).
  Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json':
  Signature type: Repository
  Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json':   Subject Name: CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US
  Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json':   SHA256 hash: 0E5F38F57DC1BCC806D8494F4F90FBCEDD988B46760709CBEEC6F4219AA6157D
  Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json':   Valid from: 04/10/2018 00:00:00 to 04/14/2021 12:00:00
/usr/home/per/git/perlang/src/Perlang.Interpreter/Perlang.Interpreter.csproj : error NU3037: Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json': The repository primary signature validity period has expired. [/usr/home/per/git/perlang/Perlang.sln]
/usr/home/per/git/perlang/src/Perlang.Interpreter/Perlang.Interpreter.csproj : error NU3028: Package 'StyleCop.Analyzers.Unstable <IP_ADDRESS>1' from source 'https://api.nuget.org/v3/index.json': The repository primary signature's timestamping certificate is not trusted by the trust provider. [/usr/home/per/git/perlang/Perlang.sln]
  Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json':
  Signature type: Repository
  Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json':   Subject Name: CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US
  Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json':   SHA256 hash: 0E5F38F57DC1BCC806D8494F4F90FBCEDD988B46760709CBEEC6F4219AA6157D
  Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json':   Valid from: 04/10/2018 00:00:00 to 04/14/2021 12:00:00
/usr/home/per/git/perlang/src/Perlang.Interpreter/Perlang.Interpreter.csproj : error NU3037: Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json': The repository primary signature validity period has expired. [/usr/home/per/git/perlang/Perlang.sln]
/usr/home/per/git/perlang/src/Perlang.Interpreter/Perlang.Interpreter.csproj : error NU3028: Package 'JetBrains.Annotations 2020.2.0-eap' from source 'https://api.nuget.org/v3/index.json': The repository primary signature's timestamping certificate is not trusted by the trust provider. [/usr/home/per/git/perlang/Perlang.sln]

I remember there was a timestamping related issue on Debian systems a few months ago (https://github.com/NuGet/Home/issues/10491). This probably has similar root causes.... or what do you think? :thinking:

whew! so, yeah I should add some instructions there that are not covered elsewhere (https://github.com/dotnet/runtime/blob/main/docs/workflow/requirements/freebsd-requirements.md#running-on-freebsd). generally dotnet needs these depends to run:
libunwind icu libinotify
Recently, lttng-ust got removed from pkg because of package incompatibilities. dotnet should run OK without it. The good news, dotnet/runtime has already removed it as a build depend but it needs to be manually backported by people building the SDK. (dotnet 6.02 was recently released so if I get some time over the weekend ill put out an SDK for it)
For building packages, you also need openssl ca_root_nss if restore has to pull from the internet. This will work until you hit Microsoft's NuGet repos. Long story short: Signature verification is disabled on Linux and OSX due to the removal of the certs that Microsoft uses on "older" packages because NSS blacklisted a rootcert they use. Side note: The old "Let's Encrypt" cert can cause problems but deleting the now-expired cert should resolve that.

Actual fix:
an actual fix to disable verification under FreeBSD was merged in but is unlikely make it into builds until SDK 6.0.3xx (6.0.2xx if we are lucky). This is also something that can not be manually changed as its handled by the NuGet repos and not anything directly in dotnet's runtime/aspnetcore/installer repos

Thanks! :bow: :+1: So it was indeed the same root cause as the Debian one I think; there is even a blog post that describes that problem more in depth: https://devblogs.microsoft.com/nuget/net-5-nuget-restore-failures-on-linux-distributions-using-nss-or-ca-certificates/
Anyway, running these commands:

mv /usr/share/certs/blacklisted/VeriSign_Universal_Root_Certification_Authority.pem /usr/share/certs/trusted
certctl rehash

...seemed to make things work much better with these NuGet sources. :tada: And btw, thanks for making this very clear:

WARNING: You are basically trusting an otherwise blacklisted rootcert.

With these changes in place, the Perlang tooling builds without any obvious problems (note, this is in the Debug configuration without R2R or anything like that enabled yet):
[20:25:00] per@freebsd-test:~/git/perlang (master) $ make
./scripts/update_common_constants.rb `pwd`
/usr/home/per/git/perlang/src/Perlang.Common/CommonConstants.Generated.cs updated
dotnet build
Microsoft (R) Build Engine version 17.0.0+c9eb9dd64 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
  Restored /usr/home/per/git/perlang/src/Perlang.Tests.Architecture/Perlang.Tests.Architecture.csproj (in 21.04 sec).
  Restored /usr/home/per/git/perlang/src/Perlang.Tests.Integration/Perlang.Tests.Integration.csproj (in 21.04 sec).
  Restored /usr/home/per/git/perlang/src/Perlang.Stdlib/Perlang.Stdlib.csproj (in 4 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj (in 2 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Interpreter/Perlang.Interpreter.csproj (in 2 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.ConsoleApp/Perlang.ConsoleApp.csproj (in 1.17 sec).
  Restored /usr/home/per/git/perlang/src/Perlang.Common/Perlang.Common.csproj (in 5 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Tests/Perlang.Tests.csproj (in 4.76 sec).
  Perlang.Common -> /usr/home/per/git/perlang/src/Perlang.Common/bin/Debug/net6.0/Perlang.Common.dll
  Perlang.Tests.Architecture -> /usr/home/per/git/perlang/src/Perlang.Tests.Architecture/bin/Debug/net6.0/Perlang.Tests.Architecture.dll
  Perlang.Stdlib -> /usr/home/per/git/perlang/src/Perlang.Stdlib/bin/Debug/net6.0/Perlang.Stdlib.dll
  Perlang.Parser -> /usr/home/per/git/perlang/src/Perlang.Parser/bin/Debug/net6.0/Perlang.Parser.dll
  Perlang.Interpreter -> /usr/home/per/git/perlang/src/Perlang.Interpreter/bin/Debug/net6.0/Perlang.Interpreter.dll
  Perlang.ConsoleApp -> /usr/home/per/git/perlang/src/Perlang.ConsoleApp/bin/Debug/net6.0/perlang.dll
  Perlang.Tests.Integration -> /usr/home/per/git/perlang/src/Perlang.Tests.Integration/bin/Debug/net6.0/Perlang.Tests.Integration.dll
  Perlang.Tests -> /usr/home/per/git/perlang/src/Perlang.Tests/bin/Debug/net6.0/Perlang.Tests.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:46.14

Running the result also seems to work (we'll need to make it distinguish between different kind of unices at some point, because Unix <IP_ADDRESS> (on FreeBSD) and Unix <IP_ADDRESS> (on my Debian GNU/Linux with kernel 5.9.0-5) isn't very clear. :grin:):
[20:25:51] per@freebsd-test:~/git/perlang (master) $ /usr/home/per/git/perlang/src/Perlang.ConsoleApp/bin/Debug/net6.0/perlang -V
Perlang 0.1.0-dev.215 (built from git commit 4afdce4) on .NET 6.0.1

  Number of detected (v)CPUs: 2
  Running in 64-bit mode: True
  Operating system info: Unix <IP_ADDRESS>

I'll also do some more testing in a minute, again posting that in a separate comment to allow people to follow this in real time. :slightly_smiling_face:

Alright, so here are some more results of my testing:
Running the REPL
Seems to work pretty well, but backspace doesn't properly print an erase character (it moves the character one step to the right), so the editing experience isn't that great yet:
[20:32:32] per@freebsd-test:~/git/perlang (master) $ /usr/home/per/git/perlang/src/Perlang.ConsoleApp/bin/Debug/net6.0/perlang
Perlang Interactive REPL Console (0.1.0-dev.215, built from git commit 4afdce4)
> 2 ** 32
4294967296
> 42 * 5 - 3
207
> print "hej hopp"
hej hopp
> quit

Running the tests
Seems to work just fine. Some tests are skipped, but that's expected.
[20:34:09] per@freebsd-test:~/git/perlang (master) $ make test
dotnet test --configuration Release
  Determining projects to restore...
  Restored /usr/home/per/git/perlang/src/Perlang.Parser/Perlang.Parser.csproj (in 420 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Interpreter/Perlang.Interpreter.csproj (in 4 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.ConsoleApp/Perlang.ConsoleApp.csproj (in 11 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Common/Perlang.Common.csproj (in 3 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Tests.Integration/Perlang.Tests.Integration.csproj (in 49 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Tests/Perlang.Tests.csproj (in 543 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Stdlib/Perlang.Stdlib.csproj (in 2 ms).
  Restored /usr/home/per/git/perlang/src/Perlang.Tests.Architecture/Perlang.Tests.Architecture.csproj (in 38 ms).
  Perlang.Common -> /usr/home/per/git/perlang/src/Perlang.Common/bin/Release/net6.0/Perlang.Common.dll
  Perlang.Parser -> /usr/home/per/git/perlang/src/Perlang.Parser/bin/Release/net6.0/Perlang.Parser.dll
  Perlang.Tests.Architecture -> /usr/home/per/git/perlang/src/Perlang.Tests.Architecture/bin/Release/net6.0/Perlang.Tests.Architecture.dll
Test run for /usr/home/per/git/perlang/src/Perlang.Tests.Architecture/bin/Release/net6.0/Perlang.Tests.Architecture.dll (.NETCoreApp,Version=v6.0)
Microsoft (R) Test Execution Command Line Tool Version 17.0.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.

Passed!  - Failed:     0, Passed:     1, Skipped:     0, Total:     1, Duration: < 1 ms - /usr/home/per/git/perlang/src/Perlang.Tests.Architecture/bin/Release/net6.0/Perlang.Tests.Architecture.dll (net6.0)
  Perlang.Stdlib -> /usr/home/per/git/perlang/src/Perlang.Stdlib/bin/Release/net6.0/Perlang.Stdlib.dll
  Perlang.Interpreter -> /usr/home/per/git/perlang/src/Perlang.Interpreter/bin/Release/net6.0/Perlang.Interpreter.dll
  Perlang.ConsoleApp -> /usr/home/per/git/perlang/src/Perlang.ConsoleApp/bin/Release/net6.0/perlang.dll
  Perlang.Tests.Integration -> /usr/home/per/git/perlang/src/Perlang.Tests.Integration/bin/Release/net6.0/Perlang.Tests.Integration.dll
Test run for /usr/home/per/git/perlang/src/Perlang.Tests.Integration/bin/Release/net6.0/Perlang.Tests.Integration.dll (.NETCoreApp,Version=v6.0)
Microsoft (R) Test Execution Command Line Tool Version 17.0.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:02.35]     Perlang.Tests.Integration.Return.in_method [SKIP]
  Skipped Perlang.Tests.Integration.Return.in_method [1 ms]
[xUnit.net 00:00:02.69]     Perlang.Tests.Integration.Assignment.AssignmentTests.this_is_not_a_valid_assignment_target [SKIP]
  Skipped Perlang.Tests.Integration.Assignment.AssignmentTests.this_is_not_a_valid_assignment_target [1 ms]
[xUnit.net 00:00:02.94]     Perlang.Tests.Integration.Assignment.AssignmentTests.assignment_on_right_hand_side_of_variable_is_right_associative [SKIP]
  Skipped Perlang.Tests.Integration.Assignment.AssignmentTests.assignment_on_right_hand_side_of_variable_is_right_associative [1 ms]
[xUnit.net 00:00:04.16]     Perlang.Tests.Integration.Classes.ClassesTests.duplicate_class_name_throws_expected_error [SKIP]
[xUnit.net 00:00:04.16]     Perlang.Tests.Integration.Classes.ClassesTests.class_name_clash_with_variable_throws_expected_error [SKIP]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.duplicate_class_name_throws_expected_error [1 ms]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.class_name_clash_with_variable_throws_expected_error [1 ms]
[xUnit.net 00:00:04.16]     Perlang.Tests.Integration.Classes.ClassesTests.class_name_clash_with_function_throws_expected_error [SKIP]
[xUnit.net 00:00:04.23]     Perlang.Tests.Integration.Classes.ClassesTests.empty_class_can_be_accessed_by_name [SKIP]
[xUnit.net 00:00:04.23]     Perlang.Tests.Integration.Classes.ClassesTests.can_chain_method_calls_for_static_method [SKIP]
[xUnit.net 00:00:04.23]     Perlang.Tests.Integration.Classes.ClassesTests.class_name_clash_with_native_class_throws_expected_error [SKIP]
[xUnit.net 00:00:04.23]     Perlang.Tests.Integration.Classes.ClassesTests.class_name_clash_with_native_object_throws_expected_error [SKIP]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.class_name_clash_with_function_throws_expected_error [1 ms]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.empty_class_can_be_accessed_by_name [1 ms]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.can_chain_method_calls_for_static_method [1 ms]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.class_name_clash_with_native_class_throws_expected_error [1 ms]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.class_name_clash_with_native_object_throws_expected_error [1 ms]
[xUnit.net 00:00:04.30]     Perlang.Tests.Integration.Classes.ClassesTests.can_call_static_method [SKIP]
[xUnit.net 00:00:04.30]     Perlang.Tests.Integration.Classes.ClassesTests.can_get_reference_to_static_method [SKIP]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.can_call_static_method [1 ms]
  Skipped Perlang.Tests.Integration.Classes.ClassesTests.can_get_reference_to_static_method [1 ms]
[xUnit.net 00:00:12.76]     Perlang.Tests.Integration.Var.VarTests.local_from_method [SKIP]
  Skipped Perlang.Tests.Integration.Var.VarTests.local_from_method [1 ms]

Passed!  - Failed:     0, Passed:   480, Skipped:    13, Total:   493, Duration: 13 s - /usr/home/per/git/perlang/src/Perlang.Tests.Integration/bin/Release/net6.0/Perlang.Tests.Integration.dll (net6.0)
  Perlang.Tests -> /usr/home/per/git/perlang/src/Perlang.Tests/bin/Release/net6.0/Perlang.Tests.dll
Test run for /usr/home/per/git/perlang/src/Perlang.Tests/bin/Release/net6.0/Perlang.Tests.dll (.NETCoreApp,Version=v6.0)
Microsoft (R) Test Execution Command Line Tool Version 17.0.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.

Passed!  - Failed:     0, Passed:    38, Skipped:     0, Total:    38, Duration: 1 s - /usr/home/per/git/perlang/src/Perlang.Tests/bin/Release/net6.0/Perlang.Tests.dll (net6.0)

Next steps
We should try cross-building this on Linux as the next step; I won't be looking into this right now so if you like, the task is up for grabs. Otherwise I'll probably look into it in the next few weeks. Should be roughly following these steps from your guide:

Patch in the support for FreeBSD RID.
Add the NuGet packages: Microsoft.NETCore.App.Runtime.freebsd-x64.VERSION.nupkg and/or Microsoft.NETCore.App.Host.freebsd-x64.VERSION.nupkg. (Question: should we just self-host these or is there some reliable (over time) URL where we could download them in CI?)
Add CI scripts for the above.

The way this currently works for Linux/macOS/Windows is as follows: https://github.com/perlang-org/perlang/blob/4afdce43260d0de3cba692a01842fc1f4487faf7/.github/workflows/publish-packages.yml#L44-L58
We use a build matrix for these, with which we can easily support both arm, arm64 and x64 on a few different platforms. Once FreeBSD support has landed in .NET SDK proper, we should be able to add it to the matrix just like all the others, but for now we probably have to do a bit of a manual hack for this. This is perfectly fine with me, we'll just remove the hack once we no longer need it. :+1:

@Thefrank From the top off your head, what are the odds that official support for FreeBSD will get merged into https://github.com/dotnet/runtime/ and released along with .NET 7? :thinking: I guess just waiting until there is the easiest way out here... once it's included in an official release it should be a trivial oneliner to support it from our POV (just adding it to the CI config and off we go). So if that's like to happen soon, I might just end up until .NET 7 gets released later this year to minimize my own effort.

@perlun chance of FreeBSD being officially supported is low to none for net7. It still has test failures and would need a good amount of effort put forth by Microsoft to add FreeBSD VMs to their CI system.
The advantage the FreeBSD community has from it NOT being officially supported is that we can drop older versions of FreeBSD from support as they move EOL and add in features from newer versions much faster than an officially supported platform would be able to.

@Thefrank Sorry for the late reply. Understand. :+1: I can also understand why this can be an advantage for you and others in the FreeBSD community.
From my POV, things might be a bit different. I am thinking about ease of applying new .NET releases (.NET 7, .NET 8, .NET 9 and so forth). For all our current platforms (linux-arm, linux-arm64, linux-x64, osx-arm64, osx-x64, win-x64), we can cross-build from GitHub Actions standard runners (ubuntu-latest), and always expect things to "just work". The amount of supporting these targets (and potentially others in the future like win-arm64) is really quite minimal, given that the heavy lifting is already taken care of by the .NET team (of which I am very thankful. :pray:)
I think this is perhaps also why I'm a bit hesitant to bring in FreeBSD at a too-early stage, when the platform isn't officially supported from upstream. I might be willing to let myself be persuaded if there was a contributor I could trust willing to say "I'll take care of ensuring that it always work, at all times". But given the early stage of the language itself (there is basically not a single person in the world developing programs with Perlang at the moment. :joy: I haven't even myself yet gone further than the point of writing Perlang code in the Perlang-based integration tests, except for a few extremely trivial Perlang-based program(s) which I'm using sparsely) we don't really have that kind of contributors in the project yet.
So... "Later" is probably the correct milestone for this for the time being. :slightly_smiling_face:

Some more on this topic: since our current effort is focusing on #406, I think this will be delayed a bit. Once we have the compiled mode (first via intermediate C++ compilation, then potentially via a full LLVM backend) in place, supporting FreeBSD should be doable and not much more of an effort than "any other platform", where LLVM is supported.
In other words, spending time on getting this working in our current .NET implementation is pretty much a waste, and getting it done in the #406 world is "too early" until #409 is merged. Once that is in place, supporting FreeBSD is still not easy because the Perlang interpreter/compiler still requires the .NET runtime to be able to run.
We don't have an issue for "making Perlang be self-hosted" AFAIK, but we're reasonably talking about "years" rather than "months" before this can happen. Give me $1,000,000 and a research team and things might change... :stuck_out_tongue:

We don't have an issue for "making Perlang be self-hosted" AFAIK, but we're reasonably talking about "years" rather than "months" before this can happen. Give me $1,000,000 and a research team and things might change... 😛

I'm not yet a millionaire :wink: but here's at least the issue now: #454.


hash comments puts cursor at wrong position

I'm using this extension with Ruby, and it's 99% great.
The issue is that when I'm typing a comment and hit enter, I do get a new comment hash starting on the next line, but the cursor is placed /before/ the hash instead of /after/.
This means I have to manually fix the cursor position in order to keep typing.

I'm experiencing this same behavior when using Crystal.  Specifically, it happens when the 'Single Line Block on Enter' setting is enabled.


Wiring issues of P10 RGB over PxMatrix with no indications

Hello everyone,
I was using one of the examples of Px Matrix library.
The pannel was a P10 board and I tried it with ESP32.
Now I found it hard to wire it up because there was nothing, no pinout literally written or given anywhere so it became very hard.
Somehow when I managed to get through all that I saw that there was not much information available on the wiring part and with what little I could do I managed to print a "Welcome to Px Matrix!" But it was not RGB but just blue..
Can anyone help me understanding what's going wrong?
Thanks to anyone who is reading.

You can search the pins graph on GOOGLE about ESP32 and HUB75. By the way, some P10 boards using HUB08.
If there are letter show on the screen but lack of color, check the R1, G1 B1 data inputs


{Network/Compute} Change default values to Standard for LB options

Related command

az network public-ip create
az network lb create
az vm create
az vmss create
Description

close: https://github.com/Azure/azure-cli/issues/27121
close: https://github.com/Azure/azure-cli/issues/27123
close: https://github.com/Azure/azure-cli/issues/27254
close: https://github.com/Azure/azure-cli/issues/27255
Testing Guide

History Notes

yanzhudd
Member
yanzhudd commented on Sep 16 •
Related command
az network public-ip create
az network lb create
az vm create
az vmss create
Description
Add warning messages for Basic options removal.
Feature requests:
https://github.com/Azure/azure-cli/issues/27121
https://github.com/Azure/azure-cli/issues/27123
https://github.com/Azure/azure-cli/issues/27254
https://github.com/Azure/azure-cli/issues/27255
Testing Guide
History Notes
[Network] BREAKING CHANGE: az network public-ip create: Change default value to Standard for LB options
[Network] BREAKING CHANGE: az network lb create: Change default value to Standard for LB options
[Compute] BREAKING CHANGE: az vm create: Change default value to Standard for LB options
[Compute] BREAKING CHANGE: az vmss create: Change default value to Standard for LB options

This checklist is used to make sure that common guidelines for a pull request are followed.

[ ] The PR title and description has followed the guideline in Submitting Pull Requests.

[ ] I adhere to the Command Guidelines.

[ ] I adhere to the Error Handling Guidelines.

Network/Compute


feat(barchart): allow to render charts smaller than 3 lines

Add an internal structure LabelInfo, which stores the reserved height for the labels (0, 1 or 2) and also the state of the labels, whether they will be shown or not.
Add internal property to the Bar transformed_value, which is used only for in the vertical charts. This value is needed in 2 reasons:

to draw the vertical bar
to draw the bar value or text_value. If the transformed_value is below 8 and the bar_width is 1, then the value will not be printed

transformed_value is line height multiplied by 8.
(8 is the number of element of symbols::bar::Set struct)
fixes #513

Hey,
I'd really like to see the BarChart logic to be simplified, so took a stab at partially refactoring this into the following. It's incomplete and untested (more of an idea than a full implementation). I think this approach it's this leads to the code being a lot more  (subjectively) maintainable and readable as there's less reliance on temporal changes to state (e.g. remove_invisible_groups_and_bars and calculate_transformed_value). The other core simplification is explicitly splitting the layout and rendering tasks so that each part is much clearer, this avoids spreading the layout between remove_invisible_groups_and_bars and the render_{horizontal,vertical}_bars() functions.
The other part that I'd suggest is moving away from is testing private methods like remove_invisible_groups_and_bars and label_info. Instead, it's more important to test the rendering of each scenario than the internals of how we got there. By testing from the outside of the unit, rather than testing the internals, it makes it easier to refactor the internals for maintainability / readability / performance as necessary.
impl<'a> Widget for BarChart<'a> {
    fn render(mut self, mut area: Rect, buf: &mut Buffer) {
        buf.set_style(area, self.style);
        self.render_block(area, buf);
        let area = self.layout_block(area);
        if area.is_emtpy() || self.groups.is_empty() || self.bar_width == 0 {
            return;
        }
        match self.direction {
            Direction::Vertical => self.render_vertical(area, buf),
            Direction::Horizontal => self.render_horizontal(area, buf),
        }
    }
}

impl<'a> BarChart<'a> {
    fn render_block(&self, area: Rect, buf: &mut Buffer) {
        self.block.as_ref().map(|&block| block.render(area, buf));
    }

    fn layout_block(&self, area: Rect) -> Rect {
        self.block
            .as_ref()
            .map_or_else(|| area, |&block| block.inner(area))
    }

    fn render_vertical(self, area: Rect, buf: &mut Buffer) {
        let max_value = self.max_value();
        let layout = self.layout_vertical(area);
        let (bar_height, label_height, group_label_height) = self.heights(area);
        for (group, group_area) in self.groups.iter().zip(layout) {
            group.render_vertical_bars(
                max_value,
                bar_height,
                self.bar_style,
                self.value_style,
                group_area,
                buf,
            );
            group.render_vertical_labels(label_height, self.label_style, group_area, buf);
            group.render_vertical_group_label(
                group_label_height,
                self.label_style,
                group_area,
                buf,
            );
        }
    }

    /// Returns a Rect for each group that will contain all the bars of this group.
    fn layout_vertical(&self, area: Rect) -> Vec<Rect> {
        self.groups
            .iter()
            .map(|g| g.layout_vertical(area, self.bar_width, self.bar_gap))
            .scan(0, |x, mut group_area| {
                // layout the groups from left to right ensuring that the group width is not
                // greater than the available width. Groups beyond the available width are
                // truncated
                group_area.x += *x;
                group_area.width = group_area.width.min(area.width.saturating_sub(*x));
                *x = x
                    .saturating_add(group_area.width)
                    .saturating_add(self.group_gap);
                Some(group_area)
            })
            .collect()
    }

    fn heights(&self, area: Rect) -> (u16, u16, u16) {
        let has_group_labels = self.groups.iter().any(BarGroup::has_label);
        let has_bar_labels = self.groups.iter().any(BarGroup::has_bar_labels);
        // ensure that the height of the leftover area is at least 1 so that the bars can be
        // rendered, and that labels get precedence over group labels
        let bars_height = area
            .height
            .saturating_sub(has_group_labels as u16 + has_bar_labels as u16)
            .max(1);
        let labels_height = area.height.saturating_sub(bars_height).min(1);
        let group_label_height = area
            .height
            .saturating_sub(bars_height)
            .saturating_sub(labels_height)
            .min(1);
        (bars_height, labels_height, group_label_height)
    }

    fn max_value(&self) -> u64 {
        self.max
            .or_else(|| self.groups.iter().flat_map(BarGroup::max).max())
            .unwrap_or_default()
            .max(1)
    }

Does this make more sense?

I think this approach it's this leads to the code being a lot more (subjectively) maintainable and readable as there's less reliance on temporal changes to state (e.g. remove_invisible_groups_and_bars and calculate_transformed_value).

I agree. I removed calculate_transformed_value. But I am still in love with the remove_invisible_groups_and_bars. As we agreed once, you will someday eliminate my beloved anti pattern function :cry: .

The other part that I'd suggest is moving away from is testing private methods like remove_invisible_groups_and_bars and label_info. Instead, it's more important to test the rendering of each scenario than the internals of how we got there. By testing from the outside of the unit, rather than testing the internals, it makes it easier to refactor the internals for maintainability / readability / performance as necessary.

done

Does this make more sense?

maybe :smile_cat:
I don't like the suggested heights function much. It is always iterating over everything even if it is unnecessary. Readability is maybe depending on the person not better than the label_info
Anyway this is a second try, it is for sure not what you expect. But please, if it is far from your expectation or making the code worse, then don't hesitate to close the PR. Of course I will be happy to tweek/change small things, if this PR is more or less still acceptable.
(I appreciate very much your taking the time and maintaining this wonderful library :heart:  )

I don't like the suggested heights function much. It is always iterating over everything even if it is unnecessary. Readability is maybe depending on the person not better than the label_info

I don't think I quite understand this comment. The heights function has the exact effect and negligible difference in perfo for small N (which is what we're dealing with at the terminal) as the label_info function.

@joshka I agree with everything you said. Maybe this weekend I will try to create a PR which removes my nice function remove_invisible_groups_and_bars. I will try to get your suggestions implemented.

Merged with a small rewording of the commit message


Added Typescript definition

Closes #93

@Naktibalda can you use 2 spaces indentation?

Done.
Please squash commits on merge.


Segmentation Fault from module/run.py when running uri-input.py

I am trying to follow the instructions from this Savant tutorial: https://www.youtube.com/watch?v=jIntvew3QaI
When I start the uri-input.py script from this doc under the VS Code section (https://github.com/insight-platform/Savant/tree/develop/samples/template), I get a Segmentation Fault in the module/run.py output.
 INFO  insight::savant::gstreamer::runner                   > The pipeline is initialized and ready to process data. Initialization took 0:00:19.579966.
 INFO  insight::savant::healthcheck::status                 > Setting module status to ModuleStatus.RUNNING.
 INFO  insight::savant::utils::zeromq                       > Starting ZMQ source.
 INFO  insight::savant::savant_rs_video_decode_bin          > Adding branch with source test
 INFO  insight::savant::savant_rs_video_decode_bin          > Branch with source test added
 INFO  insight::savant::savant_rs_video_demux               > Created new src pad for source test: src_test.
Running in WSL
 INFO  insight::savant::template                            > Added source test
 INFO  insight::savant::src::module::custom_pyfunc          > frame meta object: <savant.meta.object.ObjectMeta object at 0x7fe0b63a8c10>
 INFO  insight::savant::src::module::custom_pyfunc          > Processing frame #0 of source test..
Segmentation fault

My dev container setup uses docker desktop with WSL 2 backend, which is where I am running the jaeger and always-on-sink containers. The always-on-sink container uses the latest version of the savant-adapters-deepstream image - ghcr.io/insight-platform/savant-adapters-deepstream.
I'd like to fix this error as soon as possible. What is the cause of this error? How can I fix it? Please let me know as soon as possible.

Hello. WSL2 is not supported by DeepStream 6.4 and Savant, either.

How do I install native Ubuntu 22.04 on Windows? I tried using Oracle VirtualBox but it has no GPU passthrough. Do you know of any VM that can access my windows GPU?

GPU pass-through is possible with Linux in Windows. Unfortunately, we cannot help with that.


Test.py

Awesome, got it on here!
A few small things:

I think the file should have a .py extension, since its Python code. Usually code files don't include spaces in their names as well (Since sometimes they can be annoying to use from the command line).
Maybe the file could also be put into its own test directory (Like test/integrationTest.py).

A few bigger things:

Is it possible to make this work with Firefox as well as Chrome?
This script looks like it doesn't actually load our website


Fixture images not loaded with initial Docker setup

I followed the steps for the initial Docker setup outline in the README.
I do get a working site, but all images are missing.
Not sure if there is some config that I missed.

Looks like running /venv/bin/python ./manage.py wagtail_update_image_renditions fixes this.