Angular looks for the template of a service

import 'package:angular2/angular2.dart' show Injectable;
import 'package:fhir_webui/webui.dart' show EditMode;

@Injectable()
class EditModeService {
  EditMode _mode = EditMode.view;

  EditMode get mode => _mode;
  set mode(EditMode value) => _mode = value ?? EditMode.view;
}

[web] GET packages/fhir_webui/src/webui_generated/form/edit_mode_service.template.dart => Could not find asset fhir_webui|lib/src/webui_generated/form/edit_mode_service.template.dart.

I get this error even when the service isn't used anywhere within the application (only used by another application that also depends on the package that contains it)
When I comment out @Injectable() the error goes away, but of course breaks my application in other ways.

.template.dart is a bit of a misnomer, it can also mean "reflection information".
Could you share where edit_mode_service.dart is imported?

fhir_webui/lib/webui.dart
export 'package:fhir_webui/src/webui_generated/form/edit_mode_service.dart';

demo2/lib/generated/components/form_account_component.dart
import 'package:fhir_webui/src/webui_generated/form/edit_mode_service.dart';
...
@Component(
    selector: 'form-ce1e8325-e814-49f2-ad0f-fb10f21604a3',
    templateUrl: 'form_account_component.html',
    styleUrls: const [
      'form_account_component.css'
    ],
    providers: const <dynamic>[
      ToolbarCrudButtonsService,
      EditModeService,

I just changed it to import the file containing the class directly (without the webui.dart file that exports the file)
Now I get
[web] GET packages/fhir_webui/webui/toolbar/toolbar_button_component.template.dart => Could not find asset fhir_webui|lib/webui/toolbar/toolbar_button_component.template.dart.
[web] GET packages/fhir_webui/src/webui_generated/primitive_value_input/xhtml_input_component.template.dart => Could not find asset fhir_webui|lib/src/webui_generated/primitive_value_input/xhtml_input_component.template.dart.

It doesn't look like a real problem in my code. Commenting something in/out (like @Injectable() mentioned in the initial post) while pub serve is running makes the problem go away temporarily.

Deleted my previous comment, this was caused of a broken import, because I commented out above export to import the file directly.

Do we still need a resolution? Confused.

My last comment was only related to my 2nd-last comment, which I deleted.
Changing the import to import the service directly, instead of via a file that exports it, seems to have fixed it for now. But I never know how long this keeps that fixed.
Random changes fixed it before, but usually not for long.
Is it supposed to work with export/import?

I'm not sure export/import works properly with pub transformers right now to be honest.

https://github.com/dart-lang/angular2_components/blob/master/lib/angular2_components.dart does it even 2 levels

When at least the error message would provide anything useful what causes the issue.
The only information it provides is that it's related somehow to a class,
and that it is so random makes it even more confusing and annoying.

With pub build now it complains about UndoService, and if I comment @Injectable() out it complains about GlobalsService.
I also changed all imports to import these services directly (without an intermediate file that exports them) but that didn't change anything this time.
I think somehow it just randomly complains about "something", even though there's probably nothing wrong with my code, because when I overcome the error somehow, the application is working fine.
I hope the new code generation becomes available soon and fixes this issue. This is really unbearable.

After being able to work around #348 with the help of @leonsenft,
I was able to "fix" this one as well.
After getting rid of the CSS errors from 348, I got some errors that I didn't get before,
for hacks that were previously required to work around this issue
(but actually the hacks should have caused the errors before because of the hacks).
After fixing these errors the application started working again.
So, now it's working without any weird hacks. I didn't have this since months.


Incorrect CapabilityStatement?

Hi,
I work on a bulk FHIR API, and after running the Inferno bulk test kit, we made a change to our CapabilityStatement as a result of a warning about the names of the Patient & Group export operations. After running another test suite, I compared the conflicting results, and believe that
https://github.com/inferno-framework/bulk-data-test-kit/blob/04b43676bc96d9fb63df6ffde9a610fa422c5dbe/spec/fixtures/CapabilityStatement.json#L59
and
https://github.com/inferno-framework/bulk-data-test-kit/blob/04b43676bc96d9fb63df6ffde9a610fa422c5dbe/spec/fixtures/CapabilityStatement.json#L68
Should be updated to
patient-export
and
group-export
respectively.
Based upon https://hl7.org/fhir/uv/bulkdata/CapabilityStatement-bulk-data.json, I see the operation names defined as patient-export and group-export, leading to this train of thought.
Thank you!

The FHIR spec says that the operation.name field here is supposed to be the actual operation name used in the url, in this case you call $export so the name should just be "export".
http://hl7.org/fhir/R4/capabilitystatement-definitions.html#CapabilityStatement.rest.resource.operation.name

Element Id: CapabilityStatement.rest.resource.operation.name
Definition: The name of the operation or query. For an operation, this is the name prefixed with $ and used in the URL.

But, that requirement is only a "should" because of the possibility of name conflicts. In the case of bulk data exports, the 3 operations are scoped differently (Patient resource, Group resource, and system-level) so it's safe to name them all "export".
As you saw though, it's only a warning not a failure if you name them eg patient-export and group-export:

Given flexibility in the FHIR specification for declaring constrained
OperationDefinitions, this test only verifies that the server declares
any operation within the Capability Statement's server operation list.
It does not verify that it declares the standard system level export
OperationDefinition provided in the Bulk Data specification, nor does
it attempt to resolve any non-standard OperationDefinitions to verify if
it is a constrained version of the standard OperationDefintion.
This test will provide a warning if no operations are declared at
/$export, via the
CapabilityStatement.rest.operation.name element.


Refactor response bools to bitflags

This PR focuses primarily on adding the bitflags dependency and converting the immediate bools in Response into bitflags. I'm mainly looking for style feedback before diving into the [bool; NUM_POINTER_BUTTONS] and Sense bitflags.
Tested manually with some basic sanity testing as well as cargo test.
Partially fixes #3862

Also, should bitflags be added to the Dependencies section of the README?

Also, should bitflags be added to the Dependencies section of the README?

Yes


vscode doesn't start: Cannot find module 'C:\Program Files\Microsoft VS Code\resources\app\out\cli.js

Does this issue occur when all extensions are disabled?: can't open it

VS Code Version: 1.64.1 (according to Windows apps & features, can't open it)
OS Version: Windows 21H2

Steps to Reproduce:
Out of a sudden I was unable to open new folders or instances of vscode (I had a few already open).
After restarting my machine, I couldn't open vscode at all.
Uninstalling and reinstalling (1.65.2) 'solved' the issue.
No extra antivirus installed (corp machine) and I don't remember choosing to update vscode (but could have been the case).
It sounds similar to https://github.com/microsoft/vscode/issues/126628.

Can you try disabling Windows background updates? Set update.enableWindowsBackgroundUpdates to false.

I can try that, but won't be able to verify if that fixes the issue since this just happened once and was mitigated by reinstalling vscode.


Splitting into 2 PRs... Plz don't review. [BEAM-7926] Data-centric Interactive

Implemented show API in interactive_beam module. The users can
invoke the API to introspect data through dynamic visualization for
given PCollections immediately after they define those PCollections
without running pipelines.
Added pipeline_fragment module to build pipeline fragment including
only transforms necessary to produce user-desired PCollections and
implicitly execute the fragment to emit data for user-desired
PCollections.
Automagically track and display notebook-cell/ipython-prompt metadata
about executed code in pipeline graphs. The users now know what pieces
of code are in-effect and can avoid broken in-memory states due to
notebook cell-re-execution/cell-deletion/hidden-states. Additionally,
API show always executes the right pipeline fragment no matter how
broken/messy the in-memory state is for a notebook.
Allow duplicated PTransform labels in different cells when the user
constructs a pipeline bundled with an InteractiveRunner.
Made pipeline assertion a common testing module.
Created a mock ipython kernel for testing.
Updated the example notebook.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[x] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[x] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.

R: @rohdesamuel
R: @davidyan74
The design has been added here.
PTAL, thanks!
Adding Pablo as the committer.
R: @pabloem
Thank you all!

2 new PRs will be created and sent one by one.
And I will close this PR.


Documentation for contains does not explain every parameter

The problem
From this thread in the perl6-users mailing list referring to this page
Suggestions
Read the thread and see if some of the solutions proposed fits, or else address that problem.

Suggested wording:
A second parameter can be added after the string to specify at which position in the string -- starting at zero -- to start looking for a match.  Delimiter is a comma.
For example, "e" is the fifth character and occupies position four in the string:
say "abcdefghij".contains("e", 4); # position 4 is "e"
True
say "abcdefghij".contains("e", 5); # position 5 is "f"
False

@ToddAndMargo the documentation says

searches for $needle starting from $start.

It also shows the different forms of the multi, and examples which show that behavior:
say "Hello, World".contains(',', 3);       # OUTPUT: «True␤»

Am I missing something here or what you suggest is already in the documentation?

On 09/10/2018 03:35 AM, Juan Julián Merelo Guervós wrote:

@ToddAndMargo https://github.com/ToddAndMargo the documentation says
searches for $needle starting from $start.

Did you mean to write me off list?
$needle and $start are meaningless.  The second parameter
is just not defined.

It also shows the different forms of the multi, and examples which show
that behavior:
|say "Hello, World".contains(',', 3); # OUTPUT: «True␤» |

It should say that "3" means start looking at the third
position (starting at zero) in the string.

Am I missing something here or what you suggest is already in the
documentation?

No, what is there is only a refresher for someone that already
knows what it is suppose to say.  Useless to someone trying
to figure out how to use the function.

Still don't understand what you really want here. C<$needle> and C<$start> are the positional variable names used in the function definition. Do you want the documentation to say first and second parameter instead? That is,

searches for the first argument in the string starting from the number of characters indicated by the second argument

?
What I just did is just substitute the name of the variables (which is in the documentation) by its position.

On 09/10/2018 03:45 AM, Juan Julián Merelo Guervós wrote:

Still don't understand what you really want here. C<$needle> and
C<$start> are the positional variable names used in the function
definition. Do you want the documentation to say first and second
parameter instead? That is,
searches for the first argument in the string starting from the
number of characters indicated by the second argument

?
What I just did is just substitute the name of the variables (which is
in the documentation) by its position.

What I want is the suggested wording I posted.
The stuff you are stating is way, way over my head and
would be way over the head of any beginner trying to
use the manual to figure out how to use the function.
In other words, don't go over the head of the target
audience, unless you only want the very advanced user
to be able to understand it.  The manual is suppose
to be a reference for beginners: much more so than
advanced users that already know what they are doing.
"C<$needle>" is meaningless to a beginner.  The way
I worded it, a beginner would easily be able to
understand it.

Again, you are going to pardon me, but $needle is in the definition of the function:
multi method contains(Cool:D: Str(Cool) $needle, Cool $start? --> Bool:D)

which is in the documentation. That's how every method is defined in the documentation. It's further clarified by the examples, which are more or less the same than the examples that you suggest. Again, maybe using "first argument" and "second argument" might be clearer for a beginner, but those two arguments receive a name right there and I can't really see how that's an improvement.

On Mon, Sep 10, 2018 at 6:55 AM ToddAndMargo<EMAIL_ADDRESS>wrote:

"C<$needle>" is meaningless to a beginner.

The important bit is not "$needle".  It is the description "searches for
$needle in the string".  It could say "$farble", and it would be just as
meaningless, but once you see "searches for $farble in string", it clearly
means that it searches for the value of the one string in the other
string.  "searching for a needle in a haystack" is just a common cliche in
the English, so we typically use the variable $needle to evoke the concept
of searching for one thing in another.  Knowledge of that isn't necessary,
however, because the document says "searches for $needle in the string."
If this isn't clear, you should probably be reading tutorial information,
not reference information.  If it isn't clear that the syntax delimiter
between two positional arguments is a comma, you should probably be reading
tutorial information, not reference information.  If it isn't clear that a
count of characters into the string starts at 0, you should probably be
reading tutorial information, not reference information.
You could argue we need more available tutorial information, and I would
agree.  I disagree that we should add such tutorial information to the
reference documents.
Things like "a count of characters into a string starts at 0" or "we use
commas to separate parameters" are not just extra information that could
help a beginner understand things better (I agree they would!).  I believe
it would be harmful to add them to the reference information.  These are
very fundamental concepts, and should be explained clearly in the beginning
of tutorial information, so that as one makes their way through the
reference information one would already understand them.  Repeating that
level of information in every single page of the documentation would
significantly detract from ones ability to find the relevant reference
information.
I'm not arguing that you should have understood the reference document as
it stands, and if you don't (for some future page), please feel free to ask
on the list and we'll be more than happy to explain in more detail how
things work.  I just think we should not try to turn the reference into a
tutorial.  (Adding a new tutorial page would be fine with me!)
Curt

Todd,
This seems to be an age in which 'opinion' and being uneducated seems to
count for more than working hard to learn. I'm too old now to change my
view that working hard to learn and respecting the views of the learned
are virtuous. Sorry if that sounds hard, but I think the people who work
hard on perl6, whether answering questions, writing documentation,
writing tests, and so on, are worthy of respect.
After looking at the perl6 documentation, and I have been following its
development with enthusiasm since waiting for the next Apocalypse from
Larry, yet I still do not understand all of it eg., :D, but I recognise
that this form of concise expression has a great value if I can learn to
read it.
The documentation may not be for beginners, and everyone believes there
needs to be more.
In other words, if you want to create something that is 'better' for
beginners, then do so. In fact Curt was suggesting the same thing. But
because it is for beginners, this community rightly would call it a
tutorial and not a reference.
I agree here with Curt that reference material should favour brevity
over beginner-ness. In fact, the majority of the people using this
documentation will be developers who have knowledge of other languages.
Having worked with computers since I was 15 and now I am 60 (but never
as a professional) and looked at many languages, my experience is that
when I read the documentation of a new language the first time, I rarely
understand it. It's only after re-reading several times that the
terminology and concepts begin to sink in. Also, because I use multiple
languages in what I do, eg., php, html, css, twig, js, c, java, perl5, I
often forget what the correct syntax is for a particular language. So I
need a quick way to check, and to see a short example. I do not need
excessive explanations, or repetitions of basic concepts such as 0-based
counting.
As to the complaint about $needle, I found almost exactly the same names
for parameters in the php reference on strpos()
(http://www.php.net/manual/en/function.strpos.php). Also, the reference
has a concise description of the function, which it then explains.
Regards,
Richard
On 11/09/18 10:23, ToddAndMargo wrote:

On 09/10/2018 04:37 AM, Curt Tilmes wrote:

On Mon, Sep 10, 2018 at 6:55 AM ToddAndMargo<EMAIL_ADDRESS>wrote:

"C<$needle>" is meaningless to a beginner.

The important bit is not "$needle". It is the description "searches for
$needle in the string". It could say "$farble", and it would be just as
meaningless, but once you see "searches for $farble in string", it
clearly
means that it searches for the value of the one string in the other
string. "searching for a needle in a haystack" is just a common
cliche in
the English, so we typically use the variable $needle to evoke the
concept
of searching for one thing in another. Knowledge of that isn't
necessary,
however, because the document says "searches for $needle in the string."
If this isn't clear, you should probably be reading tutorial
information,
not reference information. If it isn't clear that the syntax delimiter
between two positional arguments is a comma, you should probably be
reading
tutorial information, not reference information. If it isn't clear
that a
count of characters into the string starts at 0, you should probably be
reading tutorial information, not reference information.
You could argue we need more available tutorial information, and I would
agree. I disagree that we should add such tutorial information to the
reference documents.
Things like "a count of characters into a string starts at 0" or "we use
commas to separate parameters" are not just extra information that could
help a beginner understand things better (I agree they would!). I
believe
it would be harmful to add them to the reference information.
These are
very fundamental concepts, and should be explained clearly in the
beginning
of tutorial information, so that as one makes their way through the
reference information one would already understand them. Repeating that
level of information in every single page of the documentation would
significantly detract from ones ability to find the relevant reference
information.
I'm not arguing that you should have understood the reference
document as
it stands, and if you don't (for some future page), please feel free
to ask
on the list and we'll be more than happy to explain in more detail how
things work. I just think we should not try to turn the reference into a
tutorial. (Adding a new tutorial page would be fine with me!)
Curt

Hi Curt,
As a beginner, I look to the manual to understand what functions do.
 And it will
make the manual into something only an advanced user can understand.
The precise user who doesn't need to use the manual anyway.
A good example of throwing concept over the head of beginners is
multi method contains(Cool:D: Str(Cool) $needle, Cool $start? -->
Bool:D)
as in what the heck is that suppose to mean? It only causes confusion.
Those kinds on references are best for the language's "specification"
reference. Not the manual. Maybe put something like that at the end
of the reference as a refresher for those that already know what
they are doing, but they don't need the reference anyway.
I look to the manual for the way I look at a spoken language
dictionary. It says what the word is and shows example usage.
A dictionary is not intended to replace a course on learning
how speak the language. I am not after the manual being a tutorial.
I am after it being understandable.
To me
multi method contains(Cool:D: Str(Cool) $needle, Cool $start? --> Bool:D)
is like looking up "Pas de deux" in an English dictionary
and being told "Go learn to speak French, then come back
and you will understand". (In which case, I'd not need
to come back, so ...)
This is what the function is.
This is what is does.
This is how to use it.
All done in understandable terms. If you do not need to use
advanced terms to explain the function, then don't. KISS:
Keep It Simple and Stupid.
The manual is not the place for "specifications". It is
for the users, not the developers.
-T
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/perl6/doc/issues/2303#issuecomment-420124553, or
mute the thread
https://github.com/notifications/unsubscribe-auth/AAWMnCEcszZ53FzMsnZx70TbFAlmQGmIks5uZx6zgaJpZM4WgYt8.

On 09/10/2018 08:18 PM, Richard Hainsworth wrote:

Todd,
This seems to be an age in which 'opinion' and being uneducated seems to
count for more than working hard to learn. I'm too old now to change my
view that working hard to learn and respecting the views of the learned
are virtuous. Sorry if that sounds hard, but I think the people who work
hard on perl6, whether answering questions, writing documentation,
writing tests, and so on, are worthy of respect.
After looking at the perl6 documentation, and I have been following its
development with enthusiasm since waiting for the next Apocalypse from
Larry, yet I still do not understand all of it eg., :D, but I recognise
that this form of concise expression has a great value if I can learn to
read it.
The documentation may not be for beginners, and everyone believes there
needs to be more.
In other words, if you want to create something that is 'better' for
beginners, then do so. In fact Curt was suggesting the same thing. But
because it is for beginners, this community rightly would call it a
tutorial and not a reference.
I agree here with Curt that reference material should favour brevity
over beginner-ness. In fact, the majority of the people using this
documentation will be developers who have knowledge of other languages.
Having worked with computers since I was 15 and now I am 60 (but never
as a professional) and looked at many languages, my experience is that
when I read the documentation of a new language the first time, I rarely
understand it. It's only after re-reading several times that the
terminology and concepts begin to sink in. Also, because I use multiple
languages in what I do, eg., php, html, css, twig, js, c, java, perl5, I
often forget what the correct syntax is for a particular language. So I
need a quick way to check, and to see a short example. I do not need
excessive explanations, or repetitions of basic concepts such as 0-based
counting.
As to the complaint about $needle, I found almost exactly the same names
for parameters in the php reference on strpos()
(http://www.php.net/manual/en/function.strpos.php). Also, the reference
has a concise description of the function, which it then explains.
Regards,
Richard

Hi Richard,
If I have been in anyway disrespectful, I do apologize.  It
was never my intent to be disrespectful in any way.  I rather
admire the graciousness of those who have shared their
intellectual knowledge with me.
I have been involved in electronics since a very small child.
I now have a bachelors degree in Electronic and Computer
Engineering, Cum Laude.  And I have you beat by two years.
So, young man, I have been programming things for years and
years.  Some of the documentation I used when I was doing
automated testing was really something to behold.  Perl 6's
is worse.
For an example of what I am speaking of, look at how
Perl 5's perldocs does "index" as opposed to Perl 6.
Perl 5:
$ perldoc -f index
index STR,SUBSTR,POSITION
index STR,SUBSTR
The index function searches for one string within another,
but without the wildcard-like behavior of a full regular-
expression pattern match. It returns the position of
the first occurrence of SUBSTR in STR at or after POSITION.
If POSITION is omitted, starts searching from the beginning
of the string. POSITION before the beginning of the string
or after its end is treated as if it were the beginning
or the end, respectively. POSITION and the return value
are based at zero. If the substring is not found, "index"
returns -1.
Perl 6:
 https://docs.perl6.org/routine/index

 Documentation for sub index assembled from the following types:
 class Cool

 From Cool
 (Cool) routine index

 Defined as:

 multi sub    index(Str(Cool) $s, Str:D $needle, Int(Cool) $startpos

= 0 --> Int)
multi method index(Str(Cool) $needle, Int(Cool) $startpos = 0 --> Int)
 Coerces the first two arguments (in method form, also counting
 the invocant) to Str, and searches for $needle in the string
 starting from $startpos. It returns the offset into the string
 where $needle was found, and an undefined value if it was not
 found.

 See the documentation in type Str for examples.

Do you see a difference.  In Perl 5's "perldoc -f", you walk
away knowing how to use the function.
Perl 6 is a wonderful clean up of Perl 5, especially the
sub declarations and regex's.  The only step backward
I see it the documentation.
I too am a YUGE fan of brevity.  M$'s documents use 1000 words
where 10 will do.  Drives me nuts.  "Get to the point!"
What I am after is being able to read the documentation
and know how to use the function afterward.
The "$needle", now that I know the story behind it,
would be a lot more helpful if "$haystack" were somewhere
to be found.  I though it was some kind of reserved word.
Now if the only thing this crotchety old man wanted to do
was to to complain, then it would be different.  But I
do contribute.  It took me over a half hour to figure out
the documentation and write an explanation that made sense.
Okay, if I was to write "contains" in the style of Perl 5's
perldocs, I would write it like this.
"contains":
 STR contains SUBSTR,POSITION
 STR contains SUBSTR

    Search for the existence of a SUBSTR in STR starting
    at or after POSITION.  If POSITION is omitted, starts
    searching from the beginning of the string (0).

    If the SUBSTR is located, "contains" returns "True",
    otherwise it returns "False".

    Examples:

    my Str $Haystack = "abc";
    my Str $Needle   = "c";
    my Int $StartIndex = 1;  # index to start looking, default = 0
    my Bool $Result;
    $Result = $Haystack.contains( "c", $StartIndex );
    say $Result;'
    True

    say "abc".contains( "b", 1 );  # start looking at index 1
    True

    say "abc".contains( "z" ); # start looking at default index 0
    False

See any difference?  This is how perldoc would have done it.
And "perldoc -f" IS NOT A TUTORIAL.  Which one would you leave
understanding the function?  At any point in my example
did you need developer level knowledge of Perl 6?
I am not after a tutorial.  I am after the same level of
functionality that perldoc gives.
Please feel free to use my example above.  I don't care if you
keep around the confusing developer lever definition if
you also include  auseful (to beginners) description as well.
   multi method contains(Str:D: Cool:D $needle, Int(Cool:D) $pos)

Means nothing to someone just trying to figure out how to
use the function.
And, young man, do not be disrespectful of me.   And I put a lot of work into trying
to write a useful explanation of the function to assist others.
Do not change the subject by telling me the documentation is not
a tutorial.
This is all part of Kaisen (constant improvement) of which open
source shines to brightly.
If you did not initially realize that the function docs were
unnecessarily complicated for beginners and typical users, now
you know.  Also, the developers has their own specification sheet.
There is no need to duplicate it in the function docs.
-T

Hi Curt,
Thank you for reopening!
I do not like $needle unless there is corresponding $haystack somewhere near by.  When I first saw needle, I thought needle was yet another reference that I did not understand.  This is why in the first example I posted, I used both $Needle and $Haystack.  When written this way, it makes a lot of sense.  And it is fun to write too.
I put quotes around True and False as I wanted to differentiate them from the spoken (English) True and the programming True.  But I do see you point.  How about putting them in italics?
I like to spell things out like $Position, instead of $pos as I want to make it as clear as possible.  When explaining concepts, I think it is best to write them out.  The programmer can shorten then to $p later if he wants.
As for the "redundant (0)", I did this on purpose.  I don't always know when things start counting from one or from zero.  Perl 5's match "m/" is a real offender here as they start from one.  (Talk about having to rewrite a bunch of stuff when converting from P5 to P6!).  Now strings in other language's or other language's functions may or may not start at zero and if you are familiar with others (I am several), it is easy to goof them up, even if you know that Perl 6 starts at zero. I am king of the goof ups.
The thing I would like to see the most in the documentation is the functions written plainly for new and regular users and not require the speciality knowledge of the developers to figure out.  The developers have their own specifications sheets.  Leave the docs to the rest of us riff-raff!
-T

Speaking of not explaining every parameter;


Add more compile time checks for mastery components

What type of PR is this?

What does this PR do / why is it needed ?
Adding more compile time checks to allow users see errors early on

Which issue(s) this PR fixes:

Fixes #
Other notes for reviewers:
Does this PR introduce a user-facing change?

/easycla


[Build] Darwin build failed -[MTRErrorTests testErrorSourcePaths]

Build issue(s)
https://github.com/project-chip/connectedhomeip/actions/runs/5351208311/jobs/9704754574
2023-06-23T00:41:33.2165110Z 2023-06-23 00:41:33.196862+0000 xctest[57173:352988] Write response: (
2023-06-23T00:41:33.2165390Z         {
2023-06-23T00:41:33.2165660Z         attributePath = "MTRAttributePath(100,200,300)";
2023-06-23T00:41:33.2165930Z     }
2023-06-23T00:41:33.2166130Z )
2023-06-23T00:41:33.2166590Z 2023-06-23 00:41:33.197448+0000 xctest[57173:353353] [Default] CHIP XPC connection disconnected
2023-06-23T00:41:33.2167110Z 2023-06-23 00:41:33.197977+0000 xctest[57173:352988] XPC connection disconnected
2023-06-23T00:41:33.2167660Z Test Case '-[MTRXPCProtocolTests testWriteAttributeSuccess]' passed (0.008 seconds).
2023-06-23T00:41:33.2168260Z Test Case '-[MTRXPCProtocolTests testXPCConnectionFailure]' started.
2023-06-23T00:41:33.2168840Z 2023-06-23 00:41:33.201725+0000 xctest[57173:352988] Device acquired. Reading...
2023-06-23T00:41:33.2169350Z 2023-06-23 00:41:33.201854+0000 xctest[57173:352988] [Default] Reading attribute ...
2023-06-23T00:41:33.2169930Z 2023-06-23 00:41:33.202364+0000 xctest[57173:353337] [Default] Cannot connect to XPC server for remote controller
2023-06-23T00:41:33.2170740Z 2023-06-23 00:41:33.202720+0000 xctest[57173:352988] [Default] Failed to obtain XPC connection
2023-06-23T00:41:33.2171340Z 2023-06-23 00:41:33.202881+0000 xctest[57173:352988] Read value: (null)
2023-06-23T00:41:33.2171880Z Test Case '-[MTRXPCProtocolTests testXPCConnectionFailure]' passed (0.004 seconds).
2023-06-23T00:41:33.2172440Z Test Suite 'MTRXPCProtocolTests' passed at 2023-06-23 00:41:33.205.
2023-06-23T00:41:33.2172830Z 	 Executed 27 tests, with 0 failures (0 unexpected) in 9.484 (9.505) seconds
2023-06-23T00:41:33.2173650Z Test Suite 'MatterTests.xctest' failed at 2023-06-23 00:41:33.206.
2023-06-23T00:41:33.2174030Z 	 Executed 256 tests, with 3 failures (0 unexpected) in 43.915 (44.014) seconds
2023-06-23T00:41:33.2174530Z Test Suite 'Selected tests' failed at 2023-06-23 00:41:33.208.
2023-06-23T00:41:33.2174890Z 	 Executed 256 tests, with 3 failures (0 unexpected) in 43.915 (44.019) seconds
2023-06-23T00:41:38.7793660Z 2023-06-23 00:41:38.779 xcodebuild[36565:308524] [MT] IDETestOperationsObserverDebug: 174.511 elapsed -- Testing started completed.
2023-06-23T00:41:38.7795370Z 2023-06-23 00:41:38.779 xcodebuild[36565:308524] [MT] IDETestOperationsObserverDebug: 0.000 sec, +0.000 sec -- start
2023-06-23T00:41:38.7796100Z 2023-06-23 00:41:38.779 xcodebuild[36565:308524] [MT] IDETestOperationsObserverDebug: 174.511 sec, +174.511 sec -- end
2023-06-23T00:41:43.2566100Z Failing tests:
2023-06-23T00:41:43.2566320Z
2023-06-23T00:41:43.2569590Z 	-[MTRErrorTests testErrorSourcePaths]
2023-06-23T00:41:43.2569980Z Test session results, code coverage, and logs:
2023-06-23T00:41:43.2571520Z
2023-06-23T00:41:43.2572710Z 	/Users/runner/Library/Developer/Xcode/DerivedData/Matter-fezxjrcgbvmiwkgpcrhtmcinmudo/Logs/Test/Test-Matter Framework Tests-2023.06.23_00-31-10-+0000.xcresult
2023-06-23T00:41:43.2604490Z ** TEST FAILED **
2023-06-23T00:41:43.2604690Z

Platform
darwin
Anything else?
No response

The failure is this bit:
2023-06-23T00:40:31.1978010Z ==================
2023-06-23T00:40:31.2071630Z WARNING: ThreadSanitizer: data race (pid=52934)
2023-06-23T00:40:31.2072750Z   Write of size 1 at 0x0001247b32f0 by main thread:
2023-06-23T00:40:31.2073690Z     #0 chip::Logging::SetLogFilter(unsigned char) CHIPLogging.cpp:255 (Matter:x86_64+0x27555ae)
2023-06-23T00:40:31.2075230Z     #1 MTRSetLogCallback MTRLogging.mm:62 (Matter:x86_64+0x2635094)
2023-06-23T00:40:31.2076530Z     #2 -[MTRErrorTests testErrorSourcePaths] MTRErrorTests.m:35 (MatterTests:x86_64+0x367f2f)
2023-06-23T00:40:31.2077420Z     #3 __invoking___ <null>:2 (CoreFoundation:x86_64+0x66dbb)
2023-06-23T00:40:31.2078340Z
2023-06-23T00:40:31.2078960Z   Previous read of size 1 at 0x0001247b32f0 by thread T8:
2023-06-23T00:40:31.2080190Z     #0 chip::Logging::IsCategoryEnabled(unsigned char) CHIPLogging.cpp:274 (Matter:x86_64+0x27555ff)
2023-06-23T00:40:31.2081670Z     #1 -[MTRDevice _handleSubscriptionReset] MTRDevice.mm:339 (Matter:x86_64+0x2637b62)
2023-06-23T00:40:31.2082530Z     #2 __31-[MTRDevice _setupSubscription]_block_invoke.130 MTRDevice.mm:597 (Matter:x86_64+0x263e295)
2023-06-23T00:40:31.2083050Z     #3 __tsan::invoke_and_release_block(void*) <null>:2 (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x7f35b)
2023-06-23T00:40:31.2083520Z     #4 _dispatch_client_callout <null>:2 (libdispatch.dylib:x86_64+0x3316)
2023-06-23T00:40:31.2084290Z
2023-06-23T00:40:31.2084870Z   Location is global 'chip::Logging::gLogFilter' at 0x0001247b32f0 (Matter+0x30ae2f0)
2023-06-23T00:40:31.2085130Z
2023-06-23T00:40:31.2085290Z   Thread T8 (tid=349302, running) is a GCD worker thread
2023-06-23T00:40:31.2085490Z
2023-06-23T00:40:31.2085750Z SUMMARY: ThreadSanitizer: data race CHIPLogging.cpp:255 in chip::Logging::SetLogFilter(unsigned char)
2023-06-23T00:40:31.2086120Z ==================


add prunner by default

I am super lazy, so I have written prunner that allows one to run two commands
prunner 'command 1' 'command 2'

I know that people probably would like to have, but I don't have a Windows machine to test prunner. So as if someone can assure that prunner works fine on Windows, I would be happy to add it to our slush program ;-)
prunner 'npm run sniper' 'npm run watch'

Oh this belongs to the slush.
prunner is tested on Windows and now included by default into slush.

prunner kills slush-biojs command. Need sudo now. Doesn't work. I recommend to remove it

for reference the error was
346 verbose stack Error: EACCES, unlink '/Users/David/node-tsnejs/node_modules/prunner/node_modules/.bin/win-spawn'
347 verbose cwd /Users/David/node-tsnejs
348 error Darwin 14.0.0
349 error argv "node" "/usr/local/bin/npm" "install"
350 error node v0.10.31
351 error npm  v2.5.0
352 error path /Users/David/node-tsnejs/node_modules/prunner/node_modules/.bin/win-spawn
353 error code EACCES
354 error errno 3
355 error Error: EACCES, unlink '/Users/David/node-tsnejs/node_modules/prunner/node_modules/.bin/win-spawn'
355 error  { [Error: EACCES, unlink '/Users/David/node-tsnejs/node_modules/prunner/node_modules/.bin/win-spawn']
355 error   errno: 3,
355 error   code: 'EACCES',
355 error   path: '/Users/David/node-tsnejs/node_modules/prunner/node_modules/.bin/win-spawn' }
356 error Please try running this command again as root/Administrator.

As I can't explain this - win-spawn was removed from prunner and added as static dependency ...


Reduce number of blobs in TestWalkBlobs

Reduce runtime from 170s to 3s (on my desktop)

--- FAIL: TestBtrfs/ViewReadonly (0.04s)
    	testsuite.go:74: Failed to initialize snapshotter: exit status 255
    		loopback setup failed
    		github.com/containerd/containerd/testutil.NewLoopback
    			/home/travis/gopath/src/github.com/containerd/containerd/testutil/loopback_linux.go:32
    		github.com/containerd/containerd/snapshot/btrfs.boltSnapshotter.func1
    			/home/travis/gopath/src/github.com/containerd/containerd/snapshot/btrfs/btrfs_test.go:32
    		github.com/containerd/containerd/snapshot/testsuite.makeTest.func1
    			/home/travis/gopath/src/github.com/containerd/containerd/snapshot/testsuite/testsuite.go:72
    		testing.tRunner
    			/home/travis/.gimme/versions/go1.9.2.linux.amd64/src/testing/testing.go:746
    		runtime.goexit
    			/home/travis/.gimme/versions/go1.9.2.linux.amd64/src/runtime/asm_amd64.s:2337

Does not seem related

Looking at the profile, most of the time is spent in disk operations.
After the change it runs in 0.24s on CI, which seems reasonable for a unit test.

The issue seems to be related to the generation of random data for the blob. Just replace the generateBlob implementation of read tiled random data and it will run faster.

I've restored max blob size.
Generating random data is 20% of the time, so that may help a bit, but not as significantly as just creating fewer blobs.
I'm not sure what you mean by "tiled random data". I tried creating a single large byte array and reading segments out of it, but that made no difference in test execution time.
Most of the time seems to be filesystem operations (renaming, and removing directories) not in generating the random data.
I've attached another flame graph with that diff.


Derive macro should error when as = ".." and check_bytes are used

Because check_bytes derives CheckBytes on the archived type and these attributes disable archived type generation, this should result in an error.

Fixed by b824ee39f2749974f455844b756d3a4e2f1897de


'Illegal instruction' is the only output

I have been trying to run the following code:
=========================
#!/usr/bin/python3
-- coding: utf-8 --
from deepface import DeepFace
DeepFace.stream("database")
result  = DeepFace.verify("mental.jpg", "voloda.jpg")
#results = DeepFace.verify([['img1.jpg', 'img2.jpg'], ['img1.jpg', 'img3.jpg']])
print("Is verified: ", result["verified"])
obj = DeepFace.analyze(img_path = "mental.jpg", actions = ['age', 'gender', 'race', 'emotion'])
#objs = DeepFace.analyze(["img1.jpg", "img2.jpg", "img3.jpg"]) #analyzing multiple faces same time
print(obj["age"]," years old ",obj["dominant_race"]," ",obj["dominant_emotion"]," ", obj["gender"])
==============================
However, the only output I ever get is 'Illegal instruction'.
The installation output was as follows. I upgraded numpy now so the current version is actually 1.20.1 not 1.16.2:
pandas 1.2.2 has requirement numpy>=1.16.5, but you'll have numpy 1.16.2 which is incompatible.
Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, Flask, filelock, gdown, absl-py, tensorflow-estimator, protobuf, grpcio, termcolor, google-pasta, gast, keras-preprocessing, cached-property, h5py, keras-applications, astor, wrapt, zipp, importlib-metadata, markdown, tensorboard, tensorflow, keras, mtcnn, pandas, deepface, PySocks
Successfully installed Flask-1.1.2 Jinja2-2.11.3 MarkupSafe-1.1.1 PySocks-1.7.1 Werkzeug-1.0.1 absl-py-0.11.0 astor-0.8.1 cached-property-1.5.2 deepface-0.0.49 filelock-3.0.12 gast-0.4.0 gdown-3.12.2 google-pasta-0.2.0 grpcio-1.35.0 h5py-3.1.0 importlib-metadata-3.5.0 itsdangerous-1.1.0 keras-2.4.3 keras-applications-1.0.8 keras-preprocessing-1.1.2 markdown-3.3.3 mtcnn-0.1.0 pandas-1.2.2 protobuf-3.15.1 tensorboard-1.14.0 tensorflow-1.14.0 tensorflow-estimator-1.14.0 termcolor-1.1.0 wrapt-1.12.1 zipp-3.4.0
Any idea what may be wrong? Thank you.

I might add that this is what I get from the Python prompt:
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

from deepface import DeepFace
Illegal instruction

Thank you.

No idea. I can run it as is.
Could you import tensorflow directly? Please try to run the following code block.
import tensorflow
import keras

I have been trying to run the following code:
=========================
#!/usr/bin/python3
-- coding: utf-8 --
from deepface import DeepFace
DeepFace.stream("database")
result = DeepFace.verify("mental.jpg", "voloda.jpg")
#results = DeepFace.verify([['img1.jpg', 'img2.jpg'], ['img1.jpg', 'img3.jpg']])
print("Is verified: ", result["verified"])
obj = DeepFace.analyze(img_path = "mental.jpg", actions = ['age', 'gender', 'race', 'emotion'])
#objs = DeepFace.analyze(["img1.jpg", "img2.jpg", "img3.jpg"]) #analyzing multiple faces same time
print(obj["age"]," years old ",obj["dominant_race"]," ",obj["dominant_emotion"]," ", obj["gender"])
==============================
However, the only output I ever get is 'Illegal instruction'.
The installation output was as follows. I upgraded numpy now so the current version is actually 1.20.1 not 1.16.2:
pandas 1.2.2 has requirement numpy>=1.16.5, but you'll have numpy 1.16.2 which is incompatible.
Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, Flask, filelock, gdown, absl-py, tensorflow-estimator, protobuf, grpcio, termcolor, google-pasta, gast, keras-preprocessing, cached-property, h5py, keras-applications, astor, wrapt, zipp, importlib-metadata, markdown, tensorboard, tensorflow, keras, mtcnn, pandas, deepface, PySocks
Successfully installed Flask-1.1.2 Jinja2-2.11.3 MarkupSafe-1.1.1 PySocks-1.7.1 Werkzeug-1.0.1 absl-py-0.11.0 astor-0.8.1 cached-property-1.5.2 deepface-0.0.49 filelock-3.0.12 gast-0.4.0 gdown-3.12.2 google-pasta-0.2.0 grpcio-1.35.0 h5py-3.1.0 importlib-metadata-3.5.0 itsdangerous-1.1.0 keras-2.4.3 keras-applications-1.0.8 keras-preprocessing-1.1.2 markdown-3.3.3 mtcnn-0.1.0 pandas-1.2.2 protobuf-3.15.1 tensorboard-1.14.0 tensorflow-1.14.0 tensorflow-estimator-1.14.0 termcolor-1.1.0 wrapt-1.12.1 zipp-3.4.0
Any idea what may be wrong? Thank you.

Hello, illegal instruction (core dumped) happens when you installed an incompatible whl. This means that the precompiled version of tensorflow that you use requires instructions that the CPU does not support (Happens with older CPU and Servers where VMWARE or KVM limit the usage of the CPU). Here for instance this can be AVX and AVX2 instructions, which you can find more on online.
My suggestion here is that you build tensorflow from source on your machine which will most likely fix this problem.
Or you can look for the keyword "non-avx tensorflow" wheels to download precompiled tensorflow versions that are compatible with older CPUs.

yesi it seems tensorflow installation related problem.

Hi, thank you all for your comments. Attempts at importing both/either keras and/or tensorflow end up with 'Illegal instruction'. No precompiled version of tensorflow available on Pypi work on my Lenovo G 50-30. I will try and build it from source then. Thank you for your tips.


fix(build): use apt instead of apk when installing deps for aws ecr publish

What type of PR is this?

Uncomment one (or more) /kind <> lines:

/kind bug

/kind cleanup

/kind design

/kind documentation

/kind failing-test

/kind feature

If contributing rules or changes to rules, please make sure to also uncomment one of the following line:

/kind rule-update

/kind rule-create

Any specific area of the project related to this PR?

Uncomment one (or more) /area <> lines:

/area build

/area engine

/area rules

/area tests

/area proposals

What this PR does / why we need it:
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:
Does this PR introduce a user-facing change?:

NONE

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: FedeDP
To complete the pull request process, please assign jonahjon after the PR has been reviewed.
You can assign the PR to them by writing /assign @jonahjon in a comment when ready.
The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

.circleci/OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

LGTM label has been added.  Git tree hash: 0b0401ea5f5a2daa634b9f720df563198fb4d767

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: FedeDP, jasondellaluce
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

.circleci/OWNERS [jasondellaluce]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

/milestone 0.33.0


Document TestAutoName and update with some lfs info

Will be adding doc for auto-name methods here too but saw this first and tackled it.
Description
Resolves #18013 (but not yet)
Type of change

[ ] Bug fix
[ ] New feature
[x] Documentation update~~
[ ] Other

How Has This Been Tested?
Running locally on my macOS
Checklist:

[x] I have followed the style guidelines of this project.~~
[x] I have performed a self-review of my own code.~~
[ ] I have commented my code where applicable.
[ ] I have updated the release notes.
[x] I have made corresponding changes to the documentation.~~
[ ] I have added debugging support to my changes.
[ ] I have added tests that prove my fix is effective or that my feature works.
[ ] I have confirmed new and existing unit tests pass locally with my changes.
[ ] I have added new baselines for any new tests to the repo.
[x] I have NOT made any changes to protocol or public interfaces in an RC branch.~~
[x] I have assigned reviewers (see VisIt's PR procedures for more information).~~

Interesting...even though @brugger1 has approved, I am not getting a green button to merge. It is showing that @biagas requested changes though AFAICT, I resolved all changes requested by @biagas. Maybe because @biagas requested changes, it won't go green until @biagas also approves....and just like that, it went green while I was typing this 😉


KYLIN-5279 Default null collation for Kylin5.0 sqls should be null-last for ASC order and null-first for DESC order.

according to pgsql: https://www.postgresql.org/docs/current/queries-order.html
By default, null values sort as if larger than any non-null value; that is, NULLS FIRST is the default for DESC order, and NULLS LAST otherwise.
Branch to commit

[ ] Branch kylin3 for v2.x to v3.x
[ ] Branch kylin4 for v4.x
[x] Branch kylin5 for v5.x

Types of changes
What types of changes does your code introduce to Kylin?
Put an x in the boxes that apply

[x] Bugfix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Documentation Update (if none of the other choices apply)

Checklist
Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.

[x] I have created an issue on Kylin's jira, and have described the bug/feature there in detail
[x] Commit messages in my PR start with the related jira ID, like "KYLIN-5279 Default null collation for Kylin5.0 sqls should be null-last for ASC order and null-first for DESC order."
[x] Compiling and unit tests pass locally with my changes
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have added necessary documentation (if appropriate)
[ ] Any dependent changes have been merged

@hit-lacus

Here is my suggestion.You don't need add a new config entry like: kylin.query.asc-order-null-first-enable.
Looks like you can reuse existent config entry in KylinConfigBase#getCalciteExtrasProperties and remove the overwrite method defaultNullCollation of KECalciteConfig.  After that, you
just need set "kylin.query.calcite.extras-props.defaultNullCollation=low/high/first/last" in kylin.properties .

Thanks for the suggestion! Have remove the config 'kylin.query.asc-order-null-first-enable', and reuse KylinConfigBase#getCalciteExtrasProperties for setting default null collation.
@hit-lacus

LGTM, I will merge it later.


6100u Support

Team,
This is a long shot, as I know this hasn't been updated in a while, but I have an Inno setup file that is using 6100u that I am attempting to decompile. However, I am running into wall after wall with it. I am hoping someone can assist in getting a new module set up for Setup::Inno to support 6100u.
Any assistance would be greatly appreciated!
Thank you.

I just pushed parsers for the latest InnoSetup versions. Please test if they work for you, I don't have any samples.
I also had some uncommitted path handling changes lying around, don't quite remember what they were for. Maybe you could test them as well. They're in the branch https://github.com/onitake/uninno/tree/filename-handling

You are a saint! I will get to testing today and let you know if everything works out!! Thank you so much. :)

Small update: I was able to test the changes on an older version and ran into no issues. Once testing on a newer version for 6100u, it threw this error:
Installer version: 6100u Uncaught exception from user code: 	Can't read longword at /home/admin1/Desktop/uninno/Setup/Inno/FieldReader.pm line 255. 	Setup::Inno::FieldReader::ReadLongWord(Setup::Inno::Struct6100u=HASH(0x5ae0feb4e688)) called at /home/admin1/Desktop/uninno/Setup/Inno/Interpret4000.pm line 42 	Setup::Inno::Interpret4000::SetupBinaries(Setup::Inno::Interpret5309=HASH(0x5ae0fead74d0), Setup::Inno::Struct6100u=HASH(0x5ae0feb4e688), "cmZip") called at /home/admin1/Desktop/uninno/Setup/Inno.pm line 113 	Setup::Inno::Setup0(Setup::Inno=HASH(0x5ae0fd074e50)) called at /home/admin1/Desktop/uninno/Setup/Inno.pm line 154 	Setup::Inno::FileCount(Setup::Inno=HASH(0x5ae0fd074e50)) called at ./uninno.pl line 63
The sample I am working with is password protected, but I know that the error for that will be different if the PW is incorrect. Any thoughts on how to proceed forward?

This looks like it's caused by a lack of support for password-protected installers.
Unfortunately, I was never able to completely implement this features, but some of the plumbing is there.
Do you have a sample installer I could analyze, or a link to one? I can't promise anything, but maybe it's less work than expected.

Apologies for the delay, @onitake! Thank you for the response. I do have a sample I can provide, but I am unsure you want to mess with it, as I am unsure what it contains (Hense trying to dump it, as it was provided as a "potential malware sample").
The full details are that the sample could be malicious, and I am trying to dump it for research purposes using JohnTheRipper to crack the file's password. I understand this may not be something you support, but any help you can provide would be appreciated. As I obviously don't want to share something potentially malicious on Github or to anyone willy nilly, is there any way to connect on another platform? Discord, etc. works for me.
Let me know!


Removed unused event cache API

Coverage decreased (-0.07%) to 67.74% when pulling 2716d792448b241586b7c3005edaaafcd90b9377 on mkolodezny:cache_clean into f7683cbe88cd5c0748984fb504105c2d0112e9a9 on uber:master.


Neume schema requires that  be within a

Currently, <clef> is marked as a member of model.eventLike, and in the mei-Neumes customization this class is forbidden from occurring within <layer>. Semantically, it seems off that clefs must be assigned to a syllable; is there a reason for this behavior, or could there be change to allow clefs to exist in layers alongside syllables?
@JRegimbal suggested to me that the simplest potential way of doing this would be to  add model.layerPart to the list of classes that ` is a member of.

Hi @timothydereuse, please excuse the late answer. I'm not much into the concept model of the mei-Neumes customization, but I can happily verify that your proposed solution would solve the problem as you described. I don't know if this has been discussed with the interest group already, but I think it would be best to reach consensus there before trying to implement this. Like I said, I'm not very much into this, and can't foresee potential side effects…
All best, jo

this seems to be a sub-problem of #968, so we'll be addressing this over there. Re-open if our solution is inadequate :)


Some functions are producing a different result than musl

Noticed in #259:

lgamma
tgamma
j1/y1
j0/y0
jn/yn

Somehow I ended up opening this issue in the wrong repo. Sorry.


Distributed Vault - mobile version

Implement a Distributed Vault.
We need to have a mechanism that will force users to create their own clusters (distributed vaults) effortlessly.
The idea is when a user downloads our application it asks what name the user wants to use.
In the same way, as we have unique id-s in any  social network, like https://github.com/metabynull or @metabynull @LLIo6oH
In the best-case scenario, the nicknames and their public keys(pk) will be the only information stored on the server side.
A sequence diagram of user experience (registration/cluster formation):
sequenceDiagram
    user->>app store: download application
    user->>app: open app
    app->>local storage: get device id
    alt already registered
        local storage-->>app: provide {user_id: keypair}
    else not registered
        local storage-->>app: device not registered
        app->>ed25519: generate private/public key pair. Public key - pk
        app->>user: ask user to provide a nik name (user_id)
        user->>app: provide user_id
        app ->> meta-secret-server: ask if {user_id: pk} exists
        alt user doesn't exist
           meta-secret-server->>server-database: save {user_id:pk}
           meta-secret-server->>app: user with {user_id: pk} has been created
        else user exists
            meta-secret-server->>app: would you like to join {user_id} cluster?
            app->>meta-secret-server: join {user_id} cluster (follow the protocol, provide pk)
            meta-secret-server->>server-database: add a new member into {user_id}
        end
    end
    user->>app: restore password with id: 123
    app-->>app: asking other apps to provide shares of pass_id 123
    app->>user: you password is: "freedom"

Internal structures:

when the user runs the meta-secret app for the first time, it creates a vault inside. Usually "one device=one vault", at least in the current implementation.

A vault is an abstraction that is used to keep multiple shares of different secrets on a local machine.
Vault contains:
 {
  userId,
  deviceId,
  keypair: {publicKey, privateKey}
}

A localStorage object would be:

{
  vault: vaultObject,
  shares: [
      {password_id1, share1: ".... data"},
      {password_id2, share3: "....data"},
      {password_id3, share3: ".... data"}
  ]
}

Basic functionality is done for IOS version


How to overrride config in app/app.php

I have 2 modules Backend & Frontend, but I want them display with 2 difference language and 2 difference timezone.
If I config locale and timezone at app/app.php, it work in both modules Backend & Frontend.
So how to I can individual configuration for each modules?

Hi,
You can use the Config api from laravel. Example $app['config']->set('key', 'value');

Hi,
You can use the Config api from laravel. Example $app['config']->set('key', 'value');

Thanks for reply.
I have tried, but it not work.
In app\app.php
return [
...
'locale' => 'vi'
...
];

in Providers\BackendServiceProvider.php
public function boot()
  {
      $this->app['config']->set('app.locale', 'en');
      // $this->app->setLocale('en'); // also not work
      $this->registerTranslations();
      $this->registerConfig();
      $this->registerViews();
      $this->registerFactories();
      $this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
  }

After then I clear cache:
php artisan config:clear
php artisan cache:clear

Finally it also not work, my Backend still display locale vi instead of en

You must be overriding it somewhere else then. I'm using the method to do exactly this.
I'll close the issue as it's not related to this package.

I have detected, config of Frontend module has override config of Backend.
In BackendServiceProvider.php
public function boot()
    {
        echo 'backend';
        $this->app->setLocale('en');

        $this->registerTranslations();
        $this->registerConfig();
        $this->registerViews();
        $this->registerFactories();
        $this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
    }

In FrontendServiceProvider.php
public function boot()
    {
        echo 'frontend';
        $this->app->setLocale('vi');

        $this->registerTranslations();
        $this->registerConfig();
        $this->registerViews();
        $this->registerFactories();
        $this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
    }

And when I access http://localhost:8000/backend, I get backendfrontend and locale is vi.
Seem Frontend module still load while I access Backend.
I think that will be affect peformance and can't individual configuration for each modules.

In that case just make sure to only perform backend login when you know a user is on the backend.

Sorry But I don't understand what you mean.
Is there any solution to solve my problem?
Thanks!


App Registration permissions need broader documentation

Hello,
This table lists some Power BI scope values and descriptions, but it doesn't include all the values listed in Azure Active Directory's App Registration permissions.  For example, Tenant.Read.All (we can't tell if that allows only access to Power BI or the entire O365 tenant).  Please create more clear documentation about ALL of the Power BI security permissions, in a single place, rather than only a subset of them in this page.
Thanks!
Chris

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

ID: b836b669-bee0-737a-8de1-b3fd0cda0218
Version Independent ID: f6ae700d-4db0-fd20-fab5-6020ecde08c4
Content: Power BI permissions - Power BI
Content Source: powerbi-docs/developer/power-bi-permissions.md
Service: powerbi
GitHub Login: @markingmyname
Microsoft Alias: maghan

Thanks for the feedback, @chrisweis! I'll pass it along to the author.

Thank you for your feedback! We will investigate and get back to you with the relevant info.

@chrisweis We understand it can be a bit frustrating to have related pieces of information in different places.  We are working on getting the information more straightforward. To answer your question, Tenant.Read.All is just for Power BI.  Thank you again for your feedback.


skpath.arcto svg method wont draw arc where start and and ponts are the same

this method
SkiaApi.sk_path_arc_to(this.Handle, rx, ry, xAxisRotate, largeArc, sweep, x, y);
has a problem as per title.
this wont work.
path.MoveTo( new SKPoint( 68.404f, 187.938f ) );
path.ArcTo( 				100.0f, 				200.0f, 				160.0f, 				SKPathArcSize.Large, 				SKPathDirection.Clockwise, 				68.404f, 				187.938f );
but modifying the end point by 0.0005 in x and y seems to work for some reason as per
path.MoveTo( new SKPoint( 68.404f, 187.938f ) );
path.ArcTo( 100.0f, 200.0f, 160.0f, SKPathArcSize.Large, SKPathDirection.Clockwise, 68.4045f, 187.9385f );

This is not a SkiaSharp bug, this works exactly as the native skia api is documented:
Arc sweep is always less than 360 degrees. arcTo() appends line to (x, y) if either radii are zero, or if last SkPath SkPoint equals (x, y). arcTo() scales radii (rx, ry) to fit last SkPath SkPoint and (x, y) if both are greater than zero but too small.


Add Power Save

Thanks! Although I'd be interested in how much battery life this adds over a normal clock app that updated once a minute. It may not be too much.
It might be worth mentioning that it'll break wake-on-twist, step counting, and other features that rely on the accelerometer.
I'm interested by:

Due to an Espruino bug, this does not take affect immediately when installed.

What do you mean here? If you upload with the app loader, you'll have to long-press the button to reload apps after it is installed, which I'd have hoped would have got this working...

Thanks! Although I'd be interested in how much battery life this adds over a normal clock app that updated once a minute. It may not be too much.
Maybe if I get a chance I'll do some experimenting. I do feel like I'm getting more than the advertised 4 week battery life with this, but I'd have to do further testing to confirm that.
It might be worth mentioning that it'll break wake-on-twist, step counting, and other features that rely on the accelerometer.
That's a good point. I'll make that feature optional.
I'm interested by:

Due to an Espruino bug, this does not take affect immediately when installed.

What do you mean here? If you upload with the app loader, you'll have to long-press the button to reload apps after it is installed, which I'd have hoped would have got this working...
This might just be an issue with uploading through the web IDE, I haven't tried installing it from the app loader.


You can't stop a tween before it's started

If you make a tween and then call stop on it before it has started it will still start, but skip any delay.

Thank you for submitting this issue. We have fixed this and the fix has been pushed to the master branch. It will be part of the next release. If you get time to build and test it for yourself we would appreciate that.


ProducerMetadata.setPartitioner() has not effect.

KafkaProducerMessageHandler uses overloaded send() method from KafkaProducerContext which makes setting partitioner on ProducerMetadata useless.

Agreed. That's some kind of bug which is just not covered by tests.
Which version of Spring Integration Kafka do you use to provide the fix for you?
In additional I see that XSD requests partition-id-expression, but the parser's code is like:
kafkaProducerMessageHandlerBuilder.addPropertyValue("partitionIdExpression", partitionIdExpressionDef);

So, this one should be fixed, too.
The original issue can be fixed like moving the Partitioner logic to the ProducerConfiguration.send(String topic, Integer partition, K messageKey, V messagePayload) method when partition == null.
WDYT?
And thank you for the report!

Thank you for the quick response.  I am working on latest version 1.2.1.RELEASE.
Yes, pushing partitioner logic would work, but what will happen if user sends partition number as well? We could do couple of things.

Put default precedence to user input and select custom partitioner only in case of Integer partition is null
Throw an exception saying to user that you could do only one option. Either set custom partitioner or send partitionid in request.
Personally I prefer second option.

Well, the fallback option is always good choice!
I'm happy if we have something similar implementing some protocol adapter :smile:
Because in the messaging environment there really no guaranty that all sending messages will have particular header or some required system state causes.
So, +1 for the first option!

I am fine either way.  Do you want me to fix it and issue a pull request??

:+1: Yes, that would be cool!
Please, follow with the https://github.com/spring-projects/spring-integration/blob/master/CONTRIBUTING.md

Thanks...will do

Hello, @abhijith-prabhakar !
Hope you are well.
Just as a reminder note :smile:
Let us know if you are still interested in the contribution or we should do this ourselves.
Thanks in advance!

Sorry for my delayed response.  I was getting clearance from company to sign ICL.  Will send my pull request soon.

Has issued the pull request:  https://github.com/spring-projects/spring-integration-kafka/pull/71
Has signed ICA, added tests and all tests are passing locally.

I don't think we should support this. Partitioner is part of the old Kafka producer API and we shouldn't mix it with the new.

Or if we do, the same way as with Encoder, it should be deprecated and remove in the next major version.

So, let's start our 1.3 version!
Or do we wait for something like  <IP_ADDRESS> from Apache Kafka (see their JIRA (https://issues.apache.org/jira/browse/KAFKA))?
Although with that I'd say that we should start our 2.0...

Yeah, that's the sanest course. Let's merge this for 1.x and deprecate the old APIs in 2.0. Said something similar here: https://github.com/spring-projects/spring-integration-kafka/issues/63#issuecomment-146684817

Fixed via https://github.com/spring-projects/spring-integration-kafka/commit/4786b64f51443ff788e8985fbbf12857cf435378


bevy_reflect: Refactor serde module

Objective
The ser and de modules in bevy_reflect/serde are very long and difficult to navigate.
Solution
Refactor both modules into many smaller modules that each have a single primary focus (i.e. a structs module that only handles struct serialization/deserialization).
I chose to keep the ser and de modules separate. We could have instead broken it up kind (e.g. lists, maps, etc.), but I think this is a little cleaner. Serialization and deserialization, while related, can be very different. So keeping them separated makes sense for organizational purposes.
That being said, if people disagree and think we should structure this a different way, I am open to changing it.
Note that this PR's changes are mainly structural. There are a few places I refactored code to reduce duplication and to make things a bit cleaner, but these are largely cosmetic and shouldn't have any impact on behavior.
Other Details
This PR also hides a lot of the internal logic from being exported. These were originally public, but it's unlikely they really saw any use outside of these modules. In fact, you don't really gain anything by using them outside of this module either.
By privatizing these fields and items, we also set ourselves up for more easily changing internal logic around without involving a breaking change.
I also chose not to mess around with tests since that would really blow up the diff haha.
Testing
You can test locally by running:
cargo test --package bevy_reflect --all-features

Migration Guide
The fields on ReflectSerializer and TypedReflectSerializer are now private. To instantiate, the corresponding constructor must be used:
// BEFORE
let serializer = ReflectSerializer {
    value: &my_value,
    registry: &type_registry,
};

// AFTER
let serializer = ReflectSerializer::new(&my_value, &type_registry);

Additionally, the following types are no longer public:

ArraySerializer
EnumSerializer
ListSerializer
MapSerializer
ReflectValueSerializer (fully removed)
StructSerializer
TupleSerializer
TupleStructSerializer

As well as the following traits:

DeserializeValue (fully removed)

Merging ahead of the merge train today to be absolutely sure there's no merge conflicts on this.


Async map & bind

I'm having some code that needs to transform an Option using async functions.
But it is getting out of hand.
public async Task<Option<GetMaterialFlowResponse, string>> Handle(int id)
{
    var externalFlowId = (await
            _context.AuthenticFlows
                .Where(a => a.Id == id)
                .Select(a => a.Id).ToArrayAsync())
                .SingleOrNone();

    var staticMeta = await _flowWebService.GetMetaDataAsync();
    var materialMeta = staticMeta.FirstOrNone(m => m.LogicType.ToLower() == "material" && m.ConditionsFields.Any(c => c.Name ==  "MsgTo"));

    foreach (var meta in materialMeta)
    {
        foreach (var flowId in externalFlowId)
        {
            var flowDetail = await GetFlowDetail(flowId);
            foreach (var detail in flowDetail)
            {
                var msgToId = meta.ConditionsFields.First(c => c.Name == "MsgTo").ID;
                var msgToOption = detail.Conditions.FirstOrNone(c => c.ConditionFieldID == msgToId).Map(c => c.Value);
                foreach (var msgTo in msgToOption)
                {
                    var outputsOption = await new GetFlowOutputFormatsHandler(_messageTypeMetaDataService, _rampService).Handle(msgTo);
                    foreach (var outputs in outputsOption)
                    {
                        var conditions = detail.Conditions.Select(c =>
                            new FlowConditionItem((int) c.ConditionFieldID, (int) c.ConditionOperatorID,
                                c.Value)).ToArray();
                        return Option.Some<GetMaterialFlowResponse, string>(
                            new GetMaterialFlowResponse(detail.Name, conditions, outputs));
                    }
                    return Option.None<GetMaterialFlowResponse, string>(
                        $"Could not determine output types for {msgTo}");
                }
                return Option.None<GetMaterialFlowResponse, string>("No MsgTo found in flow");
            }
            return Option.None<GetMaterialFlowResponse, string>($"No flow found in the WCF service with Id {flowId}");
        }
        return Option.None<GetMaterialFlowResponse, string>($"No flow found for authentic Id {id}");
    }

    return Option.None<GetMaterialFlowResponse, string>("No meta data found for material");
}

In the most inner foreach I'm using an early return to return the happy path but this is getting out of hand and just messy.
Is there any way to improve the code?

Hi,
Unfortunately, using Optional with async/Task is currently rather clumsy. Improving this (via Optional.Async) is on the very top of my TODO/roadmap for the library.
For now, the main way to reduce nesting when working with async, is to switch to a more imperative style. Unfortunately, this approach provides fewer safety guarantees. An alternative would be to split the method into multiple methods (if you are using C# 7+ local methods would be an option here).
Example (I haven't compiled or executed the code, so it might need a bit of tweaking for it to actually run):
public async Task<Option<GetMaterialFlowResponse, string>> Handle(int id)
{
    var externalFlowId = (await
            _context.AuthenticFlows
                .Where(a => a.Id == id)
                .Select(a => a.Id).ToArrayAsync())
                .SingleOrNone();

    if (!externalFlowId.HasValue) return Option.None<GetMaterialFlowResponse, string>($"No flow found for authentic Id {id}");
    var flowId = externalFlowId.ValueOrFailure();

    var staticMeta = await _flowWebService.GetMetaDataAsync();
    var materialMeta = staticMeta.FirstOrNone(m => m.LogicType.ToLower() == "material" && m.ConditionsFields.Any(c => c.Name ==  "MsgTo"));
    if (!materialMeta.HasValue) return Option.None<GetMaterialFlowResponse, string>("No meta data found for material");
    var meta = materialMeta.ValueOrFailure();

    var flowDetail = await GetFlowDetail(flowId);
    if (!flowDetail.HasValue) return Option.None<GetMaterialFlowResponse, string>($"No flow found in the WCF service with Id {flowId}");
    var detail = flowDetail.ValueOrFailure();

    var msgToId = meta.ConditionsFields.First(c => c.Name == "MsgTo").ID;
    var msgToOption = detail.Conditions.FirstOrNone(c => c.ConditionFieldID == msgToId).Map(c => c.Value);
    if (!msgToOption.HasValue) return Option.None<GetMaterialFlowResponse, string>("No MsgTo found in flow");
    var msgTo = msgToOption.ValueOrFailure();

    var outputsOption = await new GetFlowOutputFormatsHandler(_messageTypeMetaDataService, _rampService).Handle(msgTo);
    if (!outputsOption.HasValue) return Option.None<GetMaterialFlowResponse, string>($"Could not determine output types for {msgTo}");
    var outputs = outputsOption.ValueOrFailure();

    var conditions = detail
        .Conditions
        .Select(c => new FlowConditionItem((int) c.ConditionFieldID, (int) c.ConditionOperatorID, c.Value))
        .ToArray();
    return Option.Some<GetMaterialFlowResponse, string>(new GetMaterialFlowResponse(detail.Name, conditions, outputs));
}

As mentioned in the beginning, Optional.Async should improve the situation a lot, and is currently the highest prioritized upcoming feature. If you feel adventurous, you might want to look into the current Optional.Async implementation, and borrow a few snippets from there, until the functionality is officially released.
Hope it helps - and feel very free to ask if further clarification is needed.
Have a nice day.
Best regards,
/ Nils

I wanted to chime in on this as I too have had trouble with Option/Async & code bloat. After much trial and error I came up with an alternative class for handling Tasks w/Optional flows.
`
public class TaskOption<T>
{
	private readonly Func<Task<T>> _task;

	public TaskOption(Task<T> task)
		: this(() => task)
	{ }

	public TaskOption(Func<Task<T>> task)
	{
		this._task = task ?? throw new ArgumentNullException(nameof(task));
	}

	public TaskOption<T> Filter(Predicate<T> filterPredicate, Func<T, Exception> exceptionalFunc)
	{
		var filtered = this.Match(
			some: s => filterPredicate(s) ? s : throw exceptionalFunc(s),
			none: n => throw n);

		return TaskOption.Create(filtered);
	}

	public TaskOption<TResult> Map<TResult>(Func<T, TResult> mapping) =>
		this._task().ContinueWith(t => mapping(t.Result));

	public TaskOption<TResult> Map<TResult>(Func<T, Task<TResult>> mapping) =>
		this._task().ContinueWith(t => mapping(t.Result)).Unwrap();

	public Task<TResult> Match<TResult>(Func<T, TResult> some, Func<Exception, TResult> none) => this._task()
		.ContinueWith(t =>
		{
			if (t.IsCanceled)
			{
				return none(new TaskCanceledException(t));
			}

			if (t.IsFaulted)
			{
				return none(t.Exception);
			}

			return some(t.Result);
		});

	#region Await

	public TaskAwaiter<Option<T, Exception>> GetAwaiter()
	{
		var continued = this._task().ContinueWith(t =>
		{
			if (t.IsCanceled)
			{
				return Option.None<T, Exception>(new TaskCanceledException(t));
			}

			if (t.IsFaulted)
			{
				return Option.None<T, Exception>(t.Exception);
			}

			return Option.Some<T, Exception>(t.Result);
		});

		return continued.GetAwaiter();
	}

	public ConfiguredTaskAwaitable<Option<T, Exception>> ConfigureAwait(bool continueOnCapturedContext)
	{
		var continued = this._task().ContinueWith(t => {
			if (t.IsCanceled)
			{
				return Option.None<T, Exception>(new TaskCanceledException(t));
			}

			if (t.IsFaulted)
			{
				return Option.None<T, Exception>(t.Exception);
			}

			return Option.Some<T, Exception>(t.Result);
		});

		return continued.ConfigureAwait(continueOnCapturedContext);
	}

	#endregion

	#region Operators

	public static implicit operator Task<T>(TaskOption<T> option) => option._task();

	public static implicit operator TaskOption<T>(Task<T> task) => new TaskOption<T>(task);

	#endregion
}

`

This....
var externalFlowId = (await
_context.AuthenticFlows
.Where(a => a.Id == id)
.Select(a => a.Id).ToArrayAsync())
.SingleOrNone();
if (!externalFlowId.HasValue) return Option.None<GetMaterialFlowResponse, string>($"No flow found for authentic Id {id}");
var flowId = externalFlowId.ValueOrFailure();
Is refactored to this...
`
var externalFlowId = _context.AuthenticFlows
.Where(a => a.Id == id)
.Select(a => a.Id)
.ToArrayAsync()
.ToTaskOption()
.SingleOrNone(() => new Exception($"No flow found for authentic Id {id}"))
.Map(flowId => _flowWebService.GetMetaDataAsync().ToTaskOption().... rest of method)
`

@rydergillen-compacSort interesting! Do you also have a version with Option<A, B>?
I'm using a lot of railway oriented programming in my code.

Option<A, B> is obtained via the await keyword. Since Tasks can throw an Exception the B type is always hard-coded as Exception
await to return to normal Option<T, Exception> then MapException()
Task<T> task = taskOption; //can be directly assigned to Task<>
Option<T, Exception> option = await taskOption;
Option<T, string> stringErrorOption = option.MapException(ex => ex.Message);
Option<T> emptyErrorOption = option.WithoutException();

Hi,
First things first - it is great to see some discussions on this topic!
Secondly, I just wanted to give an update on the current state of Optional.Async, as it is slowly starting to take shape.
First, let me share a few design decisions:

I wasn't satisfied with the original concept of introducing an AsyncOption class - although this approach had some advantages, I find it more complex and cumbersome than necessary. Instead, I am planning on simply letting Optional.Async be a set of extension methods on Task<Option<T>> (and a few on Option<T> for interop).
The above mentioned extension methods will cover all "transform operations" - that is operations that transform an option into another option. This includes Map, FlatMap, Filter, Or, Else, and a few others.
However, it does not include operations to extract values out of options, such as Match, ValueOr, Contains, etc. Whenever an option needs to be "opened up", simply await the task instead to get the actual option - which is really the "right" thing to do anyway. Optional.Async is about improving composition, which is the real pain point at the moment - re-exposing all operations provide little value in practice, but adds quite a bit of complexity and maintenance overhead.
Where relevant, operations can be configured to either execute on the captured synchronization context or not. By default, the synchronization context is not captured, as this is generally considered the better/safer default.
Option<T> and Option<T, TException> will both be equally supported.
There will be full support for linq query syntax on Task<Option<T>>, e.g.:

return
    from report in TryLoadReportAsync(reportId)
    where report.Date >= reportPeriodStartDate
    from renderedReport in TryRenderReportAsync(report)
    select renderedReport;

However, this comes with a few caveats. First of all, it doesn't offer the flexibility of the full set operations - e.g. optionTask.Filter(...) can take an async predicate, which is not allowed in the Linq query syntax. Similarly, the Linq query syntax doesn't allow enabling/disabling sync context capture. I am yet to make a final decision on this (and would love your input), but currently I'm planning on only providing Linq query syntax for the default case (not capturing the context) - the alternative would be to provide both, in different namespaces, but I am not sure I like this idea.
Current state
The bulk of the functionality has been implemented, with the exception of what is mentioned below.
However, the functionality still needs thorough test coverage - particularly so, due to the many different variations of the new async extension methods, and the complexity related to the sync context capture.
Finally, XML documentation also need to be added before an actual release.
As such, the actual release is still some time away. I might, however, throw out a pre-release some time before everything is completely polished.
What is yet to be decided

Whether or not to provide Linq extensions for the default case only (not capturing sync context) or for both cases (in different namespaces)
Whether or not to provide convenience wrapper methods (and which), e.g. something like:

Task<Option<T>> ToAsync(this Option<T> option);
Task<Option<T>> SomeAsync<T>(this Task<T>);
Task<Option<T>> SomeNotNullAsync<T>(this Task<T>);
Task<Option<T>> SomeWhenAsync<T>(this Task<T>, <predicate/async predicate>);
Task<Option<T>> NoneAsync<T>(this Task<T>);
Task<Option<T>> NoneWhenAsync<T>(this Task<T>, <predicate/async predicate>);

Final remarks
Comments, thoughts, suggestions, etc., are all very welcome. Also, feel free to check out the implementation on the development branch (https://github.com/nlkl/Optional/tree/develop).

Hi @JudahGabriel
Great to get some feedback on this. A few thoughts:
I agree that it is important to support capturing the context. I think the alternate namespace is probably the most plausible option for the Linq extensions - I am not too much of a fan of a global flag, as it is a bit too implicit to my taste (and likely introduces the need for synchronization to keep it thread safe, or at least some strict guidelines as to when to set it). Separate namespaces also make it possible to choose the right implementation in each situation - although this is a rather double edged sword, as it definitely makes it less obvious what is going on (one would need to actually check the namespace).
ASP.NET Core doesn't actually have a synchronization context, so .ConfigureAwait(false) is basically a no-op in this case, and capturing/ignoring the context should make no difference. I have been using .ConfigureAwait(false) on ASP.NET Core projects for some time now, and had no problems (and similarly for the opposite situation). For classical ASP.NET, Winforms, WPF, and so forth, it is of course still relevant.
Any thoughts on this being made into a set of extension methods, instead of an actual AsyncOption<T>?
/ Nils

Sync context: hmmm, that's strange. I had some ASP.NET Core code that talked to a database asynchronously. Using optional + old Optional.Async code didn't work...until I .ConfigureAwait(false). (Or maybe I'm remembering classical ASP.NET? Hrmmm.)
I'll have to retest that. If indeed sync contexts aren't needed, this becomes less of an issue for me; virtually all my web projects are now AspNetCore.
Extension methods: yeah, I like that. I think it would reduce some redundancy on your part. Maybe it would ease composition as well? I'd really have to try it out to say.

p.s. One other feedback item:
I have been bitten by this on more than one occasion:
// Prints true!
Option.Some("hello").Map(h => default(string)).HasValue

Basically, propagating a null inside an Optional -- a weird statement that, IMO, undermines the primary purpose of the library -- leads to runtime surprises. I often find myself littering my optional clauses with .NotNull() out of paranoia. I know it's been discussed before, but I thought I'd reiterate this pain point now that we're on 4.0.

@nlkl Would it be possible to a get NuGet package with the current async extensions from the develop branch?

Any update on releasing async extensions in nuget package?

Just wanted to let you know, that I packaged a pre-release version of the Optional.Async package, and am ready to upload it.
However, in the meanwhile, the Optional.Async package name has been taken, which prevents me from doing it right now. I have contacted the package owner, and hopefully we will figure something out.
I will keep you posted once I know more.

Any news here?

Hi everyone,
Partially due to the above, and partially because async is as widely used as it is, I have decided not to release a separate Optional.Async package.
Instead, the async extensions will be part of Optional itself going forwards (although excluded from the .NET 3.5 version), starting from version 5.0.0.
As such, I have decided to release an alpha version of Optional 5.0.0, which contains the following new features:

Async extensions
Option<T> and Option<T, Exception> are now readonly structs
A few extra overloads of SomeWhen and NoneWhen (https://github.com/nlkl/Optional/pull/58)

Let me know what you think.
Best regards,
Nils

Perfect!
I've updated the Optional.Async package, noting that it's deprecated.

I just tried migrating some of our services to using Optional 5.0, but ran into the following missing extensions:
SomeWhenAsync<T>
SomeWhenAsync<T, TException>

SomeNotNullAsync<T>
SomeNotNullAsync<T, TException>

We also use FilterAsync<T, TException>, which is basically WithException + Filter. What are your thoughts on adding that?

I Would like to see a release 🤩

Any word on when v5 is going to be released?

Would also be interested in the status of a potential v5 release. Can you share some insights @nlkl?


Add support for Alpine Linux 3.16; drop end-of-life branches

The latest release of Czkawka depends on Rust 1.60+, which is only available in Alpine Linux 3.16. (Older releases of Czkawka have been packaged with jlesage/docker-czkawka.)
Also please note that Alpine Linux 3.10, 3.11, and 3.12, which all have configuration files in this repository, have now reached end-of-life.
Both comments above also apply to jlesage/docker-baseimage-gui.
Thank you!

This is done in version 3.0.0 of the image.  baseimage-gui will follow soon :)


Add (re)active and apperent power to FormulaEngine

What's needed?
At the moment when calling a high level power function we always return the active component of the power. We also want to be able to use the logical meter high level interface to read the other power components power.
Proposed solution
My suggested solution would be to add an optional parameter to the interface.
grid = microgrid.grid(power_component = ComponentMetricId.REACTIVE_POWER)

and add this as a parameter to the formula generator.
Use cases
No response
Alternatives and workarounds
No response
Additional context
No response

Do we only need reactive power or do we need apparent power also?  And do we need it just for the grid?
I think it has to be a separate function microgrid.grid().reactive_power, because that has a different unit(VAR) and needs a different Quantity type.  Same for apparent_power, which is (VA).

Also does it have to be per-phase or single 3-phase values?  did you have a usecase in mind for adding these, because that might tell us what the data should look like.

@shsms This ticket has been created based on a usecase which doesnt really need the SDK and can be solved using the Reporting API or the Microgrid API.
However, for the future it could be useful to also read out all the meter and inverter values via the FormulaEngine. But currently there is no priority for it.

First we need to support these metrics here -> https://github.com/frequenz-floss/frequenz-client-microgrid-python/blob/v0.x.x/src/frequenz/
client/microgrid/_component.py


Flutter: CALLS SCREEN for Whatsapp clone

Description
Create a chat screen for WhatsApp clone
The screen where we have all the calls from all people.
Reference: #6573
NOTE: USE models for data, don't add hardcoded data, by yourself. Hardcoded data will be present in the models folder, inside classes, and list, Use that only
Domain
Android Dev (Flutter)
Type of Contribution
Others
Code of Conduct

[X] I follow Contributing Guidelines & Code of conduct of this project.

@Gagarod Please pull the latest changes, as some images were not correct in models.

@ViAsmit Can I make a few changes in the Call Model?

Yep... you can

@ViAsmit  I have made the PR. Please check if everything is good to go.


Building problems

By the way, how to build this thing, please give me a tutorial, thank you?

Its a website.
https://neeeoo.github.io/funkin-packer/
But if you want to make a pr or a feature then check out package.json


Update pdftoimage.rb to fix "Error determining page count"

Hello.
This update fix error with some PDF files. In old version Grep fails with " Binary file (standard input) matches"
https://github.com/robflynn/pdftoimage/issues/6

Thank you for the PR!


Files can now be included from other places than source/includes.

Take 2. ;)
Not sure if this is within the scope of Shins, but feel free to use it if you want!
This PR let's a user include files from other places than source/includes if the included file begins with a slash /. The files are included relative to the root shins path and doesn't have to begin with an underscore.
So it's now possible to include file-a.md, file-b.md and file-c.md from shins/myfolder like this;
---
title: MyAPI v1.0.0
includes:
  - /myfolder/file-a
  - /myfolder/file-b
  - /myfolder/file-c
---

If you use widdershins; --includes '/myfolder/file-a,/myfolder/file-b,/myfolder/file-c'.

No trouble, thanks for taking the time.

LGTM. I'm just thinking we may want to document this somewhere. Because I'm likely to want to build on this with #42 maybe creating a docs/include.md and referencing that from the README would be the best approach. Let me know if you have time, or I can add it.

No problem, I'll add a docs/include.md to my branch later today and include the description of the PR. Then you can do some more edits to it if you wish.

Thanks, that's great.

Done! Please edit them some more if you wish!

Fab, thanks again!

Included in<EMAIL_ADDRESS>

I think the former (__dirname) option would be the most expected, thanks.


Components don't render into built posts

I'm not currently able to render Svelte components inside of the posts that are pre-rendered at the build stage.
The postContent is compiled via an {@html data.postContent} tag, which seems to ignore the script and style tags and simply output the html.  Or maybe not quite that, but the end result is that the component isn't functional inside of these post pages, just displayed.
Here is my repo showing this:
https://github.com/lakebayagency/test-boinger
Boinger is a component from the mdsvex playground: https://mdsvex.com/playground
To see the problem in action, go to the home page and observe that the boinger works fine inside of this page, which is rendered using a svelte:component tag.
Click the link below that, which will take you to a post that also references the Boinger component, but doesn't actually work.
Not sure what possible solutions are.

@lakebayagency I was able to solve this issue by:

Changing src/routes/blog/[post]/+page.server.js to just src/routes/blog/[post]/+page.js (i.e,. removing .server from the file name); and
Altering how the file exports the component and passes it through the data prop to mirror the homepage more closely. (+page.js passes post.default, without calling the render method. Then +page.svelte renders it as a <svelte:component>.

It seems +page.server.js files are not capable of passing components. I must not have realized it because I never had interactive components on the blog pages.
I don't have time at the moment to open a PR to see about fixing the issue on the base repo but I hope that helps.

Awesome! Works great! 👍🏾💪🏾🏆


feat(edgeagent): adds support for connectionless issuance and presentation

Description:
This PR adds connectionless issuance and replaces the PR since it is already with new refactoring so it adds connectionless issuance and presentation.
Checklist:

[x] My PR follows the contribution guidelines of this project
[x] My PR is free of third-party dependencies that don't comply with the Allowlist
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation
[x] I have added tests that prove my fix is effective or that my feature works
[x] I have checked the PR title to follow the conventional commit specification

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

70 of 134 (52.24%)  changed or added relevant lines in 19 files are covered.
2 unchanged lines in 2 files lost coverage.
Overall coverage increased (+1.9%) to 42.693%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

EdgeAgentSDK/EdgeAgent/Sources/Protocols/Invitation/V2/OutOfBandInvitation.swift
0
1
0.0%

EdgeAgentSDK/EdgeAgent/Sources/Protocols/Pickup/PickupRunner.swift
0
1
0.0%

EdgeAgentSDK/Pollux/Sources/Models/AnonCreds/AnoncredsCredentialStack+ProvableCredential.swift
0
1
0.0%

EdgeAgentSDK/Pollux/Sources/Models/SDJWT/SDJWT+ProvableCredential.swift
1
2
50.0%

EdgeAgentSDK/Castor/Sources/Resolvers/PeerDIDResolver.swift
4
6
66.67%

EdgeAgentSDK/Domain/Sources/Models/MessageAttachment.swift
0
2
0.0%

EdgeAgentSDK/Mercury/Sources/Helpers/DIDCommMessage+DomainParse.swift
0
2
0.0%

EdgeAgentSDK/Pollux/Sources/Models/JWT/JWTCredential+ProofableCredential.swift
1
3
33.33%

EdgeAgentSDK/EdgeAgent/Sources/DIDCommAgent/DIDCommAgent+Credentials.swift
0
3
0.0%

EdgeAgentSDK/Pollux/Sources/PolluxImpl+CredentialVerification.swift
0
3
0.0%

Files with Coverage Reduction
New Missed Lines
%

EdgeAgentSDK/Domain/Sources/Models/MessageAttachment.swift
1
56.67%

EdgeAgentSDK/EdgeAgent/Sources/Protocols/Invitation/V2/OutOfBandInvitation.swift
1
14.29%

Totals

Change from base Build<PHONE_NUMBER>0:
1.9%

Covered Lines:
5469

Relevant Lines:
12810

💛  - Coveralls