feat(cli): better image pull display

Done:

imagehelper with customImagePull function that has a callback for display
CLI has a display function implemented
removed dead code

Something is messed up with git, gonna fix soon.

Codecov Report
Patch coverage: 1.17% and project coverage change: +0.43 :tada:

Comparison is base (d921c80) 18.04% compared to head (d1662f1) 18.47%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@             Coverage Diff             @@
##           develop     #584      +/-   ##
===========================================
+ Coverage    18.04%   18.47%   +0.43%
===========================================
  Files           54       55       +1
  Lines         5082     4963     -119
===========================================
  Hits           917      917
+ Misses        4138     4019     -119
  Partials        27       27

Impacted Files
Coverage Δ

golang/internal/helper/image/types.go
0.00% <0.00%> (ø)

golang/pkg/builder/container/container_builder.go
0.00% <0.00%> (ø)

golang/pkg/dagent/utils/container.go
0.00% <ø> (ø)

golang/internal/helper/image/image.go
19.71% <2.08%> (+7.32%)
:arrow_up:

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

@nandor-magyar updated the branch to the latest dev

Tested with pure system. Got the following when used make upd
❯ make upd
cd golang && \
	make upd
cd cmd/dyo && \
	go run . --disable-crux --disable-crux-ui --image-tag latest --prefix dyo-latest up
1:22PM INF There is a newer version of the container engine in use, please consider updating. error="server is outdated"
1:22PM INF Pull docker.io/library/traefik:v2.9 status: ✓ pull complete
1:22PM ERR Failed to start dyrector.io stack container=traefik
1:22PM FTL error="container was not created"


virt-api: replace hardcoded patch operations with patchset

What this PR does
Use the patch package to replace the hardcoded patch operations. This improves the readability and make the code more cohesive.
Before this PR:
Hardcoded operation in virt-api package.
After this PR:
Replaced all the patch operations with the patch.PatchSet in the virt-api package.
Fixes #
Partially address: https://github.com/kubevirt/kubevirt/issues/11654
N.B.
The vmi mutation webhook now does not return the patch
field if no patch are requested. Previously, it always
returns a patch, eventually "null".
Release note

NONE

/cc @alicefr @0xFelix

@alicefr @0xFelix I addressed your comments (and more).
If I haven't missed anything, now there aren't any hardcode operations in the whole virt-api pkg (test file included).
Actually, there is only one; but it that case the test purpose is to check an invalid patch request, and the patchSet does not allow us to create wrong patch (obviously).
For reference this is the test:
It("should reject an invalid patch", func() {
	const invalidPatch = `{"op": "remove", "path": "/spec/running" : "illegal-field"}`
	restore.Spec.Patches = []string{invalidPatch}

	ar := createRestoreAdmissionReview(restore)
	resp := createTestVMRestoreAdmitter(config, vm, snapshot).Admit(ar)
	Expect(resp.Allowed).To(BeFalse())
	Expect(resp.Result.Details.Causes).To(HaveLen(1))
	Expect(resp.Result.Details.Causes[0].Field).To(Equal("spec.patches"))
})

PTAL. Thank you!

Thank you @0xFelix, PTAL

Looks good to me
/approve


Make sample jumping sfx of rubble falling

We have a sliding animation like this:

And at points the character may slide down a rubble of rocks that may look like this:

So, again, need the sfx for the rock rubbles that may fall when a character is sliding on them.

Rock Slide.zip
@Pseudo-64 @vitormaduro


don't lose data during a prom->cortex network disruption

Cortex is great at keeping your metric data. But it can only keep what it receives, and atm a prometheus sending to cortex will simply throw data away on network disruption.

Yeah, that's by design on the Prometheus side so far. I think we'd be reluctant to introduce any meaningful retry buffers there (they can really blow Prometheus's memory up, plus they only help for a very brief outage anyways).

Think of buffers in the app as extensions of the tcp networking socket buffers.

There are already small buffers in Prometheus that can be quite easily
extended; in practice they run out very quickly.
We should define what type of error codes Prometheus will retry the sending
of batches on.  And make the buffers configurable. And probably do
something about the queue sharding, as it only works up to a certain rate
of samples/s given upstream latency.
On Sat, 4 Feb 2017 at 09:10, Matthias Radestock<EMAIL_ADDRESS>wrote:

Think of buffers in the app as extensions of the tcp networking socket
buffers.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/weaveworks/cortex/issues/263#issuecomment-277430505,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAbGhRGZLeumF7SYmcxTuRMQZ3ssvZ7Xks5rZEB3gaJpZM4L2x4m
.

Filed https://github.com/prometheus/prometheus/issues/2512 upstream, hoping to work on it this week.

Upstream is merged


Add scenarios based on legacy versions and legacy specifiers

I'm willing to write these scenarios myself, but I'm making an issue first in case of any objection, in particular because this is about following the spec, and I beleive uv deviates from the spec for this behavior to be more compatible with the ecosystem:

With requirement A and A has a new version with a non-legacy version and an old version with a legacy version then A should successfully resolve to the new non-legacy version
With requirement A and A has a new version with a legacy version and an old version with a non-legacy version then A should successfully resolve to old non-legacy version
With requirement A and A only has legacy versions then A should not resolve
With a requirement on A that involves a legacy version in the specifier then that requirement should not resolve
Same as all of above but the where A depends on B and B suffers from the legacy versions/specifiers

Note that in uv, we have lenient requirement and lenient version types with a hardcoded set of fixups and we don't make a different and we currently don't track whether the fixups were used or not, while errors outside of these are already skipped.

Sounds good to me! Although I'm not sure what we should do with the outcomes considering that pip and uv both support lenient parsing. Perhaps we can have a strict parse mode that we enable for these particular scenarios.

pip is very likely to stop accepting legacy versions and specifiers on the next release.


Try to add bedrock support

Seems like when using Geyser to add bedrock support, books don't open with the commands (with physical books they do). If you can see if you can do something to fix it, maybe hook in to the floodgate API?

Was a duplicate issue


Refactor command package to remove globals and follow constructor pattern

Summary
This PR attempts to update the command package so that Syft moves away from global package variables and instead is architected around command constructors with functional options.
Changes

package cmd separated into cli with commands.go organizing cli construction. Individual commands have constructors along with new packages named as command name.
EX:import github.com/anchore/syft/cmd/syft/cli/attest includes attest.Run as the execution path.
package options built to describe options that can be decorated onto built commands
eventloop given its own package
remove cli options and elevate to top of config.Application struct
update application configuration to use dependency injection of viper and config object

TODO:

[x] Update tests in new packages to cover constructors
[x] Review removed code and make commits that restore parity with main
[x] Review changes and add summary of changes to config package
[x] Review completion changes and fix generation for https://github.com/anchore/syft/issues/962

Signed-off-by: Christopher Phillips<EMAIL_ADDRESS>

This is fantastic @spiffcs — what an upgrade for the code... 🚀
Approving this! ✅
It looks like there's still some follow-up needed here. I asked a couple of questions, and I saw there were a few existing questions/nits that aren't answered yet. But nothing that's left seems like a big lift at this point.
I also have two overall questions re: this PR:

Since main.go has been moved to another package, this breaks installation for users that build from source using go install github.com/anchore/syft@latest. We don't list this installation method in our README documentation, so no change is needed here. But it is a nice feature of Go 1.16+, and I've used it several times. Could we do a cursory check of uses of this installation method just so we have a heads up on potential broken workflows? (My guess is we're not using this internally.)

I see some PR comments that have "TODO", and the comments are resolved, and the code hasn't changed. I want to make sure I parse that correctly. Does that mean that no code change is needed at this point? Such as it was just a thing to look into, but you've done that outside of the code?

There are some I reconciled outside the code and realized they were not as big of a deal as when I made the comment. I think I responded to each conversation you commented on so we can follow up on those threads.
TLDR: you're right and thanks for pointing those out. I think they got resolved accidentally as I was going through some of my previous self review.


show better error message on url parse failure

Relates to #3

Codecov Report
Base: 80.24% // Head: 80.07% // Decreases project coverage by -0.18% :warning:

Coverage data is based on head (2704c66) compared to base (bf15c1d).
Patch coverage: 0.00% of modified lines in pull request are covered.

:exclamation: Current head 2704c66 differs from pull request most recent head a3ab2a5. Consider uploading reports for the commit a3ab2a5 to get more accurate results

Additional details and impacted files
@@            Coverage Diff             @@
##             main       #6      +/-   ##
==========================================
- Coverage   80.24%   80.07%   -0.18%
==========================================
  Files          59       59
  Lines        1853     1857       +4
==========================================
  Hits         1487     1487
- Misses        366      370       +4

Impacted Files
Coverage Δ

src/cli/plugins/install.rs
58.33% <0.00%> (-11.67%)
:arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Create global state manager for modal windows

https://github.com/evm-nft-minter/interface/pull/16


add suggested code by @John-Kiruba

Update README.md for user credentials setup
Add code to assign the Content-Type explicitly as ' text/plain' of the header fields that are sent via script.

Please check #14


Problem with constructor of tensor

Click to expand!
Issue Type
Bug
Source
source
Tensorflow Version
tf2.9.1
Custom Code
Yes
OS Platform and Distribution
No response
Mobile device
No response
Python version
No response
Bazel version
No response
GCC/Compiler version
No response
CUDA/cuDNN version
No response
GPU model and memory
No response
Current Behaviour?
https://github.com/tensorflow/tensorflow/blob/v2.9.1/tensorflow/core/framework/tensor.cc#L699

There is a problem with the constructor of tensor, passing datatype to shape.

Standalone code to reproduce the issue
Tensor::Tensor(DataType type) : shape_(type), buf_(nullptr) {}

https://github.com/tensorflow/tensorflow/blob/v2.9.1/tensorflow/core/framework/tensor.cc#L699

Relevant log output
No response

@luliyucoordinate,
This issue will move to closed status once the respective PR is merged. Thank you!

@luliyucoordinate,
The related PR which was raised got merged and also the files are also changed with the  set_dtype(type)
https://github.com/tensorflow/tensorflow/pull/57143/files
Tensor::Tensor(DataType type) : shape_(TensorShape({})), buf_(nullptr) {
  set_dtype(type);

Thank you!

OK


Update akka-http-cors to 1.1.2

Updates ch.megard:akka-http-cors from 1.0.0 to 1.1.2.
GitHub Release Notes - Changelog - Version Diff
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Files still referring to the old version number
The following files still refer to the old version number (1.0.0).
You might want to review and update them manually.
README.md
project/Dependencies.scala
project/plugins.sbt

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "ch.megard", artifactId = "akka-http-cors" } ]

labels: library-update, semver-minor, old-version-remains

Superseded by #794.


Move Impress CLI to the Impress core

We can move the CLI tool to the Impress codebase so that it can reuse libraries from IAS and have direct access to it. This will allow more fine-grained control over IAS from the command line and will simplify implementation of new commands for scaffolding, managing separate applications etc. It will also allow to use the impress command as an npm script locally in a project right after installing Impress as a dependency to node_modules which is more convenient for development. Scripts that install IAS as a service will then be either moved to a new package (impress-service, for example) or placed together with deployment scripts.

We need CLI command impress visible everywhere in *nix command line like service or chkconfig, not an npm command.

Not relevant for v2.x


Build fix

Installed pylint in Step [Install dependencies]
Changed Step [Analysing the code with pylint]
Created .pylintrc file that contains the ignore-paths

Note:
Here, you have the option to alter the acceptance rate of the pylint score to pass the build
https://github.com/pwgit-create/StiffyBot/blob/build_fix/.github/workflows/pylint.yml#L35

Wonderful! Thanks a ton Peter! :D


A few different fixes/features

Hello, this plugin was really helpful for us, and trying it we had to tweak it to make it work.
Summary:
Fixes

It should skip virtual modules otherwise it runs into the same kind of issues highlighted here: https://github.com/rollup/rollup-plugin-commonjs/issues/397

It enforces sourcemapping with config.build.sourcemap = true (defaulting to false now in Vite). If disabled, this.getCombinedSourceMap is empty

Feature
Add a cwd option that is getting forwarded to Istanbul matcher, in case your not calling vite command in the same folder
Thanks for the great work!

Hey @AlexandreBonaventure, could you please enable the "Allow edits from maintainers" in the PR.
I have some documentation i want to make and also a commit in the Angular format in order for the CD to publish the package correctly.

@iFaxity Hello, I don't think I have the right permissions to do that ?? (or maybe I'm missing something) I can't see any checkbox here...

Maybe that's because the PR was made in my organization... I can rebase with your changes if that's easier

Could also be because the repo has workflows in both the fork as there are in the main repo. I'll put up a branch with the changes and you can revise them into your PR branch.

sounds good

There should now be a branch named feature-pr-10 on the remote.

@iFaxity I merged it, back to you !

Great stuff @AlexandreBonaventure , thanks for your contribution 🙂👍.


Mimic failed copy module on version 1.2.0

Hi, when i was using Mimic (version 1.2.0) as mock library, i was stumped by this error
** (UndefinedFunctionError) function :cover.compile_beams/1 is undefined or private. Did you mean one of:

      * compile/1
      * compile/2
      * compile_beam/1
      * compile_beam_directory/0
      * compile_beam_directory/1

    :cover.compile_beams([{CoronaNews.Gateway.Mimic.Original.Module, <<70, 79, 82, 49, 0, 0, 16, 208, 66, 69, 65, 77, 65, 116, 85, 56, 0, 0, 2, 31, 0, 0, 0, 43, 47, 69, 108, 105, 120, 105, 114, 46, 67, 111, 114, 111, 110, 97, 78, 101, 119, 115, 46, 71, 97, 116, 101, ...>>}])
    lib/mimic/module.ex:45: Mimic.Module.rename_module/2
    lib/mimic/module.ex:27: Mimic.Module.replace!/1
    lib/mimic.ex:338: Mimic.copy/1
    test/test_helper.exs:1: (file)

only when i revert mimic to version 1.0.0 that this error fixed
Here is code on test_helper.exs
# at test_helper.ex
Mimic.copy(CoronaNews.Gateway)
Application.ensure_started(:mimic)
ExUnit.start()

here is my iex -v
Erlang/OTP 22 [erts-10.6.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]

IEx 1.9.4 (compiled with Erlang/OTP 21)

after some further investigating, it seems caused by using the rather deprecated option applications in mix.exs. This result in :mimic application not started, hence Mimic.Cover.export_private_functions never called. For me it is resolved by changing applications to extra_applications. using Application.ensure_all_started(:mimic) at top of test_helper.exs also work
# before
def application do
    [
      applications: [:httpoison],
      extra_applications: [:logger]
    ]
end
# after
def application do
    [
      extra_applications: [:logger, :httpoison]
    ]
end

Thanks for detailing the issue and the resolution! Cheers 👍


Confusing compilation error for incompatible union type arrays

Description:
Following code,
function test() returns int|string?[] {
    (int|string?)[] y = [1, 2];
    return y;
}

results in the following error,
error: .::union-type-confusion-test.bal:10:12: incompatible types: expected 'int|string?[]', found 'int|string?[]'

Can we improve the error message in this case?

Closing this issue since the error message has been updated and is the following with 1.0.0-alpha
error: .::test.bal:3:12: incompatible types: expected '(int|string?[])', found '(int|string)?[]'

Parentheses are used to group the union in the error messages now. Please reopen if still not clear.


NullReferenceException when using lightbulb extract method

I had the following code:
def testing1():
    a = 1
    b = 2
    yield a
    yield 1

I selected the contents of the method, clicked on lightbulb, selected extract method and got this error:

Any extract method operation that cannot be completed (like above you can't extract yield statements) will cause it to crash before displaying the preview.  I'll mark this as release blocker since we probably have time to fix it and it's potential loss of data.


feat(plugins): add unocss plugin (WIP)

TLDR: unocss is an instant on-demand atomic CSS engine and a joy to use. I believe it can (and should) replace twind as the default atomic CSS engine for fresh.
Context
<EMAIL_ADDRESS>introduced the renderAsync method, which allows calling the asynchronous uno.generate() method as first proposed by @Hladikes (thanks!) but without the workaround. I've tested it for routes, components and islands, and it's working for all (tests are pending).
Checklist
This PR is a WIP... I will continue tomorrow with the following:

[x] enhance defaultConfig
[x] add tests
[x] add docs

Related Issues
https://github.com/denoland/fresh/issues/728
https://github.com/denoland/fresh/issues/290

Hey @marvinhagemeister! From your comment in the August 2023 iteration plan issue (didn't want to pollute that conversation), I'm curious to ask what's your stance on unocss. I find unocss to be a better alternative to twind, as it is not only NOT tied to tailwindcss, but rather CSS framework agnostic. It is also much more flexible for building your own custom CSS framework. The plugin here uses const { css } = await uno.generate(htmlText) at the render step, so that aligns with fresh, but it even has the ability of using it at runtime by loading the unocss engine from a CDN. IMO, the most important advantage of unocss over tailwind-based alternatives is that tailwind is not being tied PostCSS, unocss is "pure javascript".
That being said, I haven't had the time to continue with the to-do items in this PR, but I've been using this plugin extensively and can confirm "it just works".
Eager to hear your opinon, I wonder why most people still try to work with twind in fresh despite the known issues, when unocss could very much be a plug-in replacement (by adding the @unocss/preset-uno which includes TailwindCSS support). I could then take this PR forward 👍🏼

Super excited to have UnoCSS in Fresh. I have some decently sized apps to test this on for regressions (which I will do later on in the review process for this PR). This is much more "fresh"-y in nature and kind of avoids a whole bunch of twind-related issues. I haven't had the chance to look at code yet but huge +1

I'm all for adding support for unocss. I don't have a horse in the race and don't mind which way to create CSS folks use, as long as it works for them and maintenance is low for me 👍

Any chance you could push this forward @miguelrk? I'd love to pick this up if not.

Any chance you could push this forward @miguelrk? I'd love to pick this up if not.

Thanks for the interest and reminder @lino-levan ! I hadn't had time to get back to this. I added some basic docs based on the existing using-twind-v1.md. Not sure how to proceed with testing though, happy if you could take that over.
In any case, do you think we should be defaulting to using the presetUno if no config is provided? This allows simply using the plugin like await start(manifest, { plugins: [unocssPlugin()] }), without having to provide your own config or having a uno.config.ts altogether.
I'm leaning towards removing the defaults, since the defaults are pretty simple an can be manually configured inline in a single line:
import unocssPlugin from "$fresh/plugins/unocss.ts";
import presetUno from "@unocss/preset-uno";

await start(manifest, { plugins: [unocssPlugin({ presets: [presetUno()] })] });```

and also very easily imported from another file:
import unocssPlugin from "$fresh/plugins/unocss.ts";
import unocssConfig from "./uno.config.ts";

await start(manifest, { plugins: [unocssPlugin(unocssConfig)] });```

Hey @miguelrk! I can't seem to get the VSCode extension to work, so my conclusion is that it likely doesn't matter. I think we should have a default config to make migration easy, but we should encourage people to use their own config by making a uno.config.ts. This could mean that they get intellisense on classes in the future which would be nice.

Hmm now that you mention it, the antfu.unocss vscode extension is also not working for me. In any case, if unocss is to replace twind as the default for the fresh init script, then I would agree we should scaffold an initial uno.config.ts. While that's not the case (while unocss is not the default for fresh init), I think its best to indeed remove the "sensible" default to use presetUno, since setup is literally one-line more to set it up yourself, encouraging users to do so, instead of "easing migration" for them.

Hmm now that you mention it @lino-levan, the antfu.unocss vscode extension is also not working for me.

Yeah, we should look into that. I'm sure they'd be happy to accept a PR.

I think its best to indeed remove the "sensible" default to use presetUno, since setup is literally one-line more to set it up yourself, encouraging users to do so, instead of "easing migration" for them.

Sure. Let's do that instead. Having no default doesn't seem unreasonable.

Sure. Let's do that instead. Having no default doesn't seem unreasonable.

Great! I've done that in b397d6f89dcdf9f5133d6daf78a2ae8d34fb634d an updated the docs. Something else that comes to mind?

Is there any reason you can't write a fixture test like we have for twindv1? It should be almost copy-paste.

Oh! Hadn't seen the existing twind fixture. That'll help. I'll add this tomorrow 👍🏼

Outside of tests, this is looking pretty close to ready to me.

Fixture test fixture_unocss_hydrate added in c6e81c3551edf6318602cce373401d3f99b1715e based on twind's and pending comments resolved to bump unocss-related dependencies 👌🏼

@lino-levan let me know if something else comes to mind. In case you missed it, Marvin agreed to update the init script to setup unocss instead of twind once this is merged.

FYI: The CI is failing due to formatting. Running deno fmt locally should resolve that.

FYI: The CI is failing due to formatting. Running deno fmt locally should resolve that.

Thanks for the heads-up @marvinhagemeister , CI should now pass 👍🏼 (it's been in queue for about an hour now). I also added antfu.unocss to .vscode/extensions.json. NOTE: if this indeed replaces twind, then the sastan.twind-intellisense should be removed from that list once that happens.

Am I right in thinking the client doesn't get access to the config you set in uno.config.ts?

Am I right in thinking the client doesn't get access to the config you set in uno.config.ts?

That's true, good catch! This plugin should set the provided config directly in window.__unocss as well. I've been on holidays but will try to get back to this as soon as I can. Otherwise this is looking close to complete 👍🏼
<script>
// pass unocss options
window.__unocss = {
  rules: [
    // custom rules...
  ],
  presets: [
    // custom presets...
  ],
  // ...
}
</script>

It looks like CI is failing because the import map in tests/fixture_unocss_hydrate/deno.json isn't used as expected when type checking. The plugin itself imports @unocss/core (with a different version) directly from an esm.sh url.
I'd suggest it would be good for usability anyway for plugins/unocss.ts to re-export UserConfig. Then the test fixture and user's main.ts can import it from there at the same time as the plugin itself.
Does the import of @unocss/preset-uno in the test fixture's uno.config.ts need to be made absolute? I don't know how the test fixtures are supposed to be used though.
@miguelrk I'd be happy to make a PR to the PR if that's not too weird to do :smile: . I'm very keen to start using this!

@miguelrk I'd be happy to make a PR to your PR branch if that's not too weird to do :smile: . I'm very keen to start using this!

Go ahead! It's perfectly fine by me, otherwise I could get to this again maybe later today or tomorrow 👍🏼

Am I right in thinking the client doesn't get access to the config you set in uno.config.ts?

That's true, good catch! This plugin should set the provided config directly in window.__unocss as well. I've been on holidays but will try to get back to this as soon as I can. Otherwise this is looking close to complete 👍🏼
<script>
// pass unocss options
window.__unocss = {
  rules: [
    // custom rules...
  ],
  presets: [
    // custom presets...
  ],
  // ...
}
</script>

I tried passing the config in to the plugin's runtime entrypoint using the state argument, but it didn't work because the config is full of functions, which can't be serialised to JSON.
Maybe we can transpile/bundle the config file to a JS string using esbuild.transform() and pass that as the state argument? Does that sound sensible @marvinhagemeister ?

@adamgreg yes, that sounds sensible. Plugins can add scripts that are fed to esbuild internally. Both twind plugins do this and can be used as an example on how to do that.
FYI: I've added this PR to the next release cycle. Would really like to replace twind with unocss for the next release.

Great @adamgreg! Thanks for this, I'll get back to my computer on monday, do keep us posted!

@adamgreg yes, that sounds sensible. Plugins can add scripts that are fed to esbuild internally. Both twind plugins do this and can be used as an example on how to do that.
FYI: I've added this PR to the next release cycle. Would really like to replace twind with unocss for the next release.

Ah, I see Luca dealt with this same issue for the twind plugin in pull request https://github.com/denoland/fresh/pull/705 . It relies upon the config/options object containing a URL for its own defining module in a selfURL property. I'll quickly try doing the same in https://github.com/miguelrk/fresh/pull/1 and see if it works out.
This could be a bit non-obvious for someone setting up a new Fresh project, but the twind plugin benefits from the bootstrapping in init.ts. Should UnoCSS be offered as an alternative choice in the init script, as part of this PR?

Let's skip changing the unit script for now. That can happen later in another PR. I'd rather get this in for a while, so that people can test drive it for a week or so. And then we replace twind with unocss in the init script rather than keeping both options around.

I've added a commit to https://github.com/miguelrk/fresh/pull/1 to make the plugin bundle and send the config file. It works, but it's relatively easy to break things by sending Node/Deno-specific code to the browser. In particular, it's possible to end up importing node:process (I think via the unconfig package).
For example, you can manually specify the presetUno preset in your config file, if you import it from "https://esm.sh/@unocss/preset-uno". If you import it from "https://esm.sh/unocss" though, you hit an import of node:process in the browser.
I also don't think it's a great DX to have to extend the config object to add selfURL. Are there any other approaches we could try to get the config into the browser with less footguns? I like the idea of serialising the config object itself to JS, instead of bundling the module containing it, so that the URL is not needed. Maybe that's not reasonable though? I'm very much at the limit of my understanding! Probably time for me to take a step back and leave it to the experts :smile:

I've added a commit to miguelrk#1 to make the plugin bundle and send the config file. It works, but it's relatively easy to break things by sending Node/Deno-specific code to the browser. In particular, it's possible to end up importing node:process (I think via the unconfig package).

Thanks for this @adamgreg ! Nice additions, just merged them 👍🏼

For example, you can manually specify the presetUno preset in your config file, if you import it from "https://esm.sh/@unocss/preset-uno". If you import it from "https://esm.sh/unocss" though, you hit an import of node:process in the browser.

I have had this same issue of node:process before when importing from "https://esm.sh/unocss", but the root cause of this will soon be resolved with native npm: specifier support in Deploy. So maybe you a note/warning in the docs to use each preset's URL e.g. "https://esm.sh/@unocss/preset-uno" is sufficient, at least for now...

I also don't think it's a great DX to have to extend the config object to add selfURL. Are there any other approaches we could try to get the config into the browser with less footguns? I like the idea of serialising the config object itself to JS, instead of bundling the module containing it, so that the URL is not needed.

I agree, it's not the best DX extending the unocss config object... Any ideas @marvinhagemeister, @lino-levan ?

For example, you can manually specify the presetUno preset in your config file, if you import it from "https://esm.sh/@unocss/preset-uno". If you import it from "https://esm.sh/unocss" though, you hit an import of node:process in the browser.

I'm hitting the node:process import when importing anything from https://esm.sh/unocss, so it basically crashes with a separate uno.config.ts. Now I see what you meant with "It works, but it's relatively easy to break things by sending", but for me, it's not even working in my own project 😆... I wonder why directly passing-in the config durin plugin registration didn't lead to this issue, despite using same imports... In any case, this is a blocker if we want to allow auto-loading config from uno.config.ts (which we should do IMO) instead of inlining it.

The unocss package just seems to collect together exports from various @unocss/xx packages. I haven't tested then all, but I know that importing  @unocss/preset-icons brings in a node:process import, but the individual packages for presetUno and presetMini are ok. I think it's something to do with an icon loader, so maybe there's a way around it.
I still think serialising the config object itself on the server (including functions) would be ideal, but I don't know if it's feasible!

I've got a working setup with presetUno and shadcn-ui, including the runtime, I just had to be careful with the import and add the selfURL property, which are not ideal

I've got a working setup with presetUno and shadcn-ui, including the runtime, I just had to be careful with the import and add the selfURL property, which are not ideal

Mind sharing how you achieved this? I keep getting node: import errors with the new setup using uno.config.ts

I realised that the plugin doesn't support UnoCSS transformers, which need to rewrite the HTML. I wrote and tested a function we could use to apply them to htmlText... before realising that the plugin has no way to change the HTML sent to the client! 🤦. @marvinhagemeister would it be at all possible to add this capability to the plugin hooks?

Raised https://github.com/denoland/fresh/issues/1701

https://github.com/unocss/unocss/pull/3040 will make Fresh and UnoCSS happy together on VSCode.

unocss/unocss#3040 will make Fresh and UnoCSS happy together on VSCode.

Huge thanks for this @zhmushan ! From our conversation earlier:

I have completed a quick adaptation of the UnoCSS VSCode plugin with Fresh by directly serializing the Fresh configuration file. For the initial version of the UnoCSS plugin for Fresh, let's temporarily abandon support for uno.config.ts because it would require significant changes to the code of the UnoCSS VSCode plugin.

I wouldn't have an issue with dropping support for uno.config.ts for now if this would require significant changes. That being said, it is sort of a bummer... What specifically is preventing the ContextLoader class supporting uno.config like it already supports fresh.config?

Because we cannot be certain that uno.config is specifically designed for Fresh, separating its original logic from Deno's special handling requires some additional work (although it may not necessarily be complex, there might be boundary conditions to consider). On the other hand, for fresh.config, we can confidently determine that it can be handled use Deno, and the UnoCSS plugin has a designated position for handling framework configuration files. Therefore, only minimal effort is needed to achieve quick adaptation.

@zhmushan I see... I'm still uncomfortable with removing support for uno.config just to get the vscode extension to work, but we can maybe find an alternative/solution...
Alternative 1
If I understand correctly, what prevents us from using uno.config is that the unocss ContextLoader requires a separate (config) file e.g. fresh.config in order to detect it should use the custom transform right? Wouldn't it be safe to assume that ALL deno fresh projects using the plugin will have a fresh.config file (as now required for ALL plugins)? Because if that's the case, the unocss ContextLoader would pick up the fresh.config file, but we could read the config from uno.config instead of from fresh.config. I think its safe to assume that deno fresh projects will have deno-compatible uno.config files, so serialization should still work (not sure what you meant with possible edge cases).
If the above is true, we could import from uno.config by default instead of fresh.config:
// unocss/packages/vscode/deno/fresh.ts
- const { default: freshConfig } = await import(Deno.args[0])
- const unoConfig = freshConfig.plugins.filter(it => it.name === 'unocss')
+ const { default: unoConfig } = await import(Deno.args[0])
console.log(JSON.stringify(unoConfig))

Alternative 2
A simpler workaround (for now) could be declaring the unocss config in uno.config  and simply re-exporting from deno.fresh for unocss to import from.
// uno.config.ts
export default defineConfig({...})

// fresh.config.ts
export { default as unoConfig } from "./uno.config.ts"
export default defineConfig({...})

// unocss/packages/vscode/deno/fresh.ts
const { unoConfig } = await import(Deno.args[0])
const unoConfig = freshConfig.plugins.filter(it => it.name === 'unocss')
console.log(JSON.stringify(unoConfig))

@miguelrk
My PR does not mean permanently giving up on adapting uno.config in the Deno project. It is aimed at quickly enabling UnoCSS and Fresh to work together in the most efficient way possible, and to validate feasibility.
Ideally, uno.config should work in Deno projects. But it is not as straightforward as imagined. It involves the overall architecture of UnoCSS. The crucial code resides here.
The prerequisites for adapting Deno are as follows:

@unocss/config and @unocss/shared-integration should not concern themselves with the runtime.
Recognition of the Deno environment should only be done in @unocss/vscode.
@unocss/vscode should still create the Context using @unocss/shared-integration.

For sending the config to the runtime, could we maybe avoid esbuild and the need for a selfUrl property by using a custom replacer argument to JSON.stringify() to handle functions? Something like this:
const configStr = JSON.stringify(config, (key, value) => (typeof value === "function")? value.toString() : value);

I believe that would allow standard Uno config files without the extra selfUrl property, or allow the config to be defined directly in a fresh.config.ts file or similar.

For sending the config to the runtime, could we maybe avoid esbuild and the need for a selfUrl property by using a custom replacer argument to JSON.stringify() to handle functions? Something like this:
const configStr = JSON.stringify(config, (key, value) => (typeof value === "function")? value.toString() : value);

I believe that would allow standard Uno config files without the extra selfUrl property, or allow the config to be defined directly in a fresh.config.ts file or similar.

I've gone off this idea because of the possibility of functions including closures or referencing module-level variables, which would not be serialised.
Instead, I think a better alternative to selfURL would be to expect the config to be found in a uno.config.ts file at the root of the project. This reflects the recommended usage of UnoCS, and I can't think of a compelling reason for a project not to stick to it. Also, the VS Code plugin makes a similar assumption. I'm working on implementing this now. The config could still be passed into the plugin as an object, but without browser runtime support.

Hey @marvinhagemeister ! I see you've been working on build-hooks in relation maybe to https://github.com/denoland/fresh/issues/1700 and https://github.com/denoland/fresh/issues/1701 (for which there's also @adamgreg's PR https://github.com/denoland/fresh/pull/1769). This might just be what we were missing to better integrate UnoCSS to the plugin. However, there will still be some scenarios where shipping the unocss runtime to the client is inevitable, for which it might be best that this plugin provides the following 3 independent options (proposed by @adamgreg):

"generate CSS on SSR"
"transform HTML on SSR"
"send browser runtime"

Other than that, I've merged @adamgreg's latest changes enforcing the use of the standard uno.config file (avoiding having to pass selfURL to the plugin options). I think the related unocss transformers mentioned above could be tracked in another issue, in order to move this PR forward, or how do you suggest proceeding?

I've found a problem with running UnoGenerator over the rendered HTML (other than performance) - any & in the source have been replaced by &. This means that UnoCSS can not pick up classes like that contain arbitrary variants such as [&>div]:bg-red.
Any generation of CSS during SSR should be done via a Preact hook, like the twind plugin does.

I've found a problem with running UnoGenerator over the rendered HTML (other than performance) - any & in the source have been replaced by &. This means that UnoCSS can not pick up classes like that contain arbitrary variants such as [&>div]:bg-red.
Any generation of CSS during SSR should be done via a Preact hook, like the twind plugin does.

I've made a PR to improve SSR into this branch: https://github.com/miguelrk/fresh/pull/4

Based on the latest discussion of this with @marvinhagemeister on the Discord channel, it sounds like we should generally be targeting AOT usage, not JIT. I think we just need a single JIT/AOT option:

AOT mode (enabled by default): Run UnoCSS over the codebase in an after-build hook. In the render hook the plugin can insert a link to the generated CSS file (is this possible currently?). For a decent developer experience, the plugin would also have to detect during initialisation when the server is running in "dev" mode, and run UnoCSS over the codebase immediately - hopefully that is not too slow.
JIT mode (disabled by default): Extract classes during SSR and send runtime to the client (basically the default mode that currently exists). Use cases:

During development to allow experimentation with the classes in the browser DevTools
Possibly to save time when the server restarts, if UnoCSS extraction from source code takes more than a couple of seconds.

@marvinhagemeister @miguelrk thoughts?

Transformer support is perhaps not essential... however... I believe the only way to support transformers would be by plugging into the Preact render, JIT-style. Before running class extraction over the source code, we could run transformers to make sure that all the necessary classes are generated. However, the HTML/DOM rendered JIT by Preact would itself still need to be transformed in order to actually use those generated classes. A disabled-by-default plugin option could enable transformer support, with the added render performance cost.
Maybe at some point UnoCSS will add an extractor which works with un-transformed variant group classes, as an alternative to the variant group transformer. That seems to me the only really compelling use for transformers at the moment.

@adamgreg Oh does UnoCSS only do variants through transpilation?

@adamgreg Oh does UnoCSS only do variants through transpilation?

Afraid so: https://unocss.dev/transformers/variant-group. It seems to me like it should be possible to extract directly, but maybe the parentheses would be a problem for class names

I've just checked, and WindiCSS also transpiles the HTML to make variant groups work.
I think it's inevitable - there's no way to escape spaces in CSS class names. The parentheses aren't a problem though, and it would be possible to implement a variant 🙄 of this feature using a different delimiter instead of spaces. I've experimented a little here: https://jsfiddle.net/rguj40sv/
In any case, I think it would be good if the plugin allowed opt-in to transformers by patching into Preact. AOT support is the priority though.

As discussed with @adamgreg, closing this in favor of the following with full support for AOT builds:

https://github.com/denoland/fresh/pull/1966

Linking these other relevant PRs as well:

https://github.com/denoland/fresh/pull/1963
https://github.com/denoland/fresh/pull/1999


M1 Support

Somehow, this app runs well on the M1 macs. So, optimize this app for ipads and M1 macs.
Maybe a mac catalyst version will be made in the future cuzwhynot

Add a refresh shortcut (cmd + R) for quickly refreshing the page

Full MacCatalyst support added in eb6912fd8fd821e0cbae57663be553139ded6dc2
Tested on:

M1
Rosetta (for intel macs)


support for not using trailing slashes

we have a website today where we don't use trailing slashes. We have implemented this in a cloudfront lambda where all requests without extension gets appended a "/index.html"
I would like to use this plugin in order to fix caching, cleaning up unused files, and 301 for redirects.
The plugin seems promising, im using the generateRedirectObjectsForPermanentRedirects since we have many redirects. I cant seem to find a way to make this work without going back to trailing slashes.
One idea I had was to generate the redirect object as {redirect-name}/index.html - would you consider accepting such an options if I send a PR?

Hi,
What's your use case for removing trailing slashes? Trailing slashes are standard on S3 Static Website Hosting, is it really worth fighting it?
Since you're using Lambda@Edge, my suggestion would be to use an Origin Response Lambda to remove training slashes from the Location header.
If this solution doesn't work for you, let us know. We can consider adding an option to do what you're asking for, but given that the requirement seems quite niche I'm not sure it is worth us supporting.

One idea I had was to generate the redirect object as {redirect-name}/index.html

Wouldn't it be better to just generate the redirect object without the trailing slash? If you add index.html to it then that will appear to the end user, which I think is a bit ugly.
Thanks!

Hi,
What's your use case for removing trailing slashes? Trailing slashes are standard on S3 Static Website Hosting, is it really worth fighting it?

Good question. It is something we want in my company. Primarely because the urls look nicer.

Since you're using Lambda@Edge, my suggestion would be to use an Origin Response Lambda to remove training slashes from the Location header.

I dont think that would work. I think it would introduce an infinite loop.

If this solution doesn't work for you, let us know. We can consider adding an option to do what you're asking for, but given that the requirement seems quite niche I'm not sure it is worth us supporting.

I think it would be really great. Googling trailing slashes yields a lot of results so seem like somehing people care about.

One idea I had was to generate the redirect object as {redirect-name}/index.html

Wouldn't it be better to just generate the redirect object without the trailing slash? If you add index.html to it then that will appear to the end user, which I think is a bit ugly.

This is how the plugin works today as I understand it. The user would not see this as it only happens between cloudfront and s3

Thanks for your response. I think I misunderstood your question.
First, let's make sure we're using the same terminology and clarify the difference between rewrites and redirects:

Rewrites are achieved by modifying the uri in a Lambda@Edge Request Lambda (either Viewer Request or Origin Request, preferably Origin Request because then it can be cached).

Redirects are achieved by specifying a 301/302/307/308 Status Code and a Location header. This can be done with S3 Static Website Hosting Redirection Rules, the S3 Static Website Hosting x-amz-website-redirect-location metadata (301 redirects only), or through Lambda@Edge.

One idea I had was to generate the redirect object as {redirect-name}/index.html

I interpreted this as meaning you wanted to set the redirect destination as {redirect-destination}/index.html. I now think you mean you want to create the redirect object with the key {redirect-source}/index.html. Is this correct?
We already do this, but only if the fromPath passed to createRedirect has a trailing slash. This is likely the cause of your issue. You're right that this can't be resolved with just Lambda@Edge, at least not in any performant way.
If this is the case, I'd be happy to review a PR that adds an option to add /index.html to object key when dealing with any extensionless fromPath value.

I interpreted this as meaning you wanted to set the redirect destination as {redirect-destination}/index.html. I now think you mean you want to create the redirect object with the key {redirect-source}/index.html. Is this correct?

Exactly

We already do this, but only if the fromPath passed to createRedirect has a trailing slash. This is likely the cause of your issue. You're right that this can't be resolved with just Lambda@Edge, at least not in any performant way.

Great - initial tests seem to solve my issue. I'll test it a bit more

If this is the case, I'd be happy to review a PR that adds an option to add /index.html to object key when dealing with any extensionless fromPath value.

Yes would be nice to have the option to always generate with /index.html to make things a bit more explicit. For now adding the slash should be sufficient. Thanks for helping.

Hi guys,
I am not sure this issue is quite niche, and I would also like a feature to have no trailing slash at the end of my urls.
My current use case is that I made a new version of a website using gatsby, on the old website all urls have no trailling slash at the end, so for SEO purpose I would like to have the same behaviour.
This option will behave like this:

createpagename with the correct metadata: Content-Type: text/html
create pagename/index.html with the redirect Metadata toward pagename

I think for SEO this should be a must have and I would go even further with the possibility to actually choose if we want some path with trailing slash and some without (list, or option inside the page).
For example blog/ is the trailing slash is needed because it is technically a folder but blog/myarticle there shouldn't be a trailing slash because it is a file.
What do you think ?

There's a lot of misinformation about SEO. Low quality blogs regurgitate information, but often misunderstand it or deliberately change it to be sensationalist/clickbait. It's best to go straight to the source. On the topic of trailing slashes, the source is here and here. (Notice on that tweet that John Mueller specifically calls out some SEO "experts" for an article that is "misleading and wrong" and "unnecessarily scaremongering")
The gist is, it doesn't matter whether you use a trailing slash or not. Google treats URLs with/without trailing slashes separately, but equally. You should be consistent about using/not-using a trailing slash in order to avoid being penalised for duplicate content, but it doesn't matter which one you choose.
The folder/file distinction refers to pagename/ (folder) or pagename/index.html (file). Considering pagename as an extensionless file is also valid, but there's no reason to consider listing pages as folders and content pages as files. On many websites the line between listing and content is blurred. It's more intuitive for viewers if you either consistently have a trailing slash, or consistently don't have one. From an SEO perspective it doesn't matter at all, because Google treats pages with/without a trailing slash "separately but equally". In other words, Google doesn't care if something is a folder or a file, it just treats everything as a page.

My current use case is that I made a new version of a website using gatsby, on the old website all urls have no trailling slash at the end, so for SEO purpose I would like to have the same behaviour.

There is a valid point here. If you have historically not had a trailing slash, your page's SEO value is stored on the path without a slash. If you 301 redirect from the non-slash variant to the slash-variant then the value will be transferred, but S3 Static Website Hosting for some reason adds trailing slashes via a 302 redirect instead. This could result in a short-term loss in search rank after you change to using trailing slashes. I would suggest using a Lambda@Edge Origin Response function to detect redirects that add a trailing slash and change them to a 301 redirect.
If you really want to avoid trailing slashes, I think the best option is to use Lambda@Edge in the same way esped-dfds is. This plugin is designed to work with S3 Static Website Hosting, and S3 Static Website Hosting uses trailing slashes. If you don't want trailing slashes, submit a feature request to Amazon, or use Lambda@Edge to implement the behaviour yourself, but I don't see fighting this behaviour as being in scope for this plugin.

createpagename with the correct metadata: Content-Type: text/html
create pagename/index.html with the redirect Metadata toward pagename

I don't think it's possible to create those objects in s3 because pagename would be a folder. How can that have content type text/html
It's better to sidestep the issue completely by handling it in a lambda@edge on your cloudfront by putting this in an origin response lambda to make sure it explicitly asks for files(and not folders) when requesting files from s3.
if (!request.uri.match(/\.[a-z0-9]+$/i)) {
  request.uri = (request.uri + '/index.html').replace('//', '/');
}

I don't think it's possible to create those objects in s3 because pagename would be a folder. How can that have content type text/html

I just did a quick test, and it is possible. S3 doesn't really have a concept of folders and files, only of objects and prefixes. You can have an object with the key pagename and an object with the key pagename/index.html, it doesn't stop you. The S3 console will happily show you a "folder" and a "file" with the exact same name, side by side.
But I agree that Lambda@Edge is the better approach for this. For one thing, Lambda@Edge allows for a more generalised solution which works on non-Gatsby sites as well, or Gatsby sites that don't use this plugin for deployment. (E.g. Gatsby Cloud)


Autoloading ICU not working around timezone casts

What happens?
ICU is not properly autoloaded while handling time zones.
This is a duckdb issue, but particularly visible in DuckDB-Wasm due to the fact that ICU is usally built-in.
Opened here for tracking, has been reported https://github.com/duckdb/duckdb-wasm/issues/1274#issuecomment-1972272711 or https://github.com/duckdb/duckdb-wasm/issues/1274#issuecomment-2165589650 independently.
Workaround user side is for now is an explicit LOAD icu; to have this to properly work.
To Reproduce
select cast(to_timestamp(100000) at time zone 'PST' as date) as event_date;
--- Error!
LOAD icu;
select cast(to_timestamp(100000) at time zone 'PST' as date) as event_date;
--- Works!

See https://shell.duckdb.org/#queries=v0,select-cast(to_timestamp(100000)-at-time-zone-'PST'-as-date)-as-event_date~,LOAD-icu~,select-cast(to_timestamp(100000)-at-time-zone-'PST'-as-date)-as-event_date
Browser/Environment:
any
Device:
any
DuckDB-Wasm Version:
1.28.1-dev231.0
DuckDB-Wasm Deployment:
shell.duckdb.org
Full Name:
Carlo Piovesan
Affiliation:
DuckDB Labs

@Y-- and @M


Increased requeueAfterSeconds to 500

Signed-off-by: Said Sef<EMAIL_ADDRESS>

Resolves: #26

Resolves: #26


Blocking ads/adblock plugin

Sometimes there are annoying ads which are position:fixed and you cannot remove them even when clicking the X icon.
Is there any chance you can use an adblock plugin in future?

add it in Safari may also work in Helium...

brief update
does not solve the issue

I'd also like this. I use Helium in transparent mode and having YouTube ads pop up mid-video that effectively take a few clicks to remove is really annoying.

+1

Looks like there hasn't been an update in a while, but if the Wipr ad blocker could work in Helium I would be so happy!


Client unable to connect after server startup on Windows

After the latest changes, I noticed that a client is unable to connect to a server via usrsctp_connect() if the server was started after the client on Windows. You can verify this by simply running test programs client.exe <IP_ADDRESS> 9 0 22222 11111 and then discard_server.exe 11111 22222. Up-call version is affected as well. Everything works fine on Linux.

I'll try to reproduce and report back.

We tried to reproduce the issue (Windows 7, CMake, VS 2017) and haven't seen the problem.
Can you provide more details?

I'm running the test programs on Windows 10 Build 1903 (x64), built using CMake /w MSVC 2017 as well. The client doesn't print any debug logs. Some logs from the server:
SCTP: add HMAC id 1 to list
SCTP: added chunk 193 (0xc1) to Auth list
SCTP: added chunk 128 (0x80) to Auth list
Bind called port: 9
Addr: IPv6 address: 0:0:0:0:0:0:0:0:port:9 scope:0
Main hash to bind at head:00000000007D6150, bound port:9 - in tcp_pool=0
recv_function_udp: Received 112 bytes. - calling sctp_common_input_processing with off=12
stcb:0000000000000000 inp:00000000006C0090
stcb is<PHONE_NUMBER>000000
Ok, Common input processing called, m:00000000006D0670 iphlen:0 offset:12 length:112 stcb:0000000000000000
sctp_process_control: iphlen=0, offset=12, length=112 stcb:0000000000000000
Its an INIT of len:100 vtag:0
sctp_process_control: processing a chunk type=1, len=100
SCTP_INIT
sctp_handle_init: handling INIT tcb:0000000000000000
sctp_handle_init: sending INIT-ACK
Check for unrecognized param's
Hit default param 8004
move on
Calling ipv4 output routine from low level src addr:c0a80102
Destination is c0a80102
RTP route is<PHONE_NUMBER>6F3FD0 through
IP output returns 0

Can you enable the Client's debug output Change "SCTP_DEBUG_NONE" to "SCTP_DEBUG_ALL" and post the output?
Can you also provide a wireshark tracefile?

Here's the client's debug logs:
SCTP: add HMAC id 1 to list
SCTP: added chunk 193 (0xc1) to Auth list
SCTP: added chunk 128 (0x80) to Auth list
Bind called port: 0
Addr: IPv6 address: 0:0:0:0:0:0:0:0:port:0 scope:0
Main hash to bind at head:0000000000167030, bound port:56514 - in tcp_pool=0
Allocate an association for peer:IPv4 address: <IP_ADDRESS>:9
Port:9
Adding an address (from:1) to the peer: IPv4 address: <IP_ADDRESS>:9
Association<PHONE_NUMBER>6F40E0 now allocated
Sending INIT
Sending INIT - calls lowlevel_output
Select source addr for:IPv4 address: <IP_ADDRESS>:9
ifn from route:0000000000000000 ifn_index:1
No ifn emit interface?
Trying Plan B
Examine interface {8B0878A2-ABFC-4045-AC13-B242D16856CE}
Is destination preferred:IPv4 address: <IP_ADDRESS>:0
src_loop:0 src_priv:1 src_glob:0
dest_loop:0 dest_priv:1 dest_glob:0
YES
Found ifn:0000000000000000 1 preferred source addresses
num preferred:1 on interface:0000000000169970 cur_addr_num:0
Is destination preferred:IPv4 address: <IP_ADDRESS>:0
src_loop:0 src_priv:1 src_glob:0
dest_loop:0 dest_priv:1 dest_glob:0
YES
we selected 0
Source:IPv4 address: <IP_ADDRESS>:0
Dest:IPv4 address: <IP_ADDRESS>:9
Calling ipv4 output routine from low level src addr:c0a80102
Destination is c0a80102
RTP route is<PHONE_NUMBER>6F4EB0 through
IP output returns 0
Timer type 2 goes off
Error count for<PHONE_NUMBER>6F4C40 now 1 thresh:5
Overall error count for<PHONE_NUMBER>6F4138 now 1 thresh:8 state:1
Sending INIT
Sending INIT - calls lowlevel_output
Calling ipv4 output routine from low level src addr:c0a80102
Destination is c0a80102
RTP route is<PHONE_NUMBER>6F4EB0 through
IP output returns 0
Timer now complete (type = 2)
Timer type 2 goes off
Error count for<PHONE_NUMBER>6F4C40 now 2 thresh:5
Overall error count for<PHONE_NUMBER>6F4138 now 2 thresh:8 state:1
Sending INIT
Sending INIT - calls lowlevel_output
Calling ipv4 output routine from low level src addr:c0a80102
Destination is c0a80102
RTP route is<PHONE_NUMBER>6F4EB0 through
IP output returns 0
Timer now complete (type = 2)

Captured traffic: sctp_capture.zip

Thanks, are you sure the sctp_capture belongs to this debug output?
The capture contains a successful handshake and a data transmission of a single packet from the client to the server.
In addition, the SCTP port numbers seem to mismatch between your debug output and the trace.

Thanks, are you sure the sctp_capture belongs to this debug output?

Ah, sorry, this one should be proper:
SCTP: add HMAC id 1 to list
SCTP: added chunk 193 (0xc1) to Auth list
SCTP: added chunk 128 (0x80) to Auth list
Bind called port: 0
Addr: IPv6 address: 0:0:0:0:0:0:0:0:port:0 scope:0
Main hash to bind at head:0000000000E27848, bound port:57143 - in tcp_pool=0
Allocate an association for peer:IPv4 address: <IP_ADDRESS>:9
Port:9
Adding an address (from:1) to the peer: IPv4 address: <IP_ADDRESS>:9
Association<PHONE_NUMBER>CB41A0 now allocated
Sending INIT
Sending INIT - calls lowlevel_output
Select source addr for:IPv4 address: <IP_ADDRESS>:9
ifn from route:0000000000000000 ifn_index:1
No ifn emit interface?
Trying Plan B
Examine interface {8B0878A2-ABFC-4045-AC13-B242D16856CE}
Is destination preferred:IPv4 address: <IP_ADDRESS>:0
src_loop:0 src_priv:1 src_glob:0
dest_loop:0 dest_priv:1 dest_glob:0
YES
Found ifn:0000000000000000 1 preferred source addresses
num preferred:1 on interface:0000000000E29970 cur_addr_num:0
Is destination preferred:IPv4 address: <IP_ADDRESS>:0
src_loop:0 src_priv:1 src_glob:0
dest_loop:0 dest_priv:1 dest_glob:0
YES
we selected 0
Source:IPv4 address: <IP_ADDRESS>:0
Dest:IPv4 address: <IP_ADDRESS>:9
Calling ipv4 output routine from low level src addr:c0a80102
Destination is c0a80102
RTP route is<PHONE_NUMBER>E2EF40 through
IP output returns 0
Timer type 2 goes off
Error count for<PHONE_NUMBER>CB4CE0 now 1 thresh:5
Overall error count for<PHONE_NUMBER>CB41F8 now 1 thresh:8 state:1
Sending INIT
Sending INIT - calls lowlevel_output
Calling ipv4 output routine from low level src addr:c0a80102
Destination is c0a80102
RTP route is<PHONE_NUMBER>E2EF40 through
IP output returns 0
Timer now complete (type = 2)
Timer type 2 goes off
Error count for<PHONE_NUMBER>CB4CE0 now 2 thresh:5
Overall error count for<PHONE_NUMBER>CB41F8 now 2 thresh:8 state:1
Sending INIT
Sending INIT - calls lowlevel_output
Calling ipv4 output routine from low level src addr:c0a80102
Destination is c0a80102
RTP route is<PHONE_NUMBER>E2EF40 through
IP output returns 0
Timer now complete (type = 2)

sctp_capture_debug.zip

Here are the compiled test programs: sctp_test_debug.zip

@weinrank By the way, how you decoded UDP encapsulated data as SCTP packets? I tried to convert it directly in Wireshark, but no luck.

@nxrighthere Can you update the sources, enable debug output for the client, retest and send the debug output from the client? We added additional debug output in https://github.com/sctplab/usrsctp/commit/0befd0a17dac972917d3343f5e9aa25a40c23425.

Sure, here are the logs and captured packets:
[0.000] SCTP: add HMAC id 1 to list
[0.000] SCTP: added chunk 193 (0xc1) to Auth list
[0.000] SCTP: added chunk 128 (0x80) to Auth list
[0.000] Bind called port: 0
[0.000] Addr: [0.000] IPv6 address: 0:0:0:0:0:0:0:0:port:0 scope:0
[0.000] Main hash to bind at head:0000000001015FA8, bound port:55784 - in tcp_pool=0
[0.000] Allocate an association for peer:[0.000] IPv4 address: <IP_ADDRESS>:9
[0.000] Port:9
[0.000] Adding an address (from:1) to the peer: [0.000] IPv4 address: <IP_ADDRESS>:9
[0.000] Association<PHONE_NUMBER>8FCBA0 now allocated
[0.000] Sending INIT
[0.000] Sending INIT - calls lowlevel_output
[0.000] Select source addr for:[0.000] IPv4 address: <IP_ADDRESS>:9
[0.000] ifn from route:0000000000000000 ifn_index:1
[0.000] No ifn emit interface?
[0.000] Trying Plan B
[0.000] Examine interface {8B0878A2-ABFC-4045-AC13-B242D16856CE}
[0.000] Is destination preferred:[0.000] IPv4 address: <IP_ADDRESS>:0
[0.000] src_loop:0 src_priv:1 src_glob:0
[0.000] dest_loop:0 dest_priv:1 dest_glob:0
[0.000] YES
[0.000] Found ifn:0000000000000000 1 preferred source addresses
[0.000] num preferred:1 on interface:0000000001019900 cur_addr_num:0
[0.000] Is destination preferred:[0.000] IPv4 address: <IP_ADDRESS>:0
[0.000] src_loop:0 src_priv:1 src_glob:0
[0.000] dest_loop:0 dest_priv:1 dest_glob:0
[0.000] YES
[0.000] we selected 0
[0.000] Source:[0.000] IPv4 address: <IP_ADDRESS>:0
[0.000] Dest:[0.000] IPv4 address: <IP_ADDRESS>:9
[0.000] Calling ipv4 output routine from low level src addr:c0a80102
[0.000] Destination is c0a80102
[0.000] RTP route is<PHONE_NUMBER>01EF60 through
[0.000] IP output returns 0
[4.719] Timer type 2 goes off
[4.719] Error count for<PHONE_NUMBER>8FD6E0 now 1 thresh:5
[4.719] Overall error count for<PHONE_NUMBER>8FCBF8 now 1 thresh:8 state:1
[4.719] Sending INIT
[4.719] Sending INIT - calls lowlevel_output
[4.719] Calling ipv4 output routine from low level src addr:c0a80102
[4.719] Destination is c0a80102
[4.719] RTP route is<PHONE_NUMBER>01EF60 through
[4.719] IP output returns 0
[4.719] Timer now complete (type = 2)
[14.141] Timer type 2 goes off
[14.141] Error count for<PHONE_NUMBER>8FD6E0 now 2 thresh:5
[14.141] Overall error count for<PHONE_NUMBER>8FCBF8 now 2 thresh:8 state:1
[14.141] Sending INIT
[14.141] Sending INIT - calls lowlevel_output
[14.141] Calling ipv4 output routine from low level src addr:c0a80102
[14.141] Destination is c0a80102
[14.141] RTP route is<PHONE_NUMBER>01EF60 through
[14.141] IP output returns 0
[14.141] Timer now complete (type = 2)

sctp_capture_debug.zip
If you need anything else, I'm happy to assist.

Hmm, this doesn't show what I was hoping for.
Your traces show basically, that no incoming packet (the INIT-ACK) is received by the stack. Since you say that this only occurs when you start the server after the client, I guess that the reception of the ICMP message is relevant. My theory was the in the receive thread the receive functions returns an error and we stop the receive thread. However, this would result in debug out we added: https://github.com/sctplab/usrsctp/blob/master/usrsctplib/user_recv_thread.c#L831, but this does not show up in your trace.
Do you have any sort for firewall running or anti-virus software with a firewall? Does turning that off, resolve the issue. @weinrank and myself tested on Windows and we can not reproduce the issue.
Right now I think that this is not a problem in the SCTP stack, but something on the system "protects" the SCTP stack against the packets... To verify that you can put
SCTPDBG(SCTP_DEBUG_USR, "Before WSARecvMsg\n");

and
SCTPDBG(SCTP_DEBUG_USR, "After WSARecvMsg\n");

before and after https://github.com/sctplab/usrsctp/blob/master/usrsctplib/user_recv_thread.c#L727
and see if WSARecvMsg() gets called and returns or not.

I've tried to reproduce this using two machines connected to each other over a wireless network, and everything works great. I tried to run a server locally on each - they are unable to connect to their own network addresses while in the Windows Subsystem for Linux environment this issue is not a thing. I disabled all protection software on both machines, no luck. 🤔

The receive thread spinning and checking the socket just fine, yes.

Just to get it crystal clear:

When running client and server on two different machines, everything is OK.
When running client and server within the Windows Subsystem for Linux, everything is OK.
Only when running client and server on Windows 10 natively, you see the issue. You see the issue on two different systems.
My analysis is correct: When the problem happens, the WSARecvMsg function does not return.

Is that correct?

Everything is correct expecting:

My analysis is correct: When the problem happens, the WSARecvMsg function does not return.

Debug log spamming both before and after endlessly.

Here are the logs with WSARecvMsg:
[0.000] SCTP: add HMAC id 1 to list
[0.000] [0.000] Before WSARecvMsg
SCTP: added chunk 193 (0xc1) to Auth list
[0.000] SCTP: added chunk 128 (0x80) to Auth list
[0.000] Bind called port: 0
[0.000] Addr: [0.000] IPv6 address: 0:0:0:0:0:0:0:0:port:0 scope:0
[0.000] Main hash to bind at head:00000000000267A8, bound port:55613 - in tcp_pool=0
[0.000] Allocate an association for peer:[0.000] IPv4 address: <IP_ADDRESS>:9
[0.000] Port:9
[0.000] Adding an address (from:1) to the peer: [0.000] IPv4 address: <IP_ADDRESS>:9
[0.000] Association<PHONE_NUMBER>9040E0 now allocated
[0.000] Sending INIT
[0.000] Sending INIT - calls lowlevel_output
[0.000] Select source addr for:[0.000] IPv4 address: <IP_ADDRESS>:9
[0.000] ifn from route:0000000000000000 ifn_index:1
[0.000] No ifn emit interface?
[0.000] Trying Plan B
[0.000] Examine interface {8B0878A2-ABFC-4045-AC13-B242D16856CE}
[0.000] Is destination preferred:[0.000] IPv4 address: <IP_ADDRESS>:0
[0.000] src_loop:0 src_priv:1 src_glob:0
[0.000] dest_loop:0 dest_priv:1 dest_glob:0
[0.000] YES
[0.000] Found ifn:0000000000000000 1 preferred source addresses
[0.000] num preferred:1 on interface:0000000000029900 cur_addr_num:0
[0.000] Is destination preferred:[0.000] IPv4 address: <IP_ADDRESS>:0
[0.000] src_loop:0 src_priv:1 src_glob:0
[0.000] dest_loop:0 dest_priv:1 dest_glob:0
[0.000] YES
[0.000] we selected 0
[0.000] Source:[0.000] IPv4 address: <IP_ADDRESS>:0
[0.000] Dest:[0.000] IPv4 address: <IP_ADDRESS>:9
[0.000] Calling ipv4 output routine from low level src addr:c0a80102
[0.000] Destination is c0a80102
[0.016] RTP route is<PHONE_NUMBER>904E90 through
[0.016] After WSARecvMsg
[0.016] IP output returns 0
[5.091] Timer type 2 goes off
[5.091] Error count for<PHONE_NUMBER>904C20 now 1 thresh:5
[5.091] Overall error count for<PHONE_NUMBER>904138 now 1 thresh:8 state:1
[5.091] Sending INIT
[5.091] Sending INIT - calls lowlevel_output
[5.091] Calling ipv4 output routine from low level src addr:c0a80102
[5.091] Destination is c0a80102
[5.091] RTP route is<PHONE_NUMBER>904E90 through
[5.097] IP output returns 0
[5.097] Timer now complete (type = 2)
[15.137] Timer type 2 goes off
[15.137] Error count for<PHONE_NUMBER>904C20 now 2 thresh:5
[15.137] Overall error count for<PHONE_NUMBER>904138 now 2 thresh:8 state:1
[15.137] Sending INIT
[15.137] Sending INIT - calls lowlevel_output
[15.137] Calling ipv4 output routine from low level src addr:c0a80102
[15.137] Destination is c0a80102
[15.137] RTP route is<PHONE_NUMBER>904E90 through
[15.137] IP output returns 0
[15.137] Timer now complete (type = 2)
[35.249] Timer type 2 goes off
[35.249] Error count for<PHONE_NUMBER>904C20 now 3 thresh:5
[35.249] Overall error count for<PHONE_NUMBER>904138 now 3 thresh:8 state:1
[35.249] Sending INIT
[35.249] Sending INIT - calls lowlevel_output
[35.249] Calling ipv4 output routine from low level src addr:c0a80102
[35.249] Destination is c0a80102
[35.249] RTP route is<PHONE_NUMBER>904E90 through
[35.249] IP output returns 0
[35.249] Timer now complete (type = 2)

Ahh, OK. Can you change the debug output after WSARecvMsg() to
SCTPDBG(SCTP_DEBUG_USR, "WSARecvMsg() returned %d\n", nResult);

and add a couple of lines down right after:
m_ErrorCode = WSAGetLastError();

another debug output:
SCTPDBG(SCTP_DEBUG_USR, "WSAGetLastError() returned %d (%x)\n", m_ErrorCode, m_ErrorCode);

and report what the output is?

Got it:
[0.000] SCTP: add HMAC id 1 to list
[0.016] SCTP: added chunk 193 (0xc1) to Auth list
[0.016] SCTP: added chunk 128 (0x80) to Auth list
[0.016] Before WSARecvMsg
[0.016] Bind called port: 0
[0.016] Addr: [0.016] IPv6 address: 0:0:0:0:0:0:0:0:port:0 scope:0
[0.016] Main hash to bind at head:0000000000F87850, bound port:61099 - in tcp_pool=0
[0.016] Allocate an association for peer:[0.016] IPv4 address: <IP_ADDRESS>:9
[0.016] Port:9
[0.016] Adding an address (from:1) to the peer: [0.016] IPv4 address: <IP_ADDRESS>:9
[0.016] Association<PHONE_NUMBER>EC4090 now allocated
[0.016] Sending INIT
[0.016] Sending INIT - calls lowlevel_output
[0.016] Select source addr for:[0.016] IPv4 address: <IP_ADDRESS>:9
[0.016] ifn from route:0000000000000000 ifn_index:1
[0.016] No ifn emit interface?
[0.016] Trying Plan B
[0.016] Examine interface {8B0878A2-ABFC-4045-AC13-B242D16856CE}
[0.016] Is destination preferred:[0.016] IPv4 address: <IP_ADDRESS>:0
[0.016] src_loop:0 src_priv:1 src_glob:0
[0.016] dest_loop:0 dest_priv:1 dest_glob:0
[0.016] YES
[0.016] Found ifn:0000000000000000 1 preferred source addresses
[0.016] num preferred:1 on interface:0000000000F89900 cur_addr_num:0
[0.016] Is destination preferred:[0.016] IPv4 address: <IP_ADDRESS>:0
[0.016] src_loop:0 src_priv:1 src_glob:0
[0.016] dest_loop:0 dest_priv:1 dest_glob:0
[0.016] YES
[0.016] we selected 0
[0.016] Source:[0.016] IPv4 address: <IP_ADDRESS>:0
[0.016] Dest:[0.016] IPv4 address: <IP_ADDRESS>:9
[0.016] Calling ipv4 output routine from low level src addr:c0a80102
[0.016] Destination is c0a80102
[0.016] RTP route is<PHONE_NUMBER>EC4E80 through
[0.016] IP output returns 0
[0.016] WSARecvMsg() returned -1
[0.031] WSAGetLastError() returned 10054 (2746)
[5.082] Timer type 2 goes off
[5.082] Error count for<PHONE_NUMBER>EC4C10 now 1 thresh:5
[5.082] Overall error count for<PHONE_NUMBER>EC40E8 now 1 thresh:8 state:1
[5.082] Sending INIT
[5.082] Sending INIT - calls lowlevel_output
[5.082] Calling ipv4 output routine from low level src addr:c0a80102
[5.082] Destination is c0a80102
[5.082] RTP route is<PHONE_NUMBER>EC4E80 through
[5.082] IP output returns 0
[5.082] Timer now complete (type = 2)
[15.135] Timer type 2 goes off
[15.135] Error count for<PHONE_NUMBER>EC4C10 now 2 thresh:5
[15.135] Overall error count for<PHONE_NUMBER>EC40E8 now 2 thresh:8 state:1
[15.135] Sending INIT
[15.135] Sending INIT - calls lowlevel_output
[15.135] Calling ipv4 output routine from low level src addr:c0a80102
[15.135] Destination is c0a80102
[15.135] RTP route is<PHONE_NUMBER>EC4E80 through
[15.135] IP output returns 0
[15.135] Timer now complete (type = 2)

OK, 10054 corresponds to WSAECONNRESET (see msdn), which I did not expect.
I'm not sure why there is no other
Before WSARecvMsg

Can you retry with using
if (nResult != 0) {
	m_ErrorCode = WSAGetLastError();
	SCTPDBG(SCTP_DEBUG_USR, "WSAGetLastError() returned %d (%x)\n", m_ErrorCode, m_ErrorCode);
	if ((m_ErrorCode == WSAENOTSOCK) || (m_ErrorCode == WSAEINTR)) {
		break;
	}
	continue;
}

Your snippet solved this issue, now it works as intended. 👍

Here are the logs with a successful connection:

Debug logs
[0.000] SCTP: add HMAC id 1 to list
[0.000] WSARecvMsg() returned 0
[0.000] SCTP: added chunk 193 (0xc1) to Auth list
[0.000] SCTP: added chunk 128 (0x80) to Auth list
[0.000] Bind called port: 0
[0.000] Addr: [0.000] IPv6 address: 0:0:0:0:0:0:0:0:port:0 scope:0
[0.000] Main hash to bind at head:00000000001F6F80, bound port:54482 - in tcp_pool=0
[0.016] Allocate an association for peer:[0.016] IPv4 address: <IP_ADDRESS>:9
[0.016] Port:9
[0.016] Adding an address (from:1) to the peer: [0.016] IPv4 address: <IP_ADDRESS>:9
[0.016] Association<PHONE_NUMBER>8FCF50 now allocated
[0.016] Sending INIT
[0.016] Sending INIT - calls lowlevel_output
[0.016] Select source addr for:[0.016] IPv4 address: <IP_ADDRESS>:9
[0.016] ifn from route:0000000000000000 ifn_index:1
[0.016] No ifn emit interface?
[0.016] Trying Plan B
[0.016] Examine interface {8B0878A2-ABFC-4045-AC13-B242D16856CE}
[0.016] Is destination preferred:[0.016] IPv4 address: <IP_ADDRESS>:0
[0.016] src_loop:0 src_priv:1 src_glob:0
[0.016] dest_loop:0 dest_priv:1 dest_glob:0
[0.016] YES
[0.016] Found ifn:0000000000000000 1 preferred source addresses
[0.016] num preferred:1 on interface:00000000001F9900 cur_addr_num:0
[0.016] Is destination preferred:[0.016] IPv4 address: <IP_ADDRESS>:0
[0.016] src_loop:0 src_priv:1 src_glob:0
[0.016] dest_loop:0 dest_priv:1 dest_glob:0
[0.016] YES
[0.016] we selected 0
[0.016] Source:[0.016] IPv4 address: <IP_ADDRESS>:0
[0.016] Dest:[0.016] IPv4 address: <IP_ADDRESS>:9
[0.016] Calling ipv4 output routine from low level src addr:c0a80102
[0.016] Destination is c0a80102
[0.016] RTP route is<PHONE_NUMBER>8FDD40 through
[0.016] WSAGetLastError() returned 10054 (2746)
[0.031] WSAGetLastError() returned 10054 (2746)
[0.031] WSARecvMsg() returned 0
[0.016] IP output returns 0
[0.141] WSAGetLastError() returned 10060 (274c)
[0.141] WSAGetLastError() returned 10060 (274c)
[0.141] WSARecvMsg() returned 0
[0.250] WSAGetLastError() returned 10060 (274c)
[0.250] WSAGetLastError() returned 10060 (274c)
[0.250] WSARecvMsg() returned 0
[0.359] WSAGetLastError() returned 10060 (274c)
[0.359] WSAGetLastError() returned 10060 (274c)
[0.359] WSARecvMsg() returned 0
[0.469] WSAGetLastError() returned 10060 (274c)
[0.469] WSAGetLastError() returned 10060 (274c)
[0.469] WSARecvMsg() returned 0
[0.578] WSAGetLastError() returned 10060 (274c)
[0.578] WSAGetLastError() returned 10060 (274c)
[0.578] WSARecvMsg() returned 0
[0.687] WSAGetLastError() returned 10060 (274c)
[0.687] WSAGetLastError() returned 10060 (274c)
[0.687] WSARecvMsg() returned 0
[0.797] WSAGetLastError() returned 10060 (274c)
[0.797] WSAGetLastError() returned 10060 (274c)
[0.797] WSARecvMsg() returned 0
[0.906] WSAGetLastError() returned 10060 (274c)
[0.906] WSAGetLastError() returned 10060 (274c)
[0.906] WSARecvMsg() returned 0
[1.016] WSAGetLastError() returned 10060 (274c)
[1.016] WSAGetLastError() returned 10060 (274c)
[1.016] WSARecvMsg() returned 0
[1.125] WSAGetLastError() returned 10060 (274c)
[1.125] WSAGetLastError() returned 10060 (274c)
[1.125] WSARecvMsg() returned 0
[1.234] WSAGetLastError() returned 10060 (274c)
[1.234] WSAGetLastError() returned 10060 (274c)
[1.234] WSARecvMsg() returned 0
[1.344] WSAGetLastError() returned 10060 (274c)
[1.344] WSAGetLastError() returned 10060 (274c)
[1.344] WSARecvMsg() returned 0
[1.453] WSAGetLastError() returned 10060 (274c)
[1.453] WSAGetLastError() returned 10060 (274c)
[1.453] WSARecvMsg() returned 0
[1.563] WSAGetLastError() returned 10060 (274c)
[1.563] WSAGetLastError() returned 10060 (274c)
[1.563] WSARecvMsg() returned 0
[1.672] WSAGetLastError() returned 10060 (274c)
[1.672] WSAGetLastError() returned 10060 (274c)
[1.672] WSARecvMsg() returned 0
[1.781] WSAGetLastError() returned 10060 (274c)
[1.781] WSAGetLastError() returned 10060 (274c)
[1.781] WSARecvMsg() returned 0
[1.891] WSAGetLastError() returned 10060 (274c)
[1.891] WSAGetLastError() returned 10060 (274c)
[1.891] WSARecvMsg() returned 0
[2.000] WSAGetLastError() returned 10060 (274c)
[2.000] WSAGetLastError() returned 10060 (274c)
[2.000] WSARecvMsg() returned 0
[2.109] WSAGetLastError() returned 10060 (274c)
[2.109] WSAGetLastError() returned 10060 (274c)
[2.109] WSARecvMsg() returned 0
[2.219] WSAGetLastError() returned 10060 (274c)
[2.219] WSAGetLastError() returned 10060 (274c)
[2.219] WSARecvMsg() returned 0
[2.328] WSAGetLastError() returned 10060 (274c)
[2.328] WSAGetLastError() returned 10060 (274c)
[2.328] WSARecvMsg() returned 0
[2.437] WSAGetLastError() returned 10060 (274c)
[2.437] WSAGetLastError() returned 10060 (274c)
[2.437] WSARecvMsg() returned 0
[2.547] WSAGetLastError() returned 10060 (274c)
[2.547] WSAGetLastError() returned 10060 (274c)
[2.547] WSARecvMsg() returned 0
[2.656] WSAGetLastError() returned 10060 (274c)
[2.656] WSAGetLastError() returned 10060 (274c)
[2.656] WSARecvMsg() returned 0
[2.766] WSAGetLastError() returned 10060 (274c)
[2.766] WSAGetLastError() returned 10060 (274c)
[2.766] WSARecvMsg() returned 0
[2.875] WSAGetLastError() returned 10060 (274c)
[2.875] WSAGetLastError() returned 10060 (274c)
[2.875] WSARecvMsg() returned 0
[2.984] WSAGetLastError() returned 10060 (274c)
[2.984] WSAGetLastError() returned 10060 (274c)
[2.984] WSARecvMsg() returned 0
[3.094] WSAGetLastError() returned 10060 (274c)
[3.094] WSAGetLastError() returned 10060 (274c)
[3.094] WSARecvMsg() returned 0
[3.203] WSAGetLastError() returned 10060 (274c)
[3.203] WSAGetLastError() returned 10060 (274c)
[3.203] WSARecvMsg() returned 0
[3.313] WSAGetLastError() returned 10060 (274c)
[3.313] WSAGetLastError() returned 10060 (274c)
[3.313] WSARecvMsg() returned 0
[3.422] WSAGetLastError() returned 10060 (274c)
[3.422] WSAGetLastError() returned 10060 (274c)
[3.422] WSARecvMsg() returned 0
[3.531] WSAGetLastError() returned 10060 (274c)
[3.531] WSAGetLastError() returned 10060 (274c)
[3.531] WSARecvMsg() returned 0
[3.641] WSAGetLastError() returned 10060 (274c)
[3.641] WSAGetLastError() returned 10060 (274c)
[3.641] WSARecvMsg() returned 0
[3.750] WSAGetLastError() returned 10060 (274c)
[3.750] WSAGetLastError() returned 10060 (274c)
[3.750] WSARecvMsg() returned 0
[3.859] WSAGetLastError() returned 10060 (274c)
[3.859] WSAGetLastError() returned 10060 (274c)
[3.859] WSARecvMsg() returned 0
[3.969] WSAGetLastError() returned 10060 (274c)
[3.969] WSAGetLastError() returned 10060 (274c)
[3.969] WSARecvMsg() returned 0
[4.078] WSAGetLastError() returned 10060 (274c)
[4.078] WSAGetLastError() returned 10060 (274c)
[4.078] WSARecvMsg() returned 0
[4.188] WSAGetLastError() returned 10060 (274c)
[4.188] WSAGetLastError() returned 10060 (274c)
[4.188] WSARecvMsg() returned 0
[4.297] WSAGetLastError() returned 10060 (274c)
[4.297] WSAGetLastError() returned 10060 (274c)
[4.297] WSARecvMsg() returned 0
[4.406] WSAGetLastError() returned 10060 (274c)
[4.406] WSAGetLastError() returned 10060 (274c)
[4.406] WSARecvMsg() returned 0
[4.516] WSAGetLastError() returned 10060 (274c)
[4.516] WSAGetLastError() returned 10060 (274c)
[4.516] WSARecvMsg() returned 0
[4.625] WSAGetLastError() returned 10060 (274c)
[4.625] WSAGetLastError() returned 10060 (274c)
[4.625] WSARecvMsg() returned 0
[4.719] Timer type 2 goes off
[4.719] Error count for<PHONE_NUMBER>8FDAD0 now 1 thresh:5
[4.719] Overall error count for<PHONE_NUMBER>8FCFA8 now 1 thresh:8 state:1
[4.719] Sending INIT
[4.719] Sending INIT - calls lowlevel_output
[4.719] Calling ipv4 output routine from low level src addr:c0a80102
[4.719] Destination is c0a80102
[4.719] RTP route is<PHONE_NUMBER>8FDD40 through
[4.719] IP output returns 0
[4.719] Timer now complete (type = 2)
[4.734] WSAGetLastError() returned 10060 (274c)
[4.734] WSAGetLastError() returned 10060 (274c)
[4.734] WSARecvMsg() returned 0
[4.734] WSAGetLastError() returned 0 (0)
[4.734] recv_function_udp: Received 424 bytes.[4.750]  - calling sctp_common_input_processing with off=12
[4.750] Ok, Common input processing called, m:00000000001F9EB0 iphlen:0 offset:12 length:424 stcb:00000000008FCF50
[4.750] stcb:00000000008FCF50 state:2
[4.750] sctp_process_control: iphlen=0, offset=12, length=424 stcb:00000000008FCF50
[4.750] sctp_process_control: processing a chunk type=2, len=412
[4.750] SCTP_INIT_ACK
[4.750] sctp_handle_init_ack: handling INIT-ACK
[4.750] Check for unrecognized param's
[4.750] Hit default param 8004
[4.750] move on
[4.750] SCTP: add HMAC id 1 to list
[4.766] SCTP: added chunk 128 (0x80) to Auth list
[4.766] SCTP: added chunk 193 (0xc1) to Auth list
[4.766] SCTP: negotiated peer HMAC id 1
[4.766] moving to COOKIE-ECHOED state
[4.766] Leaving handle-init-ack end
[4.766] Calling ipv4 output routine from low level src addr:c0a80102
[4.766] Destination is c0a80102
[4.766] RTP route is<PHONE_NUMBER>8FDD40 through
[4.766] IP output returns 0
[4.766] m-c-o put out 0
[4.766] Ok, we have put out 0 chunks
[4.781] Check for chunk output prw:131072 tqe:0 tf=0
[4.781] Calling chunk OUTPUT
[4.781] m-c-o put out 0
[4.781] Ok, we have put out 0 chunks
[4.781] chunk OUTPUT returns
[4.781] WSARecvMsg() returned 0
[4.844] WSAGetLastError() returned 0 (0)
[4.844] recv_function_udp: Received 16 bytes.[4.844]  - calling sctp_common_input_processing with off=12
[4.844] Ok, Common input processing called, m:00000000008E9280 iphlen:0 offset:12 length:16 stcb:00000000008FCF50
[4.844] stcb:00000000008FCF50 state:4
[4.844] sctp_process_control: iphlen=0, offset=12, length=16 stcb:00000000008FCF50
[4.844] sctp_process_control: processing a chunk type=11, len=4
[4.859] SCTP_COOKIE_ACK, stcb<PHONE_NUMBER>8FCF50
[4.859] sctp_handle_cookie_ack: handling COOKIE-ACK
[4.859] moving to OPEN state
handle_notification : SCTP_ASSOC_CHANGE
Association change SCTP_COMM_UP, streams (in/out) = (10/10), supports PR AUTH ASCONF MULTIBUF RE-CONFIG.
[4.859] Check for chunk output prw:131072 tqe:1 tf=0
[4.859] WSARecvMsg() returned 0
Local addresses: <IP_ADDRESS>.
Peer addresses: <IP_ADDRESS>.
[4.969] WSAGetLastError() returned 10060 (274c)
[4.969] WSAGetLastError() returned 10060 (274c)
[4.969] WSARecvMsg() returned 0
[5.078] WSAGetLastError() returned 10060 (274c)
[5.078] WSAGetLastError() returned 10060 (274c)
[5.078] WSARecvMsg() returned 0
[5.203] WSAGetLastError() returned 10060 (274c)
[5.500] WSAGetLastError() returned 10060 (274c)
[5.500] WSARecvMsg() returned 0
[5.609] WSAGetLastError() returned 10060 (274c)
[5.609] WSAGetLastError() returned 10060 (274c)

@nxrighthere Thanks for helping to debug the issue! I committed a fix. Please retest and reopen the issue, if the problem still persists.

Thank you, I updated the code in my layer on top - everything works great now. 😸

@weinrank Did you also test with Windows 10?

Yes!


Quickstart instructions

Added Quickstart instructions that work.  I think it's very important that anyone getting our code has an easy experience getting their first build and tests to succeed.
Can we please try to keep these up to date as new dependencies are added?

Could you also flatten this into a single commit, and rebase on top of the latest master?

Done as suggested (I think).
PTAL.

LGTM


404 link for simple literal argument (missing page?) also doesn't show up in search

Chapter 8.11.1 in the developer's note, line 190 in https://github.com/JorelAli/CommandAPI/blob/master/docs/4.3/literalarguments.html line 190
It says "The LiteralArgument class is now obsolete! If you want to implement literals easily, consider using the much more intuitive SimpleLiteralArgument, which is described in more detail here!", with here being a link to https://www.jorel.dev/CommandAPI/4.3/simplelitargs.html. That link goes to a 404, and searching the documentation does not show the page.
Proposed fix
Looking through the documentation folder, it appears that this page simply doesn't exist. Looking through version 4.3, I don't see a SimpleLiteralArgument class, nor any other reference to such. Is this a future feature that got into the documentation by accident, or something else? Either way, for now that developer's note should simply be removed.

Looking more closely, it appears this might be an older name or something for MultiLiteralArgument?

Ah yes, that was indeed the old name for the MultiliteralArgument. I'll make sure to fix that on the live website as soon as I can 😃


stats: New API for bootstrap to add a stats builtin

Description: Configuration for stat names that are not predictable within the source code.
There are several scenarios where Envoy records stats based on names that
are not known at compile time. For example:

Exotic SSL ciphers
Dynamo tables
gRPC method names

In these cases, stat-names are discovered in the request path, and we want
to avoid taking a global symbol table lock. These names are discoverable
using admin endpoint /stats/recentlookups. If an administrator discovers
these names are being looked up frequently, the bootstrap file can be
updated to pre-allocate those, and then access them lock-free.
This should help de-risk #4980
Risk Level: medium
Testing: //test/...
Docs Changes: will be needed
Release Notes: will be needed

@htuch for API review and also a first pass on acceptability of a union-of-pointers mechanism to save memory.

Stepping back, would it be better to put this feature on hold until we know for sure we have a perf problem? As @htuch mentioned this is all already ridiculously complicated and it's not clear to me if we should add more complexity unless there is a proven need? Thoughts?

Sounds good; going to mark WiP for now and will (a) do some benchmarking and (b) do some fuzzing.

Closing this PR for now in favor of https://github.com/envoyproxy/envoy/pull/9355 which eliminates locks entirely for dynamically discovered stats.


ARROW-5485: [C++] Install libraries from googletest_ep into build output directory on non-Windows platforms

I missed this when working on the googletest shared library migration as it only is a problem on macOS. Linux uses the library path from the link step without any extra fiddling, but on macOS it cannot resolve the library as described on the ARROW-5485 ticket.
This change results in the shared libraries being installed adjacent to the build outputs, e.g.
$ ll release/
total 20180
-rwxr-xr-x 1 wesm wesm  4492248 Jun  6 16:59 arrow-array-test*
lrwxrwxrwx 1 wesm wesm       14 Jun  6 16:58 libarrow.so -> libarrow.so.14*
lrwxrwxrwx 1 wesm wesm       18 Jun  6 16:58 libarrow.so.14 -> libarrow.so.14.0.0*
-rwxr-xr-x 1 wesm wesm 14900504 Jun  6 16:58 libarrow.so.14.0.0*
lrwxrwxrwx 1 wesm wesm       22 Jun  6 16:58 libarrow_testing.so -> libarrow_testing.so.14*
lrwxrwxrwx 1 wesm wesm       26 Jun  6 16:58 libarrow_testing.so.14 -> libarrow_testing.so.14.0.0*
-rwxr-xr-x 1 wesm wesm   583048 Jun  6 16:58 libarrow_testing.so.14.0.0*
-rwxr-xr-x 1 wesm wesm    16552 Jun  6 16:58 libgmock_main.so*
-rwxr-xr-x 1 wesm wesm   174824 Jun  6 16:58 libgmock.so*
-rwxr-xr-x 1 wesm wesm    16456 Jun  6 16:58 libgtest_main.so*
-rwxr-xr-x 1 wesm wesm   464352 Jun  6 16:58 libgtest.so*

@wesm - It fails in my desktop post this change. I think its because the linked through rpath
otool -L on any test gives the following output
@rpath/libarrow_testing.14.dylib (compatibility version 14.0.0, current version 14.0.0)
@rpath/libarrow.14.dylib (compatibility version 14.0.0, current version 14.0.0)
libgtest_main.dylib (compatibility version 0.0.0, current version 0.0.0)
libgtest.dylib (compatibility version 0.0.0, current version 0.0.0)
libgmock.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)

running the test from build folder still gives
dyld: Library not loaded: libgtest_main.dylib
Referenced from: /Users/praveenkumar/Desktop/dremio/code/arrow-for/arrow/cpp/build/./release/arrow-array-test
Reason: image not found
however, cd into release folder and running the test works.

OK, since you have a mac, can you try to fix?

OK, since you have a mac, can you try to fix?

Sure will do, was planning to get this post something i am working on.

@wesm I am closing it and opening a new PR https://travis-ci.org/apache/arrow/builds/543159861 for the same.

superseded by #4499


oozie 3.0.2 failing to submit jobs to hadoop 0.20.2

i have added these to my core-site.xml on jt an nn and restarted them
    <property>
            <name>hadoop.proxyuser.oozie.groups</name>
            <value>*</value>
            <description>Allow the superuser oozie to impersonate

any members of the group group1 and group2

hadoop.proxyuser.oozie.hosts
oozie.host1.com,oozie.host2.com
The superuser can connect only from host1
and host2 to impersonate a user

in oozie-site.xml i disabled kerberos
oozie is running as the user oozie and the sample aggregator job runs
fine when i submit it as oozie but fails when i try to submit as
anyother user
JA009: java.io.IOException: java.io.IOException: The username jabira
obtained from the conf doesn't match the username oozie the user
authenticated as  at org.apache.hadoop.mapred.JobTracker.s
ubmitJob(JobTracker.java:3759)  at
sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)            at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:557)  at
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1415) at
org.apache.ha    doop.ipc.Server$Handler$1.run(Server.java:1411) at
java.security.AccessController.doPrivileged(Native Method)   at
javax.security.auth.Subject.doAs(Subject.java:396)   at
org.apache.hadoop.sec
urity.UserGroupInformation.doAs(UserGroupInformation.java:1115) at
org.apache.hadoop.ipc.Server$Handler.run(Server.java:1409)Caused by:
java.io.IOException: The username jabira obtained from t    he conf
doesn't match the username oozie the user authenticated as      at
org.apache.hadoop.mapred.JobInProgress.(JobInProgress.java:
423)        at org.apache.hadoop.mapred.JobTracker.s
ubmitJob(JobTracker.java:3757)  ... 10 more
$ hadoop version
Hadoop 0.20.2-cdh3u0
Subversion  -r 81256ad0f2e4ab2bd34b04f53d25a6c23686dd14
Compiled by root on Sat Mar 26 00:12:30 UTC 2011
From source with checksum 6c1f62dddc4eac69b6b973c18bbc0f55
$ ../bin/oozie version
Oozie client build version: 3.0.2

oozie.services.ext

            To add/replace services defined in 'oozie.services' with custom implementations.            Class names must be separated by commas.         org.apache.oozie.service.HadoopAccessorService

was causing the issue


character is running while on mount

https://giphy.com/gifs/XCxHKt207NMPlJQm3X

You need to add a riding model.  It links the same way as the non uma version.   You should be able to cut and paste it right in to your uma character prefab.  Just put the riding model on a new empty game object


Source in ES Modules?

Thanks for your amazing lib in such a small size.
Any plan to provide an ES module form source?
The code is wrapped by UMD now. It's usable but forces to set the global name. And the AMD checking may also leads to some issues in special environment.
Since it's such a small library, including it in the upper application is useful. But the form now prevents tree-shaking etc.
I copy the source code into my project so far. Hope to use it as a dependency.

Hey Yuqian - thank you!
Yes, thats a good idea to provide an ES module as well. I'll add that to my TODO list and hopefully get around to it soon. (Also happy to merge a PR!)
Thanks for the reminder here! (I will leave this Issue open until I do it)

Got a chance to do this change. It is now published as 3.0.0.
Note - I upgraded the major version as it could potentially be a breaking change. I stopped assigning Zousan as a global variable by default.
Be sure and let me know if anyone runs into any issues using this with various bundlers/loaders/browsers.


ensure that the RStudio session goes to the correct working directory

RStudio defaults to setting the working directory to the user's home directory - instead, we should set the working directory to be where we are cloning the project. Ideally, we could do this dynamically when the rstudio session is launched.

Did we decide that this was not a priority for the moment? @cchoirat ?

Does it boil down to opening the Rproj file by hand in RStudio?  If so,
yes, it can wait.
On Tue, Aug 20, 2019 at 1:53 PM Rok Roškar<EMAIL_ADDRESS>wrote:

Did we decide that this was not a priority for the moment? @cchoirat
https://github.com/cchoirat ?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/SwissDataScienceCenter/renku-jupyter/issues/47?email_source=notifications&email_token=AA73AZLWWNLBSXSXTAADGPTQFPLLFA5CNFSM4ILJ6MTKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD4WAP5A#issuecomment-522979316,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AA73AZJTUCPADUTWVIXOOYTQFPLLFANCNFSM4ILJ6MTA
.

yes, you have to find your project in /work

fine for now then
On Tue, Aug 20, 2019 at 1:58 PM Rok Roškar<EMAIL_ADDRESS>wrote:

yes, you have to find your project in /work
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/SwissDataScienceCenter/renku-jupyter/issues/47?email_source=notifications&email_token=AA73AZLAYEP3HWYCYDDY6PDQFPL7DA5CNFSM4ILJ6MTKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD4WA6GI#issuecomment-522981145,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AA73AZKPPQCWRBSBVLF6M6TQFPL7DANCNFSM4ILJ6MTA
.

We decided to just provide a symlink to the project directory for now


Trying to fix shaded helios-tools jar

@mattnworb @negz @rohansingh

I couldn't find a better way that worked. This roughly doubles the size of the helios-tools jar. But I haven't measured the difference in speed which is more important here.

If it's not obvious which classes need to be included from the jnr stuff to prevent any errors, and we also can't really do away with the jnr library for unix socket support, this makes sense to me - +1


Adding External Scopes properly based on ARM Suggestion

If you are a MSFT employee you can view your work branch via this link.
Contribution checklist:

[ ] I have reviewed the documentation for the workflow.
[ ] Validation tools were run on swagger spec(s) and have all been fixed in this PR.

/azp run automation - sdk

Can one of the admins verify this patch?

/azp run automation - sdk

@ChenTanyi  could you please take a look at this one and also can somebody from ARM team checks this one? should be straightforward?

@parisa-naeimi API change need ARM review first. SDK will be ok when all ci pass and no readme need to be added.

@chentanyi
there is no API change. The routes we had in swagger needed correction. It was wrong before.

@ms-premp All change for non examples json will be considered as API change. ARM will review it base on the label I add before. If the pr is emergent, you can send email to<EMAIL_ADDRESS>or<EMAIL_ADDRESS>

@ms-premp All change for non examples json will be considered as API change. ARM will review it base on the label I add before. If the pr is emergent, you can send email to<EMAIL_ADDRESS>or<EMAIL_ADDRESS>
Thank you for providing these email addresses, I sent them an email to review this PR.

/azp run automation - sdk

/azp run automation - sdk

/azp run automation - sdk

/azp run automation - sdk

/azp run automation - sdk

/azp run automation - sdk

/azp run automation - sdk

/azp run automation - sdk

/azp run automation - sdk

@ChenTanyi Arm approved my changes, could you please take a look and let us know if we need to take any action? Otherwise can you please merge this PR to master?

@ChenTanyi  Thank you for approving and merging PR to master. Looking at cost management documents, it does not have my recent changes. How long does it take to see the impact of changes in document? I was wondering after merge to master, is there any other step needs to be done to show latest changes in document?

@parisa-naeimi I don't know about it. You can ask @akning-ms or<EMAIL_ADDRESS>


Confusion between ODS and EDS when proving a share range

Currently, we provide the API to prove a share range:
https://github.com/celestiaorg/celestia-app/blob/4f4d0f7ff1a43b62b232726e52d1793616423df7/pkg/proof/proof.go#L59-L73
The problem with this implementation is that it doesn't make the distinction between the ODS and the EDS. This creates the following confusion.
Given the following square:

If we assume the API only prove ODS shares, then we're not providing a full API for Blobstream rollups. Since the sequence of spans can be any place in the square.
If we assume the API provides EDS shares, then there is no way to reference share ranges that span across multiple rows.  For example, share range: [10, 25] will contain the EDS shares + ODS shares, which is not the exact requested proof. Also, the share range will not have the same namespace and the API will return an error.

Moreover, while discussing the proofs, it will be good to extend the functionality of proof generation to support multiple namespaces per proof. But this can be left for a subsequent discussion.
Update: the API proves the ODS shares, which means that we're not providing the full API for Blobstream.

Sync decision: instead of making code changes, we can just update the documentation everywhere to match the current API. And if there is demand for the improvements, we can discuss them then.