Add user-facing C# unhandled exception reporting.

I wanted a way to catch unhandled exceptions, because I want to display those in-game and also be able to report them to online bug reporting services. This does part of the job! It doesn't do all the job; this is more of a proof-of-concept that I am happy to parlay into good code.
This allows me to do this during my startup:
Godot.Logging.UnhandledExceptionReporter += (e) =>
{
    ErrorCollector.GatherEx(e);
};

and it works great for my current needs.
It is not perfect.

This catches C# exceptions. It does not catch engine warnings or errors. I'm going to do that too eventually, just not today.
This does not provide any mechanism by which errors (or warnings) can be suppressed. Sometimes that's useful!
It's unclear how to extend this API to provide those; most likely the interface will need significant changes to add those, and, well, breaking changes kinda suck.

I am, to reiterate, happy to work on this more if there's specific guidance on how it should be designed; I'm also happy to put together engine-error and engine-warning reporting too. Let me know if this is interesting and if it's worth continuing!

This does not provide any mechanism by which errors (or warnings) can be suppressed. Sometimes that's useful!

Personally, I'd say that giving this API a way to continue after an exception is not good. Maybe have a way to go to a specific scene setup that can be used to display the error and stuff like that but having this as a way to ignore errors is probably not a good idea.
If the user wants to continue after an exception then they should've just caught it. Who knows what state the game is in if we got in this API.

Keep in mind that it already does continue - that's present behavior. The question is only whether we give the user the ability to hide specific exceptions if they want to. And that can be useful if they're trying to work around an engine bug or a glitchy third-party library; there isn't always a place to put an exception handler.

Ok, that makes sense then. Yea, having a way to filter out what gets shown in Godot's editor is good.

Why do you want to display unhandled exceptions in-game? Maybe there's a better way to do what you are trying to do.
For bug reporting services it'd be better to implement this in core first. For this there's a proposal (https://github.com/godotengine/godot-proposals/issues/1896) and a PR (https://github.com/godotengine/godot/pull/56014) that may satisfy your needs.
I'm not convinced it's a good idea to hide errors/warnings in Godot's editor and I think this could lead to confusion when an user accidentally hides errors and this would make troubleshooting pretty much impossible.

that can be useful if they're trying to work around an engine bug or a glitchy third-party library; there isn't always a place to put an exception handler.

If Godot is reporting errors in your project you should try to fix them and if the errors are caused by an engine bug it should be reported. Keep in mind if you are using Godot 4.0 that it is expected that there could be many issues since it's still in beta but should be much better when a stable build is released.
About third party libraries, since you control when that code runs you should be able to surround it with a try-catch so I'm not sure I understand what you mean by not being able to put an exception handler.

Yea, having a way to filter out what gets shown in Godot's editor is good.

The Output tab is able to hide/show errors, warnings and logs and even filter by text, hopefully this is good enough but if you have any ideas on how to make it better feel free to open a proposal or a PR (maybe consider discussing any ideas on the #editor channel in Rocket Chat first).

Why do you want to display unhandled exceptions in-game? Maybe there's a better way to do what you are trying to do.
For bug reporting services it'd be better to implement this in core first. For this there's a proposal (https://github.com/godotengine/godot-proposals/issues/1896) and a PR (https://github.com/godotengine/godot/pull/56014) that may satisfy your needs.

It is less about displaying the errors and more about being able to easily offer an easy way to the user to report the error. Though granted I also rather have the game close rather than continue on exceptions and I thought it already did (Been a while since I was able to use Godot and I tend to avoid exceptions so just misremembered how it behaves.)
A global function that runs when an exception happens is also useful for integrating stuff like https://sentry.io . Just throw the code for the errors inside this function and be done with it, instead of try/catch blocks everywhere just to report possible exceptions.

Why do you want to display unhandled exceptions in-game?

Three answers here.
First, my general experience is that in every engine, errors regularly get unnoticed by people. People don't look at the error log unless they already know there's something posted, and people never expect an error. I've seen this happen in Unity, Unreal, Godot, and custom engines; it's just a universal truth and I've given up convincing people to look at the error log on their own, they just don't do it.
So this is being used for a system that pops up an error dialog when an error shows up. It pops up in the game viewport, which makes it impossible to ignore (the other effective solution I've seen is a modal popup.) Example:

The funny part is that when I implemented this, I realized this particular error had been happening for a few days and I hadn't even noticed it while working on the error reporting system.
Second, testers need to be aware of errors also, and will often be testing on the fully-built game (otherwise you're just begging for release-only errors, which will happen.) They need some visible error log, and that means I need to be able to reliably record errors to show ingame.
Third, I'm setting this system up for mod support. Modders don't have the full game engine tools available either, and they still need access to errors. In addition, their players need access to errors. Note that all of this is modeled off Rimworld's Developer Mode, which is considered a critical feature for mod developers:

The end result of all of this is that in-game error reporting is really really handy.

If Godot is reporting errors in your project you should try to fix them and if the errors are caused by an engine bug it should be reported. Keep in mind if you are using Godot 4.0 that it is expected that there could be many issues since it's still in beta but should be much better when a stable build is released.

Sure, I agree . . .
. . . but what if the error is harmless, and fixed in the next version, but the next version isn't yet released? I got a game to write, I don't want to mess around with cherrypicking patches that I don't need.
What if I'm using a closed third-party package that I can't change the code on? Show must go on; I've literally hex-edited binary-only .DLLs to work around bugs.
What if there's an error or warning that's legitimate, but that I've decided is an acceptable consequence of something I'm doing?
Sometimes life is just messy, and in the end, I'm here to write games; if it gets in the way of me writing a game I'm going to solve it, and not always in the way the engine developer intended. It's handy to have these tools available.

About third party libraries, since you control when that code runs you should be able to surround it with a try-catch so I'm not sure I understand what you mean by not being able to put an exception handler.

Not if it's creating a Node with a _Process function. Not all pathways into C# code go through enduser developer code.

It is less about displaying the errors and more about being able to easily offer an easy way to the user to report the error.

So this is being used for a system that pops up an error dialog when an error shows up.

I see what you mean now.

but what if the error is harmless

What if there's an error or warning that's legitimate, but that I've decided is an acceptable consequence of something I'm doing?

Then it seems like ignoring it would be fine. Although if you plan to show them to users I can see how this would be annoying.

Not if it's creating a Node with a _Process function.

That's a good point, I didn't think of that.

I still think this should be implemented in core first and handle all errors not just C# exceptions.

Is that a better place to post admittedly half-baked solutions than here? I'm happy to do that in the future!

In general, asking in Rocket Chat about ideas, proposals or PRs that you plan to work on can be a good way to figure out if you're in the right path before you spent too much time developing and it can clear up any questions you might have so I'd recommend it but it's not required.

Actually, C# exceptions can have any kind of extra data added to them through the .Data property (Which is an System.Collections.IDictionary). It can also contain other exceptions through the .InnerExceptionproperty. The last bit of information it holds is aSystem.Reflection.MethodBase?` which I doubt will marshal correctly as well
The entire exception however should ideally be totally preserved despite not extending the proper types to be marshalled. So, I'm not sure if a general system is possible that works for both GDScript and C#. I fear that C# will always need a bit of special handling when it comes to this, just to make sure the exceptions stay fully intact.

I think it could work like the current logging does which uses Exception.ToString if I remember correctly, so we would only have a string which is marshable.
If the purpose of this is to show the error to the user I think this should be enough, if you want to do something more complex then sure we would need some special handling in C# but either way I think it should integrate with whatever we have in core to avoid having a completely separate system.
And maybe that requires core exposing some API to customize the handling from GDExtension or other languages but we would need to prove first that it's wanted because in Godot we try to avoid future-proofing and only implement more complex solutions when we know we need them.

Well, I want it, at least :D
I'd be fine integrating it with a simple string-based representation, I'm honestly just .ToString()ing it myself. Is there a reasonable place to put this hook? I guess this would also pick up internal Godot warnings and errors, which I would like anyway, so it's worth it for me to rejigger it for that functionality.

I think this PR is definitely a good idea, and i feel like continuing execution of the program in production after an unhandled exception has occurred isn't really the correct behaviour. Allowing users to subscribe to an event that fires on an unhandled exception gives the developer a lot more freedom to assess the state of the program, and either bail or continue, without just having to blindly continue and exposing the user to a possibly unstable program.
I feel like the removal of this feature isn't really beneficial for any reason, and it also prevents the use of bug-reporting services like Sentry as previously mentioned.
@zorbathut if you wouldn't mind, could you attach a snippet of your workaround for the lack of the UnhandledExceptionEvent, because i can't actually find it in the Godot API, unless it's also been removed up until now.

What if there's an error or warning that's legitimate, but that I've decided is an acceptable consequence of something I'm doing?

Then it seems like ignoring it would be fine. Although if you plan to show them to users I can see how this would be annoying.

In my honest opinion, ignoring could be perfect for the 90% of users, but Godot should offer more flexibility and freedom to the game developers. Godot 3 we had some policy flags to log the error or abort the application. With this PR, game developers could log the errors, quit the application, save the game and restart, show a popup, send a error report to a server in internet or anything else!! Without them, game developers need to wrap with a try/catch every single method, which is almost impossible to achieve.

@zorbathut if you wouldn't mind, could you attach a snippet of your workaround for the lack of the UnhandledExceptionEvent, because i can't actually find it in the Godot API, unless it's also been removed up until now.

I've unfortunately been busy with a job change and haven't had time to do anything on this. I'm currently kinda planning on going back to it changing it into some callback so that the game can intercept and read PushError's, since that's a missing feature for my own purposes. This means I wouldn't get the C# exception itself but at least for my purposes, that's not a big problem - I'd personally rather have one place I can put a general Error Catcher that catches literally everything, including internal engine bugs.

To be honest, intercepting and reading PushErrors is probably the best alternative so far, and could probably even work with Sentry integration. Even if we don't have access to the actual exception, i suppose the actual error message itself could be reported to Sentry and then acted upon accordingly. It definitely is annoying not having access to the actual exception object itself though, as that gives way to a lot more opportunities for error handling etc.

Just spitballing ideas here, I could imagine a callback that provides both a string and an optional ErrorDetails, which is a new polymorphic class that can contain a C# exception, or some kind of native C++ "error" info (maybe including a stacktrace?), or whatever the GDScript equivalent is, or whatever [Joe's Custom Godot Language Integration] decides to provide.
Because, yeah, it is nice having access to the underlying exception once in a while.

Are there any updates on this feature?

I actually did a total rewrite of my design because I realized I was missing some stuff I needed, then said "ah, I should do some testing, then post it!", then did a bunch of testing, and then life became a Complicated Thing (tm) and it sorta fell on the floor.
Sorry about that.
Here's the current change I have in mind: https://github.com/zorbathut/godot/commit/ff1329b0df72c36a88d84321206c6e989d499076
This is a complete rewrite from what's been proposed here; happy to either force-push it or set up a new pull request.
Major differences:

It is now an exposed Godot API function, so it works in all languages.
It no longer provides the actual Exception object, just text logs. I am personally fine with this.
It needs documentation, which I'll write if people think it looks good.
It is designed to give the full log, even the parts that had already been printed when you made the hook. This is achieved by buffering the log until a hook is applied; once you make the hook, it replays all the buffered log (and then clears the log). If you never actually apply a hook it just buffers log eternally which is obviously not suited for production (it works fine for me because I always apply a hook :V) I think if I were doing this in production, I'd have it set up to throw away the log on the first message posted after the first frame; either apply your hook before that or we assume you don't care about the log messages.
This might not be thread-safe? I'm pretty sure log messages can come from multiple threads; can the C# entrypoint calls be made from multiple threads? I'm personally fine with "yeah, it will call your C# code from multiple threads, deal with it as you see fit" - my internal code just assumes that will happen - but I'd want verification from someone that making C# calls on multiple threads is safe. And I don't know if gdscript supports that. Might just need to serialize it or something.

Commentary welcome.

I think this is what I've been looking for to implement into my games so that, once I publish, I can (cautiously) report errors to my own server or a third party. I've been looking for some sort of solution like this and hopefully this commit or something similar will get merged in, would also like to see a few examples for the different languages, or at least GDScript.

I'll try to put down an actual review-for-comment request soon, it looks like this has interest. I've been busy, and it just works and I haven't been messing with it much, which I guess is a good sign that it's functional :V

@zorbathut sorry to ping, just wanted to ask again if you think the title could be changed to something more generic and not "C# only"
I really think it would help gather more commentary from users of other languages
Thanks!

This pull request is now kind of defunct; I've rewritten it with a completely different philosophy and design, and posted the new design at #87576. I haven't closed this yet just in case we end up doing this one anyway, but I do plan to close this if/when the new one is submitted and I wouldn't object if a maintainer just said "nah, new one's better, I'm killing the old one".
@iseos , @soccerob , @farfalk , you all expressed interest in this, here's a ping in the hopes you see this. Sorry it took me a while!


Google analytics for docs

https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/


Add "Admin" role

Instead of installing "ceph-tools [1]" on all "Mgr" nodes, we will now install those tools on "Bootstrap", and "Admin" nodes.
[1] ceph.conf, keyring, and ceph-common[2]
[2] ceph-common will be replaced by an alias on https://github.com/ceph/ceph-salt/issues/120
Fixes: https://github.com/ceph/ceph-salt/issues/71
Signed-off-by: Ricardo Marques<EMAIL_ADDRESS>

Codecov Report

Merging #121 into master will increase coverage by 0.05%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master     #121      +/-   ##
==========================================
+ Coverage   77.87%   77.93%   +0.05%
==========================================
  Files          10       10
  Lines        2111     2116       +5
==========================================
+ Hits         1644     1649       +5
  Misses        467      467

Impacted Files
Coverage Δ

ceph_salt/config_shell.py
69.68% <ø> (ø)

ceph_salt/core.py
97.45% <100.00%> (+0.02%)
:arrow_up:

ceph_salt/validate/config.py
100.00% <100.00%> (ø)

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 a512005...0cb44ef. Read the comment docs.


Problem converting pickle to gts

Hi,
I am trying to convert a pickle byte array into a GTS, but for some reason I can't find a way to get the timestamp in the right format. Let's take an example:
# First create a GTS, store it into pickle format and reload it.
# That way, we know we start from a valid GTS.
# The $list variable is a list of list
NEWGTS
'class' RENAME
{ 'foo' 'bar' } RELABEL
0 NaN NaN NaN 'true' ADDVALUE
1 NaN NaN NaN 'false' ADDVALUE
->PICKLE
->HEX
HEX->
PICKLE->
'list' STORE

Now, we want to have a valid GTS at the end so that we can use specific functions for it. For that, we can use ->GTS which can take as an input en encoder. So we need first to transform our list into a valid encoder. Here's what I tried:
# Transform timestamps to LONG (stored as DOUBLE in the list)
$list "timestamps" GET 'ts' STORE
$ts <% TOLONG %> LMAP DROP // I don't know why but LMAP return the input list on top of the stack
$ts SIZE ->LIST 'ts' STORE

$list "values" GET 'v' STORE

# Combine timestamps and values, and transpose them to have
# a valid format to give to ->ENCODER (which fails unfortunately).
$ts $v 2 ->LIST ZIP
->ENCODER

Which fails with the error >ENCODER encountered an invalid timestamp., which is define here https://github.com/senx/warp10-platform/blob/abd62a47b65240fbc376d80f5c30f12611a8d977/warp10/src/main/java/io/warp10/script/functions/TOENCODER.java#L116. But I made sure to transform timestamps to LONG beforehand and we can check it:
$ts 0 GET TYPEOF
> "LONG"

Is there anything I misunderstood?
Thank you

Hello,
Yes, I can help to clarify a few points.

When a GTS is pickled in warpscript, the underlying Python object that is being serialized is a dict. The equivalent in WarpScript is called a map, not a list as you called it. So applying ->PICKLE PICKLE-> on a GTS results in a map.

With this map, you can remake your GTS, for example:
NEWGTS
'class' RENAME
{ 'foo' 'bar' } RELABEL
0 NaN NaN NaN 'true' ADDVALUE
1 NaN NaN NaN 'false' ADDVALUE
->PICKLE
PICKLE-> 'map' STORE

$map 'timestamps' GET [] [] [] $map 'values' GET MAKEGTS
$map 'classname' GET RENAME
$map 'labels' GET RENAME

The documentation of ->PICKLE is lacking here so I will modify it to make it clearer.

The same is true for a GTS encoder: when pickled, it will become a Python dict.

The macro of LMAP is applied for each value in the input list. On each evaluation, two parameters are given to this macro: the value, and the index of the value. Since you only used the index, the value is left on top. To convert a list of values into a list of long you can do:

[ 0.1 1.1 ] <% DROP TOLONG %> LMAP

According to the documentation, you can also do
[ 0.1 1.1 ] <% TOLONG %> false LMAP

So in your case, you had in fact converted the indices, then stored the the timestamp list (unchanged), hence why you still get the error with ->ENCODER.

However, the timestamps list is a list containing LONG values and ->ENCODER should not raise an error. This is effectively an issue. Thanks for pointing it out.

to boot you call DROP just after LMAP, so the list LMAP just produced is simply discarded.
LMAP does not modify its input list in place, so $ts is not modified in your case and if your Python code generated a list of doubles for 'timestamps' then $ts still contains it.
Can you replace the DROP with 'ts' STORE and verify that the code works as you expect.

Thank you both for your very helpful comments.
@randomboolean

You are absolutely right about map I kept list because my python object is a list but I wanted to make a reproducible example (I should have been more carefull).

Thanks for the MAKEGTS that I totally forgot! I was only focusing on ->GTS that I forgot we can build GTS with other ways. Maybe it could be a good idea to point MAKEGTS in the see also section of ->GTS documentation? Your solution works perfectly.

I new I didn't understand LMAP properly, your comment and @hbs one made it clearer, thank you both. By the way, I saw that there is a logical parameter to not put the index on top of the stack, but it doesn't seem to work. Even in the example of the official release :

// double each input
[ 4 5 6 ] <%  2 * %> F LMAP  // F is a faster way to write false

ERROR line #2: Exception at '* %> F =>LMAP<= // F' in section [TOP] (LMAP expects a macro on top of the stack.)

But that should probably be in another issue.

Thanks for confirming that in that case, I had in fact long values (even though it was indexes and not actual values), but  ->ENCODER raises an error.

@hbs
Your solution is valid too, after rereading LMAP documentation, I realised I didn't know what I was doing. It appears that if I change
$ts <% TOLONG %> LMAP DROP $ts SIZE ->LIST 'ts' STORE

with
$ts <% DROP TOLONG %> LMAP 'ts' STORE

the code works find! Thank you!

The boolean parameter to LMAP was introduced recently, if you are running an older version of Warp 10 it might not be there yet.
Closing this issue.


[Cassandra] change the port of Cassandra (previous version 1.2) as a parameter instead of a constant value such as 9160

Because different clusters may use different ports, get the value of the port from property file is better than a constant value. Just as what CassandraCQLClient does.

Thanks for the fix!


Add HoRNDIS

Project URL
https://github.com/jwise/HoRNDIS
Category
system
Description
Android USB tethering driver for macOS
Why it should be included
It gives you the opportunity to use your Android phone's native USB tethering mode to get Internet access.
Checklist

[x] Edit applications.json instead of README.md.
[x] Only one project/change is in this pull request
[x] Screenshots(s) added if any
[x] Has a commit from less than 2 years ago
[x] Has a clear README in English

@dotiful Thank you! 👍


Added custom name to capacity provider

what
We added the way to customize the capacity provider name
why
With the current change the default behaviour is preserved.
We applied this in order to avoid issues while creating a new capacity provider for another environment since for AWS it already exists due to a previous deploy ie in test env.

@carlolucadei can I also ask you to address this bats issue for examples/complete:
Test: check if terraform inputs have descriptions
File: input-descriptions.bats
---------------------------------
availability_zones is missing a description
region is missing a description
---------------------------------

Thanks in advance!

@gberenice I saw your last message, it could take a while to fix it

Ah, sorry, I should have been more explicit about what to do. Tests are fine, but the bats check was complaining about missing required descriptions for the inputs in the example.
Please update the file examples/complete/variables.tf to this content:
variable "region" {
  type        = string
  description = "AWS region"
}

variable "availability_zones" {
  type        = list(string)
  description = "Availability zone IDs"
}

Ah, sorry, I should have been more explicit about what to do. Tests are fine, but the bats check was complaining about missing required descriptions for the inputs in the example. Please update the file examples/complete/variables.tf to this content:
variable "region" {
  type        = string
  description = "AWS region"
}

variable "availability_zones" {
  type        = list(string)
  description = "Availability zone IDs"
}

@gberenice I got it. Thanks! Maybe it will be required to perform squash commit...
PS: How can I perform bats check? (sorry I'm a newby)

/terratest

@carlolucadei the last thing is left - please run terraform fmt for examples/complete

/terratest

/terratest

I'm sorry, @gberenice  it’s clear that I don’t fully understand the structure of the repository, even though I’ve read the contributor guideline.
Could you please help me successfully close the pull request?
I have reformatted the files, and I’ve run the tests locally with no errors. It’s clear that I’m missing a setup or something else that I’m not aware of.
Thanks again for your support.

@carlolucadei thanks for the fixes!
The issue occurs because the test check starts two runs in parallel (one for Terraform, one for Opentofu). Some resources don’t have unique names, so the second job may fail due to resources not being cleaned up after the first job.
This requires some fixes to the tests, but it doesn’t block merging the PR since one of the test jobs was completed successfully.
Could you update your branch KseniaSecurity:added-custom-name-to-capacity-provider so I can merge it to base branch?

@carlolucadei thanks for the fixes!
The issue occurs because the test check starts two runs in parallel (one for Terraform, one for Opentofu). Some resources don’t have unique names, so the second job may fail due to resources not being cleaned up after the first job. This requires some fixes to the tests, but it doesn’t block merging the PR since one of the test jobs was completed successfully.
Could you update your branch KseniaSecurity:added-custom-name-to-capacity-provider so I can merge it to base branch?

Hi @gberenice I'll do it asap.
Meanwhile, our change is referred to that issue. We got the same error in the production environment and we started a new fork to extend the module.
In that way, we are able to specify the capacity provider name ;)

/terratest

@carlolucadei unfortunately there is a new issue with triggering the test job - some contributors do not have permission to run the tests. The CloudPosse team is already on it, and I'll get back to you as soon as the fix is released.

/terratest

@gberenice I synced my fork, fixed the conflict locally in my repo, and updated the README.md by running:
make init
make readme

Then I pushed the changes again.
Let me know if it's okay, as in our pull request evaluation process, conflicts are typically handled by the reviewer.


How to use GapCursor?

import { GapCursor } from "prosemirror-gapcursor";
import "prosemirror-gapcursor/style/gapcursor.css";
...

 this.editor = new Editor({
        editable: this.editable,
        useBuiltInExtensions: false,
        editorProps: {},
        dropCursor: {},
        extensions: [
          GapCursor,
...

it not works, sad...

@Alecyrus Did you find out how to have gapcursor running ? I would be interested too...

not yet.


Double check "find" and "find or create"

Fixes #136

Many thanks for the clarification.
I came to the same result: /v1/inquire-application-type-approvals to be changed to find .
Further on, I realized that my description in the comment at ApplicationPattern issue #92 is imprecise, because it ignores the case of necessarily  finding a name in a group of instances.


Add Support For More Platforms (iOS, Mac Catalyst, tvOS, Android)

This PR makes a few under-the-hood changes to how the runtime drivers are loaded and run, enabling support for more platforms that whisper.cpp supports, including iOS, Catalyst, tvOS, and Android.

To do this, I need to make some changes in how the runtime drivers were loaded, and add some new scripts:

The current version assumes the libraries are dynamically loaded via whatever is in the runtime folder. While the default Whisper drivers are compiled as dynamic libraries, they don't have to be. You can create static versions and link them in. Moreover, if you did compile a version for a different platform, like iOS, the NativeLibraryLoader class would assume that it needs to load a driver and will throw since the platforms are not listed.
To make this work, I made some changes.
I added new TargetFrameworks to the base library. Suppose you're running on iOS/Catalyst/tvOS/Android. In that case, you will need to have linked the library before running the app (Generally, you can't load dynamic libraries on those platforms.), meaning you can avoid loading it dynamically at all.
If you still want to load your driver anyway, you can use the overloads to add a path directly to the one you wish to load.
In the NativeMethods class, I added a directive to change the Library name to__Internal for iOS and Catalyst, as the library is already loaded and linked, and this name is required for it to work.
I removed the default Runtime folder from Whisper.net and created a new nuget, Whisper.net.Runtime, including a targets file and all the native libraries.
This was required, as the current version would dump runtime files into every project where it was referenced. That is not sustainable if you need to reference the base assembly in several projects. Still, it would cause some platforms like iOS and Android to break on compile since it would try to reference the libraries from other platforms in its output.
While this is a breaking change (Users updating to the new version containing this change would need the Runtime Nuget or their own library to load) IMO it's much more sustainable. It would make it much easier to add new platforms or try and update the library versions "out of band" from the one it was built against.
For users running a console app with a base TFM (net7.0, etc), if you include the Runtime nuget, it will function like the original library and dump the desktop libraries into the runtime folder.
I've also written new scripts for building these runtimes and putting them into the Whisper.net.Runtime directory.
To build the iOS/Catalyst/tvOS/Mac libraries, run make apple. This will build all of the runtime libraries and lipo them into smaller linked versions.
To build Android, run make android
The other Powershell scripts are left in place, but I've moved the directory output to the new one I created.

I have an example of the nuget in action at https://github.com/drasticactions/Drastic.Whisper/tree/main/samples and https://github.com/drasticactions/Drastic.Whisper/tree/main/nuget

Hello @drasticactions,
First, I want to thank you for this amazing contribution. I cloned it locally and check a few more cases but overall, it looks awesome 😎
Really great work!

In terms of your CI, I'm not sure if the NativeBuild YAML works, but the Dotnet one , the way I wrote it, will only compile under Windows and Mac, because the apple TFMs (net6.0-ios, etc) are only supported there.
I introduced the TFMs because of the NativeMethods class and DllImport as it (AFAIK) requires the __Internal name for linked libraries on iOS platforms. If there is another way to make that work, I could change it back to be netstandard2.0 and 2.1. The targets file should still work fine as that's on the users project rather than the library itself to put the files in the right place, and with the flags I have it should work.

I can fix remaining warnings (marked as errors in CI) in future PR (They were there even before but only these workloads identified them).

Thanks!
Then you can install them locally, and update them to the newest version whenever that lands.

Thanks again for this capability!
I was thinking to create a preview version <IP_ADDRESS>-preview1 in nuget, so it will be easier to try it out for everyone :)
Will wait for the whisper.cpp to release <IP_ADDRESS> in order to create <IP_ADDRESS> as stable version.


Non recursive call required for update / modify method

Is your feature request related to a problem? Please describe.
Based on https://github.com/Azure/azure-sdk-for-python/blob/6d9bd4a62945e18b081d62ff2e74ca3627a75211/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/_path_client.py we request a non recursive async call to update / modify ACLs.
Describe the solution you'd like
There currently is a function update_access_control_recursive but to avoid having to rewrite async code or use HTTP calls please add a non recursive call update_access_control. This is required because our solution currently uses the async update_access_control_recursive function but certain situations do not require recursive operations
Describe alternatives you've considered
Will use HTTP for these scenarios
Additional context
Require both function with and without the continuation token

Chatting with Nick offline internally about this.


[feat] New performance syntax

This PR introduces a new syntax to capture and report performance data from a reframe check. In order to facilitate writing generic and composable tests, the reference variable is now entirely optional and each performance variable is extracted with a member function decorated with the performance_function decorator:
import reframe as rfm
import reframe.utility.sanity as sn
import re

@rfm.simple_test
class Base(rfm.RunOnlyRegressionTest):
    valid_systems = ['dom:login']
    valid_prog_environs = ['PrgEnv-gnu']
    executable = 'echo 40 bananas'
    v = variable(str)

    @sanity_function
    def assert_bananas(self):
        return sn.assert_found(r'bananas', self.stdout)

    @performance_function('bananas')
    def perf0(self):
        return sn.extractsingle(r'(\d+)\s*bananas', self.stdout, 1, int)

    @performance_function('bananas', perf_key='b-1')
    def perf1(self, blah=222):
        f = open(self.stdout.evaluate(), 'r')
        stdout = ''.join(f.readlines())
        f.close()
        return int(re.match(r'(\d+)\s*bananas', stdout)[1])

Reframe will pickup these functions marked as @performance_functions and run them all by default:
==============================================================================
PERFORMANCE REPORT
------------------------------------------------------------------------------
Base
- dom:login
   - PrgEnv-gnu
      * num_tasks: 1
      * perf0: 40 bananas
      * b-1: 40 bananas
------------------------------------------------------------------------------

Note that the units are attached to the decorated function, and the name of the resulting performance variable can also be customised with the perf_key decorator argument. If any decorated performance function has more than one argument without a default value (the self placeholder), an error is raised:
def foo(x, y=10):
    # cool

def bar(x, y):
   # not cool

So now, what if someone derives a test and wants to change the performance variables from the base test? We have the @performance_report decorator for that. Functions with this decorator will assign their return value to the perf_patterns, and the rest is the same as with the old syntax:
@rfm.simple_test
class Derived(Base):
    @performance_report
    def my_report(self):
        l = lambda self: sn.extractsingle(r'(\d+)\s*bananas', self.stdout, 1, int)
        return {
                'a': self.perf0(),
                'b': self.make_performance_function(l, 'more_bananas'),
                'c': self.make_performance_function(
                    lambda x: sn.extractsingle(r'(\d+)\s*bananas', x.stdout, 1, int),
                    'other_bananas'
                )
        }

With this syntax, the functions that go into this performance report dictionary are guaranteed to be suitable performance functions, otherwise an error is raised. Note the addition of the self.make_performance_function method, which allows to add more performance functions inline. The performance report for this Derived test looks as follows:
==============================================================================
PERFORMANCE REPORT
------------------------------------------------------------------------------
Base
- dom:login
   - PrgEnv-gnu
      * num_tasks: 1
      * a: 40 bananas
      * b: 40 more_bananas
      * c: 40 other_bananas
------------------------------------------------------------------------------

Unit tests to follow after the first round of reviews :)
Closes #2064

Hello @jjotero, Thank you for submitting the Pull Request!

In the file reframe/core/pipeline.py:

Line 589:26: E126 continuation line over-indented for hanging indent

Do see the ReFrame Coding Style Guide

Codecov Report

Merging #2083 (e0b3ab8) into master (adb8e3e) will decrease coverage by 0.51%.
The diff coverage is 44.76%.

@@            Coverage Diff             @@
##           master    #2083      +/-   ##
==========================================
- Coverage   86.74%   86.23%   -0.52%
==========================================
  Files          52       52
  Lines        9267     9340      +73
==========================================
+ Hits         8039     8054      +15
- Misses       1228     1286      +58

Impacted Files
Coverage Δ

reframe/core/meta.py
85.65% <31.25%> (-13.33%)
:arrow_down:

reframe/core/pipeline.py
87.58% <55.35%> (-3.82%)
:arrow_down:

reframe/frontend/statistics.py
95.95% <100.00%> (ø)

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 adb8e3e...e0b3ab8. Read the comment docs.

@victorusu I was not aware of that show! 😂
self.make_performance_function is implemented as a wrapper of the @performance_function decorator, which is not available from the instance. Where else are you thinking this make_performance_function method would be used if not in a regression test instance?

I've started looking into the new syntax. I like the concept of the @performance_function and the way it works. One of my first comments is that I'm generally against removing the units from the reference. When I read a test and I see the units I can immediately get an understanding of the measurements. Otherwise I would have to look into the various performance functions, which can be scattered over different files. I'm generally against on the recommendation of writing the unit as a comment, because very easily it'll become outdated. I'd vote to issue a warning if the unit in the perf function and the reference do not match. That'd be helpful for example when a library changes; if the unit of a performance function changes, then most likely the reference must be updated.
Regarding the @performance_report I'm still looking at it :-)

Changed the @performance_report decorator to @performance_variables.

@brandongc If I understand correctly your point, that could be an option, but we didn't want to touch the perf_patterns syntax for backward compatibility. Also, as a matter of style we believe the decorators feel a bit more natural and integrated to the language compared to something like this:
perf_patterns = [PerfVar(...), PerfVar(...)]

I've added the unit tests for all this new syntax. Also, I've moved the make_performance_function method from the pipeline into the utility/sanity module, since this method can be used with a free function. Now, since this make_performance_function returns a _DeferredPerformanceExpression, I think we should be consistent on how we name this function and all the other deferrable and so on. I'll try to think of a better name for this.


Support for color(display-p3)

When attempting to parse the following (using svg2pdf):

The following errors are output for strokes and fills:
Warning (in usvg::parser::style:147): Failed to parse stroke value: 'color(display-p3 0.6863 0.6863 0.6863)'. Fallback to no stroke.
Warning (in usvg::parser::style:141): Failed to parse fill value: 'color(display-p3 0.6863 0.6863 0.6863)'. Fallback to black.

I’m having a hard time understanding if this is just a matter of adding support for display-p3 (in Color perhaps?) or if the color attribute as a whole needs to be supported.
Could someone weigh in on the complexity of this request?

Duplicate of #514

Could someone weigh in on the complexity of this request?

Tons of work. No plans on implementing this feature any time soon. Unless someone would send a patch.
See #806 as well.


MNT: Use noarch python {{ python_min }} variable

Use 'python {{ python_min }}' syntax for the python requirements for noarch python recipes.

c.f. https://conda-forge.org/docs/maintainer/knowledge_base/#noarch-python

Use a Jinja2 set statement for python_min to keep all the build metadata contained in the recipe/meta.yaml and override the global python_min with pylhe's python_min of 3.8.
Remove --no-deps --no-build-isolation 'pip install' options in recipes as the build tool (e.g. conda-build, rattler-build) will enforce all required 'pip install' options itself at build time.

c.f. https://github.com/conda/grayskull/issues/582

Add conda-forge/scikit-hep as feedstock maintainers.
Bump build number.

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[N/A] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

@conda-forge-admin, please rerender

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found it was in an excellent condition.


Preliminary work in dns package for presets

This separates the code related to DNS for OpenShift and DNS for a working VM.
The end goal is to be able to not run the OpenShift part.

/retest
retest this please

/retest this please


full VS solution files!

hi,there
I came some problems whem compiled mxnet on windows,
would you like to release your full VS solution files?
thanks!

what you problem? i am use cmake generate vs solution file.

win8.1  64bit  vs2017
both mxnet and cpp examples can be compiled successfully, but the accuracy is always a constant value when running example lenet or lenet_with_mxdataiter. it's so wired. would you like to give me some advice about this ?
thanks.

97: Epoch: 94
[23:28:24] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
124: Accuracy: 0.0980569
[23:28:24] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
97: Epoch: 95
[23:28:26] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
124: Accuracy: 0.0980569
[23:28:26] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
97: Epoch: 96
[23:28:28] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
124: Accuracy: 0.0980569
[23:28:28] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
97: Epoch: 97
[23:28:31] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
124: Accuracy: 0.0980569
[23:28:31] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
97: Epoch: 98
[23:28:33] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
124: Accuracy: 0.0980569
[23:28:33] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
97: Epoch: 99
[23:28:35] E:\Work\TestRoot\mxnet\cpp-package\example\lenet_with_mxdataiter.cpp:
124: Accuracy: 0.0980569

I'm not quite sure about the CPP interface.can you test the python interface example first?

I'm not familiar with python, so I tried mxnet.csharp with your latest release 20170811_mxnet_x64_vc14_gpu.7z , the accuracy is stukk a constant value when traing .
the images are generated randomly with numberic lable.


localOverride persistance - How does it work?

I'm looking for clarifications on how Statsig.localOverride works. I tried reading the documentation but am still unsure.
Context: I'm building a "statsig devtools" for Next.js server components for our team and would like to offer t*he ability to override a feature gate or experiment through these devtools. However, the override is not persisted in any way when navigating in the application. It only really works for the current page that the developer is on.
Is this expected behavior? I understand that the override is not persisted on the network in any way, but am unsure to what extent it's supposed to persisted (if at all). If it's supposed to be persisted, to what extent, and what can I do to make sure it doesn't default back to the statsig network?
Thank you in advance :)
Reference
Statsig Docs | Node.js Server SDK  # localOverrides

If you're using the node SDK, we dont persist overrides anywhere.  It should keep it in memory, so subsequent checks on that server should still have the override - are you hitting a different server on different pages, perhaps?

That makes sense! We're not experiencing it being persisted when using the next.js dev server and navigating between app router pages (a local override is always reset when navigating), I'll do some more testing on our side and if we can't get it to work then I can create a reproducible repository for you. Feel free to close this until then, I've gotten the clarifications I needed :) Thank you!

Hmm do let us know if this continues or you have a reproducible example.  The node SDK overrides do allow you to override just per user, OR globally - if you dont provide a userID as the last argument, that might be what you are looking for

closing for now


[CH]CH quantilesGK is much slower than Spark approx_percentile, need to improve performance

SELECT approx_percentile(id, array(0.5, 0.4, 0.1), 100) from range(10000000)
耗时1.184s
select quantilesGK(100, 0.5, 0.4, 0.1)(number) from numbers(10000000)
耗时9.048s

Pls ignore this issue. I had mistake during testing...


Tweak omniscent player to use ModifyVariable instead of reentering and cancelling

Fixes Virtuoel/Pehkui#40

The issue happens because I save the scale of the player at HEAD, set the client player's scale to the default so the player is rendered at the normal scale, then set the player's scale back to the saved scale after rendering. The reentry causes the saved scale to be written to a second time, with the default value meant for the rendering now replacing the initially saved scale.


Initial draft of docs

Added Design Requirements topic and experimented with folder structure and TOC.
Made changes to the Design Requirements topic and added comments to source file in Overview/design-requirements.rst
Added requirements for the site introduction page.

@ClarkPoon I added a new section and implemented your comments. Also added links and a Glossary to link terms to.
For the image showing the entire system, highly recommend we make the board/component names consistent with the documentation. For example, the Current board is called the Amperes board in the image. If you have a source file for the image I can tweak it!

@ClarkPoon I added a new section and implemented your comments. Also added links and a Glossary to link terms to.
For the image showing the entire system, highly recommend we make the board/component names consistent with the documentation. For example, the Current board is called the Amperes board in the image. If you have a source file for the image I can tweak it!

Thanks, it looks nice.
I agree 100%. We recently changed the name of the Current board to the Amperes board because we felt that it was confusing on when "current board" meant "board that measures electric current" or "most recent version of board." Unfortunately, we have not had a chance to change the name in all of our documentation yet.


Port ZOOKEEPER-4377 to Kyuubi shaded ZooKeeper 3.4 and 3.6

Code of Conduct

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

Search before asking

[X] I have searched in the issues and found no similar issues.

What would you like to be improved?
Port ZOOKEEPER-4377 (https://github.com/apache/zookeeper/pull/1764) to https://github.com/apache/kyuubi-shaded/tree/master/kyuubi-relocated-zookeeper-parent/kyuubi-relocated-zookeeper-34 and https://github.com/apache/kyuubi-shaded/tree/master/kyuubi-relocated-zookeeper-parent/kyuubi-relocated-zookeeper-36
How should we improve?
By default, Kyuubi uses the shaded ZooKeeper 3.4 client to gain compatibility, while it may cause NPE when accessing a higher version of the ZooKeeper server, for example, https://github.com/apache/kyuubi/issues/1894, we should backport ZOOKEEPER-4377 to gain a clear error message.
Are you willing to submit PR?

[ ] Yes. I would be willing to submit a PR with guidance from the Kyuubi community to improve.
[ ] No. I cannot submit a PR at this time.

Hi @pan3793, I would like to take this up. But I might need some more clarity. Are we supposed to make these changes in zookeeper repo? Because I can't see the KeeperException file in kyuubi-relocated-zookeeper.

@Madhukar98 you can refer to https://github.com/apache/kyuubi-shaded/pull/28 and https://github.com/apache/kyuubi-shaded/pull/29

@Madhukar98 thanks for taking this, I'm going to start voting for kyuubi-shaded 0.4.1 to deliver this change.


Don't handle add-label if label exists

We're getting a double-copy of the "Reviewed OK" comment on Pivotal (and the test card in Teams), because Gitlab's MR changed messages are arguably bugged.
This hook works off getting an MR message with a changes: labels: previous: [], current: [ 'reviewed' ] structure; but if you add the reviewed label and then later merge the MR, the second message also claims the reviewed label has just been added. So I've tweaked it to check Pivotal before doing anything.

LGTM


Question:  Is there a reason why pipeline is buried so far into the package? from expression.extra.result import pipeline

pipelines are currently in from expression.extra.result import pipeline
It seems like its a great way to chain results (or options) and i was wondering why its not exposed more easily.  It seems to me like a core part of implementing result in the codebase.

Hi, it was added there since I was unsure if it should be added as it is in the current form (or not) i.e naming. But I guess we could now move it into the core module. The thing is that it's "container" specific so it needs to be scoped / namespaced e.g expression.result.pipeline since a Result pipeline is different from an Option pipeline.

I guess pipeline is also missing async compatability


removed brexit-trial-grid scss file as no longer used

@wheresrhys as requested :)

:+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1:


remove indicator if message row is zero

if the message row is zero, I think we can remove that indicator to prompt user that finish loading.

Automated message from Dropbox CLA bot
@singbird81, it looks like you've already signed the Dropbox CLA. Thanks!

Thanks for working on this @pbiradar8!  Closing this, since this project has been replaced by github.com/zulip/zulip-mobile/


Add julia language syntax highlighting to markdown editor code block

Can take the tmLanguage from https://github.com/JuliaEditorSupport/Julia.tmbundle/blob/696f630736669251a3cb56cb27741b5b07a4c093/Syntaxes/Julia.tmLanguage
Does markdown editor allow extensions to contribute to code block syntax highlighting for a specific language just like what markdown preview doess?

Extensions can contribute markdown fenced code block language support. Here's an example extension that does this: https://github.com/mjbvz/vscode-fenced-code-block-grammar-injection-example
Let me know if you have any trouble getting this to work


Ignore worker AMI version

Is it possible to ignore the worker AMI? I manually updated the version of Kubernetes in the AWS EKS UI control panel. I am still defining the worker AMI in Terraform with:
  worker_ami_name_filter = "v20190701"

This is now breaking with:
* module.k8s.data.aws_ami.eks_worker: data.aws_ami.eks_worker: Your query returned no results. Please change your search criteria and try again.

I'm guessing because the new version of Kubernetes I upgraded to is not available in that version v20190701. I cannot rebuild my worker node EC2 instances with the latest AMI. I simply want to just ignore the AMI filter.

Hi
I faced the similar issue and the root cause of this occurs to be the changes made in data.tf file -
https://github.com/terraform-aws-modules/terraform-aws-eks/commit/c81e1d2fa75a2ddd50daa0bacac4548f6f4a18bb
Now instead of using filter as v20190701 if you use amazon-eks-node-${var.cluster_version}-v20190701 as your worker_ami_name_filter , it will solve your issue.
I think that the remaining part of variable should still be constructed in the module, as the default value is constructed. I will raise the PR for the same but for now this should solve your problem.

@ankitabhopatkar13 thanks for the reply.
I updated   worker_ami_name_filter = "amazon-eks-node-1.14-v20190701" but still getting:
* module.k8s.data.aws_ami.eks_worker: data.aws_ami.eks_worker: Your query returned no results. Please change your search criteria and try again.

Hi @nodesocket,
Yes because v20190701 doesn't exist for 1.14. It only exists for 1.13, 1.12, 1.11, 1.10.
So if you don't want your AMI to be upgraded to 1.14(which I would not recommend assuming your cluster is at 1.14), but to fix the issue you can check the current node's ami and which kubernetes version was it using and then use the same. Ex-
amazon-eks-node-1.13-v20190701

@ankitabhopatkar13 that still did not work amazon-eks-node-1.13-v20190701. Confirmed the EC2 instances are running this AMI.
worker_ami_name_filter = "amazon-eks-node-1.13-v20190701"

On a related note, is there anything wrong or edge cases of running Kubernetes 1.14 on EKS, but the EC2 worker nodes running the 1.13 AMI?

is there anything wrong or edge cases of running Kubernetes 1.14 on EKS, but the EC2 worker nodes running the 1.13 AMI?

That's fine, details here: https://kubernetes.io/docs/setup/release/version-skew-policy/
But also note that kube-proxy doesn't update when you update the AMI:  https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html

@ankitabhopatkar13 I am still having this issue, even when I changed the worker_ami_name_filter to match the current AMI for EKS version 1.14. Any ideas how I can work around this?
cluster_version = "1.14"
worker_ami_name_filter = "amazon-eks-node-1.14-v20200406"

@nodesocket which version of terraform-aws-eks module are you using?

@ankitabhopatkar13 I was able to work around this by setting:
cluster_version = "1.14"
worker_ami_name_filter = "v20200406"

Which seemed to update the autoscaling group AMI, but it did no swap out my worker EC2 instances. Next time the EC2 worker instances need to be re-created should just use the new AMI.


[qt] Add optional features instead of having all turned on by default

Is your feature request related to a problem? Please describe.
qt-webengine is a quite large component that takes hours to compile, takes a lot of disk space and I don't need it for my simple application. Qt package (version 6) doesn't offer optional components selection, however, qt5 package does offer features
Proposed solution
Make qt settings the same as qt5
Describe alternatives you've considered
No response
Additional context
No response

No change needed. Just don't install qt, it is just a meta-port.
Install the indiviual ports instead.

Could that be described better? https://vcpkg.io/en/package/qt mentions nothing about this.

Could you suggest a wording from your perspective?
"Most users don't need this package." might not be enough.
(For me, that is just good packages for large software work. That is just like Qt works in particular. You don't just link Qt::Qt).

How about this:
"This is a meta package that installs all of the optional features by default. You might want to install individual ports suitable for your needs instead."

LGTM.
Now that this issue is about the fact that there are no "features", optional or not.
-This is a meta package that installs all of the optional features by default.
+This is a meta package which installs all supported Qt6 modules.
-You might want to install individual ports suitable for your needs instead."
+Most users should install individual ports suitable for their needs instead.


Use the atom-text-editor tag instead of the editor class.

In keymaps/escape-utils.cson: Use the atom-text-editor tag instead of the editor class.

Done :), I haven't notice your issue but thanks for reporting


ExpressionChangedAfterItHasBeenCheckedError occurs when page size changes on Data Table with components demo

Do you want to request a feature or report a bug?
Bug
Bug Report
Changing the page size on a td-paging-bar causes an ExpressionChangedAfterItHasBeenCheckedError when using the example from the "Data Table with components demo" located here: https://teradata.github.io/covalent/#/components/data-table
The issue can be seen in the console when the page size is changed from 5 to 10 in the below link which was created by using your stackblitz template and copying the code from https://teradata.github.io/covalent/#/components/data-table.
Screenshots or link to CodePen/Plunker/JSfiddle
https://stackblitz.com/edit/covalent-paging-bug
What is the expected behavior?
The page size should change without errors.
What is the motivation / use case for changing the behavior?
The error is not expected when changing page size.
Which version of Angular and Material, and which browser and OS does this issue affect?
See the link provided in this report.

I'm getting the same error. Did you have any luck with this @mikehutter ?

Looks like this only happens when running in dev mode npm run serve
When running in production it does not happen.
Possibly because in dev mode Angular triggers an extra change detection to "verify"


Bug? Incoming Garbage to a fire station

Not sure if I'm just reading it wrong, but this fire station looks like it's had offers for incoming garbage?

Also, what does Allow None  and the numbers mean? eg. Fire Out 3-7: 25520-32057: Allow None?

Not a bug, but a not-very-intuitive line.  "In" in this case means the offer was matched from an incoming offer - so the match was made while the incoming offer was being processed (this is significant in terms of bug tracking, but meaningless to most people).
The numbers are the transfer priorities (e.g. 3-7) and the building IDs (e.g. 25520-32057), both listed in the order incoming, outgoing for each match, the "allow" means that the match wasn't blocked by any mod settings ("Deny" would be displayed otherwise).  The last word is the reason for the "Deny" (which is just "none" if the transfer was allowed).
I'll be changing the log line format to make it more intuitive to casual users, not just me.

Text changed in d6a3424f4495a51289c0ab69d38a430ea2b9e090


Submodules

Remove static copies of referenced packages in favor of using submodules

@mitchspano I only noticed after submitting my comment that this contribution is actually by you, not @mmoyaferrer, who made me a reviewer. Thanks a lot for your contribution - I'll catch up on the submodules approach, this def looks like a great improvement in regards to our ability to manage recipes which re-use third party open source 🙌
@mmoyaferrer could you elaborate on potential effect of this on the unlocked package version of the frameworks which we also provide? Any plans to rebuild versions regularly, as the frameworks move ahead? Would it probably make sense to set up a scheduled Github Action for automating that?

@hmayerhutte Renovate seems to support updating Git submodules, maybe Dependabot as well but I couldn't find it quickly.

oh wow - @mmoyaferrer do I understand this correctly that with submodules, we can just reference repos, and the latest is then used? are those then "resolved" at the moment of cloning the repo? or when building the unlocked package that contains those?

A Git submodule references to a repository for a specific commit, "snapshot".
From https://www.atlassian.com/git/tutorials/git-submodule:
Git submodules allow you to keep a Git repository as a subdirectory of another Git repository. Git submodules are simply a reference to another repository at a particular snapshot in time. Git submodules enable a Git repository to incorporate and track version history of external code.
Therefore when cloning it will clone the linked repository for that specific commit.

@mitchspano I only noticed after submitting my comment that this contribution is actually by you, not @mmoyaferrer, who made me a reviewer. Thanks a lot for your contribution - I'll catch up on the submodules approach, this def looks like a great improvement in regards to our ability to manage recipes which re-use third party open source 🙌 @mmoyaferrer could you elaborate on potential effect of this on the unlocked package version of the frameworks which we also provide? Any plans to rebuild versions regularly, as the frameworks move ahead? Would it probably make sense to set up a scheduled Github Action for automating that?

@mitchspano is lightning-speed!
Regarding your questions:

potential effect of this on the unlocked package version of the frameworks which we also provide

No effect in our current version, as I cannot see any major changes in the frameworks (most have not been changed during recent weeks) hence from my point of view all good to go.

Any plans to rebuild versions regularly, as the frameworks move ahead? Would it probably make sense to set up a scheduled Github Action for automating that?

Let's talk about this, I don't have a fixed answer since not all frameworks follow Github releases, but we can follow other solutions.

@mitchspano @hmayerhutte @amtrack one issue with this approach is it will pull in a lot of extra metadata from Nebula Logger's repo. Nebula Logger's repo is a monorepo, containing metadata for the core package, as well as several plugins, recipes, test metadata, and some deprecated metadata. Prior to this PR, it looks like only the 'core' folder was being used (which is probably all you want). With the submodule approach, I think  everything will get included, including a lot of metadata that definitely should not be packaged.
I'm not sure how what options there are to handle this when using submodules, but you will break some orgs if you package everything from Nebula Logger.

@mitchspano @hmayerhutte @amtrack @mmoyaferrer one issue with this approach is it will pull in a lot of extra metadata from Nebula Logger's repo. Nebula Logger's repo is a monorepo, containing metadata for the core package, as well as several plugins, recipes, test metadata, and some deprecated metadata. Prior to this PR, it looks like only the 'core' folder was being used (which is probably all you want). With the submodule approach, I think everything will get included, including a lot of metadata that definitely should not be packaged.
I'm not sure what options there are to handle this when using submodules, but you will break some orgs if you package everything from Nebula Logger.

Good catch, thank you for the comment. @mitchspano I would initially suggest to keep Nebula-core as it is now, and others as submodules. It's a bit heart-breaking because the main benefit of submodules was for Nebula which is the one with the most contribution, but it's the most balanced approach I see. Thoughts?

@mmoyaferrer it looks like you made a commit to exclude the frameworks from being pushed or pulled... If the metadata in the frameworks directory isn't intended be pushed/pulled for this repo, then it feels like all of the frameworks metadata (everything included in your unlocked package) should be a separate repo from this one. Right now, people would clone this repo, and get all of the included framework's metadata (which is a lot of files to clone), even though that metadata would never be deployed or used. It also makes it difficult to use .forceignore to help with this submodule situation.
If you split it into a separate repo, then you could have some additional lines in the new repo's .forceignore file to exclude the extra metadata in Nebula Logger, which would let you use the submodules approach that @mitchspano is suggesting
// Excluded extra folders from Nebula Logger
frameworks/nebula-logger/extra-tests
frameworks/nebula-logger/managed-package
frameworks/nebula-logger/plugins
frameworks/nebula-logger/recipes

@mmoyaferrer it looks like you made a commit to exclude the frameworks from being pushed or pulled... If the metadata in the frameworks directory isn't intended be pushed/pulled for this repo, then it feels like all of the frameworks metadata (everything included in your unlocked package) should be a separate repo from this one. Right now, people would clone this repo, and get all of the included framework's metadata (which is a lot of files to clone), even though that metadata would never be deployed or used. It also makes it difficult to use .forceignore to help with this submodule situation.
If you split it into a separate repo, then you could have some additional lines in the new repo's .forceignore file to exclude the extra metadata in Nebula Logger, which would let you use the submodules approach that @mitchspano is suggesting
// Excluded extra folders from Nebula Logger
frameworks/nebula-logger/extra-tests
frameworks/nebula-logger/managed-package
frameworks/nebula-logger/plugins
frameworks/nebula-logger/recipes

The main purpose of having frameworks folder in the repository is to provide the developers an easy way to access the frameworks content. For example, if I'm a developer working on a SOQL selector, I can open SOQL.cls to understand how it works in a simple and easy way, and the same concept for the other frameworks.
While I understand that the git clone and maintenance can be improved using submodules, I would not separate it to an independent repository as I would be breaking the main purpose of the folder.
I would like @hmayerhutte or @amtrack view on the topic.

@mmoyaferrer I see the point that @jongpie makes about .forceignore - it could be misleading for users of this template who do not go with the suggested approach of installing the frameworks from the unlocked package which we provide, but would prefer to push them. While I understand your preference of giving users access to the apex classes directly in our template, I wonder if ease of maintenance wouldn't outweigh that benefit. I think having curated frameworks as part of our template is a great benefit (in combination with providing a periodically updated unlocked package containing them) even if it doesn't contain their source. To sum it up: I sympathize with the submodules approach + separate repo with nebula and forceignore to deal with the extra metadata that shouldn't be pushed as outlined by @jongpie

Thanks for your feedback @hmayerhutte , I understand your points. Let's do that :)
@mitchspano I will decline this repo and follow the suggested approach by @jongpie 🚀 Thanks all for your inputs!


Works on Ubuntu now.

This should be tested on a OS X too!
I changed the windowsize a bit because there were scrollbars when using the current windowsize.

So does it work? Any issues? Also can you post a couple of screenshots? Will have a look on the PR later today(had a quick look - looks pretty good). If everything is ok, I think we can do the same for windows too!

It works now, for me on ubuntu. I think there might be some issues on OS X now, especially this line: https://github.com/caske33/gitify/commit/faa7b98a755e5cfbbc567604067ab38171675f48#diff-7a9076d6d94e62c13d641aa71f19ae8eR101 (also an API that's only available on Linux)
Screenshots:

I'm not sure if it's normal but when you click on the trayicon, you first have to click on a dropdown menu Github Notifications on your menu bar before the pop-up appears:

Can you also tell me what is the API that is only available to linux? Had a look on electron and we can check the platform with something like:
if (process.platform === 'darwin') {
  // This is Mac OSX
}

if (process.platform === 'win32') {
  // This is windows
}

if (process.platform === 'linux') {
  // This is Linux
}

I'm not sure if it's normal but when you click on the trayicon, you first have to click on a dropdown menu Github Notifications on your menu bar before the pop-up appears (I'm unfortunately not able to take a screenshot of the dropdown menu)

This sounds wrong.  The text Github Notifications on your menu bar is coming from the tooltip. What if you remove the tooltip text?

https://github.com/atom/electron/blob/master/docs/api/tray.md#tray it seems that ubuntu doesn't support tray icons without submenus... :( (When I don't set the tooltip, I get an empty submenu).
I've added the platform check for the hiding of the dock.
(do you want me to squash commits or rather not? It's how you want it)

I think that the behaviour should be the same for all platforms. But as the docs say:

So if you want to keep exact same behaviors on all platforms, you should not rely on clicked event and always attach a context menu to the tray icon.

I think we should have a further look at the options we have. I will try to install ubuntu and give it a go!

Any updates on this?

Hi @frmendes! I didn't have the chance to find an ubuntu machine(virtualbox is a pain) so there is no progress from my end. Shouldn't be hard to make it work though. Feel free to give it a go!

@caske33 what are your plans to distribute the version for ubuntu? Is some Ubuntu versions (14.04+) libappindicator1 is required as dependency to Tray work properly. Maybe a .deb?

@sergiovilar I've no experience whatsoever with distributing ubuntu versions. I'd love it if a .deb would appear, but I'm probably not going to make it, as i'm even more likely not to maintain it (which would be necessary).

@caske33 @sergiovilar Closing and moving this PR to #81 for further development! I've fixed all the conflicts so feel free to continue from there! (Your commits will remain on that PR)

Ok, thank you!


与Androidx不兼容

Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: android.support.v4.app.INotificationSideChannel$Stub$Proxy

Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Get more help at https://help.gradle.org

BUILD FAILED in 9s

The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
See https://goo.gl/CP92wY for more information on the problem and how to fix it.

Gradle task assembleDebug failed with exit code 1

这和 AndroidX 无关，你看一下你的库里面都有那些插件，我帮你分析一下具体原因

好的，谢谢！
我使用的插件如下：
cupertino_icons: ^0.1.2
http: ^0.12.0+2
flutter_image_compress: ^0.5.2
shared_preferences: ^0.4.0
flutter_webview_plugin: ^0.3.5
flutter_cache_manager: ^0.3.2
permission_handler: '^3.1.0'
flutter_staggered_grid_view: "^0.2.7"
photo_view: ^0.3.3
flutter_launcher_icons: "^0.7.0"
intl: ^0.15.7
event_bus: ^1.0.3
image_gallery_saver: ^1.0.0
fluttertoast: ^3.0.4
flutter_swiper: ^1.1.5
smssdk: ^0.0.6
flutter_easyrefresh: ^1.2.7
image_cropper: ^1.0.1
image_picker: ^0.6.0
image_crop: ^0.2.1
url_launcher: ^5.0.2
fluwx: ^0.6.2

我也是这个原因,提示Attribute data@scheme at manifestMerger8042964441773743796.xml requires a placeholder substitution but no value for <TENCENT_APP_ID> is provided.
在build.gradle文件里是加了manifestPlaceholders = [TENCENT_APP_ID : "22222"].
后来又出现
错误: 无法访问Fragment
找不到android.support.v4.app.Fragment的类文件

好的，晚上在弄弄

测试了下,我这边冲突的是image_picker..去掉它就可以运行了.

经测试,我使用的插件里目前至少有以下三种是冲突的.,,请老大处理下..
flutter_webview_plugin: ^0.3.0+2
flutter_inappbrowser: ^1.2.1
image_picker: ^0.5.0+3

👌

好了，CI/CD中 … 版本号升级到 0.3.2


App Configuration restore fails when passing in connection string or using name of app config

This is autogenerated. Please review and update as needed.
Describe the bug
Command Name
az appconfig kv restore
Errors:
'KeyValue' object has no attribute 'read_only'
Traceback (most recent call last):
cli\Lib\site-packages\knack\cli.py, ln 233, in invoke
azure\cli\core\commands\__init__.py, ln 660, in execute
azure\cli\core\commands\__init__.py, ln 723, in _run_jobs_serially
azure\cli\core\commands\__init__.py, ln 716, in _run_job
artifacts\cli\Lib\site-packages\six.py, ln 703, in reraise
azure\cli\core\commands\__init__.py, ln 694, in _run_job
azure\cli\core\commands\__init__.py, ln 331, in __call__
site-packages\azure\cli\core\__init__.py, ln 811, in default_command_handler
azure\cli\command_modules\appconfig\keyvalue.py, ln 672, in restore_key
azure\cli\command_modules\appconfig\_kv_helpers.py, ln 660, in __print_restore_preview
azure\cli\command_modules\appconfig\_kv_helpers.py, ln 544, in __serialize_kv_list_to_comparable_json_list
AttributeError: 'KeyValue' object has no attribute 'read_only'

To Reproduce:
Steps to reproduce the behavior. Note that argument values have been redacted, as they may contain sensitive information.

Put any pre-requisite steps here...
az appconfig kv restore --datetime "2021-04-05T15:13:50Z" --subscription {} --connection-string {} --label "product-catalog"

Expected Behavior
Restore app configuration values to point in time
Environment Summary
Windows-10-10.0.18362-SP0
Python 3.6.8
Installer: MSI

azure-cli 2.21.0

Additional Context

route to service team

Hi @andreacapriplexure, this is a bug in the print preview of az appconfig kv restore command. It has been fixed here recently and will be available in the next release of Azure CLI.
As a workaround, if you are sure about the key-values being restored and don't need a preview, you can run the command with the --yes or -y option to resolve this issue.

Fixed in Azure CLI 2.22.0.


No such file or directory

start-cluster.sh
2019/5/16 下午1:13:40/opt/docker-solr/scripts/solr-foreground: running /docker-entrypoint-initdb.d/log-config.sh
2019/5/16 下午1:13:40mv: cannot stat '/opt/solr/bin/solr.in.sh': No such file or directory

@tkokto thanks for reporting this, but unfortunately I'm unable to recreate this problem. Could you please add more information, in order to reproduce this problem?

Issue closed because the author hasn't responded to a request for more information.


GEODE-9301: Implement accurate sizeable for RedisHash

Extend Object2ObjectOpenCustomHashMap to allow direct access to the
current capacity of the backing arrays
Use ReflectionSingleObjectSizer to calculate per-element overhead, as
the previous implementation in SizeableObjectOpenCustomHashSet was
effectively just reimplementing it
Calculate the overhead associated with resizing the backing arrays
Update tests to reflect the new behaviour

Authored-by: Donal Evans<EMAIL_ADDRESS>Thank you for submitting a contribution to Apache Geode.
In order to streamline the review of the contribution we ask you
to ensure the following steps have been taken:
For all changes:

[x] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message?

[x] Has your PR been rebased against the latest commit within the target branch (typically develop)?

[x] Is your initial contribution a single, squashed commit?

[x] Does gradlew build run cleanly?

[x] Have you written or updated unit tests to verify your changes?

[N/A] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under ASF 2.0?

Note:
Please ensure that once the PR is submitted, check Concourse for build issues and
submit an update to your PR as soon as possible. If you need help, please send an
email to<EMAIL_ADDRESS>

Force pushing after rebasing on latest develop to resolve merge conflicts.


The value of the theme always is 'dark' on Dev Tools even though the current theme isn't Dark

Storage Explorer Version: 1.8.1_20190524.5
Platform/OS: Linux Ubuntu/macOS High Sierra/Windows 10
Architecture: ia32/x64
Regression From: Previous release 1.8.1
Steps to reproduce:

Launch Storage Explorer -> Make sure the current theme isn't Dark(Like HC-Black).
Go to Developer Tools(Press F12) -> Application -> Local Storage -> file://
Check the value of the theme.

Expect Experience:
The value of the theme is 'hc-black'
Actual Experience:
The value of the theme is 'dark'.

Won't fix. This value is no longer the correct theme. That's not found in a settings.json file in the app data folder.


pfFilterPanel: Responsiveness needs to be addressed/overhauled

Attempted to import Bootstrap's variables.less file and use @media(max-width: @screen-md-min) to address responsiveness layout in the pfFilterPanel.
A concern was:  "if someone overrides bootstrap variables then includes a-pf less files, they will lose their overrides"
We need to figure out, in general, how to address responsiveness in angular-patternfly.
In addition, the pfFilterPanel needs to updated to handle resposiveness.

Merging this issue with #600


Support for get api

Is Tire supporting get api in the DSL:
http://www.elasticsearch.org/guide/reference/api/get.html
I couldn't find any snippet in the DSL example and in the code after a quick look.
Basically I need to get the specific document by id instead of search for it?
On the other hand is there a way to query documents by id? - it could be a quick workaround.
Thanks,
Marcin

Hi,
yes, you can get individual documents via the Index#retrieve method. Also, you can query for multiple ids with the ids query in Tire.

Thanks a lot for quick response.


Admonition boxes don't have a content div

This makes it a bit difficult to apply styling. There's a div for the whole admonition and a p tag for the header, but the body could use another surrounding div tag, especially if there's more complex content in there.

This:
julia> s = """

       !!! note
           hello

       """ |> fd2html |> println

Note

hello

is entirely handled by Julia's Base.Markdown module (Franklin doesn't touch it as it's considered to be "base Markdown").
My recommendation would be to do this:
\newcommand{\bang}[2]{

!!! #1
    @@admonition-body #2 @@

}

with result:
Julia> """
\newcommand{\bang}[2]{

!!! #1
    @@body #2 @@

}

\bang{note}{some important note}
""" |> fd2html |> println

Note

some important note

(ofc you could replace bang by admonition but I find bang easier to write 😋 )

Concrete example:
~~~

~~~

@@joined
```!
1+1
```
@@

Gives

I think instead of

Note

some important note

One would want:

Note

some important note

For styling

Sure, if you're happy to not use admonition then the following does exactly what you're suggesting
\newcommand{\note}[1]{
~~~

Note

~~~
#1
~~~

~~~
}

\note{some important note}

What I'm not inclined to do is to have Franklin parse the admonition and take over from the Base.Markdown; in particular because the behaviour is actually correct as per CommonMark specifications (see https://github.com/MichaelHatherly/CommonMark.jl/blob/efcbbc8bd1f19c96fce7fa7bcf06f6c646dd8567/test/extensions/admonitions.jl#L13)

Yeah I understand not wanting to deviate from the spec. What parser is Documenter.jl using? I was copying what the admonitions look like there.

Oh and my comment was that:
julia> s = raw"""\newcommand{\bang}[2]{

       !!! #1
           @@admonition-body #2 @@

       }
       \bang{note}{Important}
       """ |> fd2html |> println

Note

Important

doesn't place the admonition-body div inside the admonition-note div.

ah yes sorry I should have seen that. This is a nuisance to do with how tabs are parsed inside commands. Anyway https://github.com/tlienart/Franklin.jl/issues/857#issuecomment-893587129 is probably the safest bet if you want to have a specific div for the body.


Clarification technical meaning *.URL vs. URL

Hello contributors
Is it possible to give a clarification hint about what exactly means the technical implemenation difference between the URLs beginning with *.URL and a URL without *.? We had to play with our proxy rule set how the meaning is of *. comaring to the normal URLs notation.
I give an example for the URL mspim.azure.com from the "General Azure services and documentation"
The implemenation of the url mspim.azure.com in your proxy rule set means that bypassing only mspim.azure.com URL but no subdomains. We had some traffic issues and found out that mspim.azure.com have some subdomain request as well when using Azure Portal. The proxy ruleset blocked that subdomain traffic (api.azrbac.mspim.azure.com), but the subdomain access is needed for accessing PIM MyRoles.
I thing an addional clarification would help the technial implementaion in different proxy and firewall vendor products to handle this how it should work as expected.

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

ID: d8336877-da93-ecd6-829a-0cc068caaf29
Version Independent ID: 1e70f094-f220-92c6-7e5b-cfaf071101d5
Content: Allow the Azure portal URLs on your firewall or proxy server - Azure portal
Content Source: articles/azure-portal/azure-portal-safelist-urls.md
Service: azure-portal
GitHub Login: @JnHs
Microsoft Alias: jenhayes

@danielkroh
Thanks for your feedback! We will investigate and update as appropriate.


Remove sources list, manually download snmp

in on-taskgraph
Signed-off-by: Joe Gorse<EMAIL_ADDRESS>

depends on: https://github.com/RackHD/on-taskgraph/pull/281


Setup py improvements

Motivation and Context
While #24 said that

do we expect people to be multitasking while installing habitat-sim [...]?

I'm actually one of those crazy multitaskers :) 100% CPU wouldn't be a problem, but when running on all cores, something in the build demands 8 GB of RAM which I usually don't have, so my system comes to a grinding halt. (I still want to investigate what's responsible and if it's possible to tell ninja to not overschedule such jobs.)
While the default is still all the cores, it now allows to override the setting using the setuptools' builtin --parallel option. Together with redirecting it to use a pre-existing CMake build (which was set up manually for #35) dir my command-line looks like this:
python setup.py build_ext --build-temp=build --parallel 3

Apart from this, because I use some system deps, I'm not interested in setup.py implicitly pulling submodules that I am not interested in, so it runs git submodule update only the very first time.
How Has This Been Tested
I'm now able to both have 163 tabs open in my browser and build Habitat :)
Types of changes

[x] Docs change / refactoring / dependency upgrade buildsystem update
[ ] 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 change)

Checklist

[x] My code follows the code style of this project.
[x] My change requires a change to the documentation. -- maybe? please tell me where
[ ] I have updated the documentation accordingly.
[x] I have read the CONTRIBUTING document.
[x] I have completed my CLA (see CONTRIBUTING)
[ ] I have added tests to cover my changes.
[ ] All new and existing tests passed.

Since #40 depends on this (and reverts a part), how should we proceed to merge? Should I remove the .git/submodules part from this one and let it be squashed into #40?

Merged #40 into this.  This should be good to go too!


Kokoro Check build failures due to NodeJS or OpenJDK installation failure

#2295 (related to #2294) failed the Kokoro Check build:
https://source.cloud.google.com/results/invocations/80bddf42-e6cc-4be7-862b-c625032e4abb/targets/openhealthstack%2Fandroid-fhir%2Fgcp_ubuntu%2Fpresubmit/log
[ID: 9480442] Executing command via SSH:
export KOKORO_BUILD_NUMBER="3818"
export KOKORO_JOB_NAME="openhealthstack/android-fhir/gcp_ubuntu/presubmit"
source /tmpfs/kokoro-env_vars.sh; cd /tmpfs/src/ ;  chmod 755 github/android-fhir/kokoro/gcp_ubuntu/kokoro_build.sh ;  PYTHON_3_VERSION="$(pyenv which python3 2> /dev/null || which python3)" ; PYTHON_2_VERSION="$(pyenv which python2 2> /dev/null || which python2)" ; if "$PYTHON_3_VERSION" -c "import psutil" ; then KOKORO_PYTHON_COMMAND="$PYTHON_3_VERSION" ; else KOKORO_PYTHON_COMMAND="$PYTHON_2_VERSION" ; fi > /dev/null 2>&1 ; echo "export KOKORO_PYTHON_COMMAND="$KOKORO_PYTHON_COMMAND"" > "$HOME/.kokoro_python_vars" ; nohup bash -c "( rm -f /tmpfs/kokoro_build_exit_code ; github/android-fhir/kokoro/gcp_ubuntu/kokoro_build.sh   ; echo \${PIPESTATUS[0]} > /tmpfs/kokoro_build_exit_code ) > /tmpfs/kokoro_build.log 2>&1" > /dev/null 2>&1 & echo $! > /tmpfs/kokoro_build.pid ; source "$HOME/.kokoro_python_vars" ; "$KOKORO_PYTHON_COMMAND" /tmpfs/kokoro_log_reader.py /tmpfs/kokoro_build.log /tmpfs/kokoro_build_exit_code /tmpfs/kokoro_build.pid /tmpfs/kokoro_log_reader.pid --start_byte 0

npm WARN using --force I sure hope you know what you are doing.
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
+<EMAIL_ADDRESS>updated 1 package in 1.022s
  installing : node-v16.18.0
       mkdir : /usr/local/n/versions/node/16.18.0
       fetch : https://nodejs.org/dist/v16.18.0/node-v16.18.0-linux-x64.tar.xz
curl: (18) transfer closed with 8144384 bytes remaining to read
xz: (stdin): Unexpected end of input
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

  Error: failed to download archive for 16.18.0

@omarismail94 have you seen this problem before? Often?
I suspect the cause is that that nodejs.org is "throttling" DLs from GCP.
To avoid this, perhaps https://github.com/google/android-fhir/blob/master/kokoro/gcp_ubuntu/kokoro_build.sh could be tweaked to e.g. install NodeJS via Package Manager?
Or is it possible to do Caching on Kokoro (of e.g. the Node installation), like GitHub Actions VM can do?

https://github.com/tj/n#custom-source would allow to overwrite URL.
But I couldn't find a more reliable NodeJS mirror e.g. on GCP.
Caching this installation is probably the way to go.
This is only worth persuing if it happens more regularly.

This is only worth persuing if it happens more regularly.

It just happened again, on https://source.cloud.google.com/results/invocations/e7f4bf2c-7a74-460e-b769-e7f9c59bd01d/targets/openhealthstack%2Fandroid-fhir%2Fgcp_ubuntu%2Fpresubmit/log, for #2298.

This is a similar problem, which I just debugged as the root cause for why #2282 has a "stuck" Kokoro: Build and Device Tests Expected — Waiting for status to be reported:
Err:4 [http://ppa.launchpad.net/openjdk-r/ppa/ubuntu](https://www.google.com/url?q=http://ppa.launchpad.net/openjdk-r/ppa/ubuntu&sa=D) xenial/main amd64 openjdk-17-jdk amd64 17~11-1~16.04~2
  Connection timed out [IP: <IP_ADDRESS> 80]
Fetched 285 MB in 2min 13s (2,129 kB/s)
E: Failed to fetch [http://ppa.launchpad.net/openjdk-r/ppa/ubuntu/pool/main/o/openjdk-17/openjdk-17-jdk_17~11-1~16.04~2_amd64.deb](https://www.google.com/url?q=http://ppa.launchpad.net/openjdk-r/ppa/ubuntu/pool/main/o/openjdk-17/openjdk-17-jdk_17~11-1~16.04~2_amd64.deb&sa=D)  Connection timed out [IP: <IP_ADDRESS> 80]

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

[ID: 2992586] Command finished after 140 secs, exit value: 100

We could cache it, or save the package in a GCS Bucket that can be accessed in the script, this is the script that runs:
https://github.com/google/android-fhir/blob/master/kokoro/gcp_ubuntu/kokoro_build.sh

This (the NodeJS one) already happened AGAIN, on https://source.cloud.google.com/results/invocations/35a3c980-1b62-4a4a-88a2-daf5f0c76bfd/targets/openhealthstack%2Fandroid-fhir%2Fgcp_ubuntu%2Fpresubmit/log, for #2316 ... to me, somehow fixing this one way or another seems a fairly high priority for this project.

We could cache it, or save the package in a GCS Bucket that can be accessed in the script

Yeah. What bothers me a tiny little bit is having to cobble this together here - this kind of problem has already been solved, of course; see e.g. https://github.com/actions/cache or https://github.com/marketplace/actions/cache-apt-packages.
I'm curious if simplifying the CI infrastructure overall with #2304 wouldn't be a better way forward instead of fixing this...
But if you do happen to have bandwidth to fix this, please do!

N/A iff #2304 - but keeping open until decision if we'll do that (because if we don't, this should still be fixed).


Update oms-windows.md

Added table with Windows agent/extension versions

@aliabuckner : Thanks for your contribution! The author, @roiyz-msft, has been notified to review your proposed change.


feat(ui): display partially received Flux responses

A basic fix for #14511. If a Flux response is truncated because it is too large, the partial result will still display as well as a notification.

The new limits for Flux responses are:

OSS: 100 MiB
Cloud 2: 10 MiB

Next we should improve the UX for this event (add suggestions to reduce response size, add button to run query anyway).
I refactored some code along the way (part of #14482).
I also tweaked the first load experience for the dashboard. Before:

After:

I'm not familiar with TypeScript, so I don't know that I have much of value to say for this PR. Is there a particular part of this that you want me to look at?

I can't speak for kelvin (who requested the view), but I appreciate you taking a look.

I see there are AST structures in there, are they actually being used?

Yeah, they were in use before. This PR is just shifting around where the type definitions for the various AST nodes are stored. We use them to do things like analyze the duration of a query, or pick out what buckets are read from or written to in a query.


Event Sidecar filter for empty blocks

@caspersteve commented on Wed Nov 30 2022
As the dev team, let's create a sidecar filter to get empty block data so that the Association can consume this for their ESG Dashboard with Proof.io, and so the internal KPI Dashboard can consume this for reporting on empty blocks and demand.
Considerations:

Unless there's a better way to do this, I assume the calculations like percentage of empty blocks since date/block height would best be done on the dapp side of the equation.
Calculating the usage percentage per block could also be explored.

As per the triage with Jakub, the following are the open questions/details required to consider this further.

A confirmation that this is on the outbound SSE filtering as a query parameter that the end-user provides.
Business priority and urgency


Interpolated strings are causing issues with IE 11

Since the code base has interpolated strings throughout, when bundling with Webpack/Nextjs we can't load the client bundle in IE 11 or browsers that do not support interpolated strings. This occurs because Webpack does not compile modules installed using node_modules it just bundles them.
Related https://github.com/feathersjs/errors/pull/117
Related https://github.com/feathersjs/rest-client/issues/35

See https://github.com/feathersjs/rest-client/issues/35