Windows compactable version

I completed the 3 steps below:

[x] I've read the Contribution Guide.
[x] I've updated the documentation. (refer to this for how to do so).
nothing to update. just fix
[x] I enjoyed my time contributing and making developer's life easier :)

for using windows version needed:
1 .env - use Cross-platform COMPOSE_FILE  version
2 add to docker-compose.yml volumes docker-compose.sync. yml
    applications:
      image: tianon/true
      volumes:
        - ${APPLICATION}:/var/www

There is easier fix for this problem:
https://github.com/laradock/laradock/pull/1293

@bagart thanks for your PR, regarding the nginx fix, I merged #1273. And I will merge #1293 for the windows file separator.


NOTE

A new issue.
Nanomq will create multiple stream which number is more than it should create.

A efficient solution has been provided at https://github.com/nanomq/NanoNNG/pull/732


Auto-port detection and Windows compilation support (more details in comment)

Additionally:

Increment byte count earlier so we are checking against length 11 instead of against length 10
Warnings resolved. -fpermissive no longer needed
Updated version number
Updated help-string to indicate -p is now optional
Updated README to indicate proper Windows compilation instructions and to include latest help-string
Can now be run with 0 parameters since -p is optional
Added self to contributors (if that is OK with you!)

Cool. By the way, you might not need -fpermissive in your regular Makefile anymore either -- if you want to test it out.


TypeScript: Error processing request. No Project

I was running "out of sources" and undid a bit of changes in dirty files (including a moved typescript file). In the console I saw the following:
shell.js:232 Error processing request. No Project.
Error: No Project.
    at Object.ThrowNoProject (/Users/bpasero/Development/Microsoft/monaco/extensions/typescript/node_modules/typescript/lib/tsserver.js:6143:23)
    at IOSession.Session.getFileAndProjectWorker (/Users/bpasero/Development/Microsoft/monaco/extensions/typescript/node_modules/typescript/lib/tsserver.js:68155:42)
    at IOSession.Session.getFileAndProjectWithoutRefreshingInferredProjects (/Users/bpasero/Development/Microsoft/monaco/extensions/typescript/node_modules/typescript/lib/tsserver.js:68149:29)
    at IOSession.Session.getCodeFixes (/Users/bpasero/Development/Microsoft/monaco/extensions/typescript/node_modules/typescript/lib/tsserver.js:68551:31)
    at Session.handlers.ts.createMap._a.(anonymous function) (/Users/bpasero/Development/Microsoft/monaco/extensions/typescript/node_modules/typescript/lib/tsserver.js:67620:61)
    at IOSession.Session.executeCommand (/Users/bpasero/Development/Microsoft/monaco/extensions/typescript/node_modules/typescript/lib/tsserver.js:68657:28)
    at IOSession.Session.onMessage (/Users/bpasero/Development/Microsoft/monaco/extensions/typescript/node_modules/typescript/lib/tsserver.js:68677:35)
    at Interface.<anonymous> (/Users/bpasero/Development/Microsoft/monaco/extensions/typescript/node_modules/typescript/lib/tsserver.js:69829:27)
    at emitOne (events.js:96:13)
    at Interface.emit (events.js:188:7)

I believe i'm experiencing the same thing.
i think vscode is caching stuff and causing this error to be totally persistent. moving project folder around seems to fix this issue until it occurs again.

Ok, it seemed that vscode doesn't like my tslint.json configuration
{
    "rules": {
        "align": [true,
            "parameters",
            "statements"],
        "ban": false,
        "class-name": true,
        "curly": true,
        "eofline": true,
        "forin": true,
        "indent": [true, 4],
        "interface-name": true,
        "jsdoc-format": true,
        "label-position": true,
        "label-undefined": true,
        "max-line-length": [true, 140],
        "member-ordering": [false,
            "public-before-private",
            "static-before-instance",
            "variables-before-functions"
        ],
        "no-arg": true,
        "no-any": false,
        "no-bitwise": true,
        "no-consecutive-blank-lines": false,
        "no-console": [true,
            "debug",
            "info",
            "log",
            "time",
            "timeEnd",
            "trace"
        ],
        "no-construct": true,
        "no-constructor-vars": false,
        "no-debugger": true,
        "no-duplicate-key": true,
        "no-duplicate-variable": true,
        "no-empty": false,
        "no-eval": true,
        "no-require-imports": false,
        "no-switch-case-fall-through": true,
        "no-trailing-whitespace": true,
        "no-unused-expression": true,
        "no-unused-variable": true,
        "no-unreachable": true,
        "no-use-before-declare": false,
        "no-var-requires": false,
        "one-line": [true,
            "check-open-brace",
            "check-catch",
            "check-else",
            "check-whitespace"
        ],
        "quotemark": false,
        "radix": true,
        "semicolon": true,
        "switch-default": true,
        "triple-equals": [true, "allow-null-check"],
        "typedef": [true,
            "call-signature",
            "parameter",
            "property-declaration",
            "member-variable-declaration"
        ],
        "typedef-whitespace": [true, {
            "call-signature": "nospace",
            "index-signature": "nospace",
            "parameter": "nospace",
            "property-declaration": "nospace",
            "variable-declaration": "nospace"
        }],
        "use-strict": false,
        "variable-name": false,
        "whitespace": [true,
            "check-branch",
            "check-decl",
            "check-operator",
            "check-module",
            "check-separator",
            "check-type"
        ]
    },
    "style": {
        "semicolon": [true, "always"]
    }
}

I will also add that i have more then one tsconfig.json in my root folder.

I have not see this error with recent typescript versions. Typescript has fixed a number of bugs since this was reported so this may have been addressed.
Please give the current vscode insiders with TypeScript 2.3.2 a try and let me know if you still see this error

I'm having this same issue on 2.3.2 with VSCode
'quickinfo' request failed with error. Error processing request. No Project.

I also have this issue with Version 1.15.1 on windows. Please advise.


Make static html from grid

Hello,
is there an easy way to generate static html out of the grid?
Best Regards

You can try set_static method https://github.com/troolee/gridstack.js#set_staticstatic_value
Alternatively you can serialize gridstack data to JS object (x, y, width, height) and generate HTML code.


doc: add respawn api function types

Developing without types is annoying so I added them to the Respawn functions.
Also expanded the list by GetPlayerArrayOfTeam_Alive and GetSortedPlayers and an example.

note: there was another big PR merged, please make sure you resolve the resulting conflicting files


🌱 crd-puller: replace fakes in tests

Summary

Replace fake client usage in crd-puller
Switch to contextual logging

Related issue(s)
Fixes #

/lgtm


win10 21h2 bsod

cpu Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz   3.30 GHz
system win10 19044.2006 21H2
https://pastebin.com/dBU3JABH

Check if VT-x and EPT is Enabled.
I hope it solves your problem.

VT-d is Enabled.

Could you send me a crash dump?

how to give you file?

FAILURE_BUCKET_ID:  0x124_0_GenuineIntel_PROCESSOR__UNKNOWN_IMAGE_GenuineIntel.sys
Could it be that my CPU model is too old?

You can upload it via https://anonfiles.com/

I am also getting a BSOD on 21H2. It only occurs when trying to sc start the hyperhide driver. Windows reports the error 'ATTEMPTED_WRITE_TO_READONLY_MEMORY' and specifies that the hyperhide driver failed.
I got the same crash message three times and I tried using both the scripts to execute the service commands as well as typing them out myself in an admin command prompt.
Here are the dumps I copied from the Windows\Minidump directory:
https://anonfiles.com/XeUfa4V8yb/013023-68765-01_dmp
https://anonfiles.com/WaUba1Vdy0/013023-61718-01_dmp
https://anonfiles.com/U8j7b5V3y4/013023-65125-01_dmp


Run test for provider rc

Description
What is the current behavior?

What is the new behavior?

Does this introduce a breaking change?
Checklist

[ ] Created tests which fail without the change (if possible)
[ ] Extended the README / documentation, if necessary

failing airflow-2.2.5 test is expected. Overall tests looks healthy with rc's

Closing as providers rc test is done


ISSUE-34-5: Allow Base64 configuration

Allow configuring base64 encoding by passing following optional values via options object.
Available options:

setBase64Encoded (boolean), defaults to false

Cherry picked into #49


Track activity of a particular binder repository

I recently made a small binder that contains some Dask examples.  I'm curious about how much traction it has, how long users stay on the page, and how this has changed over time.  This affects how much time I plan to invest in improving it.
I recently learned about https://grafana.mybinder.org (this is great by the way).  After some inspection I determined that the answer to my question above probably isn't on this dashboard.  I'm curious if that is possible though.  I (and others I suspect) would find this information useful.
I imagine that there might be some concern about privacy here.  My hope/guess is that releasing aggregate metrics of use is unlikely to infringe on anyone's privacy (especially on a public service) but I would not be surprised to learn that I was wrong.

a couple quick thoughts:

Long-term, we should make this kind of data a public stream that people can pipe into from a binderhub deploy
However that's a more medium-term goal that requires building out new tech.
In the shorter-term, I'm hoping to make occasional data dumps of google analytics data available
@jzf2101 has also been doing some cool work along these lines and hopefully we'll have something for people to scan through
Privacy is definitely a concern, and I'm not sure exactly what are the edge-cases we should be worrying about here. I think aggregating the behavior and then removing repos with a really small # users might be enough

FWIW I would like to answer this question but I don't have an answer.  I only know what repos are currently on binder.

You can get some basic popularity information out of prometheus with a notebook like https://mybinder.org/v2/gh/choldgraf/binder-stats/master?filepath=prometheus_demo.ipynb. You could also make a hacky "as a function of time" plot by varying the query window.
A related issue: public analytics&event stream (needs jupyterhub/binderhub#219)

FWIW we now have this dashboard on grafana:
https://grafana.mybinder.org/dashboard/db/pod-activity?orgId=1&panelId=1&fullscreen&from=1525118548912&to=1525129348912
Which is possible because BinderHub now logs the repo URL as a label when it posts its own prometheus metric. However, this label isn't exposed to the broader kubernetes prometheus metrics (like pod_created_at). If you could access the repo name from those metrics, then I think this would satisfy @mrocklin 's case here. Just a note.

@minrk do you know if it's possible to add repo to the other prometheus metrics we have? (at least the ones from k8s) or will this move us into the "combinatorial explosion of unique labels" problem we've discussed?

Should we put this in the documentation somewhere?

which metrics to we want repo to add to?
I think we should be putting the repo url in the pod annotations (or labels?), which I believe we can do in the BinderSpawner. This may or may not show up in the metrics (I think labels will, but annotations won't?).

From a naive user perspective here, the question I most want to answer is "How is the adoption of my particular binder doing over the last few weeks/months?"
It looks like the current dashboards are more focused on short time frames, which is probably of more relevance to people maintaining the deployment.

That's true. And our Google Analytics should have this type of info, but we can't make that public except by manual dumps.

Any thoughts on allowing binder authors to supply a google analytics token
as part of the configuration?
On Thu, May 3, 2018 at 10:08 AM, Min RK<EMAIL_ADDRESS>wrote:

That's true. And our Google Analytics should have this type of info, but
we can't make that public except by manual dumps.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/jupyterhub/binderhub/issues/504#issuecomment-386308066,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AASszDDhowmY5E5C8HvhZBwI_3STj9EPks5tuw9QgaJpZM4S9VD6
.

that's an interesting idea!

We should keep an eye on https://github.com/jupyterhub/mybinder.org-deploy/issues/500. People can already use custom templates with custom JS tracking inside their binders if they want to :-/ (I've never tried but I can't think of something that would stop me.)
Maybe we should add to our privacy statement that once you enter a binder "all bets are off" in terms of what will happen to you? It seems hard to enforce anything on the actual binders.

One thing that we don't have in this process, which I would find useful, is if we could collect total time spent by users within a binder and perhaps the distribution over that. Is there a way we could do this while stripping user info? Or even active window data? Would that be at all possible

I believe that we could get this information out of the prometheus data if we found a way to append the repo/org attributes to all prometheus metrics, instead of just to the binderhub launch metrics

@choldgraf has there been any forward movement on this sort of tracking? I saw #97, but was not able to find a resolution.

yes! thanks for mentioning it...check out https://archive.analytics.mybinder.org/ for a daily list of launches for all of the repositories on mybinder.org, does that help?

And, somewhat self-servingly, here is a binder using Dask to analyze that
data: http://examples.dask.org/applications/json-data-on-the-web.html
(binder link at the top)
(Disclaimer, dask is overkill for this, but some parts of the notebook
might be helpful anyway)
On Fri, Mar 22, 2019 at 1:29 PM Chris Holdgraf<EMAIL_ADDRESS>wrote:

yes! thanks for mentioning it...check out
https://archive.analytics.mybinder.org/ for a daily list of launches for
all of the repositories on mybinder.org, does that help?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/jupyterhub/binderhub/issues/504#issuecomment-475771080,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AASszPe7o5arGagdxEHakQdAk0V_aAZoks5vZT0_gaJpZM4S9VD6
.

I use https://github.com/betatim/binderlyzer to analyse our events archive. If you come up with interesting notebooks feel free to link to them from an issue or create a PR on that repo.

Thank you all! these were exactly the resources I was looking for.

FYI I opened up https://github.com/jupyterhub/binder/pull/160 to try making this information more discoverable. Not sure if it should close this issue or not (since this issue is about binderhub, and that documentation change is only about mybinder.org), I'll leave it up to @mrocklin to decide if it's enough :-)

Hi there 👋!
Can we move this discussion to http://discourse.jupyter.org/ (where most of the people who hang out here also hang out, as well as more people). We are trying to streamline the different discussion places and want to use the issues on GitHub repos for technical discussions on how to change the contents of the repo. More general discussions should go to discourse so that they are easier to find, better indexed by google and generally more accessible than being hidden in the bowls of a GitHub repository ;)
It seems like this issue is more about general how to do things or where to find something than changing this repo. If we want to discuss adjusting the docs we can open a new issue. So closing for now.


3.0 Annotations need javadoc

Some of the new 3.0 annotations have javadocs (class level and method level), but a lot of them are missing information, which makes it hard for new users to understand.

It would also be helpful if each of the annotations had examples on how to use them so users can have a better understanding of their purpose


Add round trip example

Build a message with a number of words
Convert message to binary
Parse binary into message
Verify that message is equal to initial

Resolved in #51


test: AdhocMetricEditPopover

SUMMARY
Tests for AdhocMetricEditPopover

@yardz Something went wrong with your last push.. 168 files changed.

@yardz Something went wrong with your last push.. 168 files changed.

It must have been the merge.

@yardz could you retry rebasing this one? Hopefully it'll resolve the merge pileup.

rebase + push --force (Solved the problem)

Did a rebase quick FYI... I sat on it too long after CI passed and more conflicts emerged.

Ok!


After Add Hosts to Nebula 2.0,the leader metad instance will have different meta data when scheduled to different nodes

Nebula version : 2.0.1
Deployment : K8S
Description :
I deploy a Nebula cluster with k8s, after a series of operations like snapshot create, space create, space drop, host add(when I add host, the graphd, metad, storaged instance count changes from 3 to 5), data balance, and I found a fatal problem.
When I restart the cluster, the leader metad instance will be scheduled to different nodes, and it will have different metadata when it was scheduled to the old nodes and the newly added nodes.
For example, when the leader metad instance is scheduled to the old nodes, it will have a space named A with space id 1, then when I restart the cluster and the leader metad instance is scheduled to the new nodes, it will have a space named B with space id 1 as well. And both spaces A and B share the storage data path under the directory ./data/storage/nebula/1/, both spaces have data but don’t have the same amount.
I have no idea how can this problem occur and I can't reproduce this phenomenon, but the aforesaid problems do exist.

Dear @turtlebin,
If I guess it correctly, this is the issue reported here: https://discuss.nebula-graph.com.cn/t/topic/4011 in the forum right?
That is, deployed with Helm.

Dear @turtlebin,
If I guess it correctly, this is the issue reported here: https://discuss.nebula-graph.com.cn/t/topic/4011 in the forum right?
That is, deployed with Helm.

Yes，this is another issue commited in Chinese，I have no idea how can this problem occur.

@MegaByte875 is replying you via the forum :-)

@MegaByte875 is replying you via the forum :-)

I have written a test process to reproduce the problem above in the forum  https://discuss.nebula-graph.com.cn/t/topic/4011. Hope that you can provide  a precious suggestion.

closed as answered via forum


use "mv" instead of "ln -sf" for prow scripts

presubmit / postsubmit already uses mv.

/assign @mandarjog
/assign @yutongz

This consistently uses mv in place of a symbolic link.
/lgtm

Just curious, do we know why symbolic link doesn't work?


fix(@angular/cli): improve rebundling speed

Forcing TypeScript to output commonjs modules instead of es2015 modules drastically improves rebuild speeds, especially for AOT.
This PR forces this option on the following modes:

ng build --watch --target=development
ng serve --target=development
ng test --code-coverage=false

Please note that --target=development and --code-coverage=false are the defaults.
See webpack/webpack#5863 for the webpack issue.

Is this an inherent issue with tsc?  There may be an opportunity to reach out to the TypeScript team to fix this if they are not already working on it.

@zackarychapple it is an issue with webpack, see the linked issue in the PR message for more details.


Problems during the training phase of the model

Traceback (most recent call last):
File "utils/prep_ctc_trans.py", line 75, in
out_line += dict[unk_word] + ' '
KeyError: ''
Traceback (most recent call last):
File "utils/prep_ctc_trans.py", line 75, in
out_line += dict[unk_word] + ' '
KeyError: ''

I believe this means that you have an invalid entry in your dictionary or your vocabulary somewhere. Please check.

@fmetze Thank you for your answer, I will take a closer look


Improve Cursor Closeable behavior

See https://groups.google.com/forum/#!topic/mybatis-user/PzTPldYdThA
The Cursor interface extends Closeable, enabling its usage in a try-with-resources construct.
Unfortunately by not explicitly overriding Closeable.close(), any try-with-resources over a Cursor forces developers to have to catch IOException, even though this isn't thrown by DefaultCursor, nor would it make much sense in any future Cursor implementation.
This change adds the below to the Cursor interface to make them easier to work with in try-with-resources :
    @Override
    void close();

It also changes Cursor to override AutoCloseable rather than Closeable, as suggested by Iwao on the google groups thread.
Technically, this is a breaking change, as existing code that either explicitly or implicitly calls Cursor.close() and currently catches IOException (even though it will never be thrown) will likely need to remove that catch-block or fail compilation. This is an easy change to make during the upgrade to the new version however, and will simplify their code and that of any future users of Cursor.
By the way the javadocs for AutoCloseable.close() explicitly mention this:
     *
While this interface method is declared to throw {@code
     * Exception}, implementers are strongly encouraged to
     * declare concrete implementations of the {@code close} method to
     * throw more specific exceptions, or to throw no exception at all
     * if the close operation cannot fail.

@hutteman Thanks for your contribution!!
I think this PR is good and reasonable improvement. However this changes has cases that broken backward-compatibility at compile time. Therefore I think PR should merge at next minor(3.6) or major(4.0) version-up.

If catch the IOException, it is broken.
If throws the IOException, it is not broken.

e.g.
@Test
public void closeTryWithResourcesWithCatch() {
  try (Cursor<Object> c = mapper.select()) {
    for (Object o : c) {
      c.isOpen();
    }
  } catch (IOException e) { // this code is broken
    e.printStackTrace();
  }
}

@Test
public void closeTryWithResourcesWithThrows() throws IOException { // this code is not broken
  try (Cursor<Object> c = mapper.select()) {
    for (Object o : c) {
      c.isOpen();
    }
  }
}

Thank you, @hutteman !
@kazuki43zoo ,
It is true that this breaks backward compatibility and that's big for sure.
But I just thought this would be a change that makes users happy even though it might surprise them at first.
I mean, if I were using Cursor, I would be dying to eliminate the unnecessary catch or throws! ;D
Anyway, as you suggested, let's plan this for the next major release for now.

How about thinking about a 3.6.x version? It's been more than 4 years since version 3.5.x @harawata  @kazuki43zoo

Yes, I also think upgrading to Java 11 would be good, are there any features rodmaps that we can think of for this new version? I think thinking about Ahead-of-Time (AOT) in a 3.6.x or 4 version would be a good idea at least an initial implementation is a move that many are making

@GeorgeSalu Head over to discussions tab, I have created a discussion for mybatis 3.6.0.  Let that server as the discussion point for any wants to the framework.  I have listed this specific item as part of that but feel free to bring up AOT there.  I've not worked with that myself so we would probably expect community help in laying out the roadmap and contributing to it.  Thanks.


Update population for SDN

Pull Request Test Coverage Report for Build<PHONE_NUMBER>1
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 93.316%

Totals

Change from base Build<PHONE_NUMBER>2:
0.0%

Covered Lines:
1396

Relevant Lines:
1496

💛  - Coveralls


OkJSON doesn't handle large JSON bodies

We had a JSON message w/ base64 encoded data that it turned out Sentry was locking up on while parsing with the included OkJSON code.  It doesn't error or anything, it just takes a very long time.  (hours) to parse just a ~9mb attachment.
https://github.com/getsentry/raven-ruby/blob/master/lib/raven/processor/sanitizedata.rb#L75
I'm willing to help w/ this fix, but I want some advice on what direction to go.  Here are a few options I can think of:

Switch to the built-in ruby json library.  Guessing this is not possible for other reasons, but it does handle the large JSON without a problem.
Add a default processor to Raven that truncates large json bodies at a limit that's acceptable for OkJSON.
Fix OkJSON?  - Not sure how feasible it is to go this route.

There's recent conversation on the subject of dropping OkJSON on #480

Very cool.  I think that move to the built-in json library would solve our issue for sure.


Support to disable traffic for WorkloadEntry

(This is used to request new product features, please visit https://discuss.istio.io for questions on using Istio)
Describe the feature request
WorkloadEntry can be used to represent external mesh VIP and select by ServiceEntry. There are some user cases that we need to disable traffic to a WorkloadEntry:

On purpose region/az exit, for example we need to disable the traffic to a specific VIP(WorkloadEntry) in one region/az.
AZ failover/Disaster recover. Let's say if all the backend servers behind a external VIP go down, we need to disable the traffic to that VIP(WorkloadEntry).

The capability to disable VIP traffic is very important for the traffic management, while currently Workload spec doesn't support based on current spec and there are some options for that:

Disable WorkloadEntry traffic if its weight is 0. As per upstream, the endpoint minimum weight should be 1 https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/endpoint/v3/endpoint_components.proto,  so Istio will configure weight 1 for the Endpoint if the WorkloadEntry weight is 0, we can leverage on this 0 weight and set the corresponding lbEndpoint HealthStatus to be HealthStatus_UNHEALTHY to achieve  this.

// GetLoadBalancingWeight returns the weight for this endpoint, normalized to always be > 0.
func (ep *IstioEndpoint) GetLoadBalancingWeight() uint32 {
	if ep.LbWeight > 0 {
		return ep.LbWeight
	}
	return 1
}

Introduce a new filed adminState in WorkloadEntry, it will also set the corresponding lbEndpoint HealthStatus to be HealthStatus_UNHEALTHY

apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
  name: details-svc
spec:
  serviceAccount: details-legacy
  address: <IP_ADDRESS>
  adminState: Down
  labels:
    app: details-legacy

Describe alternatives you've considered
Affected product area (please put an X in all that apply)
[ ] Docs
[ ] Installation
[ x] Networking
[ ] Performance and Scalability
[ ] Extensions and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure
Affected features (please put an X in all that apply)
[ ] Multi Cluster
[ ] Virtual Machine
[ ] Multi Control Plane
Additional context

Curious why do you create WLE then

Why not just delete it?

Why not just delete it?

@howardjohn  The intention to disable traffic(for region exit) and delete WLE is different although we can leverage deleting WLE to achieve this.
Envoy supports to disable an Endpoint in a Cluster through HealthStatus, that's why the minimum load_balancing_weight is 1.  Also in hardware loadbalancers we have the capability to disable VIP traffic not by deleting it.
Introducing a new filed adminState looks like to be more elegant which exactly captures this intention.

The original semantic is to allow not explicitly specify weight, just like k8s endpoint api semantic.
There are some workarounds can be used atm, such as

You can change the labels not to be selected
Make use of subsets, and only transport traffic to one subset.

The original semantic is to allow not explicitly specify weight, just like k8s endpoint api semantic. There are some workarounds can be used atm, such as

You can change the labels not to be selected
Make use of subsets, and only transport traffic to one subset.

@hzxuzhonghu The weight is good if we want to route different ratio of traffic to different endpoints and Envoy also supports it in the Endpoing load_balancing_weight. The problem is the semantic of weight 0 is ambiguous between the weighted base routing and the WLE.
We can have some workaround for this as you mentioned above, or even create an annotation like `wle.istio.io/adminState: Down"  and implement this in house, but I believe this is a valid/common request since from Envoy perspective it's supported, just need to support it in control plane.

The tricky point is we did not require user must provide a non zero weight. To elaborate a little bit, we used proto3, which does not support pointer api type, so we could not distinguish 0 or unset.

The tricky point is we did not require user must provide a non zero weight. To elaborate a little bit, we used proto3, which does not support pointer api type, so we could not distinguish 0 or unset.

@hzxuzhonghu  Then looks like option 2 is better, introduce the new filed adminState: Down/Up in WLE doesn't need to differentiate 0 or unset and it aligns with Envoy LbEndpoint health_status .

The option 2 is based on VS and DestinationRule's subset. What do you mean by new filed adminState: Down/Up in WLE

Since the intention is to set the HealthStatus of the endpoint, perhaps the field name HealthStatus in WorkloadEntry is more appropriate. The proposal is to introduce this new field and set the health_status of the endpoint.

A new field healthStatus in WorkloadEntry is also good.
@hzxuzhonghu  The intention of this field is to allow admin to manage the heath status of a WorkloadEntry. For example we can temporarily mark the WLE unhealthy for maintenance or disable traffic to that WLE without deleting it.

Thanks @howardjohn, this is like the active health check and I think it's coupled with WorkloadGroup readinessProbe. And we are looking for a capability that we can both leverage on readinessProbe and on-demand mark a WLE unhealthy.
I created another issue try to describe it as a common requirement.

Istio does support to mark WLE unhealthy and the contract is WLE annotation
proxy.istio.io/health-checks-enabled: "true"
And manipulate WLE healthy status to be False:
status:
conditions:

lastProbeTime: "2019-12-26T22:06:34Z"
lastTransitionTime: "2019-12-26T22:06:34Z"
message: 'Code 500: VIP Unhealthy'
reason: unhealthy
status: "False"
type: Healthy
It's decoupled with readinessProbe and we can have external controller to mark the status unhealthy to disable traffic or do readiness check.


should Inspector remain in this repo?

In future it could be moved to the pbjam subdirectory and be polished to read pickled peakbag results. So it becomes a proper module in pbjam.

Good plan!
How long does it take to read in on of the pickled objects?  If it takes too long, shouldn't we stick to reading in the plots as these are quick?

We do need a little more effort on the inspectr.  Perhaps we should remove it and place it in a separate repo?

Yes, I agree, but only temporary, I like it as a simple way to review the results, instead of having to set a .py or .ipynb etc.

Move Inspectr to separate repo, but make it public.


nixos/redis: Allow preStart definitions

The definition of ExecStartPre used for redis is non-composable, and causes issues if a module tries to define redis.preStart (despite the fact that these definitions can be compatible.)
This uses the approach suggested by https://github.com/NixOS/nixpkgs/pull/109976 to allow for composing use of preStart and ExecStartPre, by making the default value of ExecStartPre defined internally a list with mkBefore.
Description of changes

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Hi,
What's the status of this PR ?

The definition of ExecStartPre used for redis is non-composable, and
causes issues if a module tries to define redis.preStart (despite the
fact that these definitions can be compatible.)

Is this still true? AFAIR, at some point NixOS started automatically coercing multiple ExecStartPre definitions into a list, making this patch unneeded. Or is the mkBefore part important?


Use stderr more consistently?

Currently, any errors raised by argparse (like calling allowed -b file.py) go to stderr, everything else goes  to stdout, including due to sys.exit().

Should the latter go to stderr?
Should final warnings (e.g. method calls were not checked) also go to stderr?
While processing a folder, should all messages continue to go to stdout, or should those due to exceptions (invalid JSON for notebooks, no file found, etc.) go to stderr?
If the rationale is that if a file can't be processed, it goes to stderr, then should a syntax error in a .py file also go to stderr, but a syntax error in a cell doesn't?
Should we also return more exit codes?
How does a 'logging' output like for #62 fit into this?

What is the approach used by other linters? What do we gain by separating stdout and stderr?

RE exit codes, I like the way ruff does things (see ruff exit codes):

0 if no violations were found, or if all present violations were fixed automatically.
1 if violations were found.
2 if Ruff terminates abnormally due to invalid configuration, invalid CLI options, or an internal error.

The numbers used here are irrelevant, I like this is because it is consistent and well documented. It makes it easier to integrate with other tools when scripting or using it in pipelines.
It's the same justification for clearly separating  stderr and stdout, as was mentioned in #62 when commands are part of pipelines then you don't want error messages mixed in with the data. Of course the majority of  use cases for allowed will not involve scripts and pipelines etc, but IMHO it can't do any harm to make integration with other tools easier.
As mentioned, there are a couple of tricky cases in allowed's output that would need consideration, but I think consistency is the key. If syntax errors for .py files go to stderr then so should syntax errors for cells in .ipynb. Abnormal termination and warnings also go to stderr. Anything which is considered normal output for the program (i.e reported violations of the python subset) goes to stdout. A logging output (as per #62) is considered normal output, and, since it will have an option to switch off, can go to stdout.

While in principle I agree with you, I think this needs looking into how ruff, pylint and others separate stdout and stderr. Since there are higher priority issues to work on for 24J, I'm not going to work on this for now.


MUMUP-1853 : Exclusive max mode

I was trying to think of more fun quick things we could do for the Apereo seminar, and I got to thinking about rendering portlets in exclusive mode, kind of like the static page we have on /web. One thing led to another and... now there is a PR.
Woots

Behind beta flag
Works with uPortal and MyUW
Flippin' works
JavaScript works (thanks to trusty $sce)

Wohs

Forms, buttons, links that goto /portal (or /uPortal) render in exclusive mode on click, so... we have to deal with that sometime
Some portlets look funky
Didn't touch widgets, so beta flag is only for list view
Didn't setup add to favorite function (not hard tho)
Didn't setup rating (not hard tho)

Pictures, gifs, omg

:+1: .
It's behind a beta flag, so it isn't going to hurt anything, and even with the limitations, it's an interesting demo.
Most importantly, and the reason I'd favor merge sooner rather than later, this sets up some conversations with Unicon et al. wrt the Exclusive-mode portlet rendering they're looking at.
We can circle back on the fit and finish on this if/when it becomes important to ship this feature for reals in MyUW.  For now, more than enough here to have great Apereo conference collaborations upon.

I agree @apetro, I'll create a Jira and slip it into the sprint.

Created followup Jira for the wohs: https://jira.doit.wisc.edu/jira/browse/MUMUP-1854


Add functionality to get the cluster operator status, programatically.

Right now we don't have any way to get the cluster operator status programmatically, we should have it so command like status can consume it.

you mean, the status of a single operator?

@gbraad nope, I meant all the required operators.

check... as selective checking would sound 'wasteful' to me.

Fixed in #309


Take DirectionalLight's GlobalTransform into account when calculating shadow map volume (not just direction)

Objective
This PR fixes #5789, by enabling movable (and scalable) directional light shadow volumes.
Solution
This PR changes ExtractedDirectionalLight to hold a copy of the DirectionalLight entity's GlobalTransform, instead of just a direction vector. This allows the shadow map volume (as defined by the light's shadow_projection field) to be transformed honoring translation and scale transforms, and not just rotation.
It also augments the texel size calculation (used to determine the shadow_normal_bias) so that it now takes into account the upper bound of the x/y/z scale of the GlobalTransform.
This change makes the directional light extraction code more consistent with point and spot lights (that already use transform), and allows easily moving and scaling the shadow volume along with a player entity based on camera distance/angle, immediately enabling more real world use cases until we have a more sophisticated adaptive implementation, such as the one described in #3629.
Note: While it was previously possible to update the projection achieving a similar effect, depending on the light direction and distance to the origin, the fact that the shadow map camera was always positioned at the origin with a hardcoded Vec3::Y up value meant you would get sub-optimal or inconsistent/incorrect results.

Changelog
Changed

DirectionalLight shadow volumes now honor translation and scale transforms

Migration Guide

If your directional lights were positioned at the origin and not scaled (the default, most common scenario) no changes are needed on your part; it just works as before;
If you previously had a system for dynamically updating directional light shadow projections, you might now be able to simplify your code by updating the directional light entity's transform instead;
In the unlikely scenario that a scene with directional lights that previously rendered shadows correctly has missing shadows, make sure your directional lights are positioned at (0, 0, 0) and are not scaled to a size that's too large or too small.

I can't review the math, but I've been testing with a modified lighting.rs that moves the whole scene around and this seems to work.
It would be great if these new behaviors were documented on DirectionalLight.
I do agree that even if this isn't the ultimate solution, it would be a huge win over the status quo.

Pinging @ramirezmike

It would be great if these new behaviors were documented on DirectionalLight.

Added a section on directional light shadows, documenting how the volume (and shadow maps) work.

I checked out this PR locally and updated one of my games to use it and it works like a charm. My game has a system to update the camera's transform based on the player's transform and I just added DirectionalLight to that query filter and now the shadows work regardless of how far I'm from the origin.
I also can't comment too much on the math involved but the parts I grasp make sense and the docs are great 👍
I'll continue testing this out but pretty happy with it so far.

@superdump Do we need to adjust DEFAULT_SHADOW_NORMAL_BIAS now? Playing in the shadow_biases example, it seems like an equivalent value to the current default would now be ~0.9

@cart - the approach that I implemented a while back was to create an oriented bounding box around the view frustum of the camera and adjust the light's shadow projection based on that. I abandoned it because the shadow map quality quickly degrades with the size of the frustum.

Merged and fixed the conflicts. The system now seems to split ShadowView and GpuDirectionalLight extraction in two separate loops, I believe from #6066. That actually paired nicely with this, the code is overall a bit cleaner.
I tested it and things seem to be working properly with multiple directional lights.

This is a useful intermediate step and solves a real problem, but it is also training people to think about DirectionalLights in a non-standard way (and write code that operates under that assumption).

😕 Yeah. Please let me know if you'd like me to add a note to the docs explicitly stating that things might change in the future.

Do we need to adjust DEFAULT_SHADOW_NORMAL_BIAS now? Playing in the shadow_biases example, it seems like an equivalent value to the current default would now be ~0.9

Just tried out the example, is it really supposed to look like this?

Tried it out in main and it looks the same, so it probably isn't a result of this PR:

Or is that what you mean? That we need to tweak the values somehow so that it doesn't look like this?

That example was used to determine the current values for the default shadow bias constants.
I believe the idea is that you use the keys to adjust the biases individually until the shadows don't look bad and then use that value for the default.
But that's what I was seeking clarity from superdump about.

@superdump Do we need to adjust DEFAULT_SHADOW_NORMAL_BIAS now? Playing in the shadow_biases example, it seems like an equivalent value to the current default would now be ~0.9

Why does the normal bias need changing? What changed to need to change it? 🙂 I need to look more closely...

Why does the normal bias need changing? What changed to need to change it? 🙂 I need to look more closely...

The sqrt business, I think.

@coreh  yeah the shadow biases example is meant to start off looking bad with lots of shadow artifacts so you know what they look like and can learn how the biases impact them.

Why does the normal bias need changing? What changed to need to change it? 🙂 I need to look more closely...

The sqrt business, I think.

We changed from sqrt(2) * max(x, y) to sqrt(x^2 + y^2) practically I think. The sqrt(2) came from assuming square fragment aspect ratio so e.g. x == y and then sqrt(x^2 + x^2) == sqrt(2 * x^2) == sqrt(2) * x == sqrt(2) * max(x, x). I feel like that shouldn't have had a significant impact in default cases. Perhaps it or something else I missed does though.

The current 0.6 default still seems like a good value in the lighting example. Is it expected for users to need to tune these biases when the projection shape changes?
I just noticed the different behavior in shadow_biases where it seemed likely the current defaults were determined (because pre-this-PR the current defaults perfectly eliminate artifacts there) and thought they might need to be updated.
Really don't want to derail this if it's very unlikely to affect normal users though.

I'm down to merge this. Changing shadow bias behavior (for a given value) should be avoided unless absolutely necessary as artists will carefully tune the value to their specific scenes. It seems like doing it here was necessary though. And changing the default value is less destructive than changing the algorithm, so I'm happy to change that later if we later find a better value.

bors r+


no optional head file found

hi
I am just download the newest code.  When I am make this project.   The errors occur like this
ubuntu@xiejunyi:~/eos/build$ make -j4
Scanning dependencies of target generate-obj
Scanning dependencies of target fit-model
Scanning dependencies of target fit-model-simple
[ 16%] Building CXX object examples/CMakeFiles/generate-obj.dir/generate-obj.cpp.o
[ 33%] Building CXX object examples/CMakeFiles/fit-model.dir/fit-model.cpp.o
[ 50%] Building CXX object examples/CMakeFiles/fit-model-simple.dir/fit-model-simple.cpp.o
In file included from /home/ubuntu/eos/include/eos/render/render.hpp:28:0,
from /home/ubuntu/eos/examples/generate-obj.cpp:23:
/home/ubuntu/eos/include/eos/render/detail/render_detail.hpp:37:20: fatal error: optional: No such file or directory
compilation terminated.
examples/CMakeFiles/generate-obj.dir/build.make:62: recipe for target 'examples/CMakeFiles/generate-obj.dir/generate-obj.cpp.o' failed
make[2]: *** [examples/CMakeFiles/generate-obj.dir/generate-obj.cpp.o] Error 1
CMakeFiles/Makefile2:121: recipe for target 'examples/CMakeFiles/generate-obj.dir/all' failed
make[1]: *** [examples/CMakeFiles/generate-obj.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
In file included from /home/ubuntu/eos/include/eos/fitting/RenderingParameters.hpp:25:0,
from /home/ubuntu/eos/examples/fit-model-simple.cpp:25:
/home/ubuntu/eos/include/eos/fitting/orthographic_camera_estimation_linear.hpp:34:20: fatal error: optional: No such file or directory
compilation terminated.
What should I do? Is this optional file from Boost?

Please read the Readme and the Release notes. The latest eos versions require a C++ compiler which has <optional>.
Alternatively you can try replacing it with boost optional or something like akrzemi1/Optional but that's not something that will be supported going forward. I recommend updating your compiler.

eos can now transparently use akrzemi1/Optional (it's included in the eos headers) when there is no <optional> yet. Currently there is only a check for #ifdef __APPLE__ but I think it could be modified for other compilers too. The changes are merged into master and present from eos v0.15.0.


Media Library: Incorrect use of aria-label

Bug Description

Images and videos in the media library incorrectly have aria-label attributes.
Both should only have alt attributes.
Offending code:
https://github.com/google/web-stories-wp/blob/4c891bd2b6b10815c72b06d7bbccd15718da79b1/assets/src/edit-story/components/library/panes/media/common/innerElement.js#L135-L167
Expected Behaviour

No usage of aria-label. Just alt
Steps to Reproduce

Screenshots

Additional Context

Plugin Version: 1.7
WordPress Version: 5.7
Operating System: macOS
Browser: Chrome

Do not alter or remove anything below. The following sections will be managed by moderators only.
Acceptance Criteria

Implementation Brief

Remove the two aria-label props in the code section shared above

As far I know, video tags do not support alt tags. It should be removed on video tags.

As far as I understood, you wanted to remove 'aria-label' and just let alt be. But you mentioned that title is also an option with good support. So you want to make it 'title': alt?
I am sorry if I am wrong anywhere. I am fairly new to open-source development, I am still exporing.

I created a draft PR to solve this issue, I am looking forward for any improvement suggestions.


fix: fix a potential error when the class of theme toolbar is injected with any other class by some browser plugins.

This error may be thrown when the browser installed some extension plugins, as it is shown in the screenshot above. Those plugins may inject some extra classes for their own work. In this case, the current logic to fetch the theme name from class names is not enough exact. A suggested change has been listed below.
Before
var theme = $(this).attr('class').replace('selected', '').trim();

Changes
var theme = $(this).data('theme');

I've tried to use a data attribute named data-theme as the theme name and I'm sure it won't be modified by those plugins.

BTW, this PR fixes the flaw in nav style as well(keep the nav style consistent with echarts-www).


CrosshairInternal on st.dates / st.datetimes

Somehow, kwargs["max_value"] (and only max_value) on an integer ir node becomes symbolic here and errors when we go to cache based off it. This only happens on dates/datetimes so I'm suspecting crosshair interception there causes some of our code to be colored symbolically, but hypothesis' date strategy code may also be at fault.
@given(st.dates())
def f(d):
    pass
f()

  ... (truncated)
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/internal/conjecture/engine.py", line 475, in test_function
    self._cache(data)
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/internal/conjecture/engine.py", line 381, in _cache
    self.__data_cache_ir[key] = result
    ~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/internal/cache.py", line 111, in __setitem__
    i = self.keys_to_indices[key]
        ~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/opt/homebrew/lib/python3.12/site-packages/crosshair/libimpl/builtinslib.py", line 1143, in __hash__
    return self.__index__().__hash__()
           ^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.12/site-packages/crosshair/libimpl/builtinslib.py", line 1154, in __index__
    space = context_statespace()
            ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.12/site-packages/crosshair/statespace.py", line 247, in context_statespace
    raise CrosshairInternal
crosshair.util.CrosshairInternal

patch
Here's a logging patch that narrows the problem, if it's helpful:
diff --git a/hypothesis-python/src/hypothesis/internal/conjecture/engine.py b/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
index eb326f59a..708e48904 100644
--- a/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
+++ b/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
@@ -456,6 +456,7 @@ class ConjectureRunner:
                 if self.settings.backend != "hypothesis":
                     for node in data.examples.ir_tree_nodes:
                         value = data.provider.post_test_case_hook(node.value)
+                        print("kwargs should not be symbolic", type(node.kwargs["max_value"]))
                         expected_type = {
                             "string": str,
                             "float": float,

With this, I get
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'int'>
kwargs should not be symbolic <class 'crosshair.libimpl.builtinslib.SymbolicInt'>

followed by the above stacktrace error.

Oh this is fun. So I think hypothesis generates a max_value bound when it draws the integer for the day part (because the max day number varies depending on the year and month) - here. I hadn't anticipated that the draw parameters might be symbolic, but after a skim of the code, I think this should still work from the crosshair side.
I'd look for you on suggestions about what to do next though. We might just need to realize every key or something?

I think so. I get a new error when realizing kwargs post test case though:
diff --git a/hypothesis-python/src/hypothesis/internal/conjecture/engine.py b/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
index eb326f59a..b5584d3db 100644
--- a/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
+++ b/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
@@ -467,9 +467,11 @@ class ConjectureRunner:
                             raise HypothesisException(
                                 f"expected {expected_type} from "
                                 f"{data.provider.post_test_case_hook.__qualname__}, "
-                                f"got {type(value)} ({value!r})"
+                                f"got {type(value)}" # printing symbolic values = bad
                             )
+
                         node.value = value
+                        node.kwargs = {k: data.provider.post_test_case_hook(v) for k, v in node.kwargs.items()}

                 self._cache(data)
                 if data.invalid_at is not None:  # pragma: no branch # coverage bug?

You can add @seed(58283928597073102201375559339070102338) to this test to reproduce this failure.
Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.12/site-packages/hypothesis_crosshair_provider/crosshair_provider.py", line 100, in per_test_case_context_manager
    yield
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/core.py", line 964, in execute_once
    result = self.test_runner(data, run)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/core.py", line 737, in default_executor
    return function(data)
           ^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/core.py", line 875, in run
    kw, argslices = context.prep_args_kwargs_from_strategies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/control.py", line 157, in prep_args_kwargs_from_strategies
    obj = check(self.data.draw(s, observe_as=f"generate:{k}"))
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/internal/conjecture/data.py", line 2425, in draw
    return strategy.do_draw(self)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/strategies/_internal/lazy.py", line 167, in do_draw
    return data.draw(self.wrapped_strategy)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/internal/conjecture/data.py", line 2419, in draw
    return strategy.do_draw(self)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/strategies/_internal/datetime.py", line 148, in do_draw
    result = self.draw_naive_datetime_and_combine(data, tz)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/strategies/_internal/datetime.py", line 162, in draw_naive_datetime_and_combine
    result = draw_capped_multipart(data, self.min_value, self.max_value)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/strategies/_internal/datetime.py", line 117, in draw_capped_multipart
    val = data.draw_integer(low, high)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tybug/Desktop/Liam/coding/hypothesis/hypothesis-python/src/hypothesis/internal/conjecture/data.py", line 2091, in draw_integer
    value = self.provider.draw_integer(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.12/site-packages/hypothesis_crosshair_provider/crosshair_provider.py", line 178, in draw_integer
    symbolic = proxy_for_type(int, self._next_name("int"), allow_subtypes=False)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.12/site-packages/crosshair/core.py", line 606, in proxy_for_type
    return proxy_factory(recursive_proxy_factory, *type_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.12/site-packages/crosshair/libimpl/builtinslib.py", line 4069, in make
    if space.fork_parallel(
       ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.12/site-packages/crosshair/statespace.py", line 791, in fork_parallel
    assert isinstance(node, ParallelNode)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
while generating 'd' from datetimes()

any ideas?

well, I have something that works, but I doubt you'll be happy about it 😄
I think the root cause of the above error is nondeterminism from hypothesis operating on symbolic kwargs, before we do anything with them. For instance, caching kwargs to reduce memory.
I've worked around this by realizing all symbolic kwargs as soon as we get them, via post_test_case_hook (renamed realize):  https://github.com/HypothesisWorks/hypothesis/compare/master...tybug:hypothesis:backend-realize?expand=1. If I understand correctly this handicaps crosshair's ability to reason about the value after the point this occurs. At the same time, I'm not sure avoiding prematurely realizing kwargs is practical in the hypothesis engine...though @Zac-HD may have opinions there. For instance, we'd probably have to disable this pooling behavior.

well... strategies where the arguments are provided by other strategies is a core feature for Hypothesis - see for example the .flatmap() method!  We're going to have to find some way of dealing with this, at whatever cost to our internals 🫠

Would a avoid_realization = False variable that backends like crosshair can set to True be acceptable? We can disable anything that would realize if set, like DataTree or kwargs pooling. I'd like to avoid tanking performance for other (slightly more sane 😄) backends that don't need this.

Yeah, that seems pretty good to me - and skipping DataTree when it's basically redundant with crosshair's internals seems pretty reasonable tbh.

and skipping DataTree when it's basically redundant with crosshair's internals

I also thought this at first, but if we mix backends in the future it'd be nice to share deduplication information! That's far enough away that I'm not thinking about it too much though. post-inserting into DataTree is probably doable, though there's enough subtle interactions there that I'd have to try it to see.

Seems to work well enough: https://github.com/HypothesisWorks/hypothesis/compare/master...tybug:hypothesis:backend-realize?expand=1. I also had to disable @cacheable strategies - we'll see how bad of a performance hit that is 😄

works with hypothesis-crosshair v0.0.7 👍


round number of shares to the nearest int

make round_order round number of shares to the nearest int

@vikram-narayan did you want to rebase on this branch?

Yeah, I was holding off on rebasing since rebuild_example_data depended on yahoo - if we're good on that front I can rebase

Yeah I think we should be good on that b/c of merging #1812


Improve failure tolerance

Currently we always use the first nameserver only. If that one fails, it should retry with the next server.

Fixed in the Amp v2 version.


[CALCITE-4897] Fix incomplete implicit type cast

2615

 Quality gate: Passed
 Everything looks good
Details


Detect hipcc in compile_commands.json

When programming in AMD HIP, clangd by default does not recognize HIP-specific (or CUDA-specific) constructs (such as kernel launch with <<<>>>). I can fix this by adding -x hip to the file in compile_commands.json, but this is rather inconvenient since I'd rather be able to use the file generated by my build system directly.
HIP source files use hipcc as their compiler by default. Would it be possible to detect that the compiler is called hipcc and then automatically use HIP as input langauge?
I have no idea what clangd uses to distinguish between input languages (e.g. C, C++, CUDA) currently, but I don't think detecting by file extension would work, as HIP source files tend to just be called .cpp. AMD has not defined another normal extension such as .hip.

HIP source files use hipcc as their compiler by default.

What does this mean exactly? How does build system know to use hipcc? How does build system distinguish HIP source files from the rest of .cpp files?

Generally, clangd aims for compatibility with the C-family languages clang supports, and to parse args the same way.
If mainline clang supports hip files, would it make sense to have clang parse as hip by default when invoked as hipcc, as it parses as c++ by default when invoked as clang++ etc?

What does this mean exactly? How does build system know to use hipcc? How does build system distinguish HIP source files from the rest of .cpp files?

Well, it all depends on how you set up your build system of course :) I'm fairly new to HIP, so I used what I found in some AMD sample based on CMake, which sets the C++ compiler to hipcc and sets some other flags.

Generally, clangd aims for compatibility with the C-family languages clang supports, and to parse args the same way.
If mainline clang supports hip files,

Clang does indeed support hip files, otherwise adding -x hip wouldn't do anything except throw an error! (When I tried to actually use it last time I did get a linker error but that's beside the point for clangd).

would it make sense to have clang parse as hip by default when invoked as hipcc, as it parses as c++ by default when invoked as clang++ etc?

Interesting, does clangd just invoke clang with the arguments (including name) from compile_commands.json? Because if so, adding hipcc as a supported name sounds like it could work.

I can fix this by adding -x hip to the file in compile_commands.json, but this is rather inconvenient since I'd rather be able to use the file generated by my build system directly.

A workaround that may be more palatable until a proper fix is in place is to use a clangd config file to add the -x hip (see https://clangd.llvm.org/config.html#add).

Interesting, does clangd just invoke clang with the arguments (including name) from compile_commands.json?

It doesn't invoke clang as a subprocess, but it links in the same libraries that clang does (including the code for interpreting the compiler command line) and performs substantially the same processing as the front-end part of clang.

@HighCommander4

A workaround that may be more palatable until a proper fix is in place is to use a clangd config file to add the -x hip (see https://clangd.llvm.org/config.html#add).

Is add -x hip on .clangd file works for you? I added it, but got an error message: Language not recognized: ' hip'.

Oh, I know! Its '-xhip', NOT '-x hip'


feat(BehaviorSubject): add getValue method to access value

adds getValue method to get inner value
further hides the value as _value
adds value property getter
purposefully excludes value property setter
adds tests around getValue method and value property

fixes #758

Change looks good to me except missing nextTick makes build failed.

Merged with ef83066... thank you for the review @kwonoj


Added loader during transcript and schedule import

See issue https://github.com/UWFlow/rmc/issues/95
Changes

Changed server/static/img/bar-loader.gif background from white to transparent
Loader appears when a users uploads a transcript and it is being parsed
Loader appears when a user uploads a schedule and it is being parsed

When a user uploads a transcript or schedule, there is now an animated loader that appears to indicate parsing.

The same loader appears for the schedule modal.

Fantastic, thank you!


label-warn for other modules

I think it would make sense to be able to have warning thresholds for the memory, cpu, and battery modules as well.

You could already achieve the same behavior by using <ramp> if the module have support for it. For example:
[module/cpu]
type = internal/cpu
format = <ramp-load>

ramp-load-0 = low
ramp-load-0-foreground = #0f0
ramp-load-1 = medium
ramp-load-1-foreground = #ff0
ramp-load-2 = high
ramp-load-2-foreground = #f00

# or

ramp-load-0 = normal
ramp-load-1 = normal
ramp-load-2 = normal
ramp-load-3 = warning

I tried that initially, but it doesn't seem possible to use %percentage% outside of the label. Also the memory module doesn't have <ramp>, and it would be more precise and less verbose to be able to use a specific value for a threshold.

noctuid, did you find a way to achieve this?  I'm looking for the same feature.  Would be great to have greater visual distraction when my RAM usage is getting up there.

It is a great idea. I implemented it for memory in #2142, and want to implement it for CPU as well.

Love this idea, I also would like to be able to set arbitrary warning thresholds (e.g. RAM and swap percentages, even network download/upload speeds, and perhaps eventually disk read/write speeds if a disk I/O module is implemented) and thus conditional label warn foreground colors. Pretty much everything in my polybar is just colored an unobtrusive white and only changes color IF something actually changes, e.g., I have a custom script module that only changes to red if my ISP has changed my WAN ipv4 and/or ipv6 address(es).

I'm working on this feature. It has been implemented succesfully on the memory, cpu and filesystem modules, only the battery module left and I will upload the code.
But I was wondering, do you need a warning on the alsa/pulseaudio module? Maybe for protection from loud sounds? If so, I will implement this feature on those modules too.

Implemented in #2199


isotope_data is optional for FluxContrib, FluxTarget

Codecov Report

Merging #20 (1212c39) into main (ab872b6) will decrease coverage by 0.62%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##             main      #20      +/-   ##
==========================================
- Coverage   53.82%   53.19%   -0.63%
==========================================
  Files          37       37
  Lines        3560     3502      -58
==========================================
- Hits         1916     1863      -53
+ Misses       1644     1639       -5

Impacted Files
Coverage Δ

src/data/IsotopeData.jl
44.61% <ø> (-1.71%)
:arrow_down:

src/reactioncatalog/Fluxes.jl
80.76% <ø> (ø)

src/CellRange.jl
37.50% <0.00%> (-6.95%)
:arrow_down:

src/Parameter.jl
51.26% <0.00%> (-4.13%)
:arrow_down:

src/utils/SIMDutils.jl
44.68% <0.00%> (-2.80%)
:arrow_down:

src/reactionmethods/RateStoich.jl
72.41% <0.00%> (-2.59%)
:arrow_down:

src/ModelData.jl
55.55% <0.00%> (-2.34%)
:arrow_down:

src/data/ArrayScalarData.jl
44.00% <0.00%> (-2.16%)
:arrow_down:

src/utils/IteratorUtils.jl
23.23% <0.00%> (-1.53%)
:arrow_down:

... and 13 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update ab872b6...1212c39. Read the comment docs.


Improve Cover Experience

Recently stated customer feedback:

As a user I want to immediately know if it is the cover or product no matter what the artist is trying to sell.

Ideally for our covers, we want to take the watermarked feature image (if provided) and apply it to a templated image that frames/borders it and provides a nice visual experience while also signaling that it's a cover.  I'll post other ideas around this as they emerge.
Additional pertinent/valuable feedback:

Basically a filigree or other design that surrounds the front and/or back of the magic cards
The important thing I want to stress is being able to immediately identify a cover vs inside no matter the artist

Basically the digital equivalent of this:
https://www.amazon.com/Sized-Sleeves-Character-Guard-Standard/dp/B00BFLY7XY

We stopped at such minimal look as far as I remember.

We stopped at such minimal look as far as I remember

I sorta think this. too? :)  how about a callout on the bottom right corner that says "starbeam.one Presents"

There is also a nice template by Swiftwater Arts.

I am also open to doing this, along with presenting both the cover and the featured image somehow 🤔

It's a good start.  I don't want to take up too much space and the presents should be minimal.
On second though you had something similar earlier and that might work better. I am wondering if we take up the entire bottom and have starbeam.one along w/ the logo on left, and Cover Image on the right 🤔
so contract the viewport of the frame and bring more blue on the bottom.  Wonder if that makes sense...

Tried beige as the background color.

Try moving the divets to the top of the image, make sense?  think of what we're adding to it as a bar (or banner ad) that sits below the frame you originally made here.

By the word "divets" you mean the polygons in the corners of the frame? And what banner color would you prefer?

 I'll implement this!

Getting close!  I put those lines in there as a reference point for what I was thinking.  I wanted to move the entire border as you had it previously as-is and introduce the banner ad as you have done.  The banner looks great.  Can you re-introduce your previous border?  I'd also like to remove Cover Image and see how that looks.  I'd also like to see if we can reduce the height of the banner. 🤔

No problem :)

✅  I'd like to see the light banner ad along with logo as prior to this one please :) 🙏  I like the translucent as it makes the picture seem bigger and not as infringed, if that makes sense.

Horray ... now how about when width is greater than height? :)

Not the best pick though as there is a lot of dark blue in the original image so the frame isn't that noticeable.

Now I kinda wanna put an actual banner ad on it 🤣
Looks good.  Now I need to implement it which will be difficult.  It needs to account for every size and look good.
I hate to pick at this.  But wondering if there is a way to denote "cover image" without saying it? 🤔  It looks good, but wonder if people will understand what this is by looking at it.
I am having a customer who has been struggling with this take a look. If they give the ✅ then we know we're on the right path because they are REALLY confused by this 🤣  (and aren't the only one, either 😬)

Well, we have the whole team on Discord and Twitter, luckily. Why not give them to test? Don't be shy :D

They are not confused by covers and rather like them.  It's those outside of our community that are struggling with this concept.

Sounds like a winner from our customer with the following feedback:

As with good subtitles in shows, you'll want a shadow or outline to provide two tones, so that no matter the backdrop they don't blend together.

👍

So, I added a harsh shadow, to make the frame stand out.

Awesome.  we can use CSS for the frame's outer shadow and PNG/translucency for the inner shadow 👍
Can I bother you for the four scenarios?

Horizontal dark (pictured already)
Vertical dark
Horizontal light
Vertical light

That will help bring any additional issues to "light" 😏  Thank you for your efforts here. 🙏

Here's a good vertical :)
https://alpha.starbeam.one/market/products/23a3b205-c3f5-4fbe-9718-08daaad7102a

So, I've been experimenting with this one. The issue is that black shadow looks pronounced with darker images but "dirty" with those painted in lighter colors. I decided to make a dark blue outline, to give the illusion of volume to the frame but to make it interfere less with the image. Also, I gave a blur to the outline but only the slightest in order to avoid the "smeared" look.
Yeah, I will be glad to try with the watermark as well :)

👍  Those shadows + design look really nice. 💖
I may have thrown us for a loop because we are no longer displaying the images in full but they are now capped to 256px for the product cards, both width and height.  Please see the latest deployment on our site to see how this looks now:

Cards are more compact now which may impact the design here.
Perhaps we need to see how these look in a grid for the full picture 😬
But also, what we're designing here doesn't have to rely on what we have now.  This is sort of the next iteration of what we have, if that makes sense, but can improve on what we are doing (if we can).

Anything is possible w/ software :D
Is this something you are thinking with current/deployed design or the new cover design?

I'm just thinking that the frame can't go with wide blue borders already existing :) So would've been cool if thumbnails filled the containers fully. Well, and the layout will get a more even, balanced look, then.

Oh, I see.  Yes, this is a carryover from the template we're using.  I am tied to it especially since we have a designer. :)  I wish I could just hand you the CSS and fix it to how you think it should look. 😭
I suppose what you could do is modify the CSS locally and then pass it over to me and I can handle in the edits? 🤔

Well, you said you do the CSS in Notepad? I guess Notepad and VS Code are compatible? Can we collaborate with these programs?

CSS is basic text, I can use notepad++ or Visual Studio.  If you get sophisticated enough you can have Chrome/Edge/FireFox save that CSS locally from a site and you can make edits to it and see it update in real-time.  I have never gotten this to work (didn't spend a lot of time) but it's possible.
You could edit the CSS and send it my way.  I could then check it into source control and send out a commit.
there are two files you'll see in Developer Tools Sources tab (F12 and you should see it):

Corrections.css (This is the overrides from existing themes taken from other sources and controls)
Application.css (This is all the primary CSS of the application and custom work that I have done)

I can work further with you on this, just let me know what you need. 👍

Adding some watermark assets by xzakutive:
![UUDbtWNz](https://user-images.githubusercontent.com

/2931376/224768889-8467a877-1073-4185-abf8-71ecd5af5eb8.png)

A little update. Soft blue shadow version.

So the image you left me with is not the image I ended up using.  I used my Fung Shui and spaced it out a bit and resized the stars a bit they look like they are twinkling a bit (I'd like to think) :D
Here are the final images:

The stars are set to 75% opacity and the background is 25% which is pretty low.  Maybe I should try 33%? 🤔  Anyways, now that we have our watermark can we see a potential cover with all elements, pretty please @greenbrook? (polite because I am asking on the weekend but you of course do not have to do it on the weekend :))  Horizontal and vertical? 🙏

Wow I just realized the big dipper made it into our watermark after all 🤣 🤦♂

and the background is 25% which is pretty low. Maybe I should try 33%? 🤔

I tried 27.5% and that seemed too noticeable, so 25% it is.

There is a lot of stuff here, I just want to get my ideas in here, these may have already been stated, I didn't read the above.

Cover indicator: Maybe like a folded back corner of the cover, so it looks like it can be opened

Maybe putting your mouse over this corner indicator, shows a small preview of the actual picture

Maybe a listing option to show the contents more, or to hide covers


dApp mobile: List necessary UI adjustments for making dApp look good on "all" screens

Description
The UI for the mobile version of the dApp should not break in either functionality or layout.
Acceptance criteria

The mobile dApp works and looks good on iOS and Android.

ToDo

[ ] Make the dApp look good from screen size 320x568 and up

Tasks

[x] Test on different screen sizes and browsers (look up css break points for mobile)
[ ] Safe zone margins
[ ] Create new issues if bigger layout changes needs to be made.

iOS emulator
Results looks quite well to me

Looks the same for me, so wonder how come the layout was overlapping on the initial run.

I tested the dapp on a bunch of different mobiles and tabs viewport the only real screen where I encountered some problem is the screen which you see below (and this was also due to low resolution low viewport mobile). My laptop is fortunately touch screen I didnt realise that earlier but I have tried this using my laptop in touch screen mode and the buttons are mostly responsive.
In lower resolution or lower viewports there is a scroll which is introduced which does not break or introduce any wierd CSS glitches when the keyboard is brought up which is a pretty good sign.

TODO: Test on different screen sizes and browsers.

Backup State

[ ] Fix broken header
[ ] Make scrollbar "invisible", remove blue scrollbar

UDC

[ ] Fix broken info overlay
[ ] Fix broken withdrawal dialog

Open Channel

[ ] Fix broken header
[ ] Fix broken info overlay

Select Hub

[ ] Fix broken mint token dialog

Transfer

[ ] Fix broken info overlay
[ ] Fix out of shape + icon in "Change Token" overlay

Channels

[ ] Fix broken info overlay
[ ] Make withdrawal icon visible
[ ] Fix broken close channel dialog

Notifications

[ ] Fix broken card layout

Account

[ ] Fix horisontal scrolling due too long address
[ ] Fix account menu items (seems to be only displaying three and missing the rests)

Direct Transfer

[ ] Fix broken info overlay

Mediated Transfer

[ ] Fix transfer summary which breaks when there is a lot of information
[ ] Fix PFS list


HELP: The correct Ngnix configuration is?

I can get this package working (locally) but I have never had any success in running on a production server.
Can anybody help out here?
As per official documentation (and I guess for most solutions) I want to run on the same server and same Ngnix instance.
I want it to be secure (SSL should just be standard now, especially since LetsEncrypt is easliy available)
This therefore seems the obvious starting point
https://beyondco.de/docs/laravel-websockets/basic-usage/ssl#same-location-for-websockets-and-web-contents
So following the example
server {
  # Your default configuration comes here...

And given that the default configuration is
https://laravel.com/docs/5.8/deployment#nginx
I use this on my server but get the obligatory error the users of this package are familiar with...
Firefox can't establish a connection to the server at wss://staging.gigsforstreamers.com:6001/app/c852e217e8230dc977b3?protocol=7&client=js&version=7.0.3&flash=false. app.js:27069:15 The connection to wss://staging.gigsforstreamers.com:6001/app/c852e217e8230dc977b3?protocol=7&client=js&version=7.0.3&flash=false was interrupted while the page was loading.
I would so love for this package to work!
This is the ngnix config I'm trying (and to no avail)
`# Ploi Webserver Configuration, do not remove!
include /etc/nginx/ploi/staging.gigsforstreamers.com/before/*;

server {
    listen 80;
    listen [::]:80;

    root /home/ploi/staging.gigsforstreamers.com/public;
    server_name staging.gigsforstreamers.com;

    include /etc/nginx/ssl/staging.gigsforstreamers.com;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparams.pem;

    index index.php index.html;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    charset utf-8;

    # Ploi Configuration, do not remove!
    include /etc/nginx/ploi/staging.gigsforstreamers.com/server/*;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    access_log off;
    error_log  /var/log/nginx/staging.gigsforstreamers.com-error.log error;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_buffers 16 16k;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

      location /app/  {
        proxy_pass             http://<IP_ADDRESS>:6001;
        proxy_set_header Host  $host;
        proxy_read_timeout     60;
        proxy_connect_timeout  60;
        proxy_redirect         off;

        # Allow the use of websockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
      }
}

# Ploi Webserver Configuration, do not remove!
include /etc/nginx/ploi/staging.gigsforstreamers.com/after/*;`

Hey!
Can you post your websockets.php, broadcasting.php, I'll correct those first, and then give a simplified nginx server config.

`<?php
use BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize;
return [
/*
 * Set a custom dashboard configuration
 */
'dashboard' => [
    'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
],

/*
 * This package comes with multi tenancy out of the box. Here you can
 * configure the different apps that can use the webSockets server.
 *
 * Optionally you specify capacity so you can limit the maximum
 * concurrent connections for a specific app.
 *
 * Optionally you can disable client events so clients cannot send
 * messages to each other via the webSockets.
 */
'apps' => [
    [
        'id' => env('PUSHER_APP_ID'),
        'name' => env('APP_NAME'),
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'enable_client_messages' => false,
        'enable_statistics' => true,
    ],
],

/*
 * This class is responsible for finding the apps. The default provider
 * will use the apps defined in this config file.
 *
 * You can create a custom provider by implementing the
 * `AppProvider` interface.
 */
'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class,

/*
 * This array contains the hosts of which you want to allow incoming requests.
 * Leave this empty if you want to accept requests from all hosts.
 */
'allowed_origins' => [
    //
],

/*
 * The maximum request size in kilobytes that is allowed for an incoming WebSocket request.
 */
'max_request_size_in_kb' => 250,

/*
 * This path will be used to register the necessary routes for the package.
 */
'path' => 'laravel-websockets',

/*
 * Dashboard Routes Middleware
 *
 * These middleware will be assigned to every dashboard route, giving you
 * the chance to add your own middleware to this list or change any of
 * the existing middleware. Or, you can simply stick with this list.
 */
'middleware' => [
    'web',
    Authorize::class,
],

'statistics' => [
    /*
     * This model will be used to store the statistics of the WebSocketsServer.
     * The only requirement is that the model should extend
     * `WebSocketsStatisticsEntry` provided by this package.
     */
    'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class,

    /**
     * The Statistics Logger will, by default, handle the incoming statistics, store them
     * and then release them into the database on each interval defined below.
     */
    'logger' => BeyondCode\LaravelWebSockets\Statistics\Logger\HttpStatisticsLogger::class,

    /*
     * Here you can specify the interval in seconds at which statistics should be logged.
     */
    'interval_in_seconds' => 60,

    /*
     * When the clean-command is executed, all recorded statistics older than
     * the number of days specified here will be deleted.
     */
    'delete_statistics_older_than_days' => 60,

    /*
     * Use an DNS resolver to make the requests to the statistics logger
     * default is to resolve everything to <IP_ADDRESS>.
     */
    'perform_dns_lookup' => env('LARAVEL_WEBSOCKETS_PERFORM_DNS_LOOKUP', true),
],

/*
 * Define the optional SSL context for your WebSocket connections.
 * You can see all available options at: http://php.net/manual/en/context.ssl.php
 */
'ssl' => [
    /*
     * Path to local certificate file on filesystem. It must be a PEM encoded file which
     * contains your certificate and private key. It can optionally contain the
     * certificate chain of issuers. The private key also may be contained
     * in a separate file specified by local_pk.
     */
    'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),

    /*
     * Path to local private key file on filesystem in case of separate files for
     * certificate (local_cert) and private key.
     */
    'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),

    /*
     * Passphrase for your local_cert file.
     */
    'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null),
    'verify_peer' => false,
],

/*
 * Channel Manager
 * This class handles how channel persistence is handled.
 * By default, persistence is stored in an array by the running webserver.
 * The only requirement is that the class should implement
 * `ChannelManager` interface provided by this package.
 */
'channel_manager' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class,

];
`

`<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "pusher", "redis", "log", "null"
|
*/

'default' => env('BROADCAST_DRIVER', 'null'),

/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over websockets. Samples of
| each available type of connection are provided inside this array.
|
*/

'connections' => [

    'pusher' => [
        'driver' => 'pusher',
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'app_id' => env('PUSHER_APP_ID'),
        'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'encrypted' => true,
            'host' => '<IP_ADDRESS>',
            'port' => 6001,
            'scheme' => 'https',
            'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
            ],
        ],
    ],

    'ably' => [
        'driver' => 'ably',
        'key' => env('ABLY_KEY'),
    ],

    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
    ],

    'log' => [
        'driver' => 'log',
    ],

    'null' => [
        'driver' => 'null',
    ],

],

];
`

return [

    /*
    |--------------------------------------------------------------------------
    | Default Broadcaster
    |--------------------------------------------------------------------------
    |
    | This option controls the default broadcaster that will be used by the
    | framework when an event needs to be broadcast. You may set this to
    | any of the connections defined in the "connections" array below.
    |
    | Supported: "pusher", "redis", "log", "null"
    |
    */

    'default' => env('BROADCAST_DRIVER', 'null'),

    /*
    |--------------------------------------------------------------------------
    | Broadcast Connections
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the broadcast connections that will be used
    | to broadcast events to other systems or over websockets. Samples of
    | each available type of connection are provided inside this array.
    |
    */

    'connections' => [

        'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'encrypted' => true,
                'host' => '<IP_ADDRESS>',
                'port' => 6001,
                'scheme' => 'https',
                'curl_options' => [
                    CURLOPT_SSL_VERIFYHOST => 0,
                    CURLOPT_SSL_VERIFYPEER => 0,
                ],
            ],
        ],

        'ably' => [
            'driver' => 'ably',
            'key' => env('ABLY_KEY'),
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

        'log' => [
            'driver' => 'log',
        ],

        'null' => [
            'driver' => 'null',
        ],

    ],

];

Use scheme http in websockerts.php
Also, can you try the server block code here?

@lovetoast and remove?
'curl_options' => [
      CURLOPT_SSL_VERIFYHOST => 0,
      CURLOPT_SSL_VERIFYPEER => 0,
],```

@lovetoast and remove?
'curl_options' => [
      CURLOPT_SSL_VERIFYHOST => 0,
      CURLOPT_SSL_VERIFYPEER => 0,
],```

I don't think that is required, no, so it shouldn't make a difference.

So, yes, my websockets are connecting but now my "Events" are failing...

Is perform dns lookup enabled?

So, yes, my websockets are connecting but now my "Events" are failing...

With a Failed to connect to Pusher. exception...

Is perform DNS lookup enabled?

@rennokki I'm open to drafting a new page for a fresh install with nginx, I think that would be a welcome addition to the docs.

So, yes, my websockets are connecting but now my "Events" are failing...

With a Failed to connect to Pusher. exception...

   'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
    'host' => '{host}',
    'port' => {public port, is it 443 ?],
	        'encrypted' => true,

    'scheme' => 'https'
        ],

		Can you set these please and then restart the websocket server?

@lovetoast so changing
{host} to 'mystagingdomain.com' and port=443 didn't work...
{host} to 'mystagingdomain.com' and port=6001 DOES work!
Buy you expected it to work on port 443?
And I agree with your comment to @rennokki.
Some better examples on getting this setup (and what is actaully happening)
I'm quite new to web sockets and given the fact this is utilising Pusher (which IS easy to use) it would be great if this community could be empowered more?
I'm quite happy to contribute, describe my process so perhaps as seasoned, competent users, you (and us all) can  understand why some many newcomers struggle.
Thanks for your help!
:)

Port on client side is 6001...
So, shall I change that to 443 and then the Pusher port to 443 and if I suspect correctly, this will verify if indeed Ngnix is doing a reverse proxy?

Yes, I think it is actually connected directly.

Block port 6001 on the server
make sure when you start the reverse proxy it is using the host option to <IP_ADDRESS>

So, no - that definitaley isn't working for me...
[HTTP/1.1 502 Bad Gateway 199ms]```

OK that's a start, now, can you paste the last 10 lines from /var/log/nginx/error.log please?
I'm happy to look at this if you send me the login details btw.

log.txt

map $http_upgrade $type {
  default "web";
  websocket "ws";
}

server {
  listen        443 ssl;
  listen        [::]:443 ssl;
  server_name   {host}

root {path to public}
  # Start the SSL configurations
  ssl_certificate     {cert path}
  ssl_certificate_key {key path}
 location / {
    try_files /nonexistent @$type;
  }
    location /app  {
    proxy_pass             http://<IP_ADDRESS>:6001;
    proxy_read_timeout     60;
    proxy_connect_timeout  60;
    proxy_redirect         off;

    # Allow the use of websockets
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
  location @ws  {
    proxy_pass             http://<IP_ADDRESS>:6001;
    proxy_read_timeout     60;
    proxy_connect_timeout  60;
    proxy_redirect         off;

    # Allow the use of websockets
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

Try this please, and reload nginx, hopefully it is evident where things need to be changed.

I am no expert in Ngnix configuration.
I have a vague idea of everything that config is suggesting...
When I change try_files $uri $uri/ /index.php?$query_string; to try_files /nonexistent @$type; I now get a 500 server error...
It would appear one has to be a "Ngnix Ninja" to get this working... ;)

@blakeyman  I am more than happy to take a look if you can send me the access details, but if you cannot, you only need to change the things in curly braces, which is the host, cert, and key.

@lovetoast I've no idea how to contact you directly via GitHub...
My ngnix config already loads the correct host, cert & keys though...

@blakeyman Do you have discord? If so, you can send me a link to your profile, or, a private repo here and invite me.
I recognise that error, I think it is trying to pick up a cert in laravel-websockets, are you certain there are no cert and key paths set in the laravel package?


Update docs about translations

The docs here needs to be updated https://docs.readthedocs.io/en/latest/localization.html according the recent changes on translations (only can add translations where the user is owner)

Reading the current docs, seems ok to me, because there is no mention of adding a project from other user, or nested translations allowed, so, I think with the current UI explains the limitations by itself.

Might be worth adding notes so that #3348 and #4152 can be resolved more gracefully in the future.

Agreed. We need much better docs around this all. I'm really looking forward to making translations a priority on RTD. I think we can do much better at offering first class support for translations. They are obviously more of an after thought currently.
First steps here I think are:

Describe how to manage translations better on RTD projects
Describe patterns for this (how to support multiple translations in one repo)
Explain the sphinx steps better

Next steps on our side are things like Transifex integration, Weblate integration, and automating the Sphinx configuration for multiple languages.


update installing-the-client.md

installing-the-client.md still points to alpha 'install-v2-alpha.sh', we have cut beta already

The two scripts will install the latest client so there's no immediate concern but I agree.


Handling edge case for hunks in git patch processing

PR Type:
Bug fix

PR Description:
This PR addresses an edge case in the git patch processing algorithm. The edge case occurs when the patch string is '@@ -0,0 +1 @@', which previously caused an error. The PR adds exception handling to prevent this error.

PR Main Files Walkthrough:

pr_agent/algo/git_patch_processing.py: Added exception handling in two places where the patch string is parsed. If the parsing fails due to the edge case, it now defaults to a specific value.

/describe

PR Analysis

🎯 Main theme: Handling edge case for hunks in git patch processing
📌 Type of PR: Bug fix
🧪 Relevant tests added: No
✨ Focused PR: Yes, because the title, description and changes are all related to handling a specific edge case in git patch processing.
🔒 Security concerns: No, because the changes in this PR are related to exception handling and do not introduce any new functionality that could potentially lead to security issues.

PR Feedback

General suggestions: The changes in the PR seem to address the issue described. However, it would be beneficial to add tests that specifically cover this edge case to ensure the changes work as expected and prevent potential regressions in the future. Also, using a broad except clause can be risky as it may catch unexpected exceptions. It would be better to catch specific exceptions.

🤖 Code suggestions:

relevant file: pr_agent/algo/git_patch_processing.py
suggestion content: Instead of using a broad except clause, catch the specific exception that occurs when the edge case is encountered. This will prevent catching and handling unexpected exceptions. [important]
relevant line in file: +                    except:  # '@@ -0,0 +1 @@' case

relevant file: pr_agent/algo/git_patch_processing.py
suggestion content: Add a comment explaining why the start2 value is set to 0 in the exception handling block. This will make the code more understandable for other developers. [medium]
relevant line in file: +                        start2 = 0

relevant file: pr_agent/algo/git_patch_processing.py
suggestion content: Consider adding a logging statement in the exception handling block to log when the edge case is encountered. This can be helpful for debugging purposes. [medium]
relevant line in file: +                    except:  # '@@ -0,0 +1 @@' case

Preparing pr description...