JobScheduler.Hangfire Application Error opening Dashboard

In development mode, when I select a Worker and open dashboard i got the following error, but the dashboard is opened in new tab.
In production, the dashboard is not opened,
The error occurred:
Type:       JSException
Message:    Converting circular structure to JSON
--> starting at object with constructor 'Window'
--- property 'window' closes the circle

TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Window'
--- property 'window' closes the circle
at JSON.stringify ()
at D (https://localhost:5003/_framework/blazor.server.js:1:5345)
at https://localhost:5003/_framework/blazor.server.js:1:3541
Data:       0 entries
Stack trace:
at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, Object[] args)
InnerException is null

please post a sample and details on how to repro this

Hi, I just select one worker from job and then click on the Dashboard button.
record.zip

The issues seems related to invocation "JsRuntime.InvokeAsync(" instead "JsRuntime.InvokeVoidAsync("

did you tried to upgrade the hangfire libs to a newer version to see if they resolved it?

System.TypeLoadException: 'Could not load type 'Hangfire.HangfireServiceCollectionExtensions' from assembly 'Hangfire.AspNetCore, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=null'.'

Latest Xpand.XAF.Core.All references Hangfire 1.7.35

I found the problem in your code on the class Xpand.XAF.Modules.JobScheduler.Hangfire.JobSchedulerService, method JobDashboard.
return args.SelectedObjects.Cast().ToObservable(ImmediateScheduler.Instance).SelectMany(
job => jsRuntime?.InvokeAsync("open", new object[] { $"{uri}{job.Id}", "_blank" }).AsTask());
You should use Select instead SelectMany
Could you confirm, please? It worked for me, but I prefer to reference the Nuggets.

I recently switched the JobScheduler tests to integration tests, for testing the actual app instead of a SUT system, however yet no test for Dashboard. I will add one when my time permits for now your observation looks correct, I will update the source code.
Feel free to send a PR when ever u have any fix that was a nice catch

I do not see how it worked for you as it does not even compile unless you posted a wronf snippet. Without testing the correct version should be
args.SelectedObjects.Cast<JobWorker>().ToNowObservable()
                        .SelectMany(job => Observable.FromAsync(() => jsRuntime?.InvokeVoidAsync("open", [$"{uri}{job.Id}", "_blank"]).AsTask()))

can u please test is fine so I can send a build?

Should be Select instead SelectMany

your answer beats me, can you explain why you think the Task should not be flattened?

The SelectMany  is the operator that flattens the inner observable which in this case is the task. Although this task is executed on creation so it worked as you mentioned with the Select is not the correct approach and probably the ToUnit hide it from you.
IObservable<IObservable<Unit>> observable = e.SelectedObjects.Cast<JobWorker>().ToNowObservable()
                        .Select(job => jsRuntime?.InvokeVoidAsync("open", [$"{uri}{job.Id}", "_blank"]).AsTask().ToObservable());

the Select will project the Task to  IObservable<IObservable<Unit>> where the SelectMany will flatten it
IObservable<Unit> observable = e.SelectedObjects.Cast<JobWorker>().ToNowObservable()
                        .SelectMany(job => jsRuntime?.InvokeVoidAsync("open", [$"{uri}{job.Id}", "_blank"]).AsTask().ToObservable());

Ok, maybe I'm not seeing the whole concept here. I'm used to LINQ and I use SelectMany() to collapse a multidimensional sequence in a way that would otherwise require a second Select() or loop. In this case, i thought we just want to select the JobWorker Id's in a simple one-to-one projection, and foreach one create create a task.

I use SelectMany() to collapse a multidimensional sequence

it is LINQ and it is as you said it now else flattening and our return is a Unit not a worker. A Unit is a type we use to merge all observables into a signle subscription
   .Merge(manager.TriggerJobsFromAction())
                    .Merge(manager.PauseJobsFromAction())
                    .Merge(manager.ResumeJobsFromAction())
                    .Merge(manager.JobDashboard())

all this methods same for LINQ must have the same type in order to operate on them (Merge, Concat etc) so we use the Unit, the ToUnit method is a convenient extension that projects any type however if you not carefull it hides the whole picture from you
public static IObservable<Unit> ToUnit<T>(this IObservable<T> source)
            => source.Select(_ => Unit.Default);

Ok, thanks for the clarification.
What is the expected behaviour, o new tab shoud be opened for each selected Worker?
I selected multiple Workers, but only one tab is opened.

The pre-release <IP_ADDRESS> in the Reactive.XAF lab branch  includes commits that relate to this task:

[JobScheduler.Hangfire Application Error opening Dashboard

#1028](https://github.com/eXpandFramework/Reactive.XAF/commit/663345a48fec111b62b6a6649ddb504c3646acdc)
To minimize version conflicts we recommend that you use the Xpand.XAF.Core.All, Xpand.XAF.Win.All, Xpand.XAF.Web.All packages. Doing so, all packages will be at your disposal and .NET will add a dependecy only to those packages that you actually use and not to all (see the Modules installation-registrations youtube video).

Released packages:
Xpand.Extensions v.4.232.2 Xpand.Extensions.Blazor v.4.232.2 Xpand.Extensions.Mono.Cecil v.4.232.2 Xpand.Extensions.Office.Cloud v.4.232.2 Xpand.Extensions.Office.Cloud.Google.Blazor v.4.232.2 Xpand.Extensions.Reactive v.4.232.2 Xpand.Extensions.XAF v.4.232.2 Xpand.Extensions.XAF.Xpo v.4.232.2 Xpand.TestsLib v.4.232.2 Xpand.TestsLib.Blazor v.4.232.2 Xpand.TestsLib.Common v.4.232.2 Xpand.TestsLib.EasyTest v.4.232.2 Xpand.VersionConverter v.4.232.2 Xpand.XAF.Core.All v.4.232.2 Xpand.XAF.Modules.AutoCommit v.4.232.2 Xpand.XAF.Modules.Blazor v.4.232.2 Xpand.XAF.Modules.BulkObjectUpdate v.4.232.2 Xpand.XAF.Modules.CloneMemberValue v.4.232.2 Xpand.XAF.Modules.CloneModelView v.4.232.2 Xpand.XAF.Modules.Email v.4.232.2 Xpand.XAF.Modules.GridListEditor v.4.232.2 Xpand.XAF.Modules.HideToolBar v.4.232.2 Xpand.XAF.Modules.JobScheduler.Hangfire v.4.232.2 Xpand.XAF.Modules.JobScheduler.Notification v.4.232.2 Xpand.XAF.Modules.MasterDetail v.4.232.2 Xpand.XAF.Modules.ModelMapper v.4.232.2 Xpand.XAF.Modules.ModelViewInheritance v.4.232.2 Xpand.XAF.Modules.Office.Cloud.Google v.4.232.2 Xpand.XAF.Modules.Office.Cloud.Google.Calendar v.4.232.2 Xpand.XAF.Modules.Office.Cloud.Google.Tasks v.4.232.2 Xpand.XAF.Modules.Office.DocumentStyleManager v.4.232.2 Xpand.XAF.Modules.OneView v.4.232.2 Xpand.XAF.Modules.PositionInListView v.4.232.2 Xpand.XAF.Modules.ProgressBarViewItem v.4.232.2 Xpand.XAF.Modules.RazorView v.4.232.2 Xpand.XAF.Modules.Reactive v.4.232.2 Xpand.XAF.Modules.Reactive.Logger v.4.232.2 Xpand.XAF.Modules.Reactive.Logger.Client.Win v.4.232.2 Xpand.XAF.Modules.Reactive.Logger.Hub v.4.232.2 Xpand.XAF.Modules.Reactive.Rest v.4.232.2 Xpand.XAF.Modules.RefreshView v.4.232.2 Xpand.XAF.Modules.SequenceGenerator v.4.232.2 Xpand.XAF.Modules.Speech v.4.232.2 Xpand.XAF.Modules.SpellChecker v.4.232.2 Xpand.XAF.Modules.StoreToDisk v.4.232.2 Xpand.XAF.Modules.SuppressConfirmation v.4.232.2 Xpand.XAF.Modules.TenantManager v.4.232.2 Xpand.XAF.Modules.ViewEditMode v.4.232.2 Xpand.XAF.Modules.ViewItemValue v.4.232.2 Xpand.XAF.Modules.ViewWizard v.4.232.2 Xpand.XAF.Modules.Windows v.4.232.2 Xpand.XAF.Web.All v.4.232.2 Xpand.XAF.Win.All v.4.232.2

Please update the related Nuget packages and test if issues is addressed. These are nightly nuget packages available only from our NugetServer.
If you do not use these packages directly but through a module of the main eXpandFramework project, please wait for the bot to notify you again when integration is finished or update the related packages manually.
Thanks a lot for your contribution.

from the RX side we expect a task for each selected object to run
jsRuntime?.InvokeVoidAsync("open", [$"{uri}{job.Id}", "_blank"]).AsTask().ToObservable()

if u want to debug i suggest u verify if they open one by one so to have 2 tabs open at the end, so is it the browser that does not allow multiple popups in very close interval? then maybe a StepInterval operator can help and so on..

or a SelectManySequential operator instead of SelectMany to flatten the task

Thank you very much.
When new nuggets will be released?

nugets are already in the lab server, aren't they good enough at least for testing?

sure, I need to add a new package souce to reference them?

strange you can recompile/modify the source and you not aware of the readme? :)

did you by any chance find the time to experiement with my last suggestions? SelectManySequential + StepInterval

I don't know how to specify the stepinterval, but the SelectManySequential seems to work, multiple tabs where open

The browser was blocking multiple popups, so it's ok as it is.
I don't know how to specify the stepinterval, but the SelectManySequential also works.

I'm using Hangfire because Windows Workflow Foundation is no longer supported in the new . NET 8.
What is the purpose of the JobScheduler Notification Module?

do u mean that it does not work with SelectMany but works with the SelectManaySequential?

work in both ways

return e.SelectedObjects.Cast<JobWorker>().ToNowObservable()
                        .StepInterval(1.Seconds())
                        .SelectManySequential(job => jsRuntime?.InvokeVoidAsync("open", [$"{uri}{job.Id}", "_blank"]).AsTask().ToObservable());

you can add StepInterval just b4 the inner observable what that means is that it will wait for 1 second then it will open the page and it will wait for the task to complete (that's why we flatten) b4 moving to the next item

Closing issue for age. Feel free to reopen it at any time.
.Thank you for your contribution.


Latest fails to install latest version when another version is installed

Describe the bug
When any version of a tool was already installed by mise, using  @latest selects that version instead of the latest one available from remote.
To Reproduce

Install or use a tool with a fixed version.
Try to install or use the same tool with the @latest version.

Expected behavior
The second step should install and run the latest version to the tool according to the remote repository.
Additional context
Here is a E2E test that demonstrates the issue with the dummy plugin : https://github.com/Adirelle/mise/blob/0855ae29044184a7d16eb88011e79e6dda4571c8/e2e/plugins/test_version_latest

it's possible #2083 may fix this, I fixed a few things around "latest" versions

Not yet
>>> E2E plugins/test_version_latest
$ mise ls dummy
[mise ls dummy] output is equal to ''
$ mise x dummy@latest -- dummy
mise<EMAIL_ADDRESS>✓ installed
[mise x dummy@latest -- dummy] '2.0.0' is in output
$ mise ls dummy
[mise ls dummy] '2.0.0' is in output
mise<EMAIL_ADDRESS>✓ uninstalled
$ mise ls dummy
[mise ls dummy] '2.0.0' is not in output
$ mise x<EMAIL_ADDRESS>-- dummy
mise<EMAIL_ADDRESS>✓ installed
[mise x<EMAIL_ADDRESS>-- dummy] '1.0.0' is in output
$ mise ls dummy
[mise ls dummy] '1.0.0' is in output
$ mise x dummy@latest -- dummy
E2E assertion failed: [mise x dummy@latest -- dummy] expected '2.0.0' to be in 'This is Dummy 1.0.0!'

Would you like to push that test as a PR? I am not sure I will be able to fix it though.

e.g.: anytime you install something mise creates a symlink like ~/.local/share/mise/dummy/latest that points to the latest installed version, it has nothing to do with whatever the latest available version is—in part because that version will change

Oh... I see. Maybe that should be documented (or stressed out if it it already) because this a bit counter-intuitive.
Does "use" follow the same rule?

I think it is mostly intuitive—otherwise calling a shim would automatically install the latest version every time you call it which would be more strange. This could probably be documented, though it would take careful reading of the code here since there are a ton of edge cases around how versions get resolved that I'm continually tweaking to find the right UX. Right now I think the logic generally behaves the way users expect—save for a handful of quirks like https://github.com/jdx/mise/issues/2033.
Unfortunately my tweaks have resulted in logic that is not easy to explain. It errs on the side of what I think the user will most benefit from rather than what is most predictable or easy to understand. I think there is a real risk trying to spell this out because I don't think it would capture all the details or be likely to stay current.
Instead, I'll just explain it in this issue since that makes it clear this isn't an evergreen document I need to keep up to date.
The logic right now is (from my memory, which may be slightly off) that there is a set of commands such as mise use, mise upgrade, and mise install which set a "latest_versions" flag which internally changes the resolver to ignore matching installed versions and instead use the latest available versions. Every other command defaults to just using what is on disk. Similarly, there is logic around missing versions that is even more complex but essentially mise will autoinstall missing versions if it has no matching version and you've already installed at least one version of the same tool. The use-case this captures is when someone uses a project that defines particular tools they don't want to manage by mise and some they do. In a way this supports legacy behavior from asdf because that's how it behaved and I wanted mise to be largely similar, but I also think it's a good middle ground where you get to be explicit about what tools you want mise to manage without it making assumptions about your setup.
In any case, that's the general behavior today, but as I said, I tweak this stuff fairly regularly as I come up with ideas on how to balance mise such that it behaves in a way that's easy to use, does what you expect, doesn't get in your way, and behaves predictably—in that order. I prefer mise to make educated guesses even if they might not seem obvious because it makes the tool easy to use without reading documentation. My ultimate plan is that users would really only need to know mise x, mise run, and mise use and once they understand those 3 commands they wouldn't need to read any more documentation.
I thought about this issue a bit and that maybe we shouldn't create the "latest" symlink if we know the version being installed isn't the latest version. However that would not be easy to do, likely to cause significant bugs, and I think will actually result in some even stranger behavior after I thought it through a bit. I also think it probably would break some workflows especially around the partial symlinks like "2" and "2.0". I think it's better to always have those symlinks there, rather than based on what the latest available versions are. Maybe if I was starting from scratch but it's far too risky to consider doing something like this now.

I think there are several options there:

a squelch-able warning (opt_out) when using an outdated "latest":

Warning: a new version of tool SOMETOOL is available. Upgrade with "mise upgrade SOMETOOL" or disable this warnings with "mise settings warnings.outdated_latest false"

an option to always upgrade to the latest version of a tool (opt-in) :

mise settings upgrade_latest always

I really don't think this is a warning-level issue. If, say, a new version comes out there is no reason to warn the user about that. A setting could be made to autoinstall the latest versions but I think that might prove to be more annoying than you think. Tools can take several minutes to compile which would completely block you from using them if you had this enabled.

The idea was to let the user chose, ultimately, but maybe this should not be a global configuration but a command flag, e.g. mise exec --upgrade sometool@latest -- sometool something something.


custom header for an attachment

Hi,
We are using sendgrid to attach iCal (ics) files along with the mail body. We are able to set the content type to “text/calendar” for the ics file, however it is not possible to set additional header "method=REQUEST" which causes the email clients to not recognize the attachment as a calendar event.
Will it be possible to set custom headers for each attachment?
Regards

Hello @mindnuts,
I'm not sure I understand. Let me make sure I understand:

You have an email with an iCal attachment
You want to add a header to that email (e.g. X-Header: method=Request)
Right now you can not add an additional header. What did you try?

Thanks!

@thinkingserious
While creating the email object we are creating the files array [a la] (https://github.com/sendgrid/sendgrid-nodejs#available-params) and setting "contentType" to "text/calendar" for .ics files. For the ics files to be correctly detected by Outlook the attachment should also have method=REQUEST set in the header.
Content-Type: text/calendar; charset=UTF-8; method=REQUEST

Will this be possible in the sendgrid client?

Can you please share the code that you are using the set this header?

@thinkingserious here you go:
var sendgrid  = require('sendgrid')('YOUR_SENDGRID_API_KEY');

var email = new sendgrid.Email({
  to<EMAIL_ADDRESS>  from<EMAIL_ADDRESS>  subject:  'Hello World',
  html: 'My first email through SendGrid.',
  text:     'My first email through SendGrid.'
});

email.addFile({
  filename: 'calendar.ics',
  path: './calendar.ics',
  contentType: 'text/calendar'
});

sendgrid.send(email, function(err, json) {
  if (err) { return console.error(err); }
  console.log(json);
});

Here is the header generated by Sendgrid for this attachment:
Content-Disposition: attachment; filename="calendar.ics"
Content-Transfer-Encoding: base64
Content-Type: text/calendar; charset=utf-8; name="calendar.ics"

What i would like to have is (REQUEST is just an example):
Content-Type: text/calendar; charset=utf-8; method=REQUEST; name="calendar.ics"

Thank you, that example is very helpful.
Have you tried to just set the header directly with the headers param?

@thinkingserious I do not want to set the header of the email, i want to be able to set the custom header for the Attachment (.ics file in my case) added to the email.
Regards
M

Thanks for the update, that makes sense.
This will no longer be an issue with the v3 library. For now, the only way you can set that header is through SMTPAPI: https://github.com/sendgrid/smtpapi-nodejs

@thinkingserious Thanks for your response. What is the ETA for V3?

Should be no more than a few months.

@mindnuts,
We are now a few weeks away, you can check out the v3 /mail/send endpoint here: https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html and the new version of this library here: https://github.com/sendgrid/sendgrid-nodejs/tree/v3beta
Thanks for your support!

Hello @thinkingserious ,
I guess everyone is still waiting for a solution, so am I !
I'd also like to set method to REQUEST and encounter the problem.
Do you have an update ? It's been 2 months !
Thanks,
Have a nice day,
Jérémy

Hey @thinkingserious ,
I am still locked due to this problem !
Do you have any update ? Any solution ?
Thanks,
Jérémy

Again @thinkingserious do you plan to solve this soon ?
We really need it !

+1

response: {       "statusCode": 400,       "body": {         "errors": [           {             "message": "The attachment type cannot contain ';', or CRLF characters.",             "field": "attachments.0.type",             "help": "http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.attachments.type"           }         ]       },       "headers": {         "server": "nginx",         "date": "Wed, 01 Mar 2017 04:43:59 GMT",         "content-type": "application/json",         "content-length": "216",         "connection": "close",         "x-frame-options": "DENY",         "access-control-allow-origin": "https://sendgrid.api-docs.io",         "access-control-allow-methods": "POST",         "access-control-allow-headers": "Authorization, Content-Type, On-behalf-of, x-sg-elas-acl",         "access-control-max-age": "600",         "x-no-cors-reason": "https://sendgrid.com/docs/Classroom/Basics/API/cors.html"       }     }
Am I missing something? What's the proposed solution? why is this closed?

@pascalopitz,
This one should not have been closed. Thanks for the heads up.

Again @thinkingserious are you solving this issue ?!

Hello @ataraxido,
This issue is on the product roadmap, but I don't know when it will be delivered.
Recently, we have received a few new votes for this feature. Whenever that happens, I update the product team to help bump the priority.
With Best Regards,
Elmer

@thinkingserious Just wanted to add that this is a really important feature for us as well. Any update on the product roadmap?

Agreed @hdornier, I'll add your voice to the issue. Thanks for taking the time to vote!

@thinkingserious, you mentioned this can be done with smtpapi. Do you have an example of this? What part of the smtpapi? A simple substitution of some kind?

Hi @e99cog,
I'm not sure why I said that previously :(
I don't know if this will work using the SMTPAPI, but here is an example of how it's used.
With Best Regards,
Elmer

+1 over here also

In the end, I had to resolve this issue by using mailgun and the message.mime endpoint it has, as it allows me to send the mime explicitly.
Does sendgrid offer this feature in any API?

Hey, everyone!
I am Matt, the Developer Experience Product Manager at SendGrid. I am interested in learning more about what you need from MIME types. We typically do this as a google hangout, so that I can learn about your use case and the specifics of what you need.
Please feel free to grab a time on my calendar - https://calendly.com/matt-bernier/mail-send-mime-types
Thanks!!

need to handle this for an upcoming project as well -- is there a status on this? It's been 2 years.

+1

I'm also very interested in this. Surely, it must be possible to come up with an answer by now.

I don't want to curse things, but a birdy tells me that we are super close to deploying this :) I'll be posting an update here once it's live.

Hello Everyone!
I'm SUPER EXCITED to announce that this issue has been resolved and the fix is live in production! Please give it a try and let me know if you run into any further issue.
Thank you for your patience on this one!
With Best Regards,
Elmer

@thinkingserious That's a great news! Can you help understand what steps to take next? Has support been provided for additional header > method=REQUEST?

Hello @thinkingserious
I just tried and I still get an error ( using the API ) :
{"errors":[{"message":"The attachment type cannot contain ';', or CRLF characters.","field":"attachments.0.type","help":"http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.attachments.type"},{"message":"The attachment type cannot contain ';', or CRLF characters.","field":"attachments.1.type","help":"http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.attachments.type"}]}
Here is what I am doing using the API API :
$attachment->setType('text/calendar; charset="UTF-8"; method=REQUEST');
Are you sure the issue is solved ? What should we do ?
Thanks

@ataraxido it works for me
"attachments": [{ 		"content": "QkVHSU46....EQVINCg==", 		"type": "text/calendar; method=REQUEST", 		"filename": "file1.ics" 	}]
Returned 202 and mail was sent

Hey @ataraxido you won't need to specify the charset as SendGrid will automatically append this field (same applies for text/html, text/plain). Give it another shot and let us know if that does that trick 🤞

@ataraxido,
Where you able to get it working?

Hello @abhilashabhatia,
Yes, you can now do "type": "text/calendar; method=REQUEST". Please let me know if you run into any issues.

Hello @thinkingserious
I have been able to send the "header" method=REQUEST but I have not been able to send an inline ICS which works fine inside Outlook.
Even in inline with this custom "header" the event reminds an attached ICS.
I think it's pretty broad use case for all your customers ; would you have a working example or an how-to ?
Thanks

+1 to the comment from @ataraxido -- can we get an example @thinkingserious

@thinkingserious actually the ICS is inlined into the email but Outlook considers it as an attachment so it does have the expected behaviour/display of an email inline event.
I'm wondering why, tried many things. I think it could be because you force inline items to be base64 encoded whereas typical ICS inlining is on 7bits.

Hello @ataraxido,
Thanks for the elaboration, I think you might be on to something regarding the encoding.

Hi, this issue should not be closed. It only works for "text/calendar; method=REQUEST". Any other combination i.e. "application/ics; method=REQUEST" or even "text/calendar; method=REQUEST; Content-Transfer-Encoding: base64" will not work. Apart from that, the original problem of SendGrid not having the use case of sending a calendar invite remains the same. The only way you can send an invite throw SendGrid is if you define it as a custom content:
await sgMail.send({             to: "recipientEmail",             subject: "Invitación",             templateId: "yourTemplateId",             dynamicTemplateData: yourTemplateData,             content: [                 {                     type: "text/html",                     value: "
Your email html
",                 },                 {                     type: "text/calendar; method=REQUEST",                     value: Buffer.from(event).toString("utf-8"),                 },             ],             from: {                 name: "Tuturno",                 email<EMAIL_ADDRESS>            },         });
This however will not allow you to use templates, which I believe is core functionality.
Sorry if this is not the repository I should post this on, it's not clear where should I post this.
Please, I bealive is not hard to contemplate this use case. Allowing to send custom content alongside a template would be enough.
P.D. Happy new year 🎉


small fix

Codecov Report

Merging #42 (1511f2a) into development (bbdbaa3) will increase coverage by 1.70%.
The diff coverage is 87.54%.

@@                Coverage Diff                @@
##             development      #42      +/-   ##
=================================================
+ Coverage          85.57%   87.27%   +1.70%
- Complexity             3      162     +159
=================================================
  Files                 25       24       -1
  Lines                298      385      +87
  Branches              39       28      -11
=================================================
+ Hits                 255      336      +81
+ Misses                24       19       -5
- Partials              19       30      +11

Impacted Files
Coverage Δ

src/main/scala/HearthstoneMini.scala
0.00% <ø> (ø)

src/main/scala/HearthstoneMiniModule.scala
100.00% <ø> (ø)

src/main/scala/controller/Gamestate.scala
50.00% <ø> (ø)

src/main/scala/controller/Strategy.scala
75.00% <ø> (ø)

src/main/scala/model/Move.scala
0.00% <ø> (ø)

...cala/model/matrixComponent/matrixImpl/Matrix.scala
88.88% <ø> (ø)

src/main/scala/util/CardProvider.scala
100.00% <ø> (ø)

src/main/scala/util/UndoManager.scala
77.77% <ø> (ø)

...rc/main/scala/model/commands/DrawCardCommand.scala
84.61% <50.00%> (ø)

...main/scala/model/manaComponent/manaImpl/Mana.scala
71.42% <50.00%> (ø)

... and 19 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 364d7e7...1511f2a. Read the comment docs.


pipewire doesn't work after installing asahi-audio, but works after removing asahi-audio

i've done all of the steps correctly?

Have you enabled speakers in your devicetree and turned on the module parameter to enable them to be probed?
We are not enabling speakers by default at the moment because they are unsafe to use.

If anyone just please would post all steps also the devicetree enabling speakers, one actually could try it outmvgCombassJean-Marie<EMAIL_ADDRESS>485894441BE 0769.937.302IBAN BE58 3632 1574 1679Op 27 mei 2023 om 18:32 heeft James Calligeros @.***> het volgende geschreven:
Have you enabled speakers in your devicetree and turned on the module parameter to enable them to be probed?
We are not enabling speakers by default at the moment because they are unsafe to use.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you are subscribed to this thread.Message ID: @.***>

The decision to not post the steps is deliberate. None of this is ready for end users or even beta testers yet and we will
not facilitate the destruction of your laptop.

Thanks for the info, but I read somewhere that if you follow the right steps on a MacBook M1 Pro 14 inch, it now was safe to use because of a safety deamon, but to try it out people should know how to edit device-tree and enable speakers, be free to correct me if I’m wrong.
Thx
mvg
Combass
Jean-Marie Bastiaens
Zaakvoerder
@.*** - @.***
www.combass.be
+32 485894441
BE 0769.937.302
IBAN BE58 3632 1574 1679

Op 28 mei 2023, om 02:00 heeft James Calligeros @.***> het volgende geschreven:
The decision to not post the steps is deliberate. None of this is ready for end users or even beta testers yet and we will
not facilitate the destruction of your laptop.
—
Reply to this email directly, view it on GitHub https://github.com/chadmed/asahi-audio/issues/10#issuecomment-1565748114, or unsubscribe https://github.com/notifications/unsubscribe-auth/A7AMMRPBLWQS2VM5E7NXT53XIKIR5ANCNFSM6AAAAAAYOYBXXI.
You are receiving this because you commented.


Added functionality to write running server URIs to file on startup.

Added functionality to write the running server URIs to file on startup, consistent with similar behaviour in Besu.
Signed-off-by: Mark Terry<EMAIL_ADDRESS>

This PR is no different to the original PR but without the CLI option. I still don't see the need for this feature.

closing in favour of #1445


Code embeddings

Is there any information if this is also recommended for extracting embeddings from code snippets? In particular Javascipt and Solidity?

Hi @rragundez , Maybe you can have a try to WhereIsAI/UAE-Code-Large-V1. It was trained using the github-issue-similarity dataset, which contains some javascript code.
angle = AnglE.from_pretrained('WhereIsAI/UAE-Code-Large-V1').cuda()

angle.encode("YOUR CODE")

Let me try it and I'll comment back here the results

It did work but results over solidity code is not very good. thanks.
I am going to try with LLM trained on SOlidity code, but it has GGUF files, how would I use those in this library? for example:
https://huggingface.co/mradermacher/Solidity-Llama3-8b-GGUF

maybe you can use its base model: https://huggingface.co/andrijdavid/Solidity-Llama3-8b

Would this work out of the box just putting the model name as the argument?

Yes. For LLM inference, you can check it document: https://angle.readthedocs.io/en/latest/notes/quickstart.html#infer-llm-based-models
Since this model hasn't been trained on sentence embedding learning, it is recommended to use some prompts to improve performance. You can specify a prompt with angle.encode(..., prompt="Here is a prompt: {text}.").

Yes. For LLM inference, you can check it document: https://angle.readthedocs.io/en/latest/notes/quickstart.html#infer-llm-based-models
Since this model hasn't been trained on sentence embedding learning, it is recommended to use some prompts to improve performance. You can specify a prompt with angle.encode(..., prompt="Here is a prompt: {text}.").

there is no need to specify a pretrained_lora_path, just directly specify the model_name_or_path to andrijdavid/Solidity-Llama3-8b


Update disable-emoji-mess function to remove DNS prefetch for emojis

When removing emojis, the DNS prefetch for emojis (<link rel='dns-prefetch' href='//s.w.org' />) should also be removed. This can be accomplished by adding the following line to function disable_wp_emojicons():
add_filter( 'emoji_svg_url', '__return_false' );

Found this on wordpress.stackexchange

I added this in.


[Q] URL issues after upgrade and web server software change

I recently migrated two independent Graphite/Grafana servers (one on-prem and one in AWS) in order to upgrade the OS and Graphite versions, change from Apache to Nginx, and for more system resources. We have internal systems that make heavy use of direct links to metrics and with this upgrade the path seems to have dropped the "/graphite" part. For example:
https://graphite.example.com/graphite?width=586&height=308&target=carbon.agents.*.creates
does not work but
https://graphite.example.com/?width=586&height=308&target=carbon.agents.*.creates
does work. Leaving in the "graphite" part of the path results in a Not Found page saying "The requested resource was not found on this server."
Also, certain URLs using braces for pattern matching now do not return data, though braces in general do work. So creating a graph with carbon.agents.sea{,-*}.cache.size works, showing a dropdown list of the matches, but then the URL is encoded to carbon.agents.sea%7B%2C-*%7D.cache.size, which gives no results in the graph.
Old Server
Ubuntu 16.04
graphite-carbon and graphite-web packages version 0.9.15 from Ubuntu repo
Apache 2.4.18
mod_wsgi 4.3.0
python-django 1.8.7 from Ubuntu repo
New Server
Ubuntu 20.04
carbon, whisper, and graphite-web version 1.2.0 from their graphite-project repos installed via pip3
Nginx 1.18.0 from Ubuntu repo
Gunicorn 20.0.4 installed via pip3
Django 3.0.11 installed via pip3

Hi @justinclloyd ,

with this upgrade the path seems to have dropped the "/graphite" part

You need to uncomment URL_PREFIX in your local_settings.py and restart Gunicorn:
https://github.com/graphite-project/graphite-web/blob/9b7c761a4d49333cdee3d1eeb7049f6ffbd5529b/webapp/graphite/local_settings.py.example#L83-L84

So creating a graph with carbon.agents.sea{,-}.cache.size works, showing a dropdown list of the matches, but then the URL is encoded to carbon.agents.sea%7B%2C-%7D.cache.size, which gives no results in the graph.

For that part I'm not sure what's going on, maybe something wrong with your web server config?
I can't reproduce on latest release in Docker though -  braces working fine there. You can check Nginx config for Docker and compare - https://github.com/graphite-project/docker-graphite-statsd/blob/master/conf/etc/nginx/sites-enabled/graphite-statsd.conf

You can try yourself, if you have Docker installed somewhere on desktop machine.
Run it first:
docker run -d\
 --name graphite\
 --restart=always\
 -p 80:80\
 -p 2003-2004:2003-2004\
 -p 2023-2024:2023-2024\
 -p 8125:8125/udp\
 -p 8126:8126\
 graphiteapp/graphite-statsd

then try to open
http://localhost/render/?width=586&height=308&target=carbon.agents.*.cache.que{-,*}
I'm getting proper graph:

Hi @justinclloyd ,

with this upgrade the path seems to have dropped the "/graphite" part

You need to uncomment URL_PREFIX in your local_settings.py and restart Gunicorn:
https://github.com/graphite-project/graphite-web/blob/9b7c761a4d49333cdee3d1eeb7049f6ffbd5529b/webapp/graphite/local_settings.py.example#L83-L84

I actually tried that and it broke Grafana, even when I updated the Graphite data source in Grafana. Perhaps there was another config somewhere that also needed updating in conjunction with this change. That said, that variable is not uncommented in my older Graphite system running 0.9.12 on Ubuntu 14.04, which somehow works both with and without the graphite between the /?.

So creating a graph with carbon.agents.sea{,-}.cache.size works, showing a dropdown list of the matches, but then the URL is encoded to carbon.agents.sea%7B%2C-%7D.cache.size, which gives no results in the graph.

For that part I'm not sure what's going on, maybe something wrong with your web server config?
I can't reproduce on latest release in Docker though - braces working fine there. You can check Nginx config for Docker and compare - https://github.com/graphite-project/docker-graphite-statsd/blob/master/conf/etc/nginx/sites-enabled/graphite-statsd.conf

I can test the Docker stuff but regarding the web server configuration, that's certainly a possibility but I've not found a smoking gun, either in the nginx config or the gunicorn service.

I actually tried that and it broke Grafana, even when I updated the Graphite data source in Grafana.

Well, in case of Grafana your graphs are not dependent on URL, just update datasource path and they should work.

That said, that variable is not uncommented in my older Graphite system running 0.9.12 on Ubuntu 14.04, which somehow works both with and without the graphite between the /?.

Looks like it was some rewrite in old config, but it's hard to say without looking in old config, though. You can try something like
  location /graphite {
    rewrite ^/graphite/(.*) /$1 break;
    proxy_pass http://<IP_ADDRESS>:8080;

I can test the Docker stuff but regarding the web server configuration, that's certainly a possibility but I've not found a smoking gun, either in the nginx config or the gunicorn service.

Both looks legit, sorry, no idea 🤷

Thank you for the feedback, I'll consider the rewrite option as I continue troubleshooting.
For reference, here's another gist with the old nginx and gunicorn configs.

The rewrite rule appears to work, with a couple of slight modifications:
location /graphite {
    rewrite ^/graphite(.*) /$1 break;
    try_files $uri @graphite;
}

Interestingly, it works with or without graphite between the /? delimiters.
Wish I knew what about the application stack led to the need for this.
Now I just need to figure out why the {,-*} pattern matching syntax is not returning any data.

Further testing is leading me to think that the URL parsing does not like empty strings in braces with commas separating values, e.g. foo{,1}.bar to match foo.bar or foo.1bar. Again, the dropdown list shows matching values, but then when actually applying the string, no values are returned.

And I just noticed the two commits from a few days ago to fix braces expansion.


chore: onboard secure notebook blueprint

legacy blueprint for AI notebook security is due for an update, and was never onboarded to CI properly

/gcbrun

Applied.


location_datum is not needed

Everyone will use lat/long as we don't care about small distances

Actually we will need to make a change to satisfy the green tick.


Revert "test(@angular/cli): disable Webpack 5 e2e tests"

Reverts angular/angular-cli#18987
Tslib 2.0.3 works-around this issue.
Full discussion here: https://github.com/webpack/webpack/issues/11613

Tslib 2.0.3 works-around this issue.
Full discussion here: https://github.com/webpack/webpack/issues/11613

@alan-agius4 https://github.com/angular/angular-cli/pull/19039 was merged, is this still needed?

@filipesilva yeah this is needed to re-enable the tests


Supports using environment variables.

Hi, such a great project! Will be so great if we can use environment variables to configure parameters like API endpoint, key and so on :)

Sure!

Hi @fernvenue! I am going to implement this feature. I was wondering if you could provide some clarification regarding how users will be able to set environment variables and how these variables will be loaded in the browser.
Additionally, I am also interested in adding experimental rtl language support to the website. In this regard, I was wondering if you would like to contribute by adding Uyghurche translation to the website. I believe this would be a valuable addition and would enhance the user experience.

Hi @ayaka14732, thanks for your reply, I think environment variables should help us pre-define some parameters that will replace the default values, so that we can avoid the hassle of configuring them after the service is running, and it's also convenient for us to configure between different devices. The specific implementation may vary, which may depend on the design of the development team :)
By the way, I'll be glad to contribute to translation work.

Up!


Security Vulnerability Issue

Reflected XSS in /studio/designer.php?page=icon  endpoint via SVG icon upload.

This is super admin area, which provides full access to the site.


[WIP/TESTING] ci: Remove docker capabilities from build container

Commit Message:
Additional Description:
Risk Level:
Testing:
Docs Changes:
Release Notes:
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional API Considerations:]

currently the build container is completely insecure - the non-root user inside the container can trivially use docker to get root on the host - which means that all of the scripts etc that it runs can also do the same
(for ref - inside the container ...)
$ docker run -it --rm -v /:/tmp/hostroot debian:bullseye-slim

im not clear at all why docker was added into the build container (https://github.com/envoyproxy/envoy/commit/bbae4a7366a12df61afc37fd4465e7b557244ffb)
i dont see it used anywhere (apart from possibly in the distrib verification)  - so i think at very least we should make this configurable if not remove altogether
iirc you can get root on a host with just netcap so we might want to look at the other capabilities also

cc @mattklein123 @htuch afaict the capabilities were added for tcpdump for an asan test that has been disabled for a long time

ptrace can be used to root the host i think https://blog.pentesteracademy.com/privilege-escalation-by-abusing-sys-ptrace-linux-capability-f6e6ad2a59cc

i wasnt able to completely remove the docker config as it is required by the arm package verification job
the reason for needing it is kinda arbitrary - it needs a compiler for some of the python deps
i tried using the arm-large image but that also lacks a compiler, so even after installing bazel it didnt work
if we added bazel and build-essential into an arm self-hosted image we could remove this altogether

cc @lizan

/retest


Enhanced error handling for unknown objects

Should resolve the ValueError on obj.rsplit() when an unknown agent name is provided.
Example failure stimulus:
python examples/openai_gym.py CartPole-v0 -a PPOAgent -c examples/configs/ppo_agent.json -n examples/configs/ppo_network.json
In the above case PPOAgent is not a valid option (it should be ppo_agent in the revised API) and we receive a non-intuitive error message:
ValueError: not enough values to unpack (expected 2, got 1)
With this fix, if the object string is not found, it will report a list of valid options.

Thanks!


cmd: log built-in-config.yaml and merged-config.yaml

This change logs the config files on both windows and linux. It does so
by logging to STDOUT on linux and to the event log on windows.
This is what it looks like in cloud logging:

Alternatively, we could add separate fluent bit head input plugin to read from the config files directly. And for those receivers have a multi line processor that tries to combine everything into one LogEntry. Its a bit tricker.
The rule definition would be something like:
start_state: "# Generated by Google Cloud Ops Agent" -> A string we would write as the first line of the config files
cont: Negative lookahead of the start_state
With this alternative approach, we would get a single LogEntry with the entire config file (though I don't know what it would do if the input ends up in separate chunks, if the files are too large for example).
I went with the simpler approach for the PR -> just logging to std out.
cc'ing @davidbtucker and @quentinmit to get some thoughts around how we should self-log something like this.

Hey. I personally don't mind the one-entry-per-line for now.
One thing though: Could we get the indentation to show up?
https://user-images.githubusercontent.com/18472685/151616324-8afc4731-b186-46ba-aaf8-a54b0bd53d1f.png
shows everything as left-aligned.
Thanks.
Dave
On Fri, Jan 28, 2022 at 3:55 PM Ridwan Sharif @.***>
wrote:

Alternatively, we could add separate fluent bit head
https://docs.fluentbit.io/manual/pipeline/inputs/head input plugin to
read from the config files directly. And for those receivers have a multi
line processor that tries to combine everything into one LogEntry. Its a
bit tricker.
The rule definition
https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/multiline-parsing#rules-definition
would be something like:
start_state: "# Generated by Google Cloud Ops Agent" -> A string we would
write as the first line of the config files
cont: Negative lookahead of the start_state
With this alternative approach, we would get a single LogEntry with the
entire config file (though I don't know what it would do if the input ends
up in separate chunks, if the files are too large for example).
I went with the simpler approach for the PR -> just logging to std out.
cc'ing @davidbtucker https://github.com/davidbtucker and @quentinmit
https://github.com/quentinmit to get some thoughts around how we should
self-log something like this.
—
Reply to this email directly, view it on GitHub
https://github.com/GoogleCloudPlatform/ops-agent/pull/202#issuecomment-1024628420,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AJLB333DLU5XTUZNFPHYY73UYL7ELANCNFSM5D6DZ3OQ
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID:
@.***>

Could we get the indentation to show up?

The indentation is actually preserved, I see the indentation in jsonPayload but looks like Cloud Logging's UI removes leading whitespace in the quickview

Had some free cycles so fixed up this PR. The latest commit makes it so we no longer write the debug files to disk as we talked about.


Document how webhooks are set up

A few folks recently have pointed out that https://buildkite.com/docs/apis/webhooks doesn't say how or where to actually configure webhooks.
They are configured as per-organization notifications.

Thanks @lox! I'm going to close this issue as there's already #292 covering this request from @toolmantim 😊


use maven for dependency management

Original author<EMAIL_ADDRESS>(June 10, 2010 10:02:17)
in order to not having all the libraries in version control, i would suggest using maven in order to declare dependency libs.
http://maven.apache.org/
Original issue: http://code.google.com/p/google-refine/issues/detail?id=71

why not build openrefine with maven package bundled instead of other library????
It's really a bad idea to use ant.

For reference here is the most recent discussion on that topic and why we are staying with ant: https://groups.google.com/d/msg/openrefine-dev/NT4tNgSzYZw/Amq1_jZ_aqIJ

Covention is usually better than congfiguratuion. Hence, maven is better
than ant. I couldn't edit ant configuration any more. I would create a
branch which is built with mvn.
2015年8月5日 23:43于 "magdmartin"<EMAIL_ADDRESS>
For reference here is the most recent discussion on that topic and why we
are staying with ant:
https://groups.google.com/d/msg/openrefine-dev/NT4tNgSzYZw/Amq1_jZ_aqIJ
—
Reply to this email directly or view it on GitHub
https://github.com/OpenRefine/OpenRefine/issues/71#issuecomment-128045221
.

+1 for using maven..definitely
On 5 August 2015 at 17:55, Junwei Wang<EMAIL_ADDRESS>wrote:

Covention is usually better than congfiguratuion. Hence, maven is better
than ant. I couldn't edit ant configuration any more. I would create a
branch which is built with mvn.
2015年8月5日 23:43于 "magdmartin"<EMAIL_ADDRESS>
For reference here is the most recent discussion on that topic and why we
are staying with ant:
https://groups.google.com/d/msg/openrefine-dev/NT4tNgSzYZw/Amq1_jZ_aqIJ
—
Reply to this email directly or view it on GitHub
<
https://github.com/OpenRefine/OpenRefine/issues/71#issuecomment-128045221>
.

—
Reply to this email directly or view it on GitHub
https://github.com/OpenRefine/OpenRefine/issues/71#issuecomment-128048225
.

+1 for the maven. Also I noticed that there's some issue with the automation test. Not sure it can be fixed in a decent way after migrating to maven.

@jackyq2015 @fpompermaier
OpenRefine with Maven
For now, you can build OpenRefine by type
mvn clean package

and start refine by
java -jar server/target/openrefine-server-2.7.0-SNAPSHOT.jar

That's great! Thanks for your effort.
Few comments:

Your PR failed to build:
https://github.com/OpenRefine/OpenRefine/pull/1054

I think you can still use the "refine" script under root to start the openrefine. It provided more options.

@jackyq2015 I see the CI error. Do not worry. I will update the code relating with your two issues in the near future.

See PR  #1493

I've started on this and will fully convert the Ant build scripts to Gradle.  Those with Eclipse IDE can install the newest Buildship plugin as a precursor to my PR coming in the next few weeks.

@wetneb halfway done

@wetneb Actually, I'd rather baby step this... Can we move to Maven first ?  Don't we already have a PR past where someone did most of that work already and we could just tweak to get the Maven build working properly ?

We have a mavenized version of OpenRefine it this could help
On Sun, 12 Aug 2018 at 19:12, Thad Guidry<EMAIL_ADDRESS>wrote:

@wetneb https://github.com/wetneb Actually, I'd rather baby step
this... Can we move to Maven first ? Don't we already have a PR past where
someone did most of that work already and we could just tweak to get the
Maven build working properly ?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/OpenRefine/OpenRefine/issues/71#issuecomment-412357315,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ADmeJZDEZwUznjJRbitqNIXNiP_UgI88ks5uQGILgaJpZM4AM1Ju
.

Just moved this into the 3.1 milestone - @thadguidry @wetneb is this correct? (i.e. is this where we are targetting this change?)

@ostephens yes, thanks! I am also closing this to reflect the fact that the migration was done.


fix: Handle connection refused

When server is offline the program should only show a message not a
hard-to-read traceback.

Two things here:
1 - I don't know if exit -1 is the right thing to do.
2 - In Python, a try...except code with a broad except is considered harmful.


Is it Possible to Dynamically Modify the col-x value ?

Hi,
I wondered if it were possible to change the col-x value when hovering for example. Like I have a col-md-3  and would like to make it col-md-4 when hovering it. I'm pretty new to programming and I've been searching for a solution but I didn't find...
Hope someone can help me !
Thank you.

Hi @THOMASoBDM,
I think it can help you https://api.jquery.com/hover/
But our Github is only for bug reports and feature requests. If you're looking for help you have to ask around in the official Slack team or Stack Overflow. See our readme for more details.


⚠ Bofrost.at has degraded performance

In ef303d8, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1536 ms

Resolved: Bofrost.at performance has improved in cf755e9 after 6 minutes.


OCPBUGS-33121: Fix problems with versions and verbose flags

Description
This fix addresses the issue faced in using the --v2 (used to invoke v2 of oc mirror) and accidentally using -v2 (used for verbose logging)
This fix will only be for 4.17 onwards until we deprecate v1
Fixes # OCPBUGS-33121
Type of change

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

How Has This Been Tested?
Locally and unit tests
Expected Outcome
console message should show
error: detected a v2 ImageSetConfiguration, please use --v2 instead of -v2

/retest

Usually before removing flags on GA version of oc-mirror like v1, it is necessary to deprecate them and let the customers know in the docs they need to remove the flag from their automatons / scripts. It gives them time to change their side.
Removing flags directly without deprecating could cause breaking automation which uses the flag removed.
Suggestion:
-Based on the apiVersion of the image set configuration (v2alpha1 for example) it would be possible to identify that the customer wants to use v2 and print a message the correct flag is --v2 and not -v2 and stop the flow so the customer can fix the mistake.

/test unit

/lgtm


[Traefik Plugin Catalog] Plugin Analyzer has detected a problem.

The plugin was not imported into Traefik Plugin Catalog.
Cause:
failed to run the plugin with Yaegi: the load of the plugin takes too much time(10s), or an error, inside the plugin, occurs during the load: 1:21: import "github.com/Koellewe/traefik-oauth-upstream" error: /tmp/traefik-plugin-gop2017308451/src/github.com/Koellewe/traefik-oauth-upstream/oauth_upstream.go:10:2: import "golang.org/x/oauth2" error: unable to find source related to: "golang.org/x/oauth2"

Traefik Plugin Analyzer will restart when you will close this issue.
If you believe there is a problem with the Analyzer or this issue is the result of a false positive, please contact us.

Vendors committed.


DO NOT MERGE YET: Please review various fixes for render

These are fixes to help render some of the pages I am interesting in rendering.
I am looking for feedback on the todos I have in the code:

getFontWeight: value is float 1.7, instead of string - that I think it means multiplier for current font weight - do we have a stack with current font props?
evalFunctionsThenInline: linearGadient does not support rgb* functions, is there some code that already transforms rgb calls to colors to reuse?
what is the testing story? where, how to add tests?
anything wrong with the approach?
I want to implement an Inspect DOM, any suggestions on where to start?
I want to have an --no--images option, so render is super fast, any idea where to start?
Do you have a suite of tests, like, for these 10,000 urls, the png render should look like? we can do png diff to detect large changes

Thank you!

Hello @edisonnica,
in LoboUnitTest there is a test suite based on javascript and inspired by the HtmlUnit project, you are free to add png diff unit test
linearGadient does not support rgb* functions, there is a bug in fraction (value) and colors(values) methods used in the linearGadient(). If you want fix this issue i suggest refactor of this two methods. For Transform rgb to Color you can use ColorFactory.getInstance (). GetColor (color);
no images option: In Tab Tool/General/Network add checkbox "Enable Image"

In Class GeneralSettingsUI add LoboCheckBox imagesPanel and instance in costructor   this.imagesPanel = new LoboCheckBox("Enable Image");
Add imagesPanel in private methods getNetworkBox(), loadSettings()
In save() method retrive value of checkbox and modify method GeneralStore.insertNetwork
GeneralStore.insertNetwork method save netowrk values into sqllite table NETWORK,  you can update table.sql and network.sql into module LoboStore. In table.sql add new column image and set default value(1) in network.sql
In method getGeneralInfo() retrive image value from db and add value into GeneralInfo bean
In UserAgentContext add new method isImagesEnabled()
In ImgControl costructor check if isImagesEnabled() is true or false. Add check in if (image == null && your check)
8.. For get isImagesEnabled() use  UserAgentContext bcontext = modelNode.getUserAgentContext();
I hope I haven't forgotten anything...

In method FontKey getFontKey() you can find all object used to costruct font
Inspect DOM, i don't have idea sorry
Thanks for your support

@edisonnica for Inspect DOM, i find this is good point to start...
https://github.com/koqiui/xml-core-renderer/blob/3c916d82ee3ebf2f034665728601bcddf830f2b8/src/main/java/org/xhtmlrenderer/swing/DOMInspector.java

I got a simple PoC in this PR that shows DOM on console - tested with netflix.com/login (mostly a hack, I still need to find the right way to do it)
I will look into DOMInspector also. Thanks!
Example:
                  FORM  [login-form])
                    DIV  [nfInput nfEmailPhoneInput login-input login-input-email])
                      DIV  [nfInputPlacement])
                        DIV  [nfEmailPhoneControls])
                          LABEL  [input_id])
                            INPUT #id_userLoginId [nfTextField])
                            LABEL  [placeLabel])
                              #text
                          DIV  [ui-select-wrapper country-select])
                            A  [ui-select-wrapper-link])
                              DIV  [ui-select-current])
                                SPAN  [country-select-flag nf-flag nf-flag-us])
                                SPAN  [country-select-code])
                                  #text

@edisonnica added support rgb* for linear-gradient and radial-gradient. And i've added Dom tree

@edisonnica added support rgb* for linear-gradient and radial-gradient. And i've added Dom tree


extractDomain("https://www.google.co.uk") = "co.uk"

Thanks for the work - currently this can't be used with multi-part domain endings such as .co.uk or .com.au (and countless others).

Hey. Did you try with extractDomain('https://www.google.co.uk', { tld: true })?

➜  extract-domain-test cat index.js
const extractDomain = require("extract-domain");

console.log(extractDomain("https://www.google.co.uk", { tld: true }))
➜  extract-domain-test node index.js
google.co.uk

https://github.com/bjarneo/extract-domain#tld-support

Hey. Did you try with extractDomain('https://www.google.co.uk', { tld: true })?

Oops. Cheers boss


Apk plz?

Apk of this so i can do it on android?

you can try to do it trough termux using ubuntu and steam but other then that they did not make a apk because steam networking does not work on the steam mobile app.

No I can run bonelab on my phone i can download exe and run exe files I downloaded lemon installer to

Not how it works


UIAlertView obsolete

In step 12 in the AppDelegate.cs ProcessNotification method it uses UIAlertView.  This class is now obsolete in iOS, it should be written something like this now:
var myAlert = UIAlertController.Create("Notification", alert, UIAlertControllerStyle.Alert);                         myAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));                         UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(myAlert, true, null);

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 45afd17d-e909-ccd9-01c3-f746bdf406a2
Version Independent ID: d2c8cc69-5a37-4c73-d48b-9c058cf4595e
Content: Send push notifications to Xamarin using Azure Notification Hubs
Content Source: articles/notification-hubs/xamarin-notification-hubs-ios-push-notification-apns-get-started.md
Service: notification-hubs
GitHub Login: @sethmanheim
Microsoft Alias: sethm

Hi @AdamMarciniec, Thanks for the feedback! We are currently investigating and will update you shortly.

Hi @AdamMarciniec -- sorry for the delay in responding, we have updated the code in this step based on your suggestion and it should be live later today. Thank you for catching this and sending your feedback! #please-close


[storage] Port PR #26441 from storage/stable

port PR https://github.com/Azure/azure-sdk-for-js/pull/26441

I could've combined small changes in one PR...

API change check
API changes are not detected in this pull request.


Cop Idea: Ensure let/subject are used with symbols not strings

And provide an option to use strings.
# bad
let('first_name') { 'Adam' }
subject('user') { create_user }

#good
let(:first_name) { 'Adam' }
subject(:user) { create_user }

This was brought up by @Darhazer in this comment

I can imagine some cases to cover that are accepted by RSpec:
let("item#{num}") { } # bad practice?
let("multi" \
    "line") { } # interesting to see how this will be addressed later on


Predict function is not working on Azure Managed Instance

As per the article https://docs.microsoft.com/en-us/sql/t-sql/queries/predict-transact-sql?view=sql-server-ver15 Predict is supported in Azure SQL Managed Instance. However If i am trying to execute the Predict statement (https://docs.microsoft.com/en-us/azure/azure-sql-edge/deploy-onnx) against Azure SQL MI, it gives below error.
Msg 102, Level 15, State 40, Line 27
Incorrect syntax near '='.
Msg 319, Level 15, State 1, Line 27
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: ddee1efc-31ea-5433-b363-b3374ff6f2bd
Version Independent ID: 1206e81c-1cf6-bab2-666b-a0243eee4410
Content: PREDICT (Transact-SQL) - SQL Server
Content Source: docs/t-sql/queries/predict-transact-sql.md
Product: sql
Technology: machine-learning
GitHub Login: @dphansen
Microsoft Alias: davidph

May be my subscription needs to be whitelisted to use PREDICT fucntion?

@rawatsudhir1 - You're correct about needing to be whitelisted. Machine Learning Services in Azure SQL Managed Instance is currently in preview. The sign up process is described here: https://docs.microsoft.com/en-us/azure/azure-sql/managed-instance/machine-learning-services-overview#signup. The sign-up process is being modified at the moment, so the specific steps described in the article are a little off right now. But you basically need to create a support ticket where you request to be added to the preview, providing your subscription, logical server name, and region.

#please-close


Update refined-scalacheck to 0.9.23

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

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "eu.timepit", artifactId = "refined-scalacheck" } ]

labels: test-library-update, semver-patch

Codecov Report

Merging #15 (5b6cb80) into main (3ef256e) will not change coverage.
The diff coverage is n/a.

:exclamation: Current head 5b6cb80 differs from pull request most recent head 0384ecb. Consider uploading reports for the commit 0384ecb to get more accurate results

@@           Coverage Diff           @@
##             main      #15   +/-   ##
=======================================
  Coverage   76.27%   76.27%
=======================================
  Files          82       82
  Lines        2816     2816
  Branches      102      102
=======================================
  Hits         2148     2148
  Misses        668      668

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 7fc1a8c...0384ecb. Read the comment docs.


How do I customize the selection area in flutter_quill

My issue is about [Mobile]
I wanted to have an experience in flutter_quill similar to selection area in iOS Memo. And you want to customize the selection area's button group.

And you want?
With your issue, you can fork this repo and update this file followed by your demand

This issue has been fixed, thank you for the report!!


Added note to the documentation

Added note to the documentation about the encoding format of extract function.
fixes #1231

Please make sure that all the checks pass. Please add here any additional information regarding this pull request. It's highly recommended that you link this PR to an issue (please create one if it doesn't exist for this PR)

@roll it is ready for the review.


[Feature] Abysall deadspace tracking should be disabled by default

Tracking jumps to abysall deadspace PVE arenas has no practical value for most chain mapping usecases and just serves to create map clutter when a pilot forgets to turn off tracking before activating a filament.
It's a useful feature to some users in some specific cases, but I believe it should be disabled by default when creating a new map.

We'd need abort if region ID is:
12000001,12000002,12000003,12000004,12000005

There is already if statements that uses the function isAbyss():
https://github.com/goryn-clade/pathfinder/blob/58d9bb1ac2b11c6b6b0a44f613bf58a5a0ce6486/app/Model/Pathfinder/SystemModel.php#L711-L713
here:
https://github.com/goryn-clade/pathfinder/blob/58d9bb1ac2b11c6b6b0a44f613bf58a5a0ce6486/app/Controller/Api/Map.php#L857-L873
I do not see a good reason to track jumps to/from any kind of Abyssal space, be it PVE or PVP arenas.


Move RadioButton sample pages onto RadioButtons

Change from StackPanel to RadioButtons to demonstrate the improved keyboarding and accessibility experience.

@jevansaks, can you also mark the RadioButton page as "preview" (or "new") so its tile shows up correctly on the app's home page?

@jevansaks Jevan Saks FTE, can you also mark the RadioButton page as "preview" (or "new") so its tile shows up correctly on the app's home page?

How do I do that? :)

@jevansaks Jevan Saks FTE, can you also mark the RadioButton page as "preview" (or "new") so its tile shows up correctly on the app's home page?

How do I do that? :)

Add "IsPreview": true, to ControlInfoData.json near line 896

@jevansaks It seems that your PR went in a long time ago, but I still don't see it in the latest version I can get from the Microsoft Store (<IP_ADDRESS>). This would have helped me resolve an accessibility issue.

Are releases in the Store not caught up with the releases of the master branch?
I'm using OS build 18363.535, Store app version 11912.1001.1.0.
Should I open an issue about this?
Thanks,
Gabriela

Hi @gascardi!

Are releases in the Store not caught up with the releases of the master branch?

The version in the Store is out of date with what is currently in the master branch since we have a manual process to update the Store version. We generally do several Store updates a year (usually corresponding to big events like Build, Ignite, or updates to the WinUI package) but we haven't updated recently.
All of that said - I have been meaning to update the Store version, so thank you for this reminder 😅  I'll plan on doing this task early this week - and I'll provide an update here once I do so.

Thanks, @stmoy! :-)
I usually check the app for the latest guidance; next time I'll check the source code as well.
Is there any version tagging when a build gets uploaded to the Store so I can check if the version I downloaded is up to date with the repo?


docs(examples): direct links, maximize, better props

Codecov Report

Merging #1448 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #1448   +/-   ##
=======================================
  Coverage   99.74%   99.74%
=======================================
  Files         141      141
  Lines        2364     2364
=======================================
  Hits         2358     2358
  Misses          6        6

Impacted Files
Coverage Δ

src/collections/Menu/Menu.js
100% <ø> (ø)
:white_check_mark:

src/addons/Portal/Portal.js
100% <ø> (ø)
:white_check_mark:

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 9fb59f2...95123f7. Read the comment docs.


fix: Add plugin conformances to AmplifyVersionable

Issue #, if available: https://github.com/aws-amplify/amplify-ios/issues/850
Description of changes:
I removed plugin conformances to AmplifyVersionable when I added the default version property in the previous PR, which of course breaks since the Plugin Info helper scans plugins looking for those that conform to AmplifyVersionable.
This reinstates the conformance. Tested locally, plugin versions now show up as expected. I did add conformances to the Predictions Plugins, but didn't add those plugins because my test project didn't support iOS 13:

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

LGTM... can we improve the unit test so that we could caught this before?

Yep, good callout! Done.


Legacy build fails

I'm trying to build the lecagy ol.js file with npm run build-legacy.
I'm getting the error:
ERROR: Unable to parse a tag's type expression for source file /Users/jan/openlayers/src/ol/Collection.js in line 26 with tag title "param" and text "{import("./CollectionEventType.js").default} type Type.": Invalid type expression "import("./CollectionEventType.js").default": Expected "!", "=", "?", "[]", "|" or end of input but "(" found.

And a dozen similar errors. Finally the build exits with:
/Users/jan/openlayers/config/jsdoc/info/publish.js:98
          paramInfo.types = getTypes(param.type.names);
                                                ^
TypeError: Cannot read property 'names' of undefined
    at /Users/jan/openlayers/config/jsdoc/info/publish.js:98:49
    at Array.forEach (<anonymous>)

Steps to reproduce:
git clone git@github.com:openlayers/openlayers.git
cd openlayers
npm i
npm run build-legacy

OS: macOS 10.12.6
Node/npm: v10.10.0/6.4.1

duplicate of #8601


⚠ Bofrost.nl has degraded performance

In f336197, Bofrost.nl (https://www.bofrost.nl) experienced degraded performance:

HTTP code: 200
Response time: 809 ms

Resolved: Bofrost.nl performance has improved in 77b8c08.


METviewer GUI doesn't display statistics for variables with "<"

When a variable has "<" in it PROB(APCP_01<0.250) the GUI doesn't display the list of stats in the drop down menu. Instead, it displays N/A
Describe the Problem
XML parser doesn't support "<" character
Expected Behavior
GUI should display the list of statistics
To Reproduce
Describe the steps to reproduce the behavior:
1. Select the variable with "<"
2. Open menu with statistics'
3. Menu displays N/A
Relevant Deadlines
NONE.
Funding Source
NONE.
Define the Metadata
Assignee

[ ] Tatiana Burek
[ ] no scientist

Labels

[ ] UI
[ ] High

Projects and Milestone

[ ] METviewer 3.1

Define Related Issue(s)
Bugfix Checklist
See the METplus Workflow for details.

[ ] Complete the issue definition above.
[ ] Fork this repository or create a branch of master_<Version>.
Branch name: bugfix_<Issue Number>_master_<Version>_<Description>
[ ] Fix the bug and test your changes.
[ ] Add/update unit tests.
[ ] Add/update documentation.
[ ] Push local changes to GitHub.
[ ] Submit a pull request to merge into master_<Version>, listing the <Issue Number> in the title.
[ ] Iterate until the reviewer(s) accept and merge your changes.
[ ] Delete your fork or branch.
[ ] Complete the steps above to fix the bug on the develop branch.
Branch name: bugfix_<Issue Number>_develop_<Description>
[ ] Close this issue.

The fix was deployed to AWS as a patch

The current sorting throw an error with some values of input values:
Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
This happens because:
specific change they made in Java 7: changing the default sort algorithm from MergeSort to TimSort in the java.util.Arrays.sort method.
add this to the compare method to fix it:
if(!m1.group(2).isEmpty() && !m1.group(2).isEmpty()){
return 0;
}
or add JVM argument:
-Djava.util.Arrays.useLegacyMergeSort=true

The fix was deployed to AWS as a patch

Need to apply Unicode to ASCII conversion of variables for queries for PCT tables

Need to apply Unicode-to-ASCII conversion of variables for queries for PCT tables


Hot reloading issue for nested directory routes

Which project does this relate to?
Router
Describe the bug
Nested child routes have issues hot reloading. First experienced on v1.63.5 then updated to latest(v1.85.4) and issue is still there.
I recreated the issue on stackblitz but isn't the issue isn't exactly like my local. On stackblitz, the hot reloading stops working on a nested dynamic directory route path, while in my local project it happens before the dynamic route path.
eg. on stackblitz hot reloading stops working at /_test/(evaluate)/evaluate/_index/projects/$id/, in my local project its /_test/(evaluate)/evaluate/_index/projects
When i hit save, i see tanstack router regenerating routes in cli and i see vite hot reload firing in browser logs but the ui does not update.
Okay just recreated hot reload issue on non-dynamic route. updated stackblitz. Basically using router hooks (useParams,useLocation, etc.) breaks hot reload in nested routes
Thank you
Your Example Website or App
https://stackblitz.com/edit/tanstack-router-pwcdcu?file=src%2Froutes%2F_test%2F(evaluate)%2Fevaluate._index.projects%2F%24id%2Findex.tsx,src%2Froutes%2F_test%2F(evaluate)%2Fevaluate._index.projects%2Findex.tsx,src%2Froutes%2F_test%2F(evaluate)%2Fevaluate._index.projects%2F%24id.tsx,src%2Froutes%2F_test%2F(evaluate)%2Fevaluate._index.projects.tsx
Steps to Reproduce the Bug or Issue

go to /evaluate/projects/234
try modifying  src/routes/_test/(evaluate)/evaluate._index.projects/$id/index.tsx

Expected behavior
Hot reloading to work on all types of nested routes
Platform

OS: [e.g. macOS, Windows, Linux]
Browser: [e.g. Chrome, Safari, Firefox]
Version: [e.g. 91.1]

+1 - I noticed this in app/components directory too (example: https://stackblitz.com/github/tanstack/router/tree/main/examples/react/start-convex-trellaux?embed=1&theme=dark&preset=node&file=app/components/Board.tsx)


Updating Pygments URL

Hi there!
I guess it should be http since https generates a 400 Bad Request 😱
Cool project 👍🏻
Thanks!

Ah, thanks for pointing this out, @FranciscoAmado. Merging this now.

/cc @birkenfeld: Are there any plans to add support for HTTPS on the pygments.org website? I'd be more than happy to help get you set up with a free Let's Encrypt certificate—just let me know!

@mattt thanks for the offer. We're now planning to migrate the website around Christmas, then this should sort itself out.  If not, I'll come back to your gracious offer!


Add support for image buttons

Found that image button support was missing, which we needed. So implemented it here.
Implementation is almost identical to Image just with some parameters being different, and that build returns if the button has been clicked or not.

Thanks! :smile:


7.0.0-beta2 migration file in VS ASP.Net 5 template has incorrect property name string

ApplicationDbContextModelSnapshot file in an ASP.Net 5 project has b.Property<string>("NormalizedEmail-"); as the property name for NormalizedEmail. Which (as far as I can tell) is obviously incorrect. It should be b.Property<string>("NormalizedEmail"); unless I'm missing something.

Can you please update to Visual Studio CTP6 from here http://www.visualstudio.com/downloads/visual-studio-2015-ctp-vs
This has Beta3 bits which are newer and the template has been updated for these bits

Yeah, this is the case in the updated template.

Opening this bug in the tooling repo where we are tracking VS tooling issues. Since this is in the template which is part of tooling so moving the bug https://github.com/aspnet/Tooling/issues/16


ssd1306 broken by latest changes?

It seems something broke in the SSD1306 driver in the last few hours:
   Compiling ssd1306 v0.1.0 (file:///Users/egger/OSS/ssd1306)
error[E0061]: this function takes 3 parameters but 4 parameters were supplied
  --> examples/image_i2c.rs:56:14
   |
56 |     let im = Image1BPP::new(include_bytes!("./rust.raw"), 64, 64, (32, 0));
   |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 3 parameters

error[E0061]: this function takes 1 parameter but 2 parameters were supplied
  --> examples/text_i2c.rs:51:15
   |
51 |     disp.draw(Font6x8::render_str("Hello world!", (0, 0)).into_iter());
   |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 1 parameter

error[E0061]: this function takes 3 parameters but 4 parameters were supplied
  --> examples/rotation_i2c.rs:67:14
   |
67 |       let im = Image1BPP::new(
   |  ______________^
68 | |         include_bytes!("./rust.raw"),
69 | |         64,
70 | |         64,
71 | |         (w as u32 / 2 - 64 / 2, h as u32 / 2 - 64 / 2),
72 | |     );
   | |_____^ expected 3 parameters

error[E0061]: this function takes 1 parameter but 2 parameters were supplied
  --> examples/text_i2c.rs:52:15
   |
52 |     disp.draw(Font6x8::render_str("Hello Rust!", (0, 16)).into_iter());
   |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 1 parameter

Correct, I've changed some function sigs. I'm allowed to do that because we're not 1.0 yet or something ;)
I'm going to fix ssd1306 and pin it at a working version of embedded_graphics in a bit so we don't get this issue again. You can pin at a52f8a86215c3606a73f6321359a014d07d7f3c4 for now which should work though.

No worries, I'm still fighting with the traits.


Error will be thrown should domain not be allowed.

Great job guys!! From ES div ;)

Merged and tagged on v1.2.0.
Thanks again for the contribution 😄


[CI/Github Actions/non-critical] remove teams from auto PR creation invocation for condalock action

Description

We noticed for a while the auto PR assembly fails non-critically due to some fancy teams added, that don't exist - we fixed this for ESMValCore but forgot to do it for Tool.

Before you get started

Checklist
It is the responsibility of the author to make sure the pull request is ready to review. The icons indicate whether the item will be subject to the 🛠 Technical or 🧪 Scientific review.

[x] 🛠 This pull request has a descriptive title
[x] 🛠 All checks below this pull request were successful

cheers @bouweandela :beers:


fix: search panel race condition

Summary
fix async request race condition
搜索框的请求，提交结果时，应遵循 "后发出优先"

Checklist

[ ] Tests updated (or not required).
[ ] Documentation updated (or not required).

Please use English to summary the PR


On month roll bmw.*.chargingSessions.YYYY-MM gets previous months sessions as well

Describe the bug
In a new month the next directory in bmw.0.[VIN].chargingSessions.YYYY-MM gets created.
Unfortunately it then also contain the previous months data, which was copied over (so from MM-1).
Next steps then are all fine: New charging sessions get added correctly. The totals are correctly including the MM month, only.
To Reproduce
Wait for a new month with charging sessions in current month
Expected behavior
to not double/copy over the MM-1 data
Screenshots & Logfiles
none
Versions:

Adapter version: 2.5.3
JS-Controller version:
Node version:
Operating system: raspiberry pi 64 bit

Additional context
Its a great adapter - I can only recommend it.
Many thanks to all involved creating and maintaining it. Keep up the good work!

should be fixed you can also fetch old month remotev2.fetch-charges


Refactor validation related functions to more generalized form, expand some validation logic, add unit tests

Refactored validatePostDetails in AdminContainer.js to pull the corresponding validation function from a hash table of validation utility functions. Also avoids doing spread operations every time the reduce callback is executed to build the accumulated errors object with a more hash table construction style.
Validation logic for each postField that was happening in the if statements was moved to individual validation functions in the validationUtilities.js file. It's now grouped in the the isInvalid object. Had to add the option to call isInvalid functions with a default which works if a postField does not have a specifically defined validation.
Expanded some of the validations:

checking if numbers or coercable to numbers for latitude, longitude, radius
changed the && to || in the email check, assuming it should check if empty field OR if an invalid email format
checking that longitude, latitude, radius are defined/truthy

Wanted to make sure I didn't mess anything up so I added 8 unit tests in AdminContainer.test.js to check that everything was validating as expected and to check that all the stuff I changed didn't break something. I just checked it by running npm test
I also had to reinstall the dependencies to make it run. I think a module got added on the dev branch that I didn't have on my repo so I had to add it.

To resolve merge conflicts, I just defaulted every conflict to newer written code.
Since I wrote updated validation utilities for an older version of the posting logic, I just took out the usage of the validation utility functions for now in the updated logic. Things for the admincontainer were were moved around into separate files (adminform.js) so I'll leave implementing the utilities into the actual in-use logic for a future commit.
Should just have to look at the validateField function in adminForm.js, around line 81 -  120 and replace the if statements with lookups in the validation utilties.
The actual utility functions are in the separate validationUtilities.js file.


[Dask] eval_sets

Followup PR regarding #3952 - implements eval_set functionality for lightgbm.dask but without early stopping.
This is implemented this to work with all eval-* parameters:

multiple eval sets (i.e. multiple (X, y) pairs in eval_set)
eval_names
eval_sample_weight
eval_class_weight (for DaskLGBMClassifier only)
eval_init_score
eval_group (for DaskLGBMRanker only)

When an individual eval_set, eval_sample_weight, eval_init_score, or eval_group is the same as (data, label)/sample_weight/init_score/group, just use the latter instead of having to compute the training set/weights/init_score/group multiple times.
This is all that's going on, making little mini eval sets out of delayed parts in a consistent manner:

Other things to know:

Raises warning when a worker does not receive any eval_set parts. This check is now performed prior to client.submit found in _train function. Model training still completes in this scenario, but depending on which worker returns its futures_classifier, best_score_ and evals_result_ attributes can be empty or contain data. Moreover, when a worker is missing eval_set entirely, this will fail out once early_stopping_rounds becomes supported - local worker calls to model.fit(..., eval_data=None, early_stopping_rounds=x) will throw a exception.
See comment as to why early_stopping_rounds is explicitly omitted from this PR.
This adds 32 tests! I'm happy to trim it down a little bit to 16.

I don't believe this failure on the CUDA Version / cuda 10.0 pip (linux, clang, Python 3.8) job is related to your changes, but I haven't had a chance to look into it yet.
https://github.com/microsoft/LightGBM/pull/4101
    Running setup.py install for lightgbm: started
    running install
    INFO:LightGBM:Starting to compile the library.
    INFO:LightGBM:Starting to compile with CMake.
    Traceback (most recent call last):
      File "/tmp/pip-req-build-hfpu35bp/setup.py", line 107, in silent_call
        subprocess.check_call(cmd, stderr=log, stdout=log)
      File "/root/miniconda/envs/test-env/lib/python3.8/subprocess.py", line 364, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['make', '_lightgbm', '-j4']' returned non-zero exit status 2.

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-req-build-hfpu35bp/setup.py", line 335, in <module>
        setup(name='lightgbm',
      File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/setuptools/__init__.py", line 153, in setup
        return distutils.core.setup(**attrs)
      File "/root/miniconda/envs/test-env/lib/python3.8/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/root/miniconda/envs/test-env/lib/python3.8/distutils/dist.py", line 966, in run_commands
        self.run_command(cmd)
      File "/root/miniconda/envs/test-env/lib/python3.8/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/tmp/pip-req-build-hfpu35bp/setup.py", line 249, in run
        compile_cpp(use_mingw=self.mingw, use_gpu=self.gpu, use_cuda=self.cuda, use_mpi=self.mpi,
      File "/tmp/pip-req-build-hfpu35bp/setup.py", line 200, in compile_cpp
        silent_call(["make", "_lightgbm", "-j4"], raise_error=True,
      File "/tmp/pip-req-build-hfpu35bp/setup.py", line 111, in silent_call
        raise Exception("\n".join((error_msg, LOG_NOTICE)))
    Exception: An error has occurred while building lightgbm library file
    The full version of error log was saved into /root/LightGBM_compilation.log
    Running setup.py install for lightgbm: finished with status 'error'
ERROR: Command errored out with exit status 1: /root/miniconda/envs/test-env/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-hfpu35bp/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-hfpu35bp/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-1vvkoog9/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /root/.local/include/python3.8/lightgbm --cuda Check the logs for full command output.
Exception information:
Traceback (most recent call last):
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/req/req_install.py", line 812, in install
    success = install_legacy(
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/operations/install/legacy.py", line 86, in install
    raise LegacyInstallFailure
pip._internal.operations.install.legacy.LegacyInstallFailure

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 189, in _main
    status = self.run(options, args)
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/cli/req_command.py", line 178, in wrapper
    return func(self, options, args)
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 391, in run
    installed = install_given_reqs(
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/req/__init__.py", line 80, in install_given_reqs
    requirement.install(
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/req/req_install.py", line 830, in install
    six.reraise(*exc.parent)
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_vendor/six.py", line 703, in reraise
    raise value
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/operations/install/legacy.py", line 74, in install
    runner(
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/utils/subprocess.py", line 289, in runner
    call_subprocess(
  File "/root/miniconda/envs/test-env/lib/python3.8/site-packages/pip/_internal/utils/subprocess.py", line 258, in call_subprocess
    raise InstallationSubprocessError(proc.returncode, command_desc)
pip._internal.exceptions.InstallationSubprocessError: Command errored out with exit status 1: /root/miniconda/envs/test-env/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-hfpu35bp/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-hfpu35bp/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-1vvkoog9/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /root/.local/include/python3.8/lightgbm --cuda Check the logs for full command output.
1 location(s) to search for versions of pip:
* https://pypi.org/simple/pip/
Fetching project page and analyzing links: https://pypi.org/simple/pip/
Getting page https://pypi.org/simple/pip/
Found index url https://pypi.org/simple
Looking up "https://pypi.org/simple/pip/" in the cache
Request header has "max_age" as 0, cache bypassed
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /simple/pip/ HTTP/1.1" 200 16001
Updating cache with response from "https://pypi.org/simple/pip/"
Caching due to etag

However we did very very recently merge a fix for CUDA builds (https://github.com/microsoft/LightGBM/pull/4104), so if you merge master into this that will tell us something.

Ok I think this is ready for another review. Here are the things that need the most attention:

Handling eval_set-dependent data attached to the returned Dask estimator (i.e. evals_result_, best_score_, etc). Tests are laid out so that each of the 2 workers should have at least some eval_set parts, so that evals_result_ is not None regardless of which worker is rank=0. But users might find. I think this should be a new feature in a new PR though, in the spirit of keeping changes incremental.
The private _DatasetNames class, stores the names of the different components of Dask collections use during fit. Might not be kosher. I can change this to 4 lines starting around line ~27 that read _TRAIN_SET_NAME = '__train__', `_SAMPLE_WEIGHT_NAME = 'sample_weight', etc.

Hey @jameslamb sorry to bother you - is there any way you could re-trigger the CI pipelines? Im pretty sure things will pass! Thanks

yep yep definitely! And I know I still owe you another review, sorry it's going slow

Ok I restarted all the GitHub Actions stuff. You'll have tk update to latest master to get past some issues with check-docs and a few of the R jobs. We merged a lot of CI fixes over the last few days.

Hey thank you! No problem, totally get it. Will merge master and push!

Thanks guys, looking forward to these changes!

Hmm ok I'm running into a stochastic test failure related to the nondeterministic len(model.evals_result_) returned by the return_model model. My padding solution will remove a component of eval_set entirely from a worker's final local eval_set if the component is comprised 100% of padded [None, ..., None]. In which case the worker's model has < len(eval_set) eval components. On the test where the first eval_set component is only 50% the size of the trainset, one worker isn't getting allocated any parts of eval_set[0].
So I need to relax the assumption that the returned model's evals_result_ will have one result for every eval_set component until a PR resolves the nondeterministic evals_result_ quality.

Hmm ok I'm running into a stochastic test failure related to the nondeterministic len(model.evals_result_) returned by the return_model model. My padding solution will remove a component of eval_set entirely from a worker's final local eval_set if the component is comprised 100% of padded [None, ..., None]. In which case the worker's model has < len(eval_set) eval components. On the test where the first eval_set component is only 50% the size of the trainset, one worker isn't getting allocated any parts of eval_set[0] ("valid_0").
This raises an issue I'd like to fix here:
When one element of evals_result_ is 100% padding, I'm currently removing this component of the local eval_set from being supplied (because we can't supply model.fit(..., eval_set=[None, (X, y)]). So, in the test failure example, valid_0 is actually referring to a batched version of eval_set[1] and valid_1 would be referring to a batched eval_set[2]. Basically, when a worker gets 100% padding for a component of eval_set, the actual argument to model.fit has fewer than the original len(eval_set) passed to the Dask.fit argument and the indices of the valid set names using the indexing (e.g. valid_0, valid_1, ...) could get messed up.
Proposed solution:
I'd like to do some light post-processing evals_result_ and insert an empty key-value pair (e.g. "valid_0: []") for each component of eval_set that was removed due to None padding. And then rename the other components of evals_result_ . This way, valid_0 will always exist and correspond to the validation scores from eval_set[0], valid_1 for eval_set[1], etc. This all applies to best_score_ as well. Not a hard fix at all, but will make evals_result_ look strange when the component on the worker got 100% padding.

Addressed in 7bf7136 - see _pad_eval_names function.

@StrikerRUS thank you for the deep review!! Getting to work on your feedback, thank you again for the time

One update on this - I've recently discovered that when we use distributed training, the training data is not recognized as such during lightgbm.<model>.fit, so the corresponding evals_result_ and best_score_ do not contain the key "training", even if a component of eval_set is the training set. When eval_names is not provided, it simply gets named "valid_" like other non-training set validation sets. test_dask.py has been updated correspondingly.

This is something to address in a different PR, not here.

Hey @jameslamb @StrikerRUS can you please provide final review or thoughts?

I believe we should add the following note about custom eval function back to fit() method signature now.
https://github.com/microsoft/LightGBM/blob/c738c83bbddc80808b47d0603e182e9595b7b2f7/python-package/lightgbm/sklearn.py#L268

New

I believe we should add the following note about custom eval function back to fit() method signature now.
https://github.com/microsoft/LightGBM/blob/c738c83bbddc80808b47d0603e182e9595b7b2f7/python-package/lightgbm/sklearn.py#L268

Ah, you just mean copying the contents of this note, right?

Happy to duplicate. But could we just copy a link or say "see note for custom eval_metric functions in Sklearn API docs"?

@ffineis

Ah, you just mean copying the contents of this note, right?

For this PR I totally fine with just one line of a concatenation in Dask code like this one
https://github.com/microsoft/LightGBM/blob/c7134fa7ccbe1a1b1819ac2a66407504d3fab27a/python-package/lightgbm/sklearn.py#L722
Ideally, I think we can templatize it like other docstrings with shape types later.
Or is it OK to use wording array-like for Dask Arrays?
cc @jameslamb

@ffineis

Ah, you just mean copying the contents of this note, right?

For this PR I'm totally fine with just one line of a concatenation in Dask code like this one
https://github.com/microsoft/LightGBM/blob/c7134fa7ccbe1a1b1819ac2a66407504d3fab27a/python-package/lightgbm/sklearn.py#L722
Ideally, I think we can templatize it like other docstrings with shape types later.
Or is it OK to use wording array-like for Dask Arrays?
cc @jameslamb

AH ok thanks, this makes sense. Addressed in 5d4ddc8 unless James thinks the custom eval note should be reformatted like _lgbmmodel_doc_fit in this PR (I think this makes sense for another follow-up, as it will mostly be adding changes to sklearn.py).

Or is it OK to use wording array-like for Dask Arrays?

I think that's ok. If it causes confusion in the future we can make it more Dask-specific.

Also, during rendering and checking my current suggestions I noticed that there are no Returns sections for fit() methods of Dask estimators. Is it OK?

I guess they should have a return block similar to those in the equivalent scikit-learn estimators, but there are no return sections for e.g. DaskLGBMClassifier.fit() on master (https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.DaskLGBMClassifier.html#lightgbm.DaskLGBMClassifier.fit), so it's not something this PR needs to fix.

@jameslamb

I guess they should have a return block similar to those in the equivalent scikit-learn estimators ...

Created #4402.

@ffineis Thank you so much for all your hard work! Very important enhancement.
LGTM!

Thanks @StrikerRUS !! Appreciate the thorough vetting.


Testing fancy comments for ottr-reports

Purpose/implementation Section
What changes are being implemented in this Pull Request?
testing this: https://github.com/jhudsl/ottr-reports/pull/9

This doesn't have changes we need to merge it was just for testing purposes. Closing up