Wont upload

The char sheets wont upload

Sorry to hear you're having trouble. Can you please provide more details? Like:

Describing the steps you go through when you hit the problem

What does someone need to do to recreate the problem (this helps to investigate the issue)

What browser and OS are you using
What file are you trying to upload

Im trying to upload a exported char, on google chrome with windows 10, i also tried it on ios and on an android I downloaded my char, then clicked the upload char button, when i selected the file it is not uploading at all

Thanks for the extra information. Please follow these instructions on how to open Chrome Dev Tools Console [seems to be control + shift + J on Windows] and report back what it shows when you try to upload a character.

uncaught TypeError: Cannot read property 'awesome' of undefined
at FileReader.e.onload (awesomeSheet.min.js:1)
e.onload @ awesomeSheet.min.js:1
load (async)
p @ awesomeSheet.min.js:1

and im using this file
{"_id":"5c670deae7e3c3000444d2cd","user":{"provider":"google","id":"116978500927678928185","displayName":"Ash Whompus","name":{"familyName":"Whompus","givenName":"Ash"},"emails":[{"value":"arfontenot03@gmail.com","type":"account"}],"photos":[{"value":"https://lh5.googleusercontent.com/-pKIfYScOqCA/AAAAAAAAAAI/AAAAAAAAACM/TXOoXpWNDaI/photo.jpg?sz=50"}],"gender":"male"},"spells":[{},{},{},{},{},{},{},{},{},{}],"name":"jeffrey","modified":"2019-02-17T21:15:16.235Z","alignment":"LG","level":"paladin","race":"human","size":"M","gender":"male","age":"31","height":"6.2","weight":"180","hair":"brown","eyes":"hazel","money":{"gp":"180"},"hp":{"total":"10","wounds":"10"},"abilities":{"str":"17","dex":"10","con":"12","int":"15","wis":"14","cha":"18"},"skills":{"craft1":{"classSkill":true,"total":"2"},"diplomacy":{"classSkill":true,"total":"7"},"handleAnimal":{"classSkill":true,"total":"7"},"heal":{"classSkill":true,"total":"5"},"knowledgeNobility":{"classSkill":true,"total":"5"},"knowledgeReligion":{"classSkill":true,"total":"5"},"profession1":{"classSkill":true,"total":"5"},"ride":{"classSkill":true,"total":"3"},"senseMotive":{"classSkill":true,"total":"5"},"spellcraft":{"classSkill":true,"total":"5"},"acrobatics":{"total":"0"},"appraise":{"total":"2"},"bluff":{"total":"4"},"climb":{"total":"3"},"craft2":{"total":"2"},"craft3":{"total":"2"},"disableDevice":{"total":"0"},"disguise":{"total":"4"},"escapeArtist":{"total":"0"},"fly":{"total":"0"},"intimidate":{"total":"4"},"knowledgeArcana":{"total":"2"},"knowledgeDungeoneering":{"total":"2"},"knowledgeEngineering":{"total":"2"},"knowledgeGeography":{"total":"2"},"knowledgeHistory":{"total":"2"},"knowledgeLocal":{"total":"2"},"knowledgeNature":{"total":"2"},"knowledgePlanes":{"total":"2"},"linguistics":{"total":"2"},"perception":{"total":"2"},"perform1":{"total":"4"},"perform2":{"total":"4"},"profession2":{"total":"2"},"sleightOfHand":{"total":"0"},"stealth":{"total":"0"},"survival":{"total":"2"},"swim":{"total":"3"},"useMagicDevice":{"total":"4"}},"speed":{"base":"30"},"languages":"common,","xp":{"total":"1,250"},"feats":[{"name":"improved initiative","type":"combat","notes":"You get a +4 bonus on initiative checks."},{"name":"self-sufficient","type":"General","notes":"You get a +2 bonus on all Heal checks and Survival checks. If you have 10 or more ranks in one of these skills, the bonus increases to +4 for that skill."}],"melee":[{"weapon":""}],"bab":"+1","saves":{"will":{"magicModifier":""}},"spellLikes":[{"prepared":0,"cast":0,"name":"Detect Evil","school":"Divination","subschool":""},{"prepared":0,"cast":0,"name":"smite evil","notes":"Once per day, a paladin can call out to the powers of good to aid her in her struggle against evil. As a swift action, the paladin chooses one target within sight to smite. If this target is evil, the paladin adds her Cha bonus (if any) to her attack rolls and adds her paladin level to all damage rolls made against the target of her smite. If the target of smite evil is an outsider with the evil subtype, an evil-aligned dragon, or an undead creature, the bonus to damage on the first successful attack increases to 2 points of damage per level the paladin possesses. Regardless of the target, smite evil attacks automatically bypass any DR the creature might possess.\nIn addition, while smite evil is in effect, the paladin gains a deflection bonus equal to her Charisma modifier (if any) to her AC against attacks made by the target of the smite. If the paladin targets a creature that is not evil, the smite is wasted with no effect.\nThe smite evil effect remains until the target of the smite is dead or the next time the paladin rests and regains her uses of this ability. At 4th level, and at every three levels thereafter, the paladin may smite evil one additional time per day, as indicated on Table: Paladin, to a maximum of seven times per day at 19th level."}],"deity":"irori","homeland":"new jersey"}```

I understand now. With that error and the file you shared it looks like data is from another application.
Sorry but awesomeSheet will not importing files/JSON from other applications. You have to make the character in awesomeSheet and export and import from the app itself.


Sending photos with the embedded camera does not work on Nexus 6p

reported by @orzen:matrix.org
https://github.com/matrix-org/riot-android-rageshakes/issues/2015

I can add some information. Riot.im will launch the camera and it is possible to take the picture but nothing happens after the picture has been taken. My guess is that something goes wrong when either accessing the image or sending the image.


Malicious plugin author action support request.

Earlier today one of the plugins installed in my Better Discord forcibly and permanently disabled all its functionality and replaced itself with a message containing a dark pattern seemingly designed to manipulate users into deleting the file.
There was no prior indication or confirmation of these actions and as of now I am unable to restore the plugin to its previous state as all the code has been replaced.
The plugin in question is Show Hidden Channels by DevilBro.
The plugin was installed via the official Better Discord website. However, I understand that recently the plugin has had support dropped due to updated guidelines. Nonetheless it is clearly unacceptable to delete files from users computers without their consent and attempt to manipulate them with dark patterns.
As such I am inquiring how to raise this issue further so that action can be taken regarding these clearly malicious actions as per the code of conduct mentioned in the CONTRIBUTING readme as well as the new updated guidelines themselves. Which I feel this plugin author has clearly went against both of.
I apologize if this is the wrong place to raise such an issue. I initially inquired on the Better Discord server and was eventually directed  here after being rudely dismissed and having to explain why such a thing was even a concern.
I also now understand after some reading that there has been some degree of friction in the Better Discord community on either side of this issue regarding the plugins removal. Despite that it is my hope that these concerns can still be addressed with civility here as opposed to the responses to the support request on the Better Discord server.

Nonetheless it is clearly unacceptable to delete files from users computers without their consent and attempt to manipulate them with dark patterns.
There was exactly as much consent involved as there is for any plugin update (which never happen automatically), if not more, thanks to the additional popup before a full delete of the file. BDFDB updates are only ever initiated by clicking to update in the notice bar at the top of the app.

DevilBro certainly could have handled the end-of-life update better, but it's a stretch to call it "malicious". If he had chosen to just let the plugin become stale and break over time because he stopped maintaining it then he would have received a flood of clueless users contacting him about it. Doing it this way allowed him to inform all of the users of the plugin that it will no longer be maintained in any official capacity, and if they choose to go seek out an unmaintained copy of the plugin then they (hopefully) won't come to him when it breaks.
To be malicious, the behaviour would have to be intended to do something harmful to users. A plugin which will no longer be maintained informing users of that fact and removing itself to avoid confusion is not a harmful action.

There was exactly as much consent involved as there is for any plugin update (which never happen automatically), if not more, thanks to the additional popup before a full delete of the file.

The situation here is very different from other plugin updates. This in essence is not an update at all. The plugin that is left after the "update" process is entirely different, and even explicitly lacks the feature that users install it for in the first place.

EDIT: It has come to my attention the previous statement may have been inaccurate, which will be investigated further.

DevilBro certainly could have handled the end-of-life update better, but it's a stretch to call it "malicious"

if they choose to go seek out an unmaintained copy of the plugin then they (hopefully) won't come to him when it breaks.

Yes this is another issue that I have recently discovered when attempting to restore the file from a backup, it seems that BDFDB has also been changed to even go so far as to block users from restoring the file themselves from a backup. The restored file is instantly overwritten when loaded.
This is an even more serious and now hopefully very clearly malicious action as now DevilBro is actively trying to dictate what end users are able to achieve on their own machines even after his final update. End users are now unable to seek out and use an unmaintained copy as you suggest.

To be malicious, the behaviour would have to be intended to do something harmful to users. A plugin which will no longer be maintained informing users of that fact and removing itself to avoid confusion is not a harmful action.

The update process completely and permanently disabling the plugin automatically is far beyond just stopping support. The user has decided that they want to have the feature and DevilBro has decided to automatically overrule that decision. That is malicious.
The message could easily have been added without breaking it. He could even have automatically disabled the plugin and ket the deletion message, so it was optional. DevilBro has very deliberately forced his decision on end users and has even now went so far as to create barriers to them manually restoring it themselves.
This is honestly extremely concerning behavior for a trusted developer on such a popular piece of software to be exhibiting, and doubly so is the lackluster response to his actions.

Quoting announcement from Zerebos:
It has come to the attention of the core BetterDiscord team that the end-of-life update for ShowHiddenChannels by DevilBro was automatically applied to users' plugin files without any prerequisite interaction or consent. The potential for this behavior in DevilBro's updater had gone under the radar until now because his library was grandfathered in before the new review system was introduced and assumed to be compliant when more thorough plugin review standards were originally enacted.

Unequivocally, this behavior is unacceptable and should not have occurred or have been possible in the first place. We apologize to anyone inconvenienced or otherwise perturbed by what happened.

DevilBro has been instructed to remove the forced update capability from his library as soon as possible and has agreed to make this change, however, additional measures will be taken to avoid a similar incident of any kind in the future. Specifically, we are working to deploy an update to BetterDiscord which features an integrated addon updater which will always respect user choice, and upon release we will immediately disallow 3rd-party updaters of any kind in officially listed plugins. This update has been in the works for some time now, and though we unfortunately can't travel back in time and release it a week ago to stop any of this from having happened, we'll do the next best thing and fast-track its release starting now.

That is very refreshing to finally hear.
However what of the many users who have already been stung by this unacceptable behavior?
It would be ideal if an official copy of the original plugin could be posted in a trusted location so that anyone who wishes to restore what was forcibly removed from their computer without consent can do so. As opposed to finding potentially malicious copies from untrusted sources.

Unfortunately since the plugin violates the new guidelines, it would be somewhat contradictory to provide it "officially". However, now that DevilBro has removed the forced up date logic from BDFDB, if you get a (currently) working copy of it from the history of his Git repo you can choose to ignore the update notices.

That's unfortunate. I worry that many users unfamiliar with GitHub will see its removal from master and not realize they can get it from a previous commit. For example one commit before the malicious commit:
b510da9b3ad72ba3b773f7d79e391a459f31732d/Plugins/ShowHiddenChannels
This is especially compounded by the fact that simply discussing unsupported plugins or linking to even such an official link is forbidden on the support server now. For everyone, not even just mods and people directly involved with the project. Such information is quickly deleted, often additionally with further penalties too.
These factors will greatly increase the likelihood of end users potentially using malicious copies and as such I feel some form of an exception should be made due to this risk. Perhaps adding to the announcement that people should not trust other sources than old commits from the mwittrien repo for a source of an old copy if they are truly determined to restore it.

Which leaves me to wonder if it is yet another malicious action to force users to be unable to use the plugin. Something which will only serve to further drive users to potentially malicious copies.

Yes, the only purpose of that change was to prevent users from using the plugin if they avoided the automatic update somehow.

Plugins break, whether the author actively discontinues them or the plugin just breaks over time doesn't really matter. It's not malicious, malicious would be stealing a user's account, destroying their system, stealing data, etc. Calling the update that broke SHC is malicious is quite a stretch even if the mechanism that triggered the update without definitely shouldn't exist and was a security threat - but it was removed in the mean time.
The data the library loads is data used for module resolution, css classes for styling, and so on. These are to avoid having to push code updates whenever classes, change or discord modules get moved around. Importantly it doesn't load any code that will be executed.
With the removal of the "heavily outdated" plugin auto update mechanism it can no longer apply code updates without user interaction. Meaning if the plugin could no longer push actually malicious code (account stealers, etc.) to the user without at least requiring the user to click on the update banner to load it.
In the future updates will be handled by BetterDiscord itself and will load updates from the site instead of GitHub directly, so there wouldn't even be an update notice if the update was found to be malicious. But that update is still in the works as of now.
If you consider a plugin author making their own plugin unusable "malicious" - quite honestly - boohoo.

No one has said that authors simply discontinuing their plugins is malicious. If it was just discontinuation, meaning simply that no more work was done to maintain the plugin, that would of course have been absolutely fine.
What actually happened was entirely different, even disregarding the forced automatic update without consent.
An update was pushed that completely broke the plugin and even went so far as to include a dark pattern to fully remove the file.
There are no provisions within BetterDiscord to review the code before an update is applied. Not even the change log can be viewed before applying one. When people see that there is an update to a plugin which has always had earnest updates in the past they are not going to go and download the file outside discord so that they can do a line by line diff of the plugin, especially for an author that is considered trusted. DevilBro knew this would be the case and still pushed the update, which is why it can be labeled malicious.
Additionally, even with the forced update code removed, deliberate changes have been made to BDFDB to disallow users from restoring the file from a backup and having it run. These changes do nothing other than break ShowHiddenChannels.
Discontinuation would mean no more work is done regarding the plugin. What is actually happening is work is being done in relation the the plugin, work with the express and sole purpose of breaking its functionality. That is clearly malicious.
In any case the Better Discord support server is more suited for such tribalism. In this issue I would now rather focus on discussing what can be done to help end users from potentially downloading malicious copies of the plugin due to the unfortunate set of circumstances that DevilBro has helped create.

Additionally, even with the forced update code removed, deliberate changes have been made to BDFDB to disallow users from restoring the file from a backup and having it run. These changes do nothing other than break ShowHiddenChannels.
Discontinuation would mean no more work is done regarding the plugin. What is actually happening is work is being done in relation the the plugin, work with the express and sole purpose of breaking its functionality. That is clearly malicious.

No, it's his code, he can break it if he wants. BDFDB is not meant to be used by other authors.

... what can be done to help [prevent] end users from potentially downloading malicious copies of the plugin ...

It should be as simple as not downloading any copies.
The only thing that can be done, and is being practiced on our official channels, is to tell people to stick to plugins provided at https://betterdiscord.app/plugins, which no longer includes SHC.

Calling the update that broke SHC is malicious is quite a stretch even if the mechanism that triggered the update without definitely shouldn't exist and was a security threat

No, it's his code, he can break it if he wants.

I have already said the Better Discord support server is more suited for such tribalism.

I feel like square addressed every concern you had, what else is an issue here?

The last one that I raised. https://github.com/BetterDiscord/BetterDiscord/issues/1392#issuecomment-1238724404
Clearly users want SHC. They are going to download it. And since it has been admitted that it should never have been forcibly deleted without consent in the first place, I feel that perhaps an announcement mentioning that should they feel strongly enough to manually replace it, then an older commit from the official repo before the malicious change would be safest.

The last one that I raised. https://github.com/BetterDiscord/BetterDiscord/issues/1392#issuecomment-1238724404
Clearly users want SHC. They are going to download it. And since it has been admitted that it should never have been forcibly deleted without consent in the first place, I feel that perhaps an announcement mentioning that should they feel strongly enough to manually replace it, then an older commit from the official repo before the malicious change would be safest.

That's not really possible to do as there's been updates to the library, and the plugin simply wouldn't work without modifying the code of both the old plugin and library, and even if modified, has a high chance to break again in short time. It wouldn't make things better.

Yes I have noticed that 0BDFDB.data.json is being modified without consent which breaks SHC again. So that's BDFDB.PluginUtils.downloadUpdate?
Strongly agree that more options for updates are sorely needed. At the absolute minimum the changelog should be visible before the update. Ideally also the code with simple differences. Or a direct link so that users can do this themselves less tediously than they have to do currently.

I feel like square addressed every concern you had, what else is an issue here?

Since this is an unrelated repo to bdfdb, until the new update feature comes out, there’s nothing that really can nor should be be done. The only thing I will add in context of square’s upcoming solution is that in order to avoid being the same dark pattern is to have three additional elements: an “ignore this update” option, a link to the associated commit, and third party code reviews to officially supported BD plugin updates. The last one might be a stretch considering this isn’t some corporation and everyone is doing this on their free time, but considering that as long as BDFDB.PluginUtils.downloadUpdate still exists in his library (which it does), the same thing can happen.

We will make sure the functionality that caused this will be non-existent in his library or plugins anymore.
As for the new updater, you can be sure it's in our best interest to make the user have control around the updates, as well as security features from us such as the manual commit reviews, hash checking, etc.

Plugins break, whether the author actively discontinues them or the plugin just breaks over time doesn't really matter. It's not malicious, malicious would be stealing a user's account, destroying their system, stealing data, etc. Calling the update that broke SHC is malicious is quite a stretch even if the mechanism that triggered the update without definitely shouldn't exist and was a security threat - but it was removed in the mean time.
This alone says everything that needs to be said. DevilBro's plugins are his own code, his DBFDB library is his to update and if letting users keep using his plugin now that it is against Discord' s TOS goes against his goals, wishes or morals, it is his right to make an update to his library so that future versions aren't compatible with said plugin, speeding up the process where the plugin will break if not maintained by someone else.

There is a sound argument to be made about not wanting to annoy Discord too much and not to go too much against their TOS when possible. BetterDiscord is already technically against Discord's TOS inherently by virtue of being a modified client. So far, Discord tolerates it since it hasn't caused them much trouble, but as soon as Discord gets a bit too annoyed, they can try and take down this project in some way, be it legal recourses or some form of discord update making it impossible (or extremely hard) to modify the client.
What will you do when, after a "Insert X bad event on numerous large Discord servers" happens, Discord starts using checksums, cryptography or other technique to make it nearly impossible for BetterDiscord to keep existing? Or worse, Discord does a ban wave against tens of thousands of better discord users? I hope seeing hidden channels will have been worth it.
I fail to see any issue left now that the auto-update feature is removed and the official updating feature is coming. Yes, auto-updating a plugin with breaking changes is bad, but with DevilBro's contribution to this community, i'm happy to forgive this mistake.

There is a sound argument to be made about not wanting to annoy Discord too much and not to go too much against their TOS when possible. BetterDiscord is already technically against Discord's TOS inherently by virtue of being a modified client. So far, Discord tolerates it since it hasn't caused them much trouble, but as soon as Discord gets a bit too annoyed, they can try and take down this project in some way, be it legal recourses or some form of discord update making it impossible (or extremely hard) to modify the client.

I understand your position however I believe we are a bit past hoping Discord doesn't take notice or trying to operate in a grey area. All it takes at this point is someone who doesn't care enough about their presence on Discord to make this blow up significantly. Sure they get banned, but if they feel strongly enough maybe it's worth it.

What will you do when, after a "Insert X bad event on numerous large Discord servers" happens, Discord starts using checksums, cryptography or other technique to make it nearly impossible for BetterDiscord to keep existing? Or worse, Discord does a ban wave against tens of thousands of better discord users? I hope seeing hidden channels will have been worth it.

X bad thing, like someone changing files on a user's computer without any prompting or consent? If you wish to call it a mistake, it is a very costly one that can sink the entire project because Devilbro decided he didn't want people to make the "wrong" choice. Realistically, he has successful test data should he want to do this again. What is the expectation being set then? "Devilbro has written the majority of the plugins we have, and he decided to skip the user in taking an action because his "hand was forced". He won't do that again if he finds reason enough to do so...maybe, trust me bro." Yes it is his code, but everyone's consequences when he chooses to do what he did.

X bad thing, like someone changing files on a user's computer without any prompting or consent? If you wish to call it a mistake, it is a very costly one that can sink the entire project because Devilbro decided he didn't want people to make the "wrong" choice. Realistically, he has successful test data should he want to do this again. What is the expectation being set then? "Devilbro has written the majority of the plugins we have, and he decided to skip the user in taking an action because his "hand was forced". He won't do that again if he finds reason enough to do so...maybe, trust me bro." Yes it is his code, but everyone's consequences when he chooses to do what he did.

Crazy how people don't see this as an issue and the guy hasn't been blacklisted. Literally installed it for a week and came to see wtf was happening, only to come across such weak responses from contributors... Good luck with the project I guess, don't see the need to take risks for just a few extra Discord functionalities.

As for the original issue here, we have indeed taken action against this developer, and also forced them to remove the code that allows them to force updates like they did. Since this has been removed from their library, every subsequent update from them will be given extra scrutiny during the manual review.
To be clear though, the BetterDiscord team stands behind the removal of the plugin from our website. However, we do not condone the subsequent actions of the developer that force removed the plugin without user approval.
As for the discussion around updates, the first version of the official update system has now been released and only updates through manually approved releases. I agree it would be a good utility to be able to link users to a diff or have a changelog that displays beforehand. If you want, feel free to open a new issue for that since it is out of scope for this one.


How to run model trained with python on Scala

I trained model with python. I got xxxxx.params and xxxxx.json files.
However, there files coludn’t load scala.
In this case same(https://github.com/apache/incubator-mxnet/issues/9859).
At this issue, It is written that it can be solved by replacing attrs.
I want to know how to convert json file.
scala
import ml.dmlc.mxnet._
val sym = Symbol.load("mx_mlp-symbol.json")

log
[10:09:49] include/dmlc/./logging.h:308: [10:09:49] /mxnet/dmlc-core/include/dmlc/././json.h:842: JSONReader: Unknown field attrs, candidates are:
"attr"
"backward_source_id"
"control_deps"
"inputs"
"name"
"op"
"param"

json file
{
  "nodes": [
    {
      "op": "null",
      "name": "data",
      "inputs": []
    },
    {
      "op": "_copy",
      "name": "id",
      "inputs": [[0, 0, 0]]
    },
    {
      "op": "null",
      "name": "in_stem_conv1_3*3_conv2d_weight",
      "attrs": {
        "kernel": "(3, 3)",
        "no_bias": "True",
        "num_filter": "32",
        "pad": "(0, 0)",
        "stride": "(2, 2)"
      },
      "inputs": []
    },
    {
      "op": "Convolution",
      "name": "in_stem_conv1_3*3_conv2d",
      "attrs": {
        "kernel": "(3, 3)",
        "no_bias": "True",
        "num_filter": "32",
        "pad": "(0, 0)",
        "stride": "(2, 2)"
      },
      "inputs": [[1, 0, 0], [2, 0, 0]]
    },
.
.
.
.

I used

Docker(mxnet/scala)
latest(Apr.12, 2018)
scala
mxnet-scala-native-parent-0.12.0-SNAPSHOT-javadoc.jar
Docker(mxnet/python)
latest(Apr.12, 2018)
python:
python 3.6
mxnet 1.1.0

Hi,
all attrs must be replace by attr except the last one.
Regards

@nswamy Can you please add labels-
Question, Scala

@BenLag2906
Thanks, I changed it, it worked!!


Overlapping GCP organization domain IAM (bootstrap)

Hi
Default setup is today with 2 roles on organization domain level:
roles/browser
roles/resourcemanager.organizationViewer
Browser gives the following permissions:

resourcemanager.folders.get
resourcemanager.folders.list
resourcemanager.organizations.get
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy
resourcemanager.projects.list

Organization viewer gives the following permissions:

resourcemanager.organizations.get

The right resourcemanager.organizations.get is in both. In this example the Organization Viewer right is redundant. It is not clear from the name that it contains both so from that perspectice I understand why both are applied.
There is another discussion about the default rights.
It can be discussed if getIamPolicy is something that all users should have. Folder Viewer may contain a better set of permissions.
Have not seen any recommendation on what permissions to give on organization level from Google. Except least privilige.
If Folder Viewer is used then Organization Viewer is needed.
References, doc & TF:
https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/blob/master/fast/stages/00-bootstrap/IAM.md
https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/blob/master/fast/stages/00-bootstrap/organization.tf
Cheers and keep up the good work

Hey Michael, thanks for raising this!
You're right, the roles assigned to domain users are in overlap and it probably stems from the fact many users remove the browser role, and only keep organization viewer. +1 to removing organization viewer, I would maybe also add a comment to point out that it might be a sensible default if no other roles are given. Would you care sending a PR?
Folder admin is granted to org admins to allow them to effectively manage folders. We default to "open" permissions for org admins as those are usually tightened up progressively after install. They can anyway self-assign pretty much anything via the org admin role, so it's not that big of a difference in terms of actual security.
Happy to discuss this further of course!

I can try to send a PR later if I get the time to register myself.
We can discuss permissions for a long time, but I agree, difference in terms of actual security is not so big. And it most likely will be something that you should change when implementing. Still, nice that the baseline is secure as it can get right out of the box


Inaccurate Recovery from Double-panic in Translated Haxe Code

Description
When translating a Go program using go2hx, the Haxe code produced does not handle panic and recover calls correctly. In the Go source code, the final panic value is overridden by a subsequent panic within deferred functions. However, in the translated Haxe code, the overridden panic is not properly caught by recover, resulting in an uncaught exception error.
Source Go Code:
package main
import "fmt"
func recoverAndPrint() {
    fmt.Println(recover())
}
func main() {
    defer recoverAndPrint()
    defer recoverAndPrint()
    defer panic(55)
    panic(22)
}

Go Output:
55
<nil>

Translated Haxe Code
The translated Haxe code attempts to replicate the Go code logic but encounters an error:
package _internal;
function main():Void {
    var __deferstack__:Array<Void -> Void> = [];
    try {
        __deferstack__.unshift(() -> _internal.Runner__recoverAndPrint._recoverAndPrint());
        __deferstack__.unshift(() -> _internal.Runner__recoverAndPrint._recoverAndPrint());
        {
            var _a0 = (55 : stdgo.GoInt);
            __deferstack__.unshift(() -> throw stdgo.Go.toInterface(_a0));
        };
        throw stdgo.Go.toInterface((22 : stdgo.GoInt));
        {
            for (defer in __deferstack__) {
                defer();
            };
            if (stdgo.Go.recover_exception != null) throw stdgo.Go.recover_exception;
            return;
        };
    } catch(__exception__) {
        var exe:Dynamic = __exception__.native;
        if ((exe is haxe.ValueException)) exe = exe.value;
        if (!(exe is stdgo.AnyInterface.AnyInterfaceData)) {
            if (__exception__.message == "__return__") throw "__return__";
            exe = stdgo.Go.toInterface(__exception__.message);
        };
        stdgo.Go.recover_exception = exe;
        for (defer in __deferstack__) {
            defer();
        };
        if (stdgo.Go.recover_exception != null) throw stdgo.Go.recover_exception;
        return;
    };
}

Additional Haxe Code:
package _internal;
function _recoverAndPrint():Void {
    stdgo._internal.fmt.Fmt_println.println(({
        final r = stdgo.Go.recover_exception;
        stdgo.Go.recover_exception = null;
        r;
    }));
}

Haxe Output Error:
_internal/Runner.hx:9: characters 42-47 : Uncaught exception 55
_internal/Runner.hx:28: characters 13-20 : Called from here

Observation:
In the Go code, the initial panic(22) is overridden by panic(55) in the deferred statement. The recover in recoverAndPrint captures panic(55) in the second deferred function and then returns nil in the first. However, in the Haxe translation, panic(55) is not overridden, leading to an uncaught exception.
Suggested Fix:
The translation should ensure that deferred panic calls can override an existing panic, similar to Go's handling. Modifying recover_exception in Haxe to properly reflect the latest panic may resolve this.
Additional Information
Go Version: go1.23.0
go2hx Version: commit d642122c8cbfcbacadb30ca2478875fa59526d76 (HEAD -> master, origin/master, origin/HEAD))
Haxe Version: 4.3.6

I think @PXshadow is aware that this aspect of Go's behaviour is not yet properly emulated @Yeaseen .
From my own experience (developing TARDISgo) it is possible to emulate panic/recover, but exact replication may not be possible. I seem to recall that a "panic stack" is required.
How goroutines are implemented may also affect how the panic process works (you need a panic-stack per goroutine), they are currently only implemented on targets which support threading, and then only on an experimental basis.
Still, this is a useful issue to have opened @Yeaseen , thank you. I suspect it may not be resolved until 2025.

Thank you for your great insights @elliott5. I was also thinking of some sort of stack for each goroutine to tackle this. Let's keep this open.

In addition to a panic stack how should go2hx handle this?
package main

func main() {
	defer func() {
		println("try to recover")
		recover()
	}()
	defer func() {
		println("panic!")
		panic("issue")
	}()
}

Haxe:
panic!
panic!
Uncaught exception: issue

Go:
panic!
try to recover

At the moment if a panic occurs then it gets caught in a try catch and tries to run all of the defer funcs again.

@PXshadow, for the above go code:
I think, first, you have to track if there's an active panic because only one panic can be "active" at a time in Go, and calling recover() within a deferred function clears that panic. To mimic this in Haxe, I used a boolean activePanic flag to track the active panic status.
Second, in Go, recover() works only in a deferred function during a panic, capturing and clearing it to allow the program to continue. I implemented this in Haxe by adding logic to the first deferred function to print "try to recover", check if stdgo.Go.recover_exception is not null, and clear the panic by setting recover_exception to null and activePanic to false.
Third, since a new panic in a deferred function doesn’t override an existing panic in Go, I added a check in the second deferred function to print "panic!" and trigger a panic (stdgo.Go.recover_exception = "issue") only if activePanic is false, then set activePanic to true.
Finally, as Go executes deferred functions in LIFO order, the Haxe code iterates through __deferstack__ in reverse order, calling each deferred function sequentially.
My modified Haxe code that mimics the Go code as expected:
package _internal;
function main():Void {
    var __deferstack__:Array<Void -> Void> = [];

    // Track if there's an active panic
    var activePanic:Bool = false;

    try {
        // First deferred function to attempt recovery
        __deferstack__.unshift(() -> {
            stdgo._internal.fmt.Fmt_println.println(stdgo.Go.toInterface("try to recover"));
            if (stdgo.Go.recover_exception != null) {

                // Recover and clear the panic
                stdgo.Go.recover_exception = null;
                activePanic = false;
            }
        });

        // Second deferred function that triggers a panic
        __deferstack__.unshift(() -> {
            if (!activePanic) {
                // Trigger panic only if there's no active panic

                stdgo._internal.fmt.Fmt_println.println(stdgo.Go.toInterface("panic!"));
                stdgo.Go.recover_exception = stdgo.Go.toInterface("issue");
                activePanic = true;
            }
        });

        // Execute deferred functions in reverse order
        for (defer in __deferstack__) {
            defer();
            // Check if there is an active panic after each defer
            if (stdgo.Go.recover_exception != null) throw stdgo.Go.recover_exception;
        }
    } catch(__exception__) {
        var exe:Dynamic = __exception__.native;
        if ((exe is haxe.ValueException)) exe = exe.value;
        if (!(exe is stdgo.AnyInterface.AnyInterfaceData)) {
            exe = stdgo.Go.toInterface(__exception__.message);
        };
        stdgo.Go.recover_exception = exe;
        for (defer in __deferstack__) {
            defer();
        };
        if (stdgo.Go.recover_exception != null) throw stdgo.Go.recover_exception;
    }
}

Haxe Output:
command: haxe --main _internal.Runner -lib go2hx --interp
panic!
try to recover

Well done @Yeaseen , great demonstration code.
I think the change would be easier to implement if the activePanic logic was either the same in every deferred function, or occurred when the __deferstack__ was unwound.

Yeah I would be interested to see if it was possible to create the logic @elliott5 described.
Here is the new compiled Haxe code for the example I wrote above (it functions the same as Go):
package _internal.github_dot_com.go2hx.go4hx.rnd;
function main():Void {
    var __deferstack__:Array<Void -> Void> = [];
    try {
        __deferstack__.unshift(() -> {
            var a = function():Void {
                stdgo.Go.println(("try to recover" : stdgo.GoString));
                ({
                    final r = stdgo.Go.recover_exception;
                    stdgo.Go.recover_exception = null;
                    r;
                });
            };
            a();
        });
        __deferstack__.unshift(() -> {
            var a = function():Void {
                stdgo.Go.println(("panic!" : stdgo.GoString));
                if (stdgo.Go.recover_exception != null) throw stdgo.Go.toInterface(("issue" : stdgo.GoString));
            };
            a();
        });
        {
            for (defer in __deferstack__) {
                defer();
            };
            if (stdgo.Go.recover_exception != null) throw stdgo.Go.recover_exception;
            return;
        };
    } catch(__exception__) {
        var exe:Dynamic = __exception__.native;
        if ((exe is haxe.ValueException)) exe = exe.value;
        if (!(exe is stdgo.AnyInterface.AnyInterfaceData)) {
            if (__exception__.message == "__return__") throw "__return__";
            exe = stdgo.Go.toInterface(__exception__.message);
        };
        stdgo.Go.recover_exception = exe;
        for (defer in __deferstack__) {
            defer();
        };
        if (stdgo.Go.recover_exception != null) throw stdgo.Go.recover_exception;
        return;
    };
}

The issue before also was that if a function had a defer call in it, it would also turn the defer function bodies into a try catch, and catch the panic inside the function, without going to the function it was supposed to being the most outer one.
Panic overwriting is still on the table in terms of how to implement it. Any ideas especially pattern wise to implement it for a compiler would be very helpful.

I think a thread-specific stdgo.Go.recover_exception (and possibly other data in future) needs to be held in (or referenced by) Thread Local Storage for targets where goroutines are implemented by sys.thread. Otherwise a panic in one goroutine will potentially affect all the others. This might need a separate issue.


[CRB-294] Don't treat no entries under a state prefix as an error

Before this PR, when looking up states by prefix, we issue an error if there are no states. The filter operations in the TP expect a non-error response in this case.

Replaced by https://github.com/gluwa/Creditcoin-Processor-Rust/pull/54


Create workflow for release automation

We need a workflow that builds & uploads an artifact automatically when a new release is created

After like one million tries I got it working with v0.0.1-dev


[decomp] broken actors

[ ] orbit-plat doesn't actually orbit
[ ] sunken-pipegame totally broken and you can't even press the blue button
[ ] periscope doesn't work, you can't actually focus the first beam and the arrow doesnt point to anywhere
[ ] fisher crashes entering fish game
[ ] plant-boss is very shy and disappears if you get close, but reappears if you go far enough away.


Start ClickOnce Application with AppiumOptions

Hello.
I have some problems with starting click-once application by AppiumOptions class.
My code is too simple:
AppiumOptions appiumOptions = new AppiumOptions();
appiumOptions.AddAdditionalCapability("ms:waitForAppLaunch", "30");
appiumOptions.AddAdditionalCapability("ms:experimental-webdriver", false);
appiumOptions.AddAdditionalCapability("deviceName", "WindowsPC");
appiumOptions.AddAdditionalCapability("platformName", "Windows");
appiumOptions.AddAdditionalCapability("app", "C:\Path\To\My\ApplicationName.appref-ms");

var winDriver = new WindowsDriver<WindowsElement>(new Uri("http://<IP_ADDRESS>:4723"), appiumOptions);

and I catch Exception "OpenQA.Selenium.WebDriverException: 'Failed to locate opened application window with appId: C:\Path\To\My\ApplicationName.appref-ms, and processId: 7356'" on the last line, but my click once app;ication starts without any problems.
I am using ms:waitForAppLaunch with 30 seconds of timeout (it's enought) but it can't help me.

Does you application have a splash screen? Check the window name after the application is opened.
In the screen shot I see that you starting the application from app data roaming. folder, better option will be to start the application from cortana.
[ClassInitialize]
public static void Setup(TestContext context)
{
// Create a session for Desktop
DesiredCapabilities desktopCapabilities = new DesiredCapabilities();
desktopCapabilities.SetCapability("app", "Root");
desktopSession = new WindowsDriver(new Uri(WindowsApplicationDriverUrl), desktopCapabilities);
Assert.IsNotNull(desktopSession);
        // Launch Cortana Window using Windows Key + S keyboard shortcut to allow session creation to find it
        desktopSession.Keyboard.SendKeys(OpenQA.Selenium.Keys.Meta + "s" + OpenQA.Selenium.Keys.Meta);
        Thread.Sleep(TimeSpan.FromSeconds(1));
        WindowsElement CortanaWindow = desktopSession.FindElementByName("Cortana");
        string CortanaTopLevelWindowHandle = CortanaTopLevelWindowHandle = (int.Parse(CortanaWindow.GetAttribute("NativeWindowHandle"))).ToString("x");

        // Create session for already running Cortana
        DesiredCapabilities appCapabilities = new DesiredCapabilities();
        appCapabilities.SetCapability("appTopLevelWindow", CortanaTopLevelWindowHandle);
        cortanaSession = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
        Assert.IsNotNull(cortanaSession);

        // Set implicit timeout to 5 seconds to make element search to retry every 500 ms for at most ten times
        cortanaSession.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
    }

And to start the application I use the below code to find add and remove programs, you can use your application name:
// Type "add" in Cortana search box
searchBox.SendKeys("add");
Thread.Sleep(TimeSpan.FromSeconds(1));
var bingPane = cortanaSession.FindElementByName("Bing");
Assert.IsNotNull(bingPane);
        // Verify that a shortcut to "System settings Add or remove programs" is shown as a search result
        var bingResult = bingPane.FindElementByXPath("//ListItem[starts-with(@Name, \"Add or remove\")]");
        Assert.IsNotNull(bingResult);
        Assert.IsTrue(bingResult.Text.Contains("System settings"));

You can find more info at the below link:
https://github.com/microsoft/WinAppDriver/wiki/Frequently-Asked-Questions

Hi @vberesnev ,
I had an experience automating ClickOnce application using the WinAppDriver.
The main point of the solution is that you need to start your "C:\Path\To\My\ApplicationName.appref-ms" as a process, and then attach to the opened application using the WinAppDriver root session (also known as "desktop session").
It was quite tricky for me, also I needed to handle application updates, so we ended up with creating a wrapper over the WinAppDriver - this one: https://github.com/aquality-automation/aquality-winappdriver-dotnet. It has in-build utilities to work with the root session, handling the process start/stop, starting WinAppDriver programmatically. You can specify all the capabilities you need in the settings.json file instead of hardcoding them. It has a fancy logging for all build-in methods. It also implements PageObject pattern, have built-in classes for common UI elements, such as Forms, WIndows, TextBoxes, Buttons and so on.
You can add this library as a Nuget package Aquality.WinAppDriver
Please take a look at example test here: https://github.com/aquality-automation/aquality-winappdriver-dotnet/blob/master/Aquality.WinAppDriver/tests/Aquality.WinAppDriver.Tests/Applications/WindowHandleApplicationFactoryTests.cs . What you need will look very similar and quite simple:
using Aquality.WinAppDriver.Applications;
using Aquality.WinAppDriver.Extensions;
using Aquality.WinAppDriver.Forms;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Windows;
using System;

namespace YourNamespace
{
    public class YourClass
    {
        private const string ApplicationPath = @"C:\Path\To\Your\ApplicationName.appref-ms";
        // we prefer to store such path in settings.json, but you could have it in code if you mind

        static void Main(string[] args)
        {
            AqualityServices.ProcessManager.Start(ApplicationPath);
            AqualityServices.SetWindowHandleApplicationFactory(rootSession => new ApplicationWindow(() => rootSession).GetNativeWindowHandle());
            // continue working with your application using respective Window/Form classes
        }

        private class ApplicationWindow : Window
        {
            public ApplicationWindow(Func<WindowsDriver<WindowsElement>> customSessionSupplier)
                : base(MobileBy.AccessibilityId("YourAppWindowLocator"), "Your Application", customSessionSupplier)
            {
            }
        }
    }
}

Hi @vberesnev ,
I had an experience automating ClickOnce application using the WinAppDriver.
The main point of the solution is that you need to start your "C:\Path\To\My\ApplicationName.appref-ms" as a process, and then attach to the opened application using the WinAppDriver root session (also known as "desktop session").
It was quite tricky for me, also I needed to handle application updates, so we ended up with creating a wrapper over the WinAppDriver - this one: https://github.com/aquality-automation/aquality-winappdriver-dotnet. It has in-build utilities to work with the root session, handling the process start/stop, starting WinAppDriver programmatically. You can specify all the capabilities you need in the settings.json file instead of hardcoding them. It has a fancy logging for all build-in methods. It also implements PageObject pattern, have built-in classes for common UI elements, such as Forms, WIndows, TextBoxes, Buttons and so on.
You can add this library as a Nuget package Aquality.WinAppDriver
Please take a look at example test here: https://github.com/aquality-automation/aquality-winappdriver-dotnet/blob/master/Aquality.WinAppDriver/tests/Aquality.WinAppDriver.Tests/Applications/WindowHandleApplicationFactoryTests.cs . What you need will look very similar and quite simple:
using Aquality.WinAppDriver.Applications;
using Aquality.WinAppDriver.Extensions;
using Aquality.WinAppDriver.Forms;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Windows;
using System;

namespace YourNamespace
{
    public class YourClass
    {
        private const string ApplicationPath = @"C:\Path\To\Your\ApplicationName.appref-ms";
        // we prefer to store such path in settings.json, but you could have it in code if you mind

        static void Main(string[] args)
        {
            AqualityServices.ProcessManager.Start(ApplicationPath);
            AqualityServices.SetWindowHandleApplicationFactory(rootSession => new ApplicationWindow(() => rootSession).GetNativeWindowHandle());
            // continue working with your application using respective Window/Form classes
        }

        private class ApplicationWindow : Window
        {
            public ApplicationWindow(Func<WindowsDriver<WindowsElement>> customSessionSupplier)
                : base(MobileBy.AccessibilityId("YourAppWindowLocator"), "Your Application", customSessionSupplier)
            {
            }
        }
    }
}

Hello!
Thank you for your answer! I am using the way then I get Desktop WAD Session, and then I get my opened application.
I see you have good knowledge of WinAppDriver. Can you help me with my second issue?
https://github.com/microsoft/WinAppDriver/issues/1182
I need to "refresh" UA tree, but I don't know how I can do it

@vberesnev From what I know, WAD "refreshes" elements tree by default each time you're searching for the element.
Do you experience some "caching" that makes you unable to find elements in the changed UI?
If so, then you probably searching relatively from some element, and you need to update the searchContext source.
For example,
var parentElement = driverSession.FindElement(By.Name("parentName"));
var childElement = parentElement .FindElement(By.Name("childName"));
// <...> some actions, as result you have UI changed
var newChildElement = parentElement .FindElement(By.Name("newChildName")); //this could fail as you cached parentElement before your changing UI actions
//you need to refresh the search context of the parent, by finding it again:
parentElement = driverSession.FindElement(By.Name("parentName"));
//now you should be able to find your new child:
var newChildElement = parentElement .FindElement(By.Name("newChildName")); //this could fail as you cached parentElement before your changing UI actions
If I'm getting this wrong and it's not what happening in your case, please describe in more details: what problems are you facing with?

@mialeska Thank you, I will try your method and write feedback to you!

@mialeska I tried it:
//App is opened on the first page

var parentElement = driver.FindElement(By.Name(_mainWindowTitle)); //Get application window as parent element

parentElement.ClearCache();   // with this method and without it - no result
parentElement.DisableCache(); // with this method and without it - no result

var menu = parentElement.FindElementByAccessibilityId("mergedMenuControl"); //get menu element

var menuItems = menu.FindElements(By.ClassName("Button")); //get buttons array
menuItems[1].Click(); // click second page, second page open

Thread.Sleep(5000); //sleep for load second page

parentElement = driver.FindElement(By.Name(_mainWindowTitle)); //reload parent
var chart = parentElement.FindElements(By.ClassName("ChartGroupContainerView")).FirstOrDefault(); //second try to reloading parent on the second page (returns NULL)

if (chart == null)
{
    parentElement = driver.FindElement(By.Name(_mainWindowTitle)); //second try to reloading parent
    chart = parentElement.FindElements(By.ClassName("ChartGroupContainerView")).FirstOrDefault(); //second try to find element
}

chart.Click(); //Exception because of chart is NULL

I tried to reload WinAppDriver process and get new session (I get new session, but I still could not find element on the second page).
I have not any ideas...

@vberesnev I'm afraid that your problem is that your second page is not attached to your main window. AFAIK the best option here would be to search for the parent windowElement of your second page from the root (desktop) WAD session, and then to find your elements relatively from that windowElement.
As I said before, from my perspective the most convenient way to handle this is implemented within Aquality.WinAppDriver package, you should give it a try :)

@mialeska I used Inspect.exe for find UI elements name, classe and id. So, then I open my app on the first page, I see elements for first page (and main window is parent). Then I click menu item, second page opened, but in Inspect elements tree does not reload. I press "refresh" button, but it does not help. And only after my click to some element on the second page, Ispect refreshes elements tree.

@mialeska It seems I find the resolve of this problem! But it's too ugly, lol :)
Using Inspect.exe I noticed that refresh of UI elements starts after mouse over one of element second page.
But I haven't access to this element by name or id before refreshing.
So my actions: I open second page, move mouse coursor to the element by pixcel coordinate (my app is fulscreen), after that WAD refreshs tree and I have access to the UI elements of the second page.
Thank you so much, you gave me way to resolving my issue! :)
Have a nice day!

@vberesnev how exactly did you move mouse cursor? I tried "moveToElement" but it didn't help.

@splekhan Hello!
moveToElement can't help you because WAD doesn't see needed element before reloading of UI elements tree.
So, I'm using this crutch:
var parentElement = driver.FindElement(By.Name(_mainWindowTitle)); //Get application window as parent element

 var menu = parentElement.FindElementByAccessibilityId("MenuControl"); //get menu element

 var menuItems = menu.FindElements(By.ClassName("Button")); //get buttons array
menuItems[1].Click(); // click second page, second page open

Thread.Sleep(2000); // sleep for load second page

driver.Mouse.MouseMove(parentElement.Coordinates, 575, 75); // move mouse to element with coordinates 575,75 for activate mousehover event and reloading UI elements tree
Thread.Sleep(5000);

I have reloading of UI tree after mouse over to button on second page and tooltip showing.
It is terrible solution to the problem, but it's work for me

@splekhan Hello!
moveToElement can't help you because WAD doesn't see needed element before reloading of UI elements tree.
So, I'm using this crutch:
var parentElement = driver.FindElement(By.Name(_mainWindowTitle)); //Get application window as parent element

 var menu = parentElement.FindElementByAccessibilityId("MenuControl"); //get menu element

 var menuItems = menu.FindElements(By.ClassName("Button")); //get buttons array
menuItems[1].Click(); // click second page, second page open

Thread.Sleep(2000); // sleep for load second page

driver.Mouse.MouseMove(parentElement.Coordinates, 575, 75); // move mouse to element with coordinates 575,75 for activate mousehover event and reloading UI elements tree
Thread.Sleep(5000);

I have reloading of UI tree after mouse over to button on second page and tooltip showing.
It is terrible solution to the problem, but it's work for me

Thank you! I'll try this and let you know how it went.
I think that the issue we've faced with is kinda popular. WAD should have the caution on its "box" to warn consumers about the inability to refresh the elements.
My app allows to perform "Refresh" by clicking the button in Inspect.exe and it helps. Maybe it's a good idea to invoke this API method using driver.

@vberesnev thanks again, but it seems like it's not my solution. I noticed that pane tree doesn't refresh when I hover mouse even manually. Only Inspect.exe "Refresh" button does that.

@splekhan As I know WAD should reload tree automatically.
So, how I found this solution:
I open my app, open Isnpect.exe, open second page (Insect did't reload tree), and I was looking for any case, then Inspect.exe reload the tree automatically, without button "refresh". So, I found, if I cover by mouse some button on second page (without click!!!) and invoke tool tip and then I move mouse to some free space -> Inspect.exe reloads UI tree automatically.
So I started to use this case in my app.
 Watch mine!
    protected void reloadElements() {
        URL url = null;
        try {
            url = new URL(DRIVER_HUB_URL);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        WebElement existingWindow = getWebDriver().findElement(By.name("Window title name"));
        RemoteWebDriver existingWindowSession = null;
        int handle = Integer.parseInt(existingWindow.getAttribute("NativeWindowHandle"));
        String currentHandle = Integer.toHexString(handle);
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("appTopLevelWindow", currentHandle);
        existingWindowSession = new RemoteWebDriver(url, caps);
        setWebDriver(existingWindowSession);
    }

@splekhan My solution depends on app window, so if app will not be open full screen or place of elelment will be changed - my solution will go to trash :)
I tried reopen win app driver and reattach my application to it, but it didn't work for me


Node discovery updates

Apply compute node count, check against graph status count
Remove static node count
Get status from AMQP message body (avoid persistent status)

@RackHD/corecommitters @tannoa2 @uppalk1 @zyoung51 @keedya

:+1:

+1

+1

:+1:


#11812 allow hostPath as datadir

What this PR does / why we need it:

allow hostPath as datadir for stable/redis-ha

Which issue this PR fixes

fixes #11812

Special notes for your reviewer:
Checklist
[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]

[x] DCO signed
[x] Chart Version bumped
[x] Variables are documented in the README.md (documented in values.yaml because the other persistence parameters are also only there)

/assign @ssalaues

I think is a pretty interesting addition to the chart. I'll test out the behavior on my cluster since I don't have ok-to-test privilege.

/ok-to-test

@ssalaues are you ok with this change?

/lgtm


Error if the youtube link is unvailable

video = Video.get(link, mode = ResultMode.json)
print(video)

If we give an unvailable link, it returns an error.

Hi @Darkempire78 !
I've marked this issue as enhancement, because I don't see a reason behind why one is passing an "unavailable link".
You can make use of "try except" to deal with this I believe.
Should I raise some another exception according to your requirement?
What I can do on my behalf is add another fancy exception. Still you have to do "try except" stuff.
Let me know, if I misunderstood you or give me bit information like how you want it function in such case.
Greetings! 🍀

Hi @Darkempire78 !
I've marked this issue as enhancement, because I don't see a reason behind why one is passing an "unavailable link".
You can make use of "try except" to deal with this I believe.
Should I raise some another exception according to your requirement?
What I can do on my behalf is add another fancy exception. Still you have to do "try except" stuff.
Let me know, if I misunderstood you or give me bit information like how you want it function in such case.
Greetings! 🍀

Currently I use a try/except sytem, but i think that return None is better than return an error.
I use this code to check if th link exist, perhaps there is another system ?

Currently I use a try/except sytem, but i think that return None is better than return an error.
I use this code to check if th link exist, perhaps there is another system ?

Hi @Darkempire78,
I hope latest commits make improvements for you.
Have a good day.

Hi @Darkempire78,
I hope latest commits make improvements for you.
Have a good day.


nrf: add initial support for CLOCK and RADIO

I added support for basic transmission and reception of packets using the RADIO peripheral. In order to use the radio, the high-frequency clock needs to be running using the external oscillator (XO). Therefore, also added support for configuring the low- and high-frequency clocks.
fixes #432

Thanks for the PR!
Configuring clocks is already supported in  embassy_nrf::init here. We shouldn't have two APIs to do the same. The API you added aditionally supports changing the configuration at runtime, which is nice! We can add that to the existing API, however I think it's not strictly required for using the radio so if we do that it'd be a better fit in a separate PR.
About RADIO: As I said in #432, I'm concerned that adding async at such a low layer might prevent implementing protocols because it's too slow or not flexible enough. For example, Nordic's SoftDevice (proprietary BLE stack) makes extensive use of interrupts, peripheral shortcuts, PPI, one RTC and one TIMER.
Do you have any protocol in mind that you want to implement? It would be nice to have some evidence that this approach is viable for implementing higher level protocols on top.

About the clock configuration: Agreed, there should be only one API to configure the clocks. Using embassy_nrf::init you loose the syntactic sugar of embassy::main, but otherwise it works just fine. I had a quick look at the product specification for the nrf52810, apart from current consumption differences in using timers, there is no need to switch the hf-clock source during runtime. I therefore removed the clock API again.
About the radio: my current use case is sending short messages from battery powered sensors. For this, I am using my proprietary protocol. I have had a look at the protocols you suggested: IEEE 802.15.4 seems like a good protocol for what I am doing, but the only chip I have access to (nrf52810) does not support it; ESB and BLE are supported by the nrf52810. I have yet to investigate, if there is a PoC I can do in a reasonable time.
Do you already have an idea of your preferred architecture for the protocol implementation? I understand that building it up layer by layer might not work due to overhead (see you comment in #432). Do you see the protocol implementation outside of the scope of embassy? Or do you see different APIs (radio_ble, radio_generic, radio_esb, etc) placed behind feature flags as needed?

Hey @hannes-hochreiner are you on matrix?
The smoltcp (now with 6lowpan), embassy and rust-iot folks are over there too
https://matrix.to/#/#embassy-rs:matrix.org
https://matrix.to/#/#rust-iot:matrix.org
https://matrix.to/#/#smoltcp:matrix.org
Id love to see everyone talking

As things stand, I don´t have the bandwidth to implement one of the requested protocols. In the current state of the implementation, the pull request will not be accepted. Hence, I am closing this pull-request.


kvaser usbcan pro is not supported?

sir. kvaser usbcan pro 2xhs v2 is not supported?
I would like to know if there is a way to use this equipment.
thank you

Just replace the two attached files in your local repository and rebuild the library.
Pl. send me feedback if it works or not.
USBCAN_Pro_2HS_V2.zip

can_test "Kvaser CAN Channel 0" -r
but It didn't work. What is the cause?
CAN Tester for Kvaser CAN Interfaces, Version 0.3.1 (0xaaa925f)
Copyright (c) 2007,2020-2022 by Uwe Vogt, UV Software, Berlin

This program comes with ABSOLUTELY NO WARRANTY!

This is free software, and you are welcome to redistribute it
under certain conditions; type `--version' for details.

Hardware=Kvaser CAN Channel 0...FAILED!
+++ error: CAN Controller could not be initialized (-95)
Copyright (c) 2007,2020-2022 by Uwe Vogt, UV Software, Berlin

/Binaries/can_test "Kvaser CAN Channel 0" -r
but It didn't work. What is the cause?

Have you rebuild everything by make clean ; make all?
To isolate the problem, it is better to use the trial program with option INFO: ./Trial/kvl_test TEST INFO
There is more babbling ;)

sorry for late reply. Sir I checked again and it seems I am still getting the error.
My OS is using Mac OS M1 (ARM) 13.0 (22A380) version.

KvaserCAN-Library/Examples/Python 1 » python3 can_recv.py --channel 0
CAN API V3 for generic CAN Interfaces (Python Wrapper 0.1.1)
>>> can = CANAPI(libUVCANKVL.dylib)
>>> can.init(0, 0x00)
+++ error: can.init returned -95

I used can_recv.py in the Examples/ directory to test it. but it doesn't seem to work

@mac-can sorry for late reply. Sir I checked again and it seems I am still getting the error. My OS is using Mac OS M1 (ARM) 13.0 (22A380) version.
Can you do some CAN monitoring to see if this is working?
$ ~/Downloads/KvaserCAN-Library make clean
$ ~/Downloads/KvaserCAN-Library make all
$ ~/Downloads/KvaserCAN-Library sudo make install
$ ~/Downloads/KvaserCAN-Library ./Trial/kvl_test TEST INFO

>>> CAN API V3 for Kvaser CAN Interfaces, Version 0.3.1 (0xaaa925f)
>>> myDriver.GetProperty(CANPROP_GET_SPEC): value = 3.0
>>> myDriver.GetProperty(CANPROP_GET_VERSION): value = 0.3
>>> myDriver.GetProperty(CANPROP_GET_PATCH_NO): value = 1
>>> myDriver.GetProperty(CANPROP_GET_BUILD_NO): value = aaa925f
>>> myDriver.GetProperty(CANPROP_GET_LIBRARY_ID): value = 600
>>> myDriver.GetProperty(CANPROP_GET_LIBRARY_DLLNAME): value = 'libUVCANKVL.dylib'
>>> myDriver.GetProperty(CANPROP_GET_LIBRARY_VENDOR): value = 'UV Software, Berlin'
    Loading the MacCAN driver...
    - One device added at location 01140000
      - Device #0: Kvaser USBcan Pro 2xHS v2
        - Properties: vendor = bfd, product = 108, release = 0001, speed = 2
    - Run loop started so notifications will be received
>>> CCanAPI::ProbeChannel(0): state = available
+++ Sorry, device #1 is not available
>>> CCanAPI::ProbeChannel(1): state = not available
+++ Sorry, device #2 is not available
>>> CCanAPI::ProbeChannel(2): state = not available
+++ Sorry, device #3 is not available
>>> CCanAPI::ProbeChannel(3): state = not available
+++ Sorry, device #4 is not available
>>> CCanAPI::ProbeChannel(4): state = not available
+++ Sorry, device #5 is not available
>>> CCanAPI::ProbeChannel(5): state = not available
+++ Sorry, device #6 is not available
>>> CCanAPI::ProbeChannel(6): state = not available
+++ Sorry, device #7 is not available
>>> CCanAPI::ProbeChannel(7): state = not available
      + Device #0: asynchronous event source added to run loop
        - Message pipe of size 512 bytes
        - Message queue for 65536 elements of size 88 bytes
        - Double buffer each of size 512 bytes for endpoint #1
+++ error: myDriver.InitializeChannel(0) returned -95
Cheers!

Your device is detected and added to the device list:
  Loading the MacCAN driver...
   - One device added at location 01140000
     - Device #0: Kvaser USBcan Pro 2xHS v2
       - Properties: vendor = bfd, product = 108, release = 0001, speed = 2
   - Run loop started so notifications will be received

Also the MacCAN core layer has done its job:
    + Device #0: asynchronous event source added to run loop
       - Message pipe of size 512 bytes
       - Message queue for 65536 elements of size 88 bytes
       - Double buffer each of size 512 bytes for endpoint #1

But I miss one log message before the error message:
+++ error: myDriver.InitializeChannel(0) returned -95
Cheers!

The trial program should print the following line before calling myDriver.InitializeChannel:
    Initializing Kvaser Leaf Pro HS v2 driver...

It seems that the configuration settings are not correct.
If you have the possibility to debug the trial program, you can set a breakpoint on function Mhydra_ConfigureChannel in the file KvaserCAN_Driver.c (line 106) and step through it to see which parameter causes the error. Or place some printf statements in the function.
Happy debugging ;)


chore(structure): WIP refactor to Angular style guide conventions

Reorganize application code to be more closely aligned
with the Angular Style Guide.
This is for the final version of the app and hasn’t been
factored into steps or into the tutorial text.

Folders-by-feature structure: /core, /phone_list, /phone_detail
https://github.com/johnpapa/angular-styleguide#style-y152
App root module depends on feature modules and core module.
https://github.com/johnpapa/angular-styleguide#style-y165
One component per file. Each controller/factory/filter in its own file.
https://github.com/johnpapa/angular-styleguide#style-y001
Feature+type file naming convention.
https://github.com/johnpapa/angular-styleguide#style-y120
Module files, *.module.js for each module.
https://github.com/johnpapa/angular-styleguide#style-y127
Component registration with getters
https://github.com/johnpapa/angular-styleguide#style-y022
Named functions
https://github.com/johnpapa/angular-styleguide#style-y024
Manual injection
https://github.com/johnpapa/angular-styleguide#style-y091

Related to angular/angular.js#13312

@petebacondarwin Here's a more styleguide-compatible version of the final PhoneCat app. I'd love to hear your opinions on a couple of things:

Do you think it would make sense to teach this kind of app structure in the tutorial?
Irrespective of (1), would you be willing to include this (or something like this) as a separate branch in the PhoneCat repo so that people who want to follow along with the ng-upgrade tutorial can use it as a starting point?

I like where this is going. I'll try to do a proper review over the weekend.
Can we consider using component directives rather than controllers?

Great, thanks!

Can we consider using component directives rather than controllers?

Yes, I think so! Just pushed a commit that attempts it.
Caveat: Ideally this would use the component router, but not sure if that's doable at this point. Instead using the old router with little template snippets that instantiate the component directives.
Caveat 2: Haven't seen what @johnpapa's style guide for components will look like yet :)

:+1:

I would also recommend to get rid of ng-app and use manual bootstrap angular.bootstrap(...)
and encapsulate

into an root component
<phone-cat-app></phone-cat-app>

@Hotell that's not a bad idea either.

I'll gladly help with this, because I wanna use this PR as a starting point for showcasing people how to migrate to Typescript + ngMetadata and then leveraging ngUpgrade to ng2


Fix musl build and re-publish musl binaries

Not saying this is easy but there's gotta be a way :)

I suspect we will ditch rocksdb before this happens :)

I got quickwit to compile with musl in an alpine:edge container on c3c0c5494f583898f3e763865147dc23b3e704ee with the following build script:
apk add rustup protoc cyrus-sasl-dev cmake make g++ linux-headers perl

echo | rustup-init
source "$HOME/.cargo/env"

cd quickwit
je_cv_pthread_getname_np=no RUSTFLAGS="-C target-feature=+crt-static" cargo run --target x86_64-unknown-linux-musl --features release-feature-vendored-set --release

However I did not manage to get it to work with cross. Some sasl linking error. I'll let it as is for now and come back to it in a bit

Any news?
I want musl release to run in alpine


GUACAMOLE-1219: Allow TOTP to be disabled by group membership

This parts changes the code, so that TOTP can be disabled by membership in a special (configurable) group.

Just as the TOTP support currently leverages a set of custom attributes to store a user's TOTP key and whether enrollment has succeeded, I think a better approach would be to use the same part of the extension API (custom attributes) to allow the administrator to check "Disable TOTP" for a user or group.

@janhf Any further progress on doing things in the way that @mike-jumper suggested, using attributes?

Hello,
I hope it's OK to add a comment on a closed PR. I am new to this project. Let me know if I should do things differently.
I am currently in the process of deploying Guacamole in my company and I think I need this specific feature.
Here is why. I am installing Guacamole with Ansible. Some configurations (user groups, connection groups, permissions) are set through the REST API.
If I enable TOTP, I can't use the REST API and thus, configure Guacamole.
If this feature was added, I could :

add "totp-disabled-group: XXX" to my guacamole.properties,
add the XXX group through the REST API,
add my API user to the XXX group through the REST API,
enable the TOTP extension.
Restart tomcat (then TOTP is working, but disabled for the API's user).

Then I would proceed with the rest of the configuration through the API, as usual.
Is it possible to consider this PR again or is there another solution I am not aware of ?
I have found another PR (911) which talk about disabling MFA based on IP addresses. It could do the trick, but it seems less relevant to my use case.
Best regards

@JLE-ATS In general you should not comment on an open PR - if you have a question, use the mailing list.
The PR was abandoned and closed because support for this feature was merged in #808. The feature will be released as part of the 1.6.0 release. The other PR you mentioned, #911, is still in review and will likely go into 1.6.0, but may be in a release after that if it doesn't make the 1.6.0 scope.

Hi @necouchman I have the same request as @JLE-ATS I use Apache Guacamole 1.5.4 (latest version at the moment) with the TOTP extension.
The problem is that I can't use the REST API for automation purposes with this extension.
If I've understood correctly, the TOTP disabling feature for a user and/or user group will arrive in 1.6.0, but I can't find any information about an approximate release date for this version?

@EvannG1 We do not have a release date planned, yet. We're working to ship 1.5.5, which will hopefully be out in the next week or so. After that we'll turn our attention to 1.6.0. I would say 1.6.0 is several months out, but that's just my rough guess/approximation, and I can't get any more granular than that.

@EvannG1 We do not have a release date planned, yet. We're working to ship 1.5.5, which will hopefully be out in the next week or so. After that we'll turn our attention to 1.6.0. I would say 1.6.0 is several months out, but that's just my rough guess/approximation, and I can't get any more granular than that.

I'd like to come back to you now that 1.5.5 has been released. Is there an approximate release date for 1.6.0?


Does it work on Ubuntu 18.04?

I successfully installed everything on my Ubuntu 18.04 but i am unable to connect my android phone with the hotspot created with the hotspotd.
Well, i can't even see my hotspotd ssid on my phone, i tried "Add Network" thought it maybe a hidden network, but that doesn't work either!
Help Please!

Its not a hidden network, the problem should be on the server. Is hotspotd even started on the server, if so what message is seen on the console?

When i start hostapd, it says ```Verifying interfaces
done.
created interface: mon.wlp2s0 on IP: <IP_ADDRESS>
wait..
enabling forward in sysctl.
net.ipv4.ip_forward = 1
creating NAT using iptables: wlp2s0<->enp1s0:
running dnsmasq
hotspot is running.

I'm closing since its a very long time, raise a new issue if you are still using hotspotd and facing this issue.


Remove Repo hack from model.py

On this line:
https://github.com/CABLE-LSM/benchcab/blob/6f586a1afbfbe636bdcbe53bcbc1d6143fba0dcf/benchcab/model.py#L40-L41
The Model class should not have to know whether repo is a GitRepo or an SVNRepo, we should only be working with the Repo interface. This should be addressed if we want to properly test the model and repo modules.
Originally posted by @SeanBryan51 in https://github.com/CABLE-LSM/benchcab/issues/208#issuecomment-1821888909

I wonder if we could use something like Path.rglob() to find the path to the offline/ directory instead of hard-wiring it. I haven't checked if we use Model.src_dir for anything else.

I also think this should be changed:
https://github.com/CABLE-LSM/benchcab/blob/6f586a1afbfbe636bdcbe53bcbc1d6143fba0dcf/benchcab/model.py#L107
It should probably be given by the repo instead of set in Model.


How to get Mappable model class data in another ViewController

Your JSON dictionary:
{
  "user_id": "12",
  "user_name": "dino"
}

Your model:
class Userdata: Mappable {
  var user_id: String!
  var user_name: String!

  required init?(map: Map) {
        mapping(map: map)
    }

  func mapping(map: Map) {
        Userdata.user_id <- map["user_id"]
        Userdata.user_name <- map["user_name"]
  }
}

What you did:
class A: UIViewController {
       let user = Mapper<Userdata>().map(myJSONDictionary)
       // ok data mapper
}

What you expected:
I exepected something like:
class B: UIViewController {
       // Get data from Model Userdata
       // Create JSON String from Model
       let JSONString = Mapper().toJSONString(Userdata, prettyPrint: true)

       It not work
       Please tell me other ways.
}

Sorry but I do not understand your problem. It seems to me this is not related to ObjectMapper. ObjectMapper does not interact with ViewControllers. It is up to you to manage passing data between ViewControllers


In the last section of the document the mentioned url is incorrect "http://mytestcluster.southcentral.cloudapp.azure.com:8080" and it is not matching to the screenshot as well. Please do the correction

[Enter feedback here]

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

ID: 089974a0-7387-0266-d499-362153ed2851
Version Independent ID: f3a0c273-e276-6eab-9a24-e4b0603274e4
Content: Deploy a Service Fabric app to a cluster in Azure - Azure Service Fabric
Content Source: articles/service-fabric/service-fabric-tutorial-deploy-app-to-party-cluster.md
Service: service-fabric
GitHub Login: @athinanthny
Microsoft Alias: mikhegn

@salils123 Thanks for the feedback! I have assigned the issue to content author to check and update the document as appropriate. We will update you accordingly.

@athinanthny Can you please check and add your comments on this doc update request as applicable

Hi @salils123 , We have corrected the url.
The issue is resolved in a PR. Here is the PR link - https://github.com/MicrosoftDocs/azure-docs-pr/pull/195886
#Please-close this issue


Add Auth concept doc to istio page

This is the concept doc
https://docs.google.com/document/d/1SzoKl048g0q7tMI5kC3SKvabmm5HUby6N9cxG6Uqd6U/edit
Please help to add to this page, Netowrk and Auth section.
https://istio.io/docs/concepts/
Thanks

@LisaFC please help, thanks!

@wlu2016 @zinuga @jasminejaksic , FYI

Hi there! A quick way to convert the doc to Markdown for use on the site is the gdocs to Markdown/HTML tool: https://g3doc.corp.google.com/company/teams/gdocs-convert/index.md?cl=head
If you install it you can convert the doc quickly and then copy and paste the Markdown (minus any tables of contents or anything you don't want in the public doc) into a new page for the site, using the same Jekyll heading as the other concepts docs. Then send the PR to me and I'll do an edit. Let me know if you need any help.

Hi Lisa, sounds good, and I have a PR sent out already, do you mind taking a look? Thanks.
https://github.com/istio/istio.github.io/pull/71


waffle.io Badge

Merge this to receive a badge indicating the number of issues in the ready column on your waffle.io board at https://waffle.io/codetraceio/react-modular-ui
This was requested by a real person (user omegascorp) on waffle.io, we're not trying to spam you.

Coverage remained the same at 72.973% when pulling 8ebe5daf23534823b04a9c8a950861421283f2af on waffle-iron:master into b868f2b8c2ef1b74ff07defbbc32624178b8bd88 on codetraceio:master.


change ml-commons to use 2.0 branch for 2.0 release

Signed-off-by: Xun Zhang<EMAIL_ADDRESS>Description
Use 2.0 branch for ml-common in manifest 2.0 release.
Issues Resolved
[List any issues this PR will resolve]
Check List

[ ] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

Merging #1986 (5d61987) into main (4944445) will increase coverage by 5.58%.
The diff coverage is n/a.

@@              Coverage Diff              @@
##               main     #1986      +/-   ##
=============================================
+ Coverage     94.41%   100.00%   +5.58%
=============================================
  Files           187         6     -181
  Lines          3739       105    -3634
  Branches         29        19      -10
=============================================
- Hits           3530       105    -3425
+ Misses          203         0     -203
+ Partials          6         0       -6

Impacted Files
Coverage Δ

src/run_checkout.py

...PromoteArtifacts_OpenSearch_Dashboards_Jenkinsfile

...ests/jenkins/jobs/CopyContainer_docker_Jenkinsfile

...eg_test/integ_test_runner_opensearch_dashboards.py

...nIntegTestScript_OpenSearch_Dashboards_Jenkinsfile

src/jenkins/TestManifest.groovy

src/ci_workflow/ci_check_lists.py

src/ci_workflow/ci_check_npm_package_version.py

src/assemble_workflow/dists.py

src/manifests/manifests.py

... and 171 more

Continue to review full report at Codecov.

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


What would be the way to pass cookies with requests?

Is there a way to pass cookies with requests?
In axios, for example, one would do someting like this:
axios.create({
  withCredentials: true
})

And, using Fetch Api:
fetch('https://example.com', {
  credentials: 'include'
})

Is there an option to send and recieve cookies to/from the server?

Is credentials: 'include' not working? That's how you should do it

In the fetch docs it says:

By default, fetch won't send or receive any cookies from the server, resulting in unauthenticated requests if the site relies on maintaining a user session (to send cookies, the credentials init option must be set).
Since Aug 25, 2017. The spec changed the default credentials policy to same-origin.

Are you testing in Chrome? If so, you need to have the credentials: 'include' or credentials: 'same-origin' set. Here's a video explaining it. You can also refer to the Request.credentials docs.

Closing this. If the issue persists or if this is still not working for some reason, please don't hesitate to reopen this issue!