Incorrect AzureWebJobsStorage__accountName example for Identity Based connections

This table

Option
Suggested value
Description

Name
AzureWebJobsStorage__accountName
Update the name from AzureWebJobsStorage to the exact name AzureWebJobsStorage__accountName. This setting tells the host to use the identity instead of looking for a stored secret. The new setting uses a double underscore (__), which is a special character in application settings.

Value
Your account name
Update the name from the connection string to just your StorageAccountName.

Suggests that when you have storage account "myStorageAccount" the value of AzureWebJobsStorage__accountName should be myStorageAccount. I noticed that this does not work. What does work is the value AccountName=myStorageAccount. So it has to be prefixed with AccountName=.

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

ID: 0f821505-196d-9b84-e407-47cc461bfd57
Version Independent ID: 6f50473f-a345-b9d1-2d66-7181ebb7232a
Content: Create a function app without default storage secrets in its definition - Azure Functions
Content Source: articles/azure-functions/functions-identity-based-connections-tutorial.md
Service: azure-functions
GitHub Login: @ggailey777
Microsoft Alias: glenga

Thank you for your feedback! We have assigned this issue to the author to review further and take the next course of action.

I'm closing the issue as I have found out I missed configuration. The documentation was correct.
I had an Azure Function with a Timer Trigger and a Queue trigger.
For functions other than TimerTrigger you can often configure the Connection to point to specific settings.
For timer trigger you cannot and I think it falls back on AzureWebJobsStorage as the connection.
e.g. other functions
        [Function("ExampleTrigger")]
        public void Run([QueueTrigger("create", Connection = "queueconnection")] MyType myQueueItem)
        {
            _logger.LogWarning($"Processing item: {myQueueItem.Id}");
        }

timer does not have the Connection property.
I only had the following settings for using a Queue Trigger and a Timer:

Setting
Value

AzureWebJobsStorage__accountName
myStorageAccount

queueconnection__queueServiceUri
<queue URI here>

queueconnection__clientId
xxx-xxxx-xxxx-xxxx

queueconnection__credential
managedidentity

While I also needed specific settings for the timer because it uses AzureWebJobsStorage. This connection is used for accessing storage by the timer.
(and possibly some extra role assignments with scope of myStorageAccount on the managed identity because Timer uses Blobs):

Setting
Value

AzureWebJobsStorage__accountName
myStorageAccount

AzureWebJobsStorage__clientId
xxx-xxxx-xxxx-xxxx

AzureWebJobsStorage__credential
managedidentity

queueconnection__queueServiceUri
<queue URI here>

queueconnection__clientId
xxx-xxxx-xxxx-xxxx

queueconnection__credential
managedidentity

Where did you get information about additional parameters for system assigned identities AzureWebJobsStorage__clientId? I was unable to find it in documentation and accidentally stumbled upon this issue.

@artisticcheese
https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference?tabs=blob#configure-an-identity-based-connection
https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/azure-functions/functions-reference.md
under
Common properties for identity-based connections
An identity-based connection for an Azure service accepts the following common properties, where <CONNECTION_NAME_PREFIX> is the value of your connection property in the trigger or binding definition:

Property
Environment variable template
Description

Token Credential
<CONNECTION_NAME_PREFIX>__credential
Defines how a token should be obtained for the connection. Recommended only when specifying a user-assigned identity, when it should be set to "managedidentity". This is only valid when hosted in the Azure Functions service.

Client ID
<CONNECTION_NAME_PREFIX>__clientId
When credential is set to "managedidentity", this property specifies the user-assigned identity to be used when obtaining a token. The property accepts a client ID corresponding to a user-assigned identity assigned to the application. If not specified, the system-assigned identity will be used. This property is used differently in local development scenarios, when credential should not be set.

Additional options may be supported for a given connection type. Please refer to the documentation for the component making the connection.


cmd/compile: principled line numbering

Currently, cmd/compile assigns line numbers somewhat ad-hocly based on whatever the global lineno value happens to be set at when it calls Nod.  With the new parser, @griesemer and I want to do a better job at this.  I think this will be especially useful if/once we start tracking/reporting column information; e.g., in error messages for #10324, or in export data for something like golang.org/cl/22936.
I want to propose two simple rules:

Objects are associated with the identifier used to declare them; e.g., in var x int = 3, we associate the newly declared int variable with the position of the x identifier.
Non-terminal grammar rules are associated with a terminal token uniquely associated with that rule, generally the first.  For example, a binary expression x + y is associated with the + token, not x or y.  This ensures that compound expressions like x + y + z are unambiguous (at least when column position is available).

Contrived example:
var
a,
b int =
1,
f() +
2

Implications:

The variables a and b are associated with the line numbers their respective identifiers.
Instructions to zero-initialize a and b would be associated with the var keyword (though in practice I expect they'd be optimized away).
The add instruction for adding 2 and 3 would be associated with the + token.
The call to f() is associated with the ( token.
Assigning the values to a and b would be associated with the = token.

As a near-term plan I'm trying to match the old behavior as much as possible to ease transition, and I'm now to the point where go build -a -toolexec='toolstash -cmp' std cmd passes with enabling the new parser.  I can continue matching more obscure line number behaviors, but unless people think line numbering compatibility is really important, I don't think it's worthwhile.  I'd rather focus on making sure performance is acceptable so we can switch over and continue cleaning up the compiler.
/cc @griesemer @ianlancetaylor @alandonovan

For what it's worth, your two rules are exactly what I do in gccgo (which does have column information).

SGTM. Line numbers have never been sacrosanct; preserving the quirks of existing behavior is not a priority. Matching gccgo would be a nice bonus.
I'm curious how well the SSA handling of line numbers preserves your rules.
One small data point I'd like to see is binary size before/after. The pclntab is the single largest component of binaries, and its size is tied directly to line-numbering decisions in the compiler. I don't expect much change, but it'd be good to keep an eye on it.

For what it's worth, your two rules are exactly what I do in gccgo (which does have column information).

Cool.

I'm curious how well the SSA handling of line numbers preserves your rules.

I am too.  At least optimizations are inherently lossy about source information like line numbers, and users seem to understand/appreciate that.
Also, since the current line numbering is often so ad hoc, I don't think there's any particular rush to implement/guarantee these rules.  My goal with this issue is more to agree on a long-term ideal to strive towards.

One small data point I'd like to see is binary size before/after. The pclntab is the single largest component of binaries, and its size is tied directly to line-numbering decisions in the compiler. I don't expect much change, but it'd be good to keep an eye on it.

Ack, I don't expect much change either, but I'll keep an eye out.

Something to consider in optimizer-land might be to notice which instruction "commits" a line, and then arrange that all the preceding instructions match it, up to the previous commit.  This fails for lines with more than one store, but such is life -- plenty of lines become visible with a single store.  Single-stepping in a debugger will be slightly less confusing.

I was also thinking about ways to do a more concise job of recording line
number information.  SSA gives line numbers to all instructions and they
get recorded faithfully in runtime data structures.  In reality, many of
those line numbers don't really correspond to a source operation, like
spills and restores.  We could choose line numbers for those within some
acceptable range (anywhere between def and use, say).  That flexibility
lets us choose the line numbers so that the runtime data structure encodes
more compactly.
Maybe a simple first step is to not specify line numbers for some SSA ops
that don't have an obvious correspondence to source ops.  Then do a pass at
the end that assigns those ops a line numbers equal to the line number of
the nearest line-number-specified instruction.
On Fri, Sep 2, 2016 at 7:55 AM, dr2chase<EMAIL_ADDRESS>wrote:

Something to consider in optimizer-land might be to notice which
instruction "commits" a line, and then arrange that all the preceding
instructions match it, up to the previous commit. This fails for lines with
more than one store, but such is life -- plenty of lines become visible
with a single store. Single-stepping in a debugger will be slightly less
confusing.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/golang/go/issues/16943#issuecomment-244397914, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AGkgIMPbjo8vBaF473p4FPBeNpaacPIKks5qmDjbgaJpZM4JyJl9
.

On 2 September 2016 at 11:25, Keith Randall<EMAIL_ADDRESS>wrote:

Maybe a simple first step is to not specify line numbers for some SSA ops
that don't have an obvious correspondence to source ops. Then do a pass at
the end that assigns those ops a line numbers equal to the line number of
the nearest line-number-specified instruction.

I think that's a good approach.  There is no perfect answer for many
instructions, even for the high-level representation in
golang.org/x/tools/go/ssa, and the compiler's low-level SSA with
optimizations will have even more operations that aren't exactly associated
with a given piece of syntax.  Control flow branches in particular are hard
to correlate with syntax.  Using the correct answer when you have it and
the "nearest" answer when you don't will result in smaller line number
tables if they use any kind of run-length encoding.


Amazing Project/Is it ok to use as an alpha

Multihack is an amazing project !!!!
Is the master branch ok as an alpha....I m part of a team of developers that would like to install and begin using
Thanks for all of the amazing Magic !!!

Sure, it's released under the MIT license, so you can use it as you wish within that. Enjoy!
Thanks for trying it out! Always appreciate any future feedback.


Broken Link

The link to the OpenSSF charter is broken, can someone take a look?

Hi @kaywilliams- I updated the link with the new charter - can you try again and let me know if it works? Thanks!

It works – thank you!
From: LindsayLF<EMAIL_ADDRESS>Sent: Friday, September 18, 2020 2:28 PM
To: ossf/foundation<EMAIL_ADDRESS>Cc: Kay Williams<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [ossf/foundation] Broken Link (#5)
Hi @kaywilliams- I updated the link with the new charter - can you try again and let me know if it works? Thanks!
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fossf%2Ffoundation%2Fissues%2F5%23issuecomment-695070391&data=02|01|kayw%40microsoft.com|f4d82d3e48b449ed2b8008d85c115085|72f988bf86f141af91ab2d7cd011db47|1|0|637360577434282469&sdata=TzeZ2ulbegFmJOBkCcbPgqTc4Rg1%2F%2Bri7dBDXaXWXXQ%3D&reserved=0, or unsubscribehttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAB3QCOEXTR2DB2TX3BQQGALSGO7ENANCNFSM4RSPHEEQ&data=02|01|kayw%40microsoft.com|f4d82d3e48b449ed2b8008d85c115085|72f988bf86f141af91ab2d7cd011db47|1|0|637360577434287455&sdata=zH%2F2AirUcwg%2BLSUzxB3Bwd6aQL0V6q6rJ5If8nwbsCk%3D&reserved=0.

This has been resolved.


Implement ci4 softDelete compatibility

if i've a model with softDelete enabled, the query not skipts this items automatically.
https://codeigniter.com/user_guide/models/model.html#usesoftdeletes

i dont know this is correct answer. but i change of code on construction function inside Datatables.php like this
public function __construct($builder)
{
    if (is_subclass_of($builder, '\CodeIgniter\BaseModel') && method_exists($builder, 'builder')) {
        if ($builder->tempUseSoftDeletes) {
            $builder->where($builder->table . '.' . $builder->deletedField, null);
        }
        $builder = $builder->builder();
    }
    $this->query      = new DataTableQuery($builder);
    $this->columnDefs = new DataTableColumnDefs($builder);
}


Fix TileSet not detecting almost zero alpha tiles

Fixes #57680

Sorry for the late review.
I believe this implementation overcomplicates things a bit too much. Couldn't we, instead, simply add an optional argument to is_pixel_opaque to provide a custom threshold ? TBH, I don't thing the problem in the original issue is bad enough to deserve that much additional code.

@groud See #63231

Hmm, then I believe we should not add that much code just to fix the original issue. The automatic detection of tiles might then have some errors but they can easily be fixed manually.
Also, I don't think that the original problem is common anyway. Basically it only happens when ALL pixels on a tile have super low alpha level, which seems to be only possible with a test texture (such as the one provided in the related issue).
I think I would simply mark this as a "wont fix" (maybe the documentation should be reworked consequently though).

I think this is a valid issue, 10% seems pretty steep. What do we think about the solution now @KoBeWi @groud ?


Sticky widgets move by 1px horizontally when they start sticking

Demo:
https://user-images.githubusercontent.com/4405627/204560221-a5368508-7cd8-43ee-b800-913a977be0fa.mov
Maybe this is done on purpose, in which case feel free to close this issue, but I believe that it looks smoother without any movement.
It is caused by this line:
https://github.com/microsoft/vscode/blob/e59d1e21887d2c5f96e542e9ccc0bf1273f5593e/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts#L301

/duplicate of https://github.com/microsoft/vscode/issues/165698

Thanks for creating this issue! We figured it's covering the same as another one we already have. Thus, we closed this one as a duplicate. You can search for similar existing issues. See also our issue reporting guidelines.
Happy Coding!


The tile size should be configurable.

It currently is limited to 256, which is a reasonable default, but any power of two square should be reasonable. (Instances of 8 in the code probably refer to Math.log2(tileSize).) In theory any width and height would also be possible but I think that generalization would make the code more complicated than necessary for now.

It would be great if we can find some examples of tile providers that are not 256 X 256 for testing against.
I came across this section of the OpenStreetMap docs:

Map tiles are typically 256×256 pixel images. ... Tiles are not always in these dimensions; for example there could be 64×64 pixel images for mobile use, however 256×256 pixel images are a de facto standard. 515×512 pixel seems to be the usual size of high-resolution tiles.

There's also an interesting page on "meta-tiles", which could be 2048x2048.
After some searching I have not found an actual tile provider that yields other than 256×256 tiles. Will post again here if I find one.

Mapzen's API serves up 512x512 tiles:
https://mapzen.com/documentation/vector-tiles/use-service/#specify-tile-size
I'll take a stab at implementing configurable tile sizes (keeping default as 256).


Made the getByteLengthFunction use MVVM pattern in a more MVVM way.

Transformation methods and objects should only be accessed by the transformers. The surfaces should only be able to handle view objects.

Current coverage is 78.13% (diff: 100%)

Merging #519 into master will increase coverage by 0.03%

@@             master       #519   diff @@
==========================================
  Files           237        237
  Lines          8689       8679    -10
  Methods           0          0
  Messages          0          0
  Branches       1163       1160     -3
==========================================
- Hits           6786       6781     -5
+ Misses         1589       1586     -3
+ Partials        314        312     -2

Powered by Codecov. Last update 7f13f8c...cf191d5

Let me look into this later tonight. I might make a separate view for this
since its pretty inefficient create a whole api method view for a single
name.
On Mon, Sep 26, 2016 at 5:32 PM Jun Mukai<EMAIL_ADDRESS>wrote:

@jmuk commented on this pull request.
Thanks for doing this!
In src/main/java/com/google/api/codegen/nodejs/NodeJSGapicContext.java
https://github.com/googleapis/toolkit/pull/519#pullrequestreview-1650073
:

@@ -498,7 +484,7 @@ public String getByteLengthFunction(Interface service, Method method, TypeRef ty
switch (typeRef.getKind()) {
case TYPE_MESSAGE:
return "gax.createByteLengthFunction(grpcClients."

       + getStubNameFor(service, method)

       + getApiMethodView(service, method).stubName()

This was a typo -- it turned out to be grpcClientVariableName(). Are
there good name for that?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/googleapis/toolkit/pull/519#pullrequestreview-1650073,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AILNWzQMDBhhOMj83D7AhzSbAkrbDOD3ks5quGQWgaJpZM4KHInP
.

PTAL. Fixed to use grpcClientVariableName.

LGTM


docs: Update the example healthcheck config

The configuration example for health checks now matches match the default configuration used by the cloud-sql-proxy-operator.
Fixes #1943

Fixed.


App tries to write in /data/local/tmp

App tries to write in /data/local/tmp, but that's not permitted in higher API levels. We need to find another way to work with vscode extension.
problem
Higher API level Android emulators and devices allow applications to read from /data/local/tmp, but not to write. Problem with that is the vs_code_extension coode in RuntimeHelper.java, which tries to write to /data/local/tmp, but can't.
solution
one possible solution is using sockets, just like we do with livesync. This will allow the runtime to communicate the information to CLI. CLI has the permissions to write in /data/local/tmp.

@Plamen5kov the same case applies to the debug-brk flag we use.


Support RTTM files for CHiME-6

I will merge this, when the jenkins test was successfully.

I updated now the README and the Jenkins run was successful -> Merge


The add-on icon does not appear in the Google Sheets UI

This is a known bug reported in the Google IssueTracker. I've added the wontfix label to this issue since this is likely to be a problem on the platform level and cannot be fixed by tinkering with the add-on's script. Any new developments regarding this issue will be reported here.

Google Workspace Add-ons don't work on Sheets, Docs and Slides - Google IssueTracker

If you are experiencing this issue, please follow the above link and star the report to give it a higher priority for the Google team!

Latest update from the Google team: The estimated time for a complete fix to be rolled out is the end of May.


chore(deps): upgrade compiler dependencies

Upgrades project dependencies. See details in workflow run.

Automatically created by projen via the "upgrade-compiler-dependencies-k8s-26-main" workflow

⚪ Backport skipped
The pull request was not backported as there were no branches to backport to. If this is a mistake, please apply the desired version labels or run the backport tool manually.
Manual backport
To create the backport manually run:
backport --pr 3566

Questions ?
Please refer to the Backport tool documentation


Upgrade Lambda Templates to Node 18

Resolves https://github.com/seek-oss/skuba/issues/1019

https://github.com/m-radzikowski/aws-sdk-client-mock/issues/130 is making me sad


Give this tool a better name

Name ideas:

node-project-tasks
node-project-helper-cli / nodeph / nph

Related https://github.com/simonplend/bootstrap/issues/14.

Renamed to node-project-helper-cli (nph).


Change branch name from master to main.

The word main is more inclusive than master. Master refers to slavery and makes some people feel lesser. Changing the branch name is a small but important gesture.

Github already did that globally for new projects, and we plan on changing the master repo name to main soon in all our dotnet repos. Thank you for the reminder.


iOS 9 App Transport Security server settings

Any suggestions for the settings to allow Mixpanel to support ATS? I simply whitelisted mixpanel.com.

In my testing with the beta it worked with no changes. Are you getting an
exception? Console output would be helpful.
On Mon, Sep 14, 2015 at 8:53 AM Ryan Jones<EMAIL_ADDRESS>wrote:

Any suggestions for the settings to allow Mixpanel to support ATS? I
simply whitelisted mixpanel.com.
—
Reply to this email directly or view it on GitHub
https://github.com/mixpanel/mixpanel-iphone/issues/341.

I turned it off, looks like you are correct. Just double checking before submission :point_up: Thanks!

No problem. Happy to help!


⚠ Bofrost.es has degraded performance

In b222958, Bofrost.es (https://www.bofrost.es) experienced degraded performance:

HTTP code: 200
Response time: 1714 ms

Resolved: Bofrost.es performance has improved in 6b1ecec after 18 minutes.


feat: change default accessMode to ReadWriteOncePod

This is a breaking change in the sense an existing STS can't be updated, so users need to either add an accessMode override to keep as is (assuming they were using the default ReadWriteOnce), or go through the hoops to recreate their STS themselves

Summary by CodeRabbit
Release Notes

New Features

Incremented chart versions for multiple components, indicating new releases.

Configuration Changes

Updated accessModes from ["ReadWriteOnce"] to ["ReadWriteOncePod"] across various charts, enhancing volume access capabilities for pods.

Documentation Updates

Version updates reflected in README files for all affected charts, ensuring users are aware of the latest changes and configurations.

Putting this on-hold until we sort out the issue encountered with ReadWriteOncePod and initial volume permissions


Update index.js

unzip2 actually emits close when completed. When unzipping a large file, using finish will cause this plugin to run prematurely

This should definitely be merged.

This PR is required for this to work with any bundle of a certain size.
The finish event can be called prematurely. Changing it to close fix the issue: https://github.com/serverless/serverless-babel-plugin/pull/9/files#diff-168726dbe96b3ce427e7fedce31bb0bcR48


How do you import plugins as a module?

I'm able to successfully import wavesurfer but I can't figure out how to import the regions plugin as well.

See https://github.com/katspaugh/wavesurfer.js/blob/master/src/plugin/regions.js#L635


Update scrapers to python 3

Need to make sure code still runs and requirements can all run on python 3.
This should be worked on after #122

caniusepython3 says the dependencies are fine.


Does Refills depend on Rails? Would like to use it with NPM, Webpack, and React.

@AustinWinstanley Hi! No, it does not directly depend on Rails; only Bourbon, Neat and Sass. That being said, Refills is available as a Ruby gem with a Rails generator which makes it very easy to place components within a Rails app. The slightly less straightforward way to install Refills components is to copy-paste from the website. At this time, we are not focused on installation or features around npm, webpack or React.


Impossible tests - on Windows (3.11 and 0.4.0)

As far as I can see, this must always fail? I am loath to try and solve this since I probably don't understand the original purpose.
If the code below fails (as it does on Windows at least), then some subsequent tests are not run - in the present master. But because of the try-catch statement, this may instead seem like a try at forcing test success? But that makes no sense?
runtests.jl:17
@windows_only gunzip="gunzip.exe"
@unix_only    gunzip="gunzip"
test_gunzip = true
 try
     run(`which $gunzip` |> DevNull)
 catch
     test_gunzip = false
 end

Out-of context test on Windows:
julia> run(pipeline(`which gunzip.exe`, DevNull))
ERROR: could not spawn `which gunzip.exe`: no such file or directory (ENOENT)
 in _jl_spawn at process.jl:262

A reasonable purpose here at the start might be to check if gunzip is present and and runnable on the system. But simply running it without command line arguments (like simply -h) would return an error:
julia> run(`gunzip.exe`)
(....)ERROR: failed process: Process(`gunzip.exe`, ProcessExited(1)) [1]
 in run at process.jl:531

Would this work on unix_only too?
@windows_only run(pipeline(`gunzip.exe -h`, DevNull))
@unix_only         run(pipeline(`gunzip.exe -h`, DevNull))

The travis.yml file excludes testing on Windows. It takes a while to discover these things.
Non-tested code here may affect, for example, users of packages
Codecs
WinRPM
ZipFile
ZLib
Gadfly
ZMQ
Nettle
HDF5
TestImages
...and the list goes on. This package really ought to work and be tested on Windows I think.

Hi @hustf, thanks for your interest in this package. Recently, LibZ.jl was released, which is meant to replace both GZip.jl and Zlib.jl. As that package gets more traction, it's likely that both of these latter packages will be deprecated. I encourage you to check out LibZ.jl and see if it fits your needs.

Oh, good, because this was getting pretty difficult:
ccall(:dup, Int32, (Int32,) fd) on GZip.jl:278
gives
could not load symbol "dup" on Windows, not on Mac.
I´ll make a pull request on what I have, though it´s a dead end.

That´s done. Pull request #41. The updated travis would make Windows tests fail.

@simonster made the comment in #41 that Windows isn't supported on Travis.  A little googling suggests that Windows support is actually moving forward there, but until it becomes fully supported and common, the Julia community has settled on Appveyor as the Windows solution for testing.
So, @hustf, if you wanted, this issue could be retitled to add Appveyor support.  (Notably, Libz.jl doesn't have appveyor support either.

Thanks for the patience, @simonster and @kmsquire. #41 shouldn't, of course, be pulled in as it is.  In my repo, 16 out of 64 packages have Appveyor.yml so far.
The Compat package seems to be an exemplary template. Output here: https://ci.appveyor.com/project/quinnj/compat-jl/branch/master


Update local backstop version

Local backstop versions were out of date with the package version. Also adds a dependabot config to keep this up to date in future.

Only thing to bare in mind with this is that @simonwgill looked into this recently, something about dockerfiles. Not sure if same thing.

FWIW the docker files are already running v5

Ideally though I'd get rid of this and only use the docker image as that's always how we run it

It's in bin/docker/visual_regression and bin/docker/rebuild_vr_references - those scripts will select the backstopjs version referenced by the root package.json for that run. If the environment variable isn't set, it'll just use latest instead.

Interesting the root package.json doesn't reference backstop at all. Can we get rid of this nested version and pin the docker version to v5? Or latest?

Interesting the root package.json doesn't reference backstop at all. Can we get rid of this nested version and pin the docker version to v5? Or latest?

So, what I didn't realise was happening was that npm view $package version gets the version from the global index. Technically it will always be the latest version getting downloaded by docker-compose then.
I wouldn't pin it to latest (despite my having accidentally done so) because there is a chance of tests just randomly starting to fail for no good reason.

Ah yeah I missed that. npm view looks up a package from the registry. Does tagging it to the latest released version in one place work e.g. backstopjs/backstopjs:5.0.6?

Yeah, if you take out the BACKSTOPJS_VERSION stuff which is completely useless, you can just use the version pin in the docker-compose file. Unless there's a sensible way of getting the version from the lock file?
Pinning in docker-compose would mean that we have to make a config change for every patch version update we wanted unfortunately. There's no major or major.minor tags on the backstopjs image repo.

Pinning in docker-compose would mean that we have to make a config change for every patch version update we wanted unfortunately. There's no major or major.minor tags on the backstopjs image repo.

I think that is fine for this case as backstop release cadence is fairly slow. Plus if we get dependabot updating the package file at least that's a signal when it updates (unless there is a way for dependabot to update Docker file too?)

Updated this now

Pinning in docker-compose would mean that we have to make a config change for every patch version update we wanted unfortunately. There's no major or major.minor tags on the backstopjs image repo.

I think that is fine for this case as backstop release cadence is fairly slow. Plus if we get dependabot updating the package file at least that's a signal when it updates (unless there is a way for dependabot to update Docker file too?)

Not sure I understand your meaning of "plus" here, David. If we don't reference backstopjs in the package.json then I can't see how dependabot will fire for it? If there's a way to get it to update docker tags in a docker-compose file though, that would work out well.

We do, see testing/package.json and the new dependabot config I added.

Ahhh, gotcha.
So... this command works correctly to determine the backstopjs out of the package-lock in /testing/ npm list backstopjs --depth=0 2>/dev/null | grep -i "backstopjs@" | grep -oEi "\d\.\d\.\d". It'll work whether or not the module is installed as well.

Going to come back to this as we need to review with Simons change and this isn't essential at the mo


Should the 'gate' be a vector or a scalar?

I refered to the section 4.2.1 in the paper which says 'the soft attention model predicts a gating scalar beta'. However, the 'gate' in this code is a vector with dimension of encoder_dim. Should the f_beta layer in the model be like : nn.Linear(decoder_dim,1)  instead of nn.Linear(decoder_dim,encoder_dim)?

我觉得你是对的


Build error - undefined reference to _exit

Executing pio run -v -e genericCH32V203C8T6 -t upload results in the following error:
Processing genericCH32V203C8T6 (board: genericCH32V203C8T6; upload_protocol: wch-link; platform_packages<EMAIL_ADDRESS>platform: ch32v; framework: ch32v003fun; monitor_speed: 115200)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONFIGURATION: https://docs.platformio.org/page/boards/ch32v/genericCH32V203C8T6.html
PLATFORM: WCH CH32V (1.1.0+sha.b7397c2) (git+https://github.com/Community-PIO-CH32V/platform-ch32v.git) > Generic CH32V203C8T6
HARDWARE: CH32V203C8T6 144MHz, 20KB RAM, 64KB Flash
DEBUG: Current (wch-link) On-board (wch-link) External (minichlink)
PACKAGES:
 - framework-ch32v003fun @ 0.0.0+sha.31a231f (git+https://github.com/Community-PIO-CH32V/ch32v003fun.git)
 - tool-minichlink @ 0.1.0+sha.af02ba5 (git+https://github.com/Community-PIO-CH32V/tool-minichlink.git)
 - tool-openocd-riscv-wch @ 2.1100.240729+sha.0986a46 (git+https://github.com/Community-PIO-CH32V/tool-openocd-riscv-wch.git#main)
 - tool-wchisp @ 0.23.240914
 - tool-wlink @ 0.22.240627+sha.030572c (git+https://github.com/Community-PIO-CH32V/tool-wlink.git#windows)
 - toolchain-riscv @ 1.80200.190731+sha.8ee4117 (git+https://github.com/Community-PIO-CH32V/toolchain-riscv-windows.git)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 1 compatible libraries
Scanning dependencies...
Dependency Graph
|-- ch32v003fun (License: Unknown, Path: C:\Users\iacob\Desktop\platform-ch32v-develop\examples\blinky-ch32v003fun\lib\ch32v003fun)
Building in release mode
riscv-none-embed-gcc -o .pio\build\genericCH32V203C8T6\src\blink.o -c -DPLATFORMIO=60116 -DCH32V203C8 -DCH32V20X -DCH32V20x -DCH32V203 -DCH32V20x_D6 -Iinclude -Isrc -Ilib\ch32v003fun src\blink.c
riscv-none-embed-gcc -o .pio\build\genericCH32V203C8T6\lib288\ch32v003fun\ch32v003fun.o -c -DPLATFORMIO=60116 -DCH32V203C8 -DCH32V20X -DCH32V20x -DCH32V203 -DCH32V20x_D6 -Ilib\ch32v003fun lib\ch32v003fun\ch32v003fun.c
riscv-none-embed-gcc-ar rc .pio\build\genericCH32V203C8T6\lib288\libch32v003fun.a .pio\build\genericCH32V203C8T6\lib288\ch32v003fun\ch32v003fun.o
riscv-none-embed-ranlib .pio\build\genericCH32V203C8T6\lib288\libch32v003fun.a
riscv-none-embed-gcc -o .pio\build\genericCH32V203C8T6\firmware.elf .pio\build\genericCH32V203C8T6\src\blink.o -L.pio\build\genericCH32V203C8T6 -Wl,--start-group .pio\build\genericCH32V203C8T6\lib288\libch32v003fun.a -Wl,--end-group
c:/users/iacob/.platformio/packages/toolchain-riscv/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: .pio\build\genericCH32V203C8T6\lib288\libch32v003fun.a(ch32v003fun.o): in function `.L0 ':
ch32v003fun.c:(.text.handle_reset+0x8): undefined reference to `_eusrstack'
c:/users/iacob/.platformio/packages/toolchain-riscv/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ch32v003fun.c:(.text.handle_reset+0x10): undefined reference to `_sbss'
c:/users/iacob/.platformio/packages/toolchain-riscv/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ch32v003fun.c:(.text.handle_reset+0x18): undefined reference to `_ebss'
c:/users/iacob/.platformio/packages/toolchain-riscv/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ch32v003fun.c:(.text.handle_reset+0x2e): undefined reference to `_data_lma'
c:/users/iacob/.platformio/packages/toolchain-riscv/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ch32v003fun.c:(.text.handle_reset+0x36): undefined reference to `_data_vma'
c:/users/iacob/.platformio/packages/toolchain-riscv/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: c:/users/iacob/.platformio/packages/toolchain-riscv/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/lib/rv32imac/ilp32\libg.a(lib_a-exit.o): in function `.L0 ':
exit.c:(.text.exit+0x20): undefined reference to `_exit'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\genericCH32V203C8T6\firmware.elf] Error 1
======================================================================================================== [FAILED] Took 1.74 seconds ========================================================================================================

Environment          Status    Duration
-------------------  --------  ------------
ch32v003f4p6_evt_r0  IGNORED
genericCH32V003A4M6  IGNORED
genericCH32V103C6T6  IGNORED
genericCH32V203F6T6  IGNORED
genericCH32V203C8T6  FAILED    00:00:01.738
genericCH32V208CBU6  IGNORED
ch32v307_evt         IGNORED
genericCH32V305FBP6  IGNORED
genericCH32V307WCU6  IGNORED
genericCH32X035G8U6  IGNORED
=================================================================================================== 1 failed, 0 succeeded in 00:00:01.738 ===================================================================================================

Pio configuration (not including unused envs):
[env]
platform = ch32v
framework = ch32v003fun
monitor_speed = 115200

[env:genericCH32V203C8T6]
board = genericCH32V203C8T6
upload_protocol = wch-link
platform_packages =<EMAIL_ADDRESS>

Windows 10 22H2 19045.5011
Same error from CMD, PowerShell and PowerShell through VSCode.
Tried force-linking the ld script, but that results in the following:
c:/users/iacob/.platformio/packages/toolchain-riscv/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe:C:\Users\iacob\.platformio\packages/framework-ch32v003fun/ch32v003fun/ch32v003fun.ld:5: ignoring invalid character `#' in expression

Deleting the preprocessor directives in the ld script and forcing ram and flash sizes leads to the error above.

Project tree:
C:.
├───.pio
│   └───build
│       └───genericCH32V203C8T6
│           ├───lib288
│           │   └───ch32v003fun
│           └───src
├───.vscode
├───include
├───lib
│   └───ch32v003fun
├───src
└───test

Nope. Not able to reproduce that error. The provided ch32v003fun-oled example compiles fine.
Building in release mode
riscv-none-embed-gcc -o .pio\build\ch32v003f4p6_evt_r0\FrameworkCh32v003fun\ch32v003fun.o -c -std=gnu11 -Os -g -Wall -msmall-data-limit=0 -msave-restore -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -Wno-comment -march=rv32ecxw -mabi=ilp32e -flto -static-libgcc -nostdlib -DPLATFORMIO=60116 -DCH32V003F4 -DCH32V00X -DCH32V00x -DCH32V003 -D__PIO_BUILD_CH32V003FUN__ -IC:\Users\Max\.platformio\packages\framework-ch32v003fun\ch32v003fun -IC:\Users\Max\.platformio\packages\framework-ch32v003fun\extralibs -Isrc C:\Users\Max\.platformio\packages\framework-ch32v003fun\ch32v003fun\ch32v003fun.c
riscv-none-embed-gcc -o .pio\build\ch32v003f4p6_evt_r0\src\i2c_oled.o -c -std=gnu11 -Os -g -Wall -msmall-data-limit=0 -msave-restore -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common
-Wunused -Wuninitialized -Wno-comment -march=rv32ecxw -mabi=ilp32e -flto -static-libgcc -nostdlib -DPLATFORMIO=60116 -DCH32V003F4 -DCH32V00X -DCH32V00x -DCH32V003 -D__PIO_BUILD_CH32V003FUN__ -Iinclude -Isrc -IC:\Users\Max\.platformio\packages\framework-ch32v003fun\ch32v003fun -IC:\Users\Max\.platformio\packages\framework-ch32v003fun\extralibs -Isrc src\i2c_oled.c
riscv-none-embed-gcc -E -P -x c -DTARGET_MCU=CH32V003 -DMCU_PACKAGE=0 -DTARGET_MCU_LD=0 C:\Users\Max\.platformio\packages\framework-ch32v003fun\ch32v003fun\ch32v003fun.ld > C:\Users\Max\temp\ch32v003fun-oled\.pio\build\ch32v003f4p6_evt_r0\ldscript.ld
riscv-none-embed-gcc -o .pio\build\ch32v003f4p6_evt_r0\firmware.elf -T C:\Users\Max\temp\ch32v003fun-oled\.pio\build\ch32v003f4p6_evt_r0\ldscript.ld -Os -march=rv32ecxw -mabi=ilp32e -ffunction-sections -fdata-sections -Wl,-gc-sections --specs=nano.specs --specs=nosys.specs -nostartfiles -Wl,-Map="C:\Users\Max\temp\ch32v003fun-oled\.pio\build\ch32v003f4p6_evt_r0\ch32v003fun-oled.map" -flto -static-libgcc -nostdlib .pio\build\ch32v003f4p6_evt_r0\FrameworkCh32v003fun\ch32v003fun.o .pio\build\ch32v003f4p6_evt_r0\src\i2c_oled.o -L.pio\build\ch32v003f4p6_evt_r0 -Wl,--start-group -lm C:\Users\Max\.platformio\packages\framework-ch32v003fun\misc\libgcc.a -Wl,--end-group
MethodWrapper(["checkprogsize"], [".pio\build\ch32v003f4p6_evt_r0\firmware.elf"])
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [==        ]  25.0% (used 512 bytes from 2048 bytes)
Flash: [====      ]  43.3% (used 7088 bytes from 16384 bytes)

Can you upload a minimal project that reproduces the error?

I totally forgot. I copied the framework/ch32v300fun folder into the "lib" dir of the project, because it wouldn't find the ch32v003fun header. Deleting the ld file does not produce a different result.
I tried to compile the OLED example without making any modification and it returns:
src\i2c_oled.c:11:10: fatal error: ch32v003fun.h: No such file or directory
Copying the folder as i did in the other project, throws:
src\i2c_oled.c:13:10: fatal error: ssd1306_i2c.h: No such file or directory
In fact, I can't find the header myself. Lint also suggests it can't find ssd1306.h either, nor can I.
Here are both projects:
CH32V tests.zip

It just feels like the whole thing is broken, as you said. Maybe I should try to reinstall the platform?

I copied the framework/ch32v300fun folder into the "lib" dir of the project, because it wouldn't find the ch32v003fun header

Nope, with that approach (while also keeping framework = ch32v003fun or even baremetal), looots of things break, like exactly generating the linker file etc.

I tried to compile the OLED example without making any modification and it returns:

This is the interesting part. I think you have broken local packages. Can you delete:

C:\Users\<user>\.platformio\.cache
C:\Users\<user>\.platformio\packages\framework-ch32v003fun
C:\Users\<user>\.platformio\platforms\ch32v

and retry compilation?

Yeah, I was very sure it could break things, but it was my last attempt.
Problem seems to be down to the PIO level, since:
Executing task: C:\Users\iacob\.platformio\penv\Scripts\platformio.exe run

Processing ch32v003f4p6_evt_r0 (board: ch32v003f4p6_evt_r0; platform: ch32v; framework: ch32v003fun)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Platform Manager: Installing ch32v
UnknownPackageError: Could not find the package with 'ch32v' requirements for your system 'windows_amd64'

 *  The terminal process "C:\Users\iacob\.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1.

https://github.com/platformio/platformio-core/issues/3116
Going to try to reinstall the pyenv

Python reinstall didn't change anything, however
platform = https://github.com/Community-PIO-CH32V/platform-ch32v
FINALLY FIXED the issue

I guess that it does not appear to be registered on the PIO platform list, since setting it back to platform = ch32v now works.

Right, so this definitely was broken local packages, and the reinstall fixed it. Nice!
And yes, platform-ch32v is not yet submitted to the PlatformIO registry.. I need to find a proper point in time to make a clean release with everything working to a minimum level. Right now, things are still changing fast, so pulling the git version is best.


Suggestion to add map method and...

Hi :wave:
I would recommend to add map methods if the user generates everything @WithWrap(). For now, I am forced every time to add this manually. Map method is useful by copyWith() method.
//...
  R map<R extends Object?>({
    required R Function() loading,
    required R Function(ResultError<T, E> error) error,
    required R Function(ResultData<T, E> data) data,
  }) {
    final result = this;
    if (result is ResultLoading<T, E>) {
      return loading();
    } else if (result is ResultError<T, E>) {
      return error(result);
    } else if (result is ResultData<T, E>) {
      return data(result);
    } else {
      throw AssertionError();
    }
  }

  R mapOrElse<R extends Object?>({
    R Function()? loading,
    R Function(ResultError<T, E> error)? error,
    R Function(ResultData<T, E> data)? data,
    required R Function(Result<T, E> result) orElse,
  }) {
    final result = this;
    if (result is ResultLoading<T, E>) {
      return loading != null ? loading() : orElse(result);
    } else if (result is ResultError<T, E>) {
      return error != null ? error(result) : orElse(result);
    } else if (result is ResultData<T, E>) {
      return data != null ? data(result) : orElse(result);
    } else {
      return orElse(result);
    }
  }
//...

Instead of functions, I think the getters are better for cleaner code syntax. Example:
  bool get isLoading => this is ResultLoading<T>;
  bool get isError => this is ResultError<T>;
  bool get isData => this is ResultData<T>;

  ResultLoading<T> get asLoading => this as ResultLoading<T>;
  ResultError<T> get asError => this as ResultError<T>;
  ResultData<T> get asData => this as ResultData<T>;

  ResultLoading<T>? get asLoadingOrNull {
    final result = this;
    return result is ResultLoading<T> ? result : null;
  }

  ResultError<T>? get asErrorOrNull {
    final result = this;
    return result is ResultError<T> ? result : null;
  }

  ResultData<T>? get asDataOrNull {
    final result = this;
    return result is ResultData<T> ? result : null;
  }

and then you can use it.
final value = data.asData.value;
// Instead
final value = data.asData().value;

Of course, it's a taste thing. It's just my opinion.
And Dart Sealed Class Generator needs updated analyzer to 1.7.0 => 2.0.0 it conflicts with other packages for example with most one popular Freezed or json_serializable. It would make easier life to config pubspec.yaml file for beginners :smiley:
And factory constructors prefer declaring const constructors on @immutable classes.

Hi,
I've fixed analyzer version in version 1.3.0.
And now all factories are constant factories for constant immutable sub classes.
For your suggestions about maps and getter, I'll check them at first oppotunity.
Thanks.

For your first suggestion about maps:
You mean we should use map instead of when ?

And about getters, At first I had the same idea.
But there are two points which stops me from using getters ...

using type casts is not a good Programming approach and we should not persuade it. By not using getters we somehow discourage user from using cast methods ! 😁 don't you agree ?
if we make them getters they may be mistaken with sub class fields, or possibly clash names.

What's your opinion ?
@iamarnas

For your first suggestion about maps:
You mean we should use map instead of when ?

No, when and map is a different. map you need add when user generate all @WithWrap()
// When method.
  R when<R extends Object?>({
    required R Function() loading,
    required R Function(Object error) error,
    required R Function(T data) data,
  }) {
    final result = this;
    if (result is ResultLoading<T>) {
      return loading();
    } else if (result is ResultError<T>) {
      return error(result.error);
    } else if (result is ResultData<T>) {
      return data(result.data);
    } else {
      throw AssertionError();
    }
  }

// Map method.
R map<R extends Object?>({
    required R Function() loading,
    required R Function(ResultError<T> error) error,
    required R Function(ResultData<T> data) data,
  }) {
    final result = this;
    if (result is ResultLoading<T>) {
      return loading();
    } else if (result is ResultError<T>) {
      return error(result);
    } else if (result is ResultData<T>) {
      return data(result);
    } else {
      throw AssertionError();
    }
  }

What's your opinion ?
@iamarnas

@FatulM agreed with you.

If I got your problem correctly,
You have a situation which at the same time:

you need @WithWrap,
(Which the only result of wrapping is changing when method and constructor signatures.)
you need when methods as you are not using @WithWrap

?

@FatulM Example:
/// With this setup everything will be generated `@WithWrap()`. This should be as default.
@Sealed()
@WithWrap()
abstract class _Result<T> {
  void loading();
  void data(T value);
  void error(Object error);
}

// All wrapped default methods as expected by setup.
  */

/// Add both `map`and `whenOrElse` methods only if you detect if user generate everything `@WithWrap()`
 R map<R extends Object?>({
    required R Function() sunny,
    required R Function(Result<T> value) data,
    required R Function(Result<T> error) error,
  }) {
    /*  Add whenOrElse */

This setup should be as default and you don't need annotation@WithWrap() at all or not generate maps methods if you detect that the user generates some function without a wrap, then when and map will be the same method. Example with Freezed you can do most with only with when , maybeWhen, map, maybeMap.

@FatulM

Or you need map and when  simultaneously ? for example because some tool need map methods ...

map and mapOrElse provide all data as map.

A workaround is to generate map and mapOrElse methods when using withWrap as well as when not using withWrap ?

Yes

@FatulM in short. By adding map or mapOrElse you don't need @WithWrap() annotation at all because map and mapOrElse in all case provide all data as map. And you have everything in one place.

Ok, I will consider this ...
But it may take some time to implement it,
And it will have breaking changes.
Thanks a lot

Hi,
I changed implementation according to your recommendation.
Please check out examples to see if it fits your needs.
for example:
weather
@iamarnas

Hi,
I changed implementation according to your recommendation.
Please check out examples to see if it fits your needs.
for example:
weather

@FatulM It looks amazing 👍. How to setup this?  Or is this by default?

Hi,
I changed implementation according to your recommendation.
Please check out examples to see if it fits your needs.
for example:
weather

@FatulM It looks amazing 👍. How to setup this? Or is this by default?

After I'll publish 1.5.0 it will be by default.
I removed @WithWrap annotation.
Now we have *map methods like when not using WithWrap,
And *when methods like when using WithWrap.
If you were using WithWrap you should change all of factory and constructor calls to named args.
Since I don't have any way to distinguish between wrapped and non wrapped state ...

please check out changelog:
changelog

Hi @FatulM
Now I see a big difference and I am happy with this result. I fix the rest with small changes to fits my needs. Example:
Equality
Equality.distinct missing the hashCode, and I don't understand why you can't implement full code when you have all values.
Result by sealed generators:
/// Override `hashCode` if overriding `==`.
/// Note: also implemented in the classes without parameters.
@override
  bool operator ==(Object other) => false;

Should be:
///class [ResultError<T extends Object?, E extends Object?>]
@override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is ResultError<T, E> &&
      other.error == error &&
      other.stackTrace == stackTrace;
  }

  @override
  int get hashCode => error.hashCode ^ stackTrace.hashCode;

Default parameters
I don't know how Dart Build System builders work. But is that not possible to use the same parameters provided by the user. That should be enough only to remove default values from the factory constructor and from all methods. The rest just copy and paste.
@Sealed()
abstract class _Result<T, E> {
 void loading();
 // Default constructor by the user => (E error, [StackTrace stackTrace = StackTrace.empty])
 void error(E error, [StackTrace stackTrace = StackTrace.empty]);
 void data(T value);
}

const factory Result.error(E error, [StackTrace stackTrace]) = ResultError<T, E>; // <= remove default value from factory constructors

class ResultError<T extends Object?, E extends Object?> extends Result<T, E> {
 // Paste default constructor (E error, [StackTrace stackTrace = StackTrace.empty])
 const ResultError(
   this.error, [
   this.stackTrace = StackTrace.empty,
 ]) : super._internal();

 final E error;
 final StackTrace stackTrace;

 @override
 String toString() => 'Result.error(error: $error, stackTrace: $stackTrace)';
}

R when<R extends Object?>({
   required R Function() loading,
   required R Function(E error, [StackTrace stackTrace]) error, // <= remove default value from the methotds
   required R Function(T value) data,
 }) {
 /*...*/

/// And in the functions need detect optional parameters type `[]` or `{}`
if (result is ResultError<T, E>) {
     return error(result.error, result.stackTrace); // or error(result.error, stackTrace: result.stackTrace);
}
/*...*/

Otherwise is good work you can close this issue if you want. It's just my suggestion.

about distinct equality:
overriding hashcode does not make sense since all of instances are not equal to each other.
even an instance is not equal to itself.
what should I return from hashcode ?
If i return a single result for example 0 or runtimeType.hashcode or superclassType.hashcode.
(which is i think the last one is best).
It does not make sense !
If you want that type of equals and hashcode like equatable package you should use data equality.

And please make another issue about default parameters and copy your recommendation there.
I should investigate the difficulty of implementing that feature.
I thin it is possible but is very hard to implement 😄

And also I have changed cast methods to getters on master

Thanks for your great suggestions

I'm not agreed with you about distinct equality. As you see it is very important for not primitive objects and more important for creating tests.
Just copy and paste in the dart pad to test it.
void main() {
  /// [Counter] with distinct equality;
  print(ResultData(Counter(1)) == ResultData(Counter(1))); // true
  print(ResultData(Counter(1)) == ResultData(Counter(2))); // false
  print(ResultData(1) == ResultData(1)); // true
  print(ResultData(1) == ResultData(2)); // false

  // [Counter] without distinct equality;
  print(ResultData(Counter(1)) == ResultData(Counter(1))); // false
  print(ResultData(Counter(1)) == ResultData(Counter(2))); // false
  print(ResultData(1) == ResultData(1)); // true
  print(ResultData(1) == ResultData(2)); // false
}

class Counter {
  int value;
  Counter(this.value);

  @override
  String toString() => 'Result.data(value: $value)';

  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is Counter && other.value == value;
  }

  @override
  int get hashCode => value.hashCode;
}

// Generated by sealed generators
class ResultData<T extends Object?> extends Result<T> {
  const ResultData(this.value) : super._internal();

  final T value;

  @override
  String toString() => 'Result.data(value: $value)';

 // Added by me
  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is ResultData<T> &&
        other.value == value;
  }

  @override
  int get hashCode => value.hashCode;
}

My opinion. Pure Dart equality operator would be as default. You really don't need Equatable for that, keep your package clean as possible, it better for you and users. You can generate EquatableMixIn but allow to users if they want use it, they can install package self.

Maybe it is a good approach,
but in 6thsolution we mostly use this package with bloc,
so we need data equality as default
If you want default behavior use Equality.identity
implementing data equality and hashcode by ourself is a goal of dart_sealed,
but it will not be in near future

In 6thsolution we mostly use this package with Bloc.

Oh, I did not know that this package you created for yourself.  Then I close this issue 😃.

This is not a private package!
And I will consider your recommendation ... but it may take some time.
thanks.


how to conform password

how to check confirm password

All validation is handled by jQuery-Validation.  This plugin only changes the error messages from labels to Bootstrap tooltips.  If you only want to check if a field is populated, then make it required.

no i mean validate password and confirm password what i mean is

ok thanks


Feature Request - Allow to configure a hook function run before command

Hey,
I was just about to integrate this with the nvim-ts-context-commentstring plugin. In short it updates the commentstring option based on the current cursor location using Treesitter. Per default it runs on the CursorHold event, which I think is not necessary/too often. I would rather have it run just each time before I want to do a comment.
I could now write my own custom stuff to make this happen. But actually I would love to just have your mappings, but have a configuration options like:
require('kommentary.config').configure_language("default", {
    pre_comment_hook = require('ts_context_commentstring.internal').update_commentstring(),
})

Do you think it would be a feature you are willed to add? 🤔

Hi, this sounds like a good idea, I don't have too much time on my hands at the moment, so it might be a while until I can implement it.
In the meantime, pull request are very much appreciated.

This implementation runs the hook function before returning the config table, this unfortunately means that it'll be run 3 times per commenting because the get config function is called multiple times. I might look into how to reduce that number later, until then pull requests are welcome as always.
Here's a rough example:
require("kommentary.config").configure_language("lua", {
    hook_function = function()
       vim.api.nvim_buf_set_option(0, 'commentstring', '{%s}')
    end,
    single_line_comment_string = "auto",
    multi_line_comment_strings = "auto"
})

The hook function will set the commentstring to something arbitrary, single_line and multi_line_comment_strings are both configured to use the commentstring provided by vim instead of from the config table.
Let me know if this is a satisfactory implementation, and sorry it took so long.

Amazing. Thank you very much! 🙏🏾

Sorry for the drive-by comment on an old issue, but that was exactly what I was going for in #45 (dynamically looking up the current comment string rather than relying on something else needlessly updating a variable in the background).
Might I suggest mentioning this in the README (under "Advanced Config")? I'm sure there are a lot of people who'd be very interested in learning about this functionality.


BookmarkManager minor improvements

Task/Issue URL: https://app.asana.com/0/1199178362774117/1205306631184883/f
Description:

minor improvements to method naming and args usage done in scope of https://app.asana.com/0/1199178362774117/1205306631184883/f

Steps to test this PR:

Validate there‘s no breaking changes

Definition of Done:

[ ] Does this PR satisfy our Definition of Done?

Internal references:
Pull Request Review Checklist
Software Engineering Expectations
Technical Design Template
Pull Request Documentation

@mallexxx the branch fails to compile for me, and also there are some merge conflicts to resolve. Let me know when it's ready for review, thanks!


Insufficient permissions to join the domain

I have a user who is a member of AAD DC Administrators ( guide should explain how to add the user to AAD DC Administrators but does not )
Followed the instructions but when I finally run
sudo realm join --verbose CONTOSO100.COM -U<EMAIL_ADDRESS>--install=/
I enter my password and it gives me

Calculated computer account: CN=CONTOSO-UBUNTU,OU=AADDC Computers,DC= contoso100,DC=com
! Insufficient permissions to modify computer account: CN=CONTOSO-UBUNTU,OU=AADDC Computers,DC= contoso100,DC=com: 000020E7: AtrErr: DSID-031530D8, #1:
0: 000020E7: DSID-031530D8, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 90008 (userAccountControl):len 4

adcli: joining domain contoso100.com failed: Insufficient permissions to modify computer account: CN=CONTOSO-UBUNTU,OU=AADDC Computers,DC= contoso100,DC=com: 000020E7: AtrErr: DSID-031530D8, #1:
0: 000020E7: DSID-031530D8, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 90008 (userAccountControl):len 4
! Insufficient permissions to join the domain
realm: Couldn't join realm: Insufficient permissions to join the domain

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

ID: ffffb136-b73f-2b2a-728d-b4c57f08ee5b
Version Independent ID: 9a7bac18-2601-1a24-21b3-0f3134277ed6
Content: Azure Active Directory Domain Services: Join an Ubuntu VM to a managed domain
Content Source: articles/active-directory-domain-services/active-directory-ds-join-ubuntu-linux-vm.md
Service: active-directory-ds
GitHub Login: @mahesh-unnikrishnan
Microsoft Alias: maheshu

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

@gegenki Thanks for reporting! I have assigned the issue to the author to investigate and update as appropriate.

There is a tip line for it:
'Ensure that you specify a user who belongs to the 'AAD DC Administrators' group.'
But no link to a related article.
It assumes prior knowledge that would easily be solved with a link.
It isn't clear to a first time user where this should be set or how to find out this information. It definitely is not clear that this is a group created automatically inside Azure.
Similarly I do not know how to check if the group membership has synced

@DiegoRamirez-MSFT Please assign to me.

I seem to have the same problem. Any solution for this?

#assign @iainfoulds

Sorry you ran into issues, @gegenki and @balazsorban44, and sorry for the delay here.
I'll add a link on how to add and verify that user accounts are a member of the AAD DC Administrators group. For reference, the Azure AD fundamentals docs cover this process, and more - https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-groups-members-azure-portal
For the actual domain-join error, the credentials error indicates that the VM can successfully communicate with the Azure AD DS managed domain at least.  There shouldn't be additional permissions required for that domain-join process to successfully complete. Is there a different set of credentials that you can use and re-try the domain-join operation? If you're still having problems, @MarileeTurscak-MSFT and @SaurabhSharma-MSFT can assist with opening a support request to troubleshoot further
Doc update part #in-progress

Docs have now been updated to include link to steps on how to add a user to the the required group in Azure AD. These docs are now live.
If there's additional support issues, please reach out so that CXP can provide the troubleshooting assistance that's needed.
For now, #please-close

Please re-open this issue. Following the outlined steps, another more potential reason for the permissions error is due to reverse DNS lookup, making the error misleading on what's wrong.
To successfully join requires adding "rdns = false" under the [libdefaults] section in the /etc/krb5.conf file so joins will work properly. Without adding this line returns the above error message to a user who's already added to the proper groups.
Example:
[libdefaults]
default_realm = DOMAIN.COM
rdns = false
Also, I'm not sure if I should open a new issue to request a review on this too. Before the realm join we're having the user authenticate themselves with kinit:
kinit<EMAIL_ADDRESS>If this is successful(and it is an account that has rights to join computers to the domain!), there is no need to specify the user in the join command and prompt for a password. The command will pick up the kerberos credentials and use that for authentication. Attached output of this happening.
successful-join-with-kinit.txt

I'd like to point out, that incorrect /etc/krb5.conf in general can cause this.
if [realms] and [domain_realm] are incorrectly configured, the same generic error will appear.
rdns=false helps too, but this error is so insanely generic.

Please re-open this issue. Following the outlined steps, another more potential reason for the permissions error is due to reverse DNS lookup, making the error misleading on what's wrong.
To successfully join requires adding "rdns = false" under the [libdefaults] section in the /etc/krb5.conf file so joins will work properly. Without adding this line returns the above error message to a user who's already added to the proper groups.
Example:
[libdefaults]
default_realm = DOMAIN.COM
rdns = false
Also, I'm not sure if I should open a new issue to request a review on this too. Before the realm join we're having the user authenticate themselves with kinit:
kinit<EMAIL_ADDRESS>If this is successful(and it is an account that has rights to join computers to the domain!), there is no need to specify the user in the join command and prompt for a password. The command will pick up the kerberos credentials and use that for authentication. Attached output of this happening.
successful-join-with-kinit.txt

This is indeed helpful for my case. Just to confirm. On Ubuntu 18.04. User being used is already a member of Azure AD DC Group.

I'd like to point out, that incorrect /etc/krb5.conf in general can cause this. if [realms] and [domain_realm] are incorrectly configured, the same generic error will appear. rdns=false helps too, but this error is so insanely generic.
As an example, I was using <domain>.ONMICROSOFT.COM under the [realms] definition, something that didn't work since I had a custom domain name attached to my Azure AD and hand't yet set up tunneling to the virtual environment. And I kept getting this error thrown at me until I figured out that I created the custom DNS domain entry and everything associated with it and forgot the fire up the tunnel.

Thank you!!! rdns = false is what did it for me as well. Documentation needs to be updated or made clearer... We are using a custom domain as well in azure ad.. and our aadds domain is prefixed with "aadds"


currentLocale() returns null

Hello, I'm currently trying to set up a project with your package but I keep getting null from my Server components. That being said, it works well on Client components. Did you miss something in the doc ? I'm using Next 13.4.10

Hmm, it should never return null. We can't seem to reproduce this. Are you able to provide a minimal reproducible example?

same issue and how do i change the locale language

@revengemiroz Please see #15 to see for an example of changing languages.
Can you provide a reproducible repo for ‘currentLocale’ returning ‘null’?

@sshmaxime @revengemiroz Are either of you able to send some code that reproduces this issue?

@sshmaxime  @revengemiroz
if you have a src folder, the middleware file must be inside it.
Otherwise, the middleware must be at the same level as pages or app folder.

Thanks @talebkhah! I assume this is the problem they were having. I'm going to close this issue.


Can't activate Service -> Not running

Hi there,
When I try to activate the Service in Network Preferences and then hit apply, it goes back to "not running". Any idea why? Could it have to to with the other services, like Little Snitch?
I tried multiple different DNS servers TLS and HTTPS. Always the same result. Tried restarting and this also didn't solve the issue.
Best
se_dony

@sedony23 I'm aware of a similar case. In your case, Little Snitch is probably preventing DNSecure from running. Please try again after stopping Little Snitch.

I just tried it, it works, if I stop the Little Snitch service. However, I need Little Snitch. Is there a workaround or something I can do to help you figure out how both could work side by side?
Best and Thanks for the great work!

I don't know exactly the settings in Little Snitch, but I assume that you have to whitelist the DNS IP's. Fore sure this is possible in LuLu a very similar app by Objective-See which additionally is free. Good luck!
-0ID

On 18 Feb 2021, at 11:33, sedony23<EMAIL_ADDRESS>wrote:

I just tried it, it works, if I stop the Little Snitch service. However, I need Little Snitch. Is there a workaround or something I can do to help you figure out how both could work side by side?
Best and Thanks for the great work!
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

@sedony23 Thanks. I'm still investigating it. Currently, I think it may be a specification of macOS. If so, we can't do anything.
I'll let you know if I find a solution or a workaround.

@no0ID Unfortunately that didn't work. Whitelisted the IPs and the domains for all processes. Does it work with LuLu for you?
@kkk669 Thanks a lot!

Hi,
no Mac at home for the moment, waiting for delivery.
Try as follows:

DNSecure is configured with some servers
switch off DNSecure and use an standard DNS server
install LuLu and set allow all Apple connections
launch DNSecure
LuLu should prompt you with the question if connection to displayed IP(s) and port # should be allowed
tick allow

This is the way how LuLu worked in Catalina.

On 18 Feb 2021, at 15:47, sedony23<EMAIL_ADDRESS>wrote:

@no0ID Unfortunately that didn't work. Whitelisted the IPs and the domains for all processes. Does it work with LuLu for you?
@kkk669 Thanks a lot!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

I wrote to the "Objective Development" people (creators of Little Snitch). They say that in Big Sur there is a general incompatibility between encrypted DNS profiles and some third-party DNS (encryption) tools and network extensions like Little Snitch. :(


Ball sometimes sits there

Sometimes when a new ball spawns, it just sits there and doesn't launch out. I don't know if it happens when it spawns and immediately hits a pickup (possibly slow-down)?
This requires testing.

 The ball is launched based on the direction from the center of the launcher to the spawn point (ignoring Z), so if a spawn point were right on the center, it might not move.


[SUPPORT] How to change the precombine field of a created Hudi table

How to change the precombine field of a created Hudi table ?
1、I tried to use the alter table of spark SQL to change it, but it didn't take effect. Hoodie.properties is still the original field
2、When I try to use datasource to write, I directly specify the option ("hoodie.table.precombine.field", "new file"), and an error will occur
PreCombineKey:  new filed      old filed
  at org.apache.hudi.HoodieWriterUtils$.validateTableConfig(HoodieWriterUtils.scala:162)
  at org.apache.hudi.HoodieSparkSqlWriter$.write(HoodieSparkSqlWriter.scala:89)
  at org.apache.hudi.DefaultSource.createRelation(DefaultSource.scala:164)
  at org.apache.spark.sql.execution.datasources.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:46)
  at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:70)
  at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:68)
  at org.apache.spark.sql.execution.command.ExecutedCommandExec.doExecute(commands.scala:90)
  at org.apache.spark.sql.execution.SparkPlan.$anonfun$execute$1(SparkPlan.scala:180)
  at org.apache.spark.sql.execution.SparkPlan.$anonfun$executeQuery$1(SparkPlan.scala:218)
  at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
  at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:215)
  at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:176)
  at org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:132)
  at org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:131)
  at org.apache.spark.sql.DataFrameWriter.$anonfun$runCommand$1(DataFrameWriter.scala:989)
  at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$5(SQLExecution.scala:103)
  at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:163)
  at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:90)
  at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775)
  at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:64)
  at org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:989)
  at org.apache.spark.sql.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:438)
  at org.apache.spark.sql.DataFrameWriter.saveInternal(DataFrameWriter.scala:415)
  at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:293)
  at com.leqee.sparktool.hoodie.HoodieData.saveData(HoodieData.scala:382)
  at com.leqee.sparktool.hoodie.HoodieData.upsert(HoodieData.scala:181)
  at com.leqee.sparktool.hoodie.Hoodie.upsert(Hoodie.scala:242)
  at com.leqee.sparktool.hoodie.Hoodie.upsert(Hoodie.scala:232)
  ... 51 elided```

**Environment Description**

* Hudi version : 0.10.1

* Spark version : 3.1.3

* Hive version : 3.1.0

* Hadoop version : 3.1.1

* Storage (HDFS/S3/GCS..) : HDFS

* Running on Docker? (yes/no) : no

**Additional context**

Add any other context about the problem here.

**Stacktrace**

```Add the stacktrace of the error.```

@JoshuaZhuCN Given that the pre-combine field name is written to the table config in hoodie.properties, it cannot be changed after being set once in the current settings.  @nsivabalan @xushiyan is it a problem to relax this restriction?

cc @YannByron

@yihua @JoshuaZhuCN for now the recordKey and preCombineFiled can not be changed. and IMO, we should not to relax the restriction that will guarantee our correctness of data.

@JoshuaZhuCN To change the pre-combine field, the only way is to create a new Hudi table based on the new configurations.  Hope that helps.  Feel free to reopen the issue if you have more questions.


[Feature request]: Import meta txt

With this great program we have now an export possibility for the meta data of images. We also can now edit the data where needed.
Now I noticed, that it would be very convenient if we also could import meta data from txt files.
Example workflow where it would make sense:
Generate an image
Generated meta data is saved as txt
Upscaling/editing the image to a final state -> most if not all meta data is lost
Import previously saved meta data from txt file and make png complete again
Thanks for this great tool! 👍

Just drag the txt into the window in edit mode.


Add support for accessing Open Prices

Fixed by: https://github.com/openfoodfacts/openfoodfacts-nodejs/pull/383

The current implementation only covers a subset of the API : getLocations, getProducts, getStats...
I'll see if I can do it myself, don't have that much time though.. 😅


Failing test_several_qubit_sizes unittest due to attribute absence

Cause:
The unittest test_several_qubit_sizes in the file test_merge_initialize.py fails becase the method random imported from the module scipy.sparse returns an object called COO_Matrix. The COO_Matrix object no longer presents the attribute A in python's most recent versions.
How to replicate it
Run the unittest test_several_qubit_sizes on python version 3.10.
Solution:
I switched the A  attribute for the method toarray.

There is an alternate way we can produce sparse arrays, by using the method  random_array from the module scipy.sparse, but I haven't been able to use it in python version 3.8.

Thanks @IsmaelCesar


Character count component  aria describeby attribute bug

When a the character count is rendered on a text areas the aria-describeBy attribute lists the ID (suffixed with "-info") of the character count text and the ID of the hint text of the textarea (suffixed with "-hint") in that order.
example:
aria-describedby="char-count-info q-textarea-hint"
This means that screen readers read the information referenced by those ID's in that order.
Character count info read 1st
Textarea hint read 2nd

What

Need to have configuration so that the "-info" ID is appended after the textarea "-hint" ID.

Why
When using a screen reader the character count below the textarea is read out first before the hint/description text above the textarea. This is counter intuitive to the page it should be read in order of appearance to help those needing to use screen readers

As an initial, untested thought: Is this so that things are read out in that order as the user is typing into the textarea?
In that context, hearing the updated character count would be of a higher priority than a repetition of the hint text, and the user is likely to want to hear that take place more frequently.
I'm unsure if that's actually the case, as I believe typing announcements are actually spawned from a visually-hidden live region, but something to confirm.
(Note: I'm also going to move this into the govuk-frontend repo, as this would appear to be a bug report for a Frontend component.)

No this is just what is on the page when rendered. Once you click into the textarea a screen reader will read out aria-describeBy values in sequence so in this case the "you have 2000 characters remaining" will be read before "You can add details that may not be included on the crime report". The screen reader should read out a page in the order that it's rendered.

It looks like this is a limitation of the way the character count wraps the textarea component.
The textarea component accept a describedBy option, which it then appends to to if a hint and/or error message are also passed. There's no way to pass in IDs of other elements that should go after the hint or error message or to otherwise customise the order – anything passed through describedBy will always come first.
A few options…

Do nothing and accept that the screen reader ordering and the visual order are out of sync (and, arguably, not in order of importance)
Further extend the textarea API to make it possible to pass additional IDs to add to aria-describedby at the end. Either adding a new describedByAfter option or providing a way to indicate where the hint and error message should appear in describedBy through a placeholder or similar.
Decouple the character count and textarea component so the character count does not use the textarea Nunjucks – this would allow more flexibility but risks the two getting more out of sync with each other whilst continuing to share CSS (unless we decouple them entirely, which results in lots of duplication)
Merge the character count functionality into the textarea component
Something else.

It'd be useful to understand how much of an issue this would cause for a screen reader user, and whether we think it fails any WCAG 2.2 success criteria – @selfthinker would you have any capacity to look at this?
I'm not sure this is the simple fix we thought it was – it'd be good to understand how much of an issue this is but let's not spend too much energy trying to fix this in this cycle.

The closest WCAG criterion here would be 1.3.2 Meaningful Sequence, which says:

When the sequence in which content is presented affects its meaning, a correct reading sequence can be programmatically determined.

I don't think it fails because, although the sequence might be different than expected, the meaning is not affected.
Also, the text suffixed with "-info" that is read out is actually not visible on the screen.
Although that can be confusing because it is similar to the text on the screen.
I cannot imagine that this will be an issue for anyone.
But, as always, it would be good to hear from people who have done user research with this component, if any screen reader users found the sentence "You can enter up to 200 characters" to be confusing to come before the other hint.
To clarify, the way the issue has been presented is slightly wrong.
Here is what the (simplified) code looks like:
h1 > label
div class=hint id=hint
textarea aria-describedby=hint info
div class=hidden id=info "You can enter up to 200 characters"
div class=hint aria-hidden "You have X characters remaining"
div class=hidden aria-live "You have X characters remaining"
Here is what happens when using a screen reader:
When tabbing, arrowing or using a shortcut to get to the textarea, a screen reader will read first the label, then the hidden info, then the hint (and sometimes the type of input after the label or at the end).
The visible "You have X characters remaining" is never read by screen readers, but the hidden duplication of it is read by screen readers whenever something gets typed into the textarea. But it is not read out when you first focus on the textarea.
(I wasn't in the team when this component was developed, so don't have any context of its history. But I assume the text is duplicated to only alert screen readers when you pause to not get too verbose and disruptive but always update the visible text with every key stroke.)
One thing I have noticed, though, is that both sentences are read out together without a pause. Like "you can enter up to 200 characters do not include personal or financial information like your National Insurance number or credit card details."
I'd suggest to add a period at the end of the hidden text (and maybe, for consistency's sake, the other two texts as well?).

(I wasn't in the team when this component was developed, so don't have any context of its history. But I assume the text is duplicated to only alert screen readers when you pause to not get too verbose and disruptive but always update the visible text with every key stroke.)

Your assumption is absolutely correct.
The component didn't work like this originally, we introduced this way of it working in early 2022 to fixing various issues around screen reader announcements. https://github.com/alphagov/govuk-frontend/pull/2577


Feature request: harmonize the icons 💅

The idea is good, but I'm not sure we keep a good ratio for the icons.
In the first tries I did regarding this, I got stretched icons :/
That's why we went full utf-8 for the symbols.


Typos fixed in README.md

"Mini projects in some languages that you can use them ." - > "Mini projects in multiple languages that you can use."
"Contribute and add mini projects that you wrote" -> "Contribute or share your own mini projects"
"THanks .Amir ." -> "Thanks, Amir"

Hi.
Tnx for that 🙏🏻


User Management | Add list of Government users to Admin section (IDIR only) |2|

https://trello.com/c/4NBoDQH1/739-user-management-add-list-of-government-users-to-admin-section-idir-only-2
This card is to add a list of Government users to the Administration page, similarly to how we show fuel supplier users on the Company Details page.
Scenario:
GIVEN that I am a Gov't user
AND I am on the administration page
WHEN I click on the Users tab
THEN I am shown a Users table similar to what appears on the Company Details page for BCeID users
Columns to include (same as BCeID users):

Name
Role(s)
Email
Phone
Status

 User Management | Add list of Government users to Admin section (IDIR only) |2|


Command.sga tests

This adds full test coverage around the sga command.

Fixed the indenting @perry-mitchell  - ready for merge :smile:

Looks like sgaTests is still indented at 2, whilst cgr looks good..

Not sure what happened there, Atom for some reason only fixed the indenting in cgr... Give me a second

Indentation fixed in sga tests @perry-mitchell


Message component text in dark mode does not meet accessibility requirements

As an example:

Blue text on a blue background doesn't provide enough contrast and is a poor UX, especially for those with color blindness.

Please create a ticket for PrimeVue. When it is implemented in PrimeVue, it will be ported to primevue-tailwind.
Thank you!