feat #100 - Recovery phrase confirmation and account recovery UX

Issue #100
Steps to close:
- [x] : If an unknown word is typed in, an error message should let the user know that this is not a valid word for this wallet.

[x] : Make the recovery phrase confirmation optional/skippable

[x] : Show a warning if user is on an account where the recovery phrase hasn't been confirmed

[x] : Be able to view the recovery phrase later on and confirm it
- [x] : For the phrase approval, instead of letting the user type the whole words, we should have suggestion/auto-completion

Edit:

[x] : Pop up a warning if the words aren't all contained in the BIP39 English wordlist, nor are they all contained in the Parity wordlist.

Note - Warn the user when more than x Eth have been moved on an account for which the recovery phrase hasn't been verified will be a separate PR

We are using the bip39 NPM package to generate the recovery words.
If you want to use it then just install Node.js, clone Fether and install its dependencies with yarn install so the BIP39 package is installed into Fether's node_modules/ directory, then run node to start the REPL, then require BIP39 with const bip39 = require('./node_modules/bip39/index.js');,
then enter bip39. and press tab a couple of times and it will show you the different methods that are available

Note: If you install the BIP39 package globally (i.e. npm install -g bip39) you just require it with const bip39 = require('bip39');
Then you can check if a given recovery phrase (mnemonic) is valid, and whether making the first letter a capital letter makes a difference (see Example):

If you run bip39.wordlists then it will display all the different words that it may generate (including non-English word lists). It defaults to the English word list, and it appears that that's the list we're using, and it just contains all lowercase letters.
We're generating the recovery phrase in here in Fether by running bip39.generateMnemonic(),
We also need to support https://github.com/paritytech/parity-signer/issues/154 (so not just recovery phrases generated by Parity Signer or Parity Fether, which may include non-English word lists), support Substrate/Polkadot https://github.com/paritytech/parity-signer/issues/113

@ltfschoen Is that a greenlight regarding automatically converting words typed into recovery phrase to lowercase?
I have added the BIP English wordlist next to the Parity Wordlist as how I interpreted the requested feature is to alert the user if the last word they typed is invalid, as they type it.
validatemnemonic() will validate the entire mnemonic, but I am adding a feature to check if the last word is contained in either wordlist. If the first word they typed is a BIP39 word, then all words thereafter are expected to be BIP39 as well, otherwise it will pop up a warning, and same for if the first word is a Parity word.
Regarding paritytech/parity-signer#154 I suppose the least effort way would be to do the same thing and import the other language wordlists as well.

@ltfschoen Is that a greenlight regarding automatically converting words typed into recovery phrase to lowercase?
I have added the BIP English wordlist next to the Parity Wordlist as how I interpreted the requested feature is to alert the user if the last word they typed is invalid, as they type it.
validatemnemonic() will validate the entire mnemonic, but I am adding a feature to check if the last word is contained in either wordlist. If the first word they typed is a BIP39 word, then all words thereafter are expected to be BIP39 as well, otherwise it will pop up a warning, and same for if the first word is a Parity word.
Regarding paritytech/parity-signer#154 I suppose the least effort way would be to do the same thing and import the other language wordlists as well.

I think we should ask someone with more experience to help us answer that question

Hey, so there are two ways of generating an address (in Fether's case, I mean for "recovering" an address) :

Using BIP39 (requires BIP39 wordlist)
Or using parity_phraseToAddress (legacy), which accepts any string input, but for Fether we want to restrict it to phrases from the Parity Wordlist (generated with parity_generateSecretPhrase). If a user generated his account using a custom phrase, we're ready to provide personal support and guidance for them to import the account as a JSON keyfile instead.

Accounts generated inside Fether use BIP39.
Right now, when the user enters a recovery phrase, we check if it's a BIP39 phrase, and if not we check if it's a Parity wordlist phrase.
BIP39 uses the index of the word in the wordlist, so in the check for BIP39 we can lowercase it before checking (assuming the wordlist file has the words in lowercase).
parity_phraseToAddress is case-sensitive, but since for it we only accept phrases from the Parity wordlist in Fether (which is lowercase), it's safe to lowercase it before checking.

If the first word they typed is a BIP39 word, then all words thereafter are expected to be BIP39 as well, otherwise it will pop up a warning, and same for if the first word is a Parity word.
There is overlap in the two wordlists, so I think it'd be better to check if all the words entered or from the same wordlist (BIP39 or Parity Wordlist).

I've just boarded a flight on route back to Berlin. I've cloned the branch to review offline and will provide feedback tomorrow.

Hi @Tbaut, i'm working on the security issue - * Security-wise, we must ask the account's password before showing the recovery phrase, because this could prevent the theft from the funds from a physical access of the computer that runs Fether
is this the correct method to unlock with password?

Regading 3. I agree, I think we should let users view their recovery phrase later on (after password verification) whether users have saved it or not.
Regarding 4. I don't think it maters much to let them copy it, we could prevent them pasting it though.. althought I'm not convinced either it's the right way to do.
Regarding 5. I didn't realize it but indeed it looks better when the Backup menu items are grouped together.

@Tbaut I did not forget your points 3 & 4. I misunderstood the point of using the same screens as from account creation as being to display the same instructions rather than actually use those exact same components. I will get it right in the following commits. I also didn't think the Skip was meant to actually be a "call to action," and that we'd prefer users to copy it somewhere safe the first time - I'll just replace the Back button in that case. I'll make sure it's consistent in the wording 'recovery phrase' not 'secret phrase' too.
@ltfschoen acknowledged on 1 - 3. For 3, this is a lot of very important instructions to be displayed in such a small frame of the screen. What do you think of adding a step before the copy phrase screen where it's just those instructions before moving on to the copy phrase screen? This is where we can explain how and why they might skip the rewrite phrase step, and how they can view and save it again later, and would also provide a better context for a Skip button to exist.
For 4, it is in fact disabled but only if NODE_ENV === production as mentioned in #399.
For 5, what do you think about the wording "Save Phrase" to avoid it wrapping/having to decrease the font size?

@ltfschoen acknowledged on 1 - 3. For 3, this is a lot of very important instructions to be displayed in such a small frame of the screen. What do you think of adding a step before the copy phrase screen where it's just those instructions before moving on to the copy phrase screen? This is where we can explain how and why they might skip the rewrite phrase step, and how they can view and save it again later, and would also provide a better context for a Skip button to exist.

i agree, it'd be great if the UI wasn't cluttered up with too much reading material.
i think we need a link to a separate setup guide that contains screenshots of the setup process (similar to the guides that we have on readme.io for substrate), that highlights why we ask the user to do certain things and has coloured labels for each of them (i.e. critical actions, information only, etc).
then in the UI the messages can be concise and have a "?" or similar next to each one that links to the anchor tag in the separate setup guide where they can read the longer description if necessary

For 4, it is in fact disabled but only if NODE_ENV === production as mentioned in #399.

great!

For 5, what do you think about the wording "Save Phrase" to avoid it wrapping/having to decrease the font size?

i think that may be too abbreviated for new users. i think we need to say "Save Recovery Phrase".
can't we just increase the overall menu width so it doesn't wrap the text and so we don't have to decrease the font size?

This PR has prompted me to thinking more about the following and I've been trying to think of alternatives. Any feedback greatly appreciated:

Security Considerations

General

I think we should encourage users to store the encrypted JSON file offline
I think we should encourage users to store any information containing credentials offline (i.e. screenshots) since users will probably just take a photo with their mobile phone instead of manually writing it down
I think we should encourage users to clear their temporary folder, browser cache and cookies from all browsers prior to using Fether incase they have been infected by a trojan like Trojan.JS.Miner.m coinminer that injects itself in the browser cache
I think we should encourage users to disable any unnecessary browser add-ons, extensions, plugsins, or toolbars whilst using Fether and uninstall any junk ones, since they may been infected or be able to monitor the users activity
I think we should encourage users to actively use anti-virus/malware software and check that even the anti-virus/malware software isn't infected by also doing an online scans prior to using Fether

Secret Key

I don't think we should allow them to copy their secret key to the clipboard, incase they're infected with malware like CryptoShuffler that steals information from the clipboard
I don't think we should show the secret key, incase they're infected with malware like Evrial that steals it by taking screenshots
I don't think we should require them to re-enter their secret key incase they are infected by a keylogger

Wallet Address

I don't think we should allow them to copy the recipient address to the clipboard, incase they're infected with malware and it's changed to a malicious recipient address instead

I think we could address the "General" considerations by labelling them as say "critical actions" in a separate online setup guide.
I think we could address the "Secret Key" considerations by encouraging the user to create their account using Parity Signer and import it into Fether to reduce the likelihood of the risks occurring
I think we could address "Wallet Address" considerations by requiring the user to add recipient addresses to the address book https://github.com/paritytech/fether/issues/344, and only allowing the user to select a recipient address from their address book during a transaction

@ltfschoen those are all interesting points. Here are my two cents:
General:

In this case, I propose we make sure they save it directly to a thumb drive. They need to make sure that this thumb drive is only used for this one purpose and is never plugged into another computer again. The other option is having a cold copy, and 99% of users will probably want to print rather than write with pencil and paper, so we need to make sure they understand how to print it relatively safely, i.e. only with USB connection, never over WIFI/Bluetooth.

maybe we can detect and prevent screenshots all together? Especially on a screen we know contains sensitive information.

3 & 4. +1 to encourage users to clear the tmp and cache and remove unnecessary browser plugins, etc. though it may be a tall order. Better to have all bases covered liability wise.

Is antivirus software even effective anymore? Seems it'd actually be even counterproductive (the antivirus software itself could be compromised, as you mentioned. I think our best bet is to make sure users have the latest update of their OS/browser. Another consideration is phishing - need to make sure the download the correct Fether client, never reveal secret key to anyone, etc.

Although I like this discussion, I think it should live on the forum, this is not the right place IMO.

The red dot looks good!
A couple points:

We need to let anyone view its recovery phrase later on, whether or not it has been saved. This menu item should stay there any time, only the warning should disappear if the recovery phrase was saved.

This looks like T&Cs that nobody will ever read :eyes:

Ok to be extra careful but let's bother only the users that chose to skip, and keep the previous screen succinct:

actually one problem that just occurred to me is that this will only work for accounts created after the feature is merged. Maybe a dumb question but is it possible to work backwards from address to a unique mnemonic? Then this wouldn't be a problem. I couldn't find anything though.

Good point, this case needs to be handled this case nicely and we should remove the "Backup Recovery Phrase" menu entry for such accounts as it is not possible to go from the private key to the recovery phrase/mnemonic AFAIK.

Thibaut, thank you for your review.
I made fixes that you brought up and also worked in some tests for the third party cryptography library. I'm of the mind that it might be worth adding this or our own implementation to the js-libs utils in the near future.
From my tests, you only see the warning upon Skip and not when you press Next. The Backup Recovery Phrase screen shows the tips while the View Recovery Phrase screen does not.
There is one caveat during development that should the developer manually do a localStorage.clear(), then the flagged and safe phrases will all be gone and the Backup Recovery Phrase menu item will also be gone.
This won't be a problem in production since users won't have access to the developer tools, but I was wondering if maybe storing this data not only in localstorage but also in the meta of an account would be plausible and more safe. It is still encrypted before storing in meta anyway so that won't be a problem, but my only concern is - is it a problem worth considering? Or perhaps the more pragmatic thing to do is to warn future developers about this caveat.

@Tbaut, thank you for your review.
I made fixes that you brought up and also worked in some tests for the third party cryptography library. I'm of the mind that it might be worth adding this or our own implementation to the js-libs utils in the near future.
From my tests, you only see the warning upon Skip and not when you press Next. The Backup Recovery Phrase screen shows the tips while the View Recovery Phrase screen does not.
There is one caveat during development that should the developer manually do a localStorage.clear(), then the flagged and safe phrases will all be gone and the Backup Recovery Phrase menu item will also be gone.
This won't be a problem in production since users won't have access to the developer tools, but I was wondering if maybe storing this data not only in localstorage but also in the meta of an account would be plausible and more safe. It is still encrypted before storing in meta anyway so that won't be a problem, but my only concern is - is it a problem worth considering? Or perhaps the more pragmatic thing to do is to warn future developers about this caveat.

Note that currently the team wants Dev Tools to be available in production

There is one caveat during development that should the developer manually do a localStorage.clear(), then the flagged and safe phrases will all be gone and the Backup Recovery Phrase menu item will also be gone.

I realized that I wrote "warning" to actually talk about the flag. But it seems that you fixed the error I was mentioning, namely the flag appeared although I had verified the recovery phrase.

There is one caveat during development that should the developer manually do a localStorage.clear(), then the flagged and safe phrases will all be gone and the Backup Recovery Phrase menu item will also be gone.

That's ok IMHO, if users fiddle with the dev tool (which we should keep available so that we can get console.erros echoing @ltfschoen ) then it's expected that they can break the app.

When the flag is set, the account menu opens on the right and destroys the app.

The truncated address in the header and the name (^see screenshot above) aren't aligned anymore. Not 100% sure it comes from this PR, but I hadn't seen this before. We can solve this later if it's not related.
The footer is still inside the card for "account unlock" and "view recovery phrase" screens.
When the flag is set (e.g. the recovery phrase hasn't been verified yet), we display the same "IMPORTANT" message on 3 consecutive screens (unlock, view Recovery Phrase (RP), confirm RP). I'd suggest to only show it on the view RP screen as we already warned this same user several times, plus repeating the same message might let the user ignore such messages all together in the future.

@Tbaut

Regarding the menu breaking, I couldn't reproduce this. Which OS are you on? Also for the future, what is our standard procedure for testing on multiple OS's?
Regarding the address truncation, I cannot reproduce that but even with the warning icon, the flexbox should be handling the centering... This is most likely related to 1, but I'd need to reproduce that first. Otherwise, we could manually reduce the padding right on that item.
 This is fixed.
Regarding the IMPORTANT message showing too much, I agree but I think it makes sense to keep it there between the Copy And Rewrite screens - just not before they Unlock.

My reasoning is that during unlock, they are focused on inputting their password, so they will overlook the tips anyway, and then they'd be "desensitized" to it in following screens. If it shows only after unlock, the change will certainly be noticed.
However, it seems too important a message to only show on the Copy screen. I could also add some basic css animation on the Rewrite screen to draw attention one last time before the final confirmation.
I've made a commit with this proposal since it's kind of hard to mockup.

You're almost done with this one @yjkimjunior do you think you'll be able to give it a go soon?

My last commit fixes 1. and 2.
it's not very elegant though lmk if you think of something better.

There's a problem when you want to "Backup RP" for an account that is flagged (e.g has skipped the verification at creation). When you type in the RP to confirm it, clicking on "confirm" doesn't bring you further.

My last commit addresses the problem at account confirmation, the background wasn't grey on scroll (visible here)

i have a presentation on Thurs that i need to urgently start preparing for so i won't be able to look at this until this Fri at the earliest

* User types in his phrase

At this point you expect the users to have copied their recovery-phrase in the first place whereas they have skipped the verification step most probably because they didn't want to copy it anywhere.
Also I think it's important to be able to let users view their recovery phrase in case they lose their backup. JSON are more complex to handle.

they have skipped the verification step most probably because they didn't want to copy it anywhere

Ah, then I think we disagree on this. My initial thought was: you can skip the rewrite phrase step, because we're not your teachers here to make sure you've done your homework right. Just skip, but we'll show your account as not secured, because we can't prove that you've backed up your account.

Also I think it's important to be able to let users view their recovery phrase in case they lose their backup

I agree, but I would do that via RPC (related to #148). I'm just not convinced we should ever store the private keys inside localStorage.

Thinking about it, I agree security-wise that it makes sense not to store the private keys in the localstorage. I guess that means not being able to show the user their phrase ? Not sure how you're thinking of doing that with RPC, since the node doesn't know the phrase of the account, only the derived private key

Right, thanks guys. We need to find a proper way to do this.

Not sure how you're thinking of doing that with RPC, since the node doesn't know the phrase of the account, only the derived private key

Hmm yes, I wasn't aware of that. So that's kind of problematic.

Just to clarify, I think it's a bad idea to store the (albeit encrypted) seed phrase on the client side in general (whether it be localStorage, filesystem or something else). fether is a UI to the node, the latter securely managing the accounts, private keys, etc. I'd say let's keep this model of Fether not managing anything sensible and being (to an extent) pure UI. If we store the encrypted seed phrase in Fether then Fether isn't just a UI anymore, and we introduce a second point of vulnerability

What about we do what Status does and we keep the RP in localstorage up until the user confirms they copied it, then we remove it entirely? This adds more meaning to having the Warning too. I agree it is not ideal to have the phrase in local storage at all but that's the risk the user opts into by not copying it somewhere safe on account creation.
https://user-images.githubusercontent.com/6559881/41660909-b12273bc-749d-11e8-9b60-731f0a703a45.jpg

I'm talking with Kirill to see what he thinks. I'm not sure it'd be a good idea because the user are not aware of the fact that their wallet is less secure. All they are aware of, is that they could lose their money if they don't backup the phrase, which a totally different story. Recovery phrases could very well be stored for a long period of time, be stolen, then no matter what the users does, such as backing it up, they are still at risk of stolen funds..

What should we do with this PR then? Apart from the localStorage, it's a great PR UI- and UX-wise.
I'd propose again the flow I described in https://github.com/paritytech/fether/pull/400#pullrequestreview-218943855. imo it's a better UX than the current one (=forcing user to copy phrase), and we get to keep all the React components YJ added.

What you proposed is an interesting yet disturbing flow IMHO. The only difference with the current flow is that we bother the user later on to make sure he has originally correctly written down his recovery phrase. If we oblige him to correctly write it down in the first place anyway, no need to wait for the verification. I don't see the added value in timing of this verification because we can't provide the phrase anymore.
Also what happens if they haven't correctly written down the phrase and only realize later on? They're left in an situation where they have to move their funds, that's frustrating.

If we oblige him to correctly write it down in the first place anyway

That's actually the step I want to avoid. I remember hating MetaMask with their "click on the words in the right order" step which you couldn't skip, thinking that I didn't need them to babysit me.
If we don't add a "Skip" button and disable copy/pasting on the field, then I believe that'll be a super annoying step for most Fether users, which imo are already semi-experienced crypto-enthusiasts who know what they're doing.
I'm okay with only the Skip button (+ warning popup), and removing the "Backup later" step, which I agree can be disturbing and often quite useless.

I'm okay with only the Skip button (+ warning popup), and removing the "Backup later" step, which I agree can be disturbing and often quite useless.

Right, I'm also fine with that, given the warning screen.

Closing as we won't implement it any time soon.

😿


API v2 - add support for JSON arg input

API v2 for Progress Report - JSON URL parameter
### Note: URL Parameter "class" is changed to "course" to maintain naming accuracy and consistency.
Usage:
Path: /
URL Parameters:
    school
    course
    student_mastery
    class_mastery

Path: /json
Content-Type: application/json
Data:
{
  "school": "Berkeley",
  "course": "CS10",
  "student_mastery": {
      "Abstraction": 4,
      "Number Representation": 4,
      "Iteration": 3,
      "Domain and Range": 4,
      "Booleans": 1,
      "Functions": 0,
      "HOFs I": 0
  },
  "class_mastery": {
      "Abstraction": 1,
      "Number Representation": 1,
      "Iteration": 1,
      "Domain and Range": 1,
      "Booleans": 1,
      "Functions": 0,
      "HOFs I": 0
  }

Copied to new repo here


Build and push p and z-linux images to Docker Hub

What this PR does / why we need it?:

Build and push p and z-linux images to Docker Hub

Does this PR introduce a user-facing change?

[ ] User guide
[ ] CHANGELOG.md

Which issue(s) this PR fixes:

Related: https://github.com/application-stacks/runtime-component-operator/issues/311


Misleading statement

Hi
In the prelude to the C# example in the Input section it says:

For every record inserted in the table, the function will be triggered.

The text implies that the Function automatically will trigger on every inserted row. That is not correct, it will trigger when some other code sends a message to the queue. Instead I would suggest the following

For every message send to the queue, the function will be triggered.

Kind regards
Mads Kierulff

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

ID: 6d35c032-eae7-ac4b-2ad3-32fd0cd2318f
Version Independent ID: 92b0a972-eabe-8048-36b1-a1cefb3acf43
Content: Azure Table storage bindings for Azure Functions
Content Source: articles/azure-functions/functions-bindings-storage-table.md
Service: azure-functions
GitHub Login: @craigshoemaker
Microsoft Alias: cshoe

Hi @mads-kv Thanks for your feedback. We will review and update as appropriate.

@mads-kv PR has been created for this which will address this. Thanks so much for providing the feedback that help us in improving the documentation. For now I will proceed with closure of this and If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.

I'm glad to help.


Initial setup of project

Setup for initial project vp and one app ide to start

It's been a little while since standing up a Django application, but this should be pretty minimal as/is. Changed the DB to PostgreSQL for now (not setup with User/Password/etc.). Put one application in the project just for reference as we build.

Mind removing .vscode from the index? I'm fine if it's in .gitignore if everyone else is, but I don't use VSCode much so it doesn't really affect me


[typescript2] - Doesn't recognize types installed by npm i @types/something

First of, amazing job with this package.
So, I have this new project that I'm using typescript@2 and I decided to give @types a shot too.
I have this test file that depends on jasmine, so I installed the types for it by running npm i --save-dev @types/jasmine. It has the following content:
// my_app_test.ts

describe('my-app', () => {
  console.log('yo');
});

If I run tsc, it compiles just fine, no warnings, no errors - nothing. But, Atom keeps telling me Cannot find name 'describe'.. So I figured it should be related to atom-typescript.
Info

os: windows 7, 64bits
atom: 1.9.8
atom-typescript: 10.1.6
tsconfig:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": true,
        "sourceMap": false
    },
    "exclude": [
        "node_modules"
    ]
}

Thanks!

"exclude": [
    "node_modules"
]

You're excluding all of node_modules, which is where it would store the types....?

Welp, that makes sense. Thanks, @DanielJoyce!

Just in case someone else falls into the same issue, here's how you'd exclude node_modules and use node_modules/@types:
Before:
"exclude": [
    "node_modules"
]

After:
"exclude": [
    "node_modules",
    "!node_modules/@types"
]

If you simply remove the node_modules from the exclude array, Typescript will try to compile your code and everything else that's in node_modules.

One can argue about if this is a bug or not. It definitely shows that atom-typescript diverges from the standard tsc compiler results.
There are multiple issues regarding more or less to the same problem:
https://github.com/TypeStrong/atom-typescript/issues/1055

Thank you @ericmdantas for the tip! That fixes this for me too.
I was fighting with this behavior for months now, and I agree it feels like a bug since VS Code, tsc, and ts-node all work fine without having to explicitly include node_modules/@types.
Why does atom-typescript differ in behavior like this? Is there any specific reason?
Thanks for the great work on this plugin in general. I hope my comment doesn't come across as ungrateful. =) Cheers.

Is this still a thing? I'm using version 10.1.9 without any issues any more.

I'm on the latest of everything pretty much (Atom-TypeScript 10.1.12, Atom 1.12.2, TypeScript 2.0.9, Node 6.9.1, etc.) and yes, this is an issue for me.
High-level repro: create a project with exclude: ['node_modules'] in tsconfig.json, npm install --save-dev @types/mocha, and write a new test/foo.ts file that references describe and it. VS Code doesn't complain, it compiles fine w/ tsc, and runs fine w/ ts-node, but Atom-TypeScript complains that describe and it are unknown.
Adding '!node_modules/@types' to exclude like @ericmdantas suggested fixes this for me.
I actually don't know (can't explain) why only Atom-TypeScript fails here and others don't also. The [mocha typings] certainly declare describe, it, etc. as globals:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/f5ab2df94e1aabf0fc6d783ad01c4c4671760627/mocha/mocha.d.ts#L32-L43
But I'm not quite sure how this typing gets picked up when mocha isn't explicitly imported, and node_modules in general is excluded.
Alas, I think the biggest issue here is simply that Atom-TypeScript is differing from every other tool.

Btw, I also experienced this with @types/node for e.g. require: Atom-TypeScript complains that require isn't known, but no other tool does.

Sorry, my bad. Tested it with the wrong packages. Looks like type definitions that provide globals like mocha, etc. are affected only.
The reason for atom-typescript's different behavior is most likely the way it sets up the "Typescript Language Service". I started to debug this issue once but haven't found any time to do dig deeper.

Thanks! I hope we can find the answer.
One note/update: unfortunately, adding !node_modules/@types to exclude for some reason (??) now makes Atom-TypeScript think that my test files aren't in the compilation context: https://github.com/TypeStrong/atom-typescript/issues/1132
This is happening consistently for me. And I just realized that when this happens, Atom-TypeScript doesn't catch any compilation issues in that file anymore.
So... maybe I'll revert adding !node_modues/@types to exclude and instead import {} from 'mocha' in the test files. I wouldn't want to do this for Node globals in every file though...

You most certainly want to have node_modules in the exclude array, in fact, it should be the default behavior if nothing else is specified. It's possible that atom-typescript differs from the behavior you see with tsc, but you have to make sure that you're using the exact same version of the compiler. I will happily review and accept pull requests that address issues like this.
Now, to get the global typings like jasmine to work, you have two options:

Add import "jasmine" to any of your source files
Add jasmine to types array in compilerOptions

Typescript builds a compilation context before it can type check anything. It starts with all entry files specified with files or include options in tsconfig.json minus anything matching exclude and it adds all dependencies that are explicitly required from those files. This is why option 1 works. Typescript also resolves the modules you've specified with types in option 2 and adds them to the compilation context. This is the preferred way to add global types like jasmine and node.

Hey @guncha, thanks for the response. I want to clarify a few things:

You most certainly want to have node_modules in the exclude array

I'm sorry if this wasn't clear: I am excluding it, and was not suggesting otherwise. I was talking about explicitly adding !node_modules/@types to exclude, as @ericmdantas suggested here:
https://github.com/TypeStrong/atom-typescript/issues/1054#issuecomment-240509189

Add import "jasmine" to any of your source files
Add jasmine to types array in compilerOptions

I understand I have these two options. And I completely get your reasoning — it makes sense. But the key issue to me is that I don't need to do either of these for tsc, ts-node and VS Code. Why?

It's possible that atom-typescript differs from the behavior you see with tsc, but you have to make sure that you're using the exact same version of the compiler.

This might be a start! They indeed appear different.
I don't have tsc installed globally at all; I only have it installed locally in my project via a local typescript dependency. It looks like Atom-TypeScript does this too, and the versions differ:
$ ./node_modules/.bin/tsc --version
Version 2.0.3

$  ~/.atom/packages/atom-typescript/node_modules/.bin/tsc --version
Version 2.1.0-dev.20161023

I manually set Atom-TypeScript to point to my 2.0.3 /full/path/to/node_modules/typescript/lib/typescriptServices.js , ran into issue #1124, so followed the loophole workaround. Unfortunately, if I remove !node_modules/@types from exclude, I still see this issue (of unrecognized describe and it errors). (And if I don't remove !node_modules/@types from exclude, I still see issue #1132.)
Again, I'd just like to emphasize: I'd only like to understand why Atom-TypeScript doesn't behave the same as tsc, ts-node, and VS Code. Thank you again.

Thanks for debugging. Yes, it seems that Typescript automatically adds everything inside node_modules/@types/* to the compilation context, but only if you haven't specified any value for types in compilerOptions.
This is done in ts.createProgram while atom-typescript is using ts.createLanguageService to interface with the Typescript compiler. Makes me wonder if other editors have the same issue and why the Typescript people set it up this way.

Nice find! Would it be worth re-opening this issue to track this difference now?

People here may already be aware of this, but this was new to me — here is where it's documented that TypeScript automatically adds everything inside node_modules/@types:
https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types
(Note that because of the header on that page, you may have to scroll up a bit.)
Given that adding !node_modules/@types to exclude results in issue #1132 for me, I tried following that documentation and specifying typeRoots: ['./node_modules/@types'] instead, inside compilerOptions.
tsc still works, but unfortunately, atom-typescript does even worse then. Besides still failing to resolve any global variables (like describe and it), it also now outputs hundreds of false compilation errors like "Property status does not exist on type Response", where Response is an interface we explicitly import. (It extends Express.Response, which we also explicitly import, in case that's helpful.)
So at this point, it looks like my options are:

Add import {} from 'mocha', 'node', etc. anywhere we use globals.
Add !node_modules/@types to exclude, and hit issue #1132.
Add typeRoots: ['./node_modules/@types'] and hit more errors.

Clearly 1 is the least bad option, but it's sad that it's only needed for atom-typescript.
Please let me know if there's any other info I can provide to help. Thank you again!

You just need to specify types: ["mocha", "node"] in your compilerOptions. This will ensure that tsc and atom-typescript behave the same way due to the behavior I described above. I haven't seen any mention of it in the docs either.

Good idea, thanks.
Unfortunately, when I do that, I again get new (but different) errors. These errors don't seem to be related to globals. I sunk an hour debugging the errors to see if they might be legit, but again, tsc, ts-node and VS Code all compile fine.
This is unfortunately quite exhausting. I wish I knew how to make atom-typescript "just work". I realize me saying this isn't helpful or constructive. Again, if there's any other info I could provide...

I ran into this same problem and have used import {} from 'mocha' in my code to resolve.
The silver lining is that you only need to do this once, so I have a typings.ts file and put this at the top along with other imports:
import {} from 'mocha';
// atom-typescript hack :(
// see https://github.com/TypeStrong/atom-typescript/issues/1054

And that seems to resolve it for all test files.

@guncha

You just need to specify types: ["mocha", "node"] in your compilerOptions

Thanks, can this at least be documented in the readme, since as you noted, Typescript docs say Specify "types": [] to disable automatic inclusion of @types packages. If atom-typescript doesn't behave like this, then it should at least be documented.
thanks

I'm working on an update to make atom-typescript behave exactly like running tsc from command line would (basically, by using tsserver that ships with the version of Typescript you have installed in your node_modules). That will address this and similar issues. If you feel it's important to document the current behavior, I won't say NO to a PR 😺

Sounds good, thanks. I've added a PR in the meantime.

I wasn't able to work around this bug with atom-typescript, tried all "include", "exclude", "typeRoots" combinations imaginable and all combinations I've found in these GitHub issues, nothing works with atom-typescript, while everything works perfectly in command-line with tsc. Abandoning atom-typescript for Visual Studio Code (where everything works out of the box) because of this. Hope it gets fixed soon.

@explicitcall another option is "lib": "["DOM", "es6"] if you're targeting es5. Depends on the exact issue you are having.

it doesn't solve the issue that atom-typescript behaves differently than command-line tsc invocation with the same tsconfig.json

@guncha any update with the Fix?

My short term fix has been to leave out the excludes from my tsconfig, leaning on the defaults (since all I had in there was node_modules anyway):

The "exclude" property defaults to excluding the node_modules, bower_components, jspm_packages and  directories when not specified.

Then I've been able to define my custom types and typeRoots property without complaint from atom-typescript.
          "node",
          "mocha",
          "whatwg-fetch",
          "enchanced-window"
        ],
        "typeRoots": [
          "./node_modules/@types",
          "./local-typings"
        ]```

@jhm-ciberman, I'm glad you asked! #1166

I have tried all the above solutions and non of them worked for me.
The project can be found here:
https://github.com/IsraelHikingMap/Site/
I'm using the typescript 2.2.2 msbuild NuGet package and I try to build the typescript project using command line on my CI build machine.
the command line I use is the following:
"c:\Users\user.nuget\packages\microsoft.typescript.msbuild\2.2.2\tools\tsc\tsc.exe" -p IsraelHiking.Web
After dotnet restore and npm install.
Nothing I tried for the last day worked I still get error of missing types where I know for a fact these types are referenced in my project.json file.
Can anyone take a look and let me know if this is a bug with typescript or with my code?
(This project was migrated from .Net 4.5 to .Net core and before the migration I had typescript NuGet references in scripts/typing and everything worked like charm).

Ok, Sorry, false alarm. the issue was caused by an old version of npm installed on my PC which I assume didn't get the right packages or something...


After recent commit, type compilation error

react-virtualized-tree/index.d.ts
(36,21): Generic type 'RendererProps<T>' requires 1 type argument(s).

This is caused by incorrect change in commit f6fe1a429c821015963c49b40ddb779d370d888d
https://github.com/diogofcunha/react-virtualized-tree/pull/68/commits/f6fe1a429c821015963c49b40ddb779d370d888d
- type onChange = (updateParams: NodeAction) => void;
+ type onChange = (nodes: Node[], node: Node) => Node[];

export interface RendererProps<T> {
  - onChange: onChange;
  + onChange: (updateParams: NodeAction) => void;

onChange param signature is still not matching between the type definition and the property, and on line # 36 this:
  children: (props: RendererProps) => JSX.Element;
should be something like this:
  children: (props: RendererProps<any>) => JSX.Element;

hmm, what's you TS version, on 3 it generally defaults T generally defaults to {}

Thanks for reporting, fixed on 2.3.7 😃


[Dropdown] Component specs

Updated dropdown component specs
Component guidelines released in 3.2.0

[x] Update component hover, focus and active states.
[x] Add disabled state

State
Value

hover
#F2F2F2

focus
#0067B3

active
#D9D9D9

[x] Update dropdown button padding properties
[x] Update options list specs and states

Changes implemented in the branch advance-theme. They will be available in the next release. Closing issue.


Cache should recover gracefully when disk space is exhausted

I wonder if any cache clear process automatically or should i do it my self ? In some conditions phones disk has no space and it throws java.io.IOException while using externalcachedir.
Using picasso 2.2.0 and okhttp 1.5.2
java.lang.RuntimeException: java.io.IOException: write failed: ENOSPC (No space left on device)
at com.squareup.okhttp.internal.DiskLruCache$1.run(DiskLruCache.java:175)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:838)
Caused by: java.io.IOException: write failed: ENOSPC (No space left on device)
at libcore.io.IoBridge.write(IoBridge.java:506)
at java.io.FileOutputStream.write(FileOutputStream.java:187)
at com.squareup.okhttp.internal.okio.Okio$1.write(Okio.java:70)
at com.squareup.okhttp.internal.okio.RealBufferedSink.close(RealBufferedSink.java:150)
at com.squareup.okhttp.internal.DiskLruCache.rebuildJournal(DiskLruCache.java:366)
at com.squareup.okhttp.internal.DiskLruCache.access$300(DiskLruCache.java:86)
at com.squareup.okhttp.internal.DiskLruCache$1.run(DiskLruCache.java:171)
... 3 more
Caused by: libcore.io.ErrnoException: write failed: ENOSPC (No space left on device)
at libcore.io.Posix.writeBytes(Native Method)
at libcore.io.Posix.write(Posix.java:189)
at libcore.io.BlockGuardOs.write(BlockGuardOs.java:197)
at libcore.io.IoBridge.write(IoBridge.java:501)
... 9 more

We're getting closer on this. One full-disk bug fixed in 2.3 is here:
https://github.com/square/okhttp/issues/1211
Still remaining is improving rebuildJournal() to work with an unwritable disk.

Issue is general, but within a JVM app it's ops fault.  Within a mobile, it's awkward to handle except in OkHttp.

Closing as low scope. Re-open if this is impacting you.


Add a stylua formatter config

Would you be open to adding a stylua formatter config? I can make a PR for it if so.
I ask because, when submitting my most recent PR, my formatter ran with default settings and I had to mess with the format to not add unnecessary changes.
I can add a .stylua.toml file that sets the settings to how you have the project formatted currently.

Alternatively, if you'd prefer not to, we could add .stylua.toml to a .gitignore and I could just keep it locally.


zFnMeshField.getIndex

getIndex seems to have an offset ?
white = query points, blue = field point at index returned.

fixed.


Advertise Python 3.12 for 1.10.x! Part Deux

Change Summary
Attempt 2 at making Python 3.12 play nice with pydantic 1.10.x and cython 0.29.x

Fix #9622
Related issue number

Checklist

[x] The pull request title is a good summary of the changes - it will be used in the changelog
[x] Unit tests for the changes exist
[x] Tests pass on CI
[x] Documentation reflects the changes where applicable
[x] My PR is ready to review, please add a comment including the phrase "please review" to assign reviewers

skip change file check
Selected Reviewer: @hramezani

please review @sydney-runkle

Awesome job @vfazio!!
Cool to be working with someone else from Madison! On Wisconsin 🦡 !

@vfazio,
We can get this out with v2.8 of Pydantic at the end of the month!


What is threshold_filter

Required Info

Camera Model
D400

Firmware Version
<IP_ADDRESS>

Operating System & Version
Ubuntu 22

Kernel Version (Linux Only)
5.15

Platform
PC

SDK Version
2.55.1

Language
C

Segment
Robot }

Issue Description
There are very less information about threshold_filter.  https://dev.intelrealsense.com/docs/post-processing-filters does not mention it.
Is there any difference between threshold_filter and clip distance.  clip distance will still contain the noise cause by the background. Does threshold_filter remove the noise from  background?

Hi @1005088h  The threshold filter and clip distance are similar. Clip distance defines a maximum distance in meters from the camera at which depth data will be rendered, with depth values greater than that value being excluded from the depth image.
The threshold filter allows both a maximum and a minimum distance to be defined.  For example, if there was an object close to the camera at 20 cm away but you did not want it to be included on the depth image then you could set a minimum threshold filter distance of 0.25 meters (equal to 25 cm) so that depth values lower than 0.25 meters are excluded from the depth image.
The threshold filter does not affect noise on the image.  A temporal filter would have a beneficial effect on depth noise reduction.

Hi @1005088h  Do you require further assistance with this case, please?  Thanks!

Hi @1005088h Do you require further assistance with this case, please? Thanks!

thanks, let's close for now


Attempt to ensure metric names are always unique

Only unique metric names will appear in New Relic, so text is added to
the metric name to ensure that all reported metrics have unique names.

Updated master


Design extension popup for summary cookie analysis

Description:
The extension popup will capture a summary of the cookie analysis performed on a given page, and it will be updated periodically.
User Story:
As a user, I want the capability of taking a glance of the cookie status of the pages I navigate too without having to open DevTools. After I get a sense of what is happening for a  given page, I can open DevTools to get deeper details and insights.

Closing this issue as this will be captured in the architecture of the tool via the (Icon, Icon Popup, Side Panel) module.


ReplyToId Inconsistency: Desktop vs Mobile

Hi,
Today we found a bug in our own Teams Bot using the Bot Framework where we couldn't Replace a previously sent message on mobile clients and an exception was throw (badRequest). (but we could for desktop clients without issues)
The root cause was the ReplyToId which was the string "0" on mobile clients (IOS & Android) but the value null on the Desktop Teams client, where we only checked for null in our code to not try to reply the message. So the bug was raised due to the inconsistency which I couldn't found documented somewhere.
I don't think this inconsistency is by design, so made this issue in the hope this could be aligned and bugs could be avoided in the future for other bot developers.
Wkr,
Jordy

@JordyGit - Could you please share the repro steps so that we can try it locally?

It occurred in the next case for us:

Execute 'login' command to a bot, which prompts the OauthPrompt built in in the Bot Framework.
If the user logs in, we receive the token and we send the message 'you were logged in successfully'.
Instead of sending that message we tried to Replace the OauthPrompt message (which is not possible, see Stackoverflow). But the ReplyToId which is set at that moment in our turnContext is the string "0" if it's a mobile teams client, and value null if it's a desktop teams client.

The difference in value of ReplyToId from different clients looked odd to me so that is why I report it here. Hope this helps you to reproduce this issue.

There is no sample, it's just a login command triggering the OAuthPrompt from the Bot Framework (built in). We wrapped that one in our own dialog to be able to do things in front and after the built in prompt. We have a turnContext with a ReplyToId in the context activity.

We have tried multiple things from our side but unable to repro this issue. Could you please share minimal code snippet?
Thanks

Here is some code, just trigger/start the AuthenticateDialog from your bot.
File 1:
`public class OAuthPromptDialog : OAuthPrompt
{
public const string Id = "OAuthPromptDialog";
    public OAuthPromptDialog(IAuthenticationOptions options)
        : base(Id, new OAuthPromptSettings
        {
            ConnectionName = options.ConnectionName,
            Text = "To continue, you must first log in.",
            Title = "Log In",
            Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
            EndOnInvalidMessage = true,
        })
    {
    }
}`

File 2:
`public class AuthenticateDialog : ComponentDialog
{
public const string Id = "AuthenticateDialog";
private const string AuthenticationId = "AutenticationPromptId";
    public AuthenticateDialog()
        : base(Id)
    {
        AddDialog(new WaterfallDialog(AuthenticationId, new List<WaterfallStep>()
        {
            PromptSignInCardAsync,
            ReplaceSignInCardAsync,
        }));
    }

    private async Task<DialogTurnResult> PromptSignInCardAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
       return await stepContext.BeginDialogAsync(OAuthPromptDialog.Id, cancellationToken: cancellationToken);
    }

    private async Task<DialogTurnResult> ReplaceSignInCardAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        if (!(stepContext.Result is TokenResponse token))
        {
            throw new Exception();
        }

        await stepContext.Context.ReplaceActivityAsync(new Activity(text:"logged in successfully"), cancellationToken);
}`

File 3 (Here we have the issue where we had to do 2 if checks because the desktop and mobile client returns a different response for ReplyToId):
`public static class DialogHelper
{
///
/// Replaces the initiating activity with this activity (for example replaces an adaptive card in a sequential flow) if possible
/// otherwise the activity will be send as a new message
///
public static async Task ReplaceActivityAsync(this ITurnContext context, Activity activity, CancellationToken cancellationToken)
{
try
{
// Mobile Teams client will return "0" instead of null (like in desktop Teams client)
if (context.Activity.ReplyToId != null && context.Activity.ReplyToId != "0")
{
activity.Id = context.Activity.ReplyToId;
await context.UpdateActivityAsync(activity, cancellationToken);
return;
}
}
catch (ErrorResponseException)
{
// If the request fails, it will still send the activity like normal
}
        await context.SendActivityAsync(activity, cancellationToken);
    }
}`

We have the repro, I am checking this with internal team. I will let you know the updates.
Thanks

Just an update, but today I noticed the ReplyToId is now filled in from the Teams Desktop Client OAuthPrompt, meaning it is possible to replace the login card with a notification the user was logged in in successfully. ReplyToId is not filled in yet on IOS or Android.

Thanks for the update, we are checking with the engineering team on the bug status, we will update you.

Just to keep this post up to date, the same behaviour as described in my message above applies up on today.

The issue still persists. This kills the experience on my bot as well.

It's still reproduces. Any update from the engineering team ?

We have the following suggestion from engineering team. Could you please use version 4.19.+ of the bot framework.
Some features were added to help with message edits and deletions.
4.19.0 release notes: Release Bot Framework DotNet SDK 4.19.0 · microsoft/botbuilder-dotnet (github.com)
Support Teams message edit, message soft delete and message undelete activities


run make_deep_image

i met a problem when run make_deep_image_analogy.sh
/usr/bin/ld: /tmp/tmpxft_000079ab_00000000-29_Classifier.o: undefined reference to symbol '_ZN2cv6String10deallocateEv'
//usr/local/lib/libopencv_core.so.3.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
not like the libopencv_imgcodecs, I met the libopencv_core problem.
OPENCV version:3.2
Please help me.

I had the same problem, so I switched my OpenCV version to 2.4, and then it worked for me.


Problem in subtraction

if you calc<PHONE_NUMBER>99999999 - 1 the result is<PHONE_NUMBER>0000000000

Fixed limiting max characters to 15.


Obtain "compatible with GitHub Enterprise" approval

Renovate works with Github Enterprise, but apparently needs some rubber stamp from GitHub to show up as Enterprise-compatible in searches, as mentioned in https://github.com/renovateapp/renovate/issues/1497

Apparently it is already being displayed as compatible.


Returns null

I am trying to get the user name of the user using the my app (published to an IIS server) when I run it local It is able to pick up my user name, but once it is deployed it does not seem to be able to pull user name data.

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

ID: c9942b0a-a7fb-0d34-9201-af0963affa9e
Version Independent ID: 19770710-5225-a1ea-e082-65da6ba4a49a
Content: ASP.NET Core Blazor authentication and authorization
Content Source: aspnetcore/security/blazor/index.md
Product: aspnet-core
Technology: aspnetcore-security
GitHub Login: @guardrex
Microsoft Alias: riande

@KenDarlingPAF, did you ever figure out the problem? If not, there's not enough information in your post. Explain what you've set up ... show code. Sometimes a cross-linked repro project is best, but you can just put the code snippets in here (use triple-backticks for code blocks).

Closing as there was no response here for about 2 weeks now.


Part 5: Enemy turn.

Enemy turns were handed with a state in v1, but I think states should only be used to handle different kinds of player input and that enemy turn should be a method to call after the player finishes an action.
Actions might end up removing an entity from the entities set while it's being iterated over.  So a copy of the set needs to be used for iteration.  for entity in list(self.game_map.entities): would work but for entity in self.game_map.entities - {self.player}: makes a copy and prevents the need to compare every entity to player.
def enemy_turn(self) -> None:
    for entity in self.game_map.entities - {self.player}:
        if not isinstance(entity, Actor):
            continue  # This entity can't perform actions.
        if entity.fighter.hp <= 0:
            continue  # Entity was killed during this loop.
        ...  # Take action.

isinstance is a fairly slow check here.  The alternatives would be to keep a separate set of Actors or to give Entity an on_turn method overridden by Actor, but I don't think the performance would be bad enough to require those.

Part 5 doesn't get into actual Entity actions, but I'm glad you're thinking ahead to it. For part 5 specifically, I think this is enough:
    def handle_enemy_turns(self):
        for entity in self.game_map.entities - {self.player}:
            print(f'The {entity.name} wonders when it will get to take a real turn.')

When we get to Part 6 (where the enemies to take real turns), what if we have a "can_act" property, which does all the necessary checks? It can check if the entity is an Actor and if it isn't dead.

Just assume I'm talking about part X and later in the issues posts.  Ignore the code for future parts until they become relevant.
The thing about a property is it can't hint at the type of the class by itself.  Which is why tcod's event.type had to be replaced with isinstance.  At the very least you'd need to add assert isinstance or some other type cast in the property or after the check.
There's an alternative method which can be used.  Which is to add an empty on_turn method to Entity and override it for Actor, the overridden method on Actor will know that the type for self is Actor.
class Entity:
    def on_turn(self, engine: Engine) -> None:
        """Called on each non-player entity during handle_enemy_turns."""

class Actor(Entity):
    def on_turn(self, engine: Engine) -> None:
        """Handle actions performed by an enemy actor."""
        if self.fighter.hp <= 0:
            continue
        print(f'The {self.name} wonders when it will get to take a real turn.')

...
def handle_enemy_turns(self):
    for entity in self.game_map.entities - {self.player}:
        entity.on_turn(self)

I don't know about the performance of this.  I suspect it would be a little faster than isinstance.


Any luck on finishing this?

I have to work with the google admin sdk right now, and so might be willing to contribute to this project. Please let me know your thoughts on current status, and where this project ended.

Hey,
I don't work with the project that I needed this for anymore, so I currently don't plan to work more on this. Other than implementing the types for some of the API objects nothing has really happened in this project, but you might be able to take those types and a library like http-conduit and quickly mash something up that can speak to Google's API.
Feel free to fork and take over the project, if you want I can add an according license.
//V

If you add MIT license I am likely to use this code atleast.

Thanks!


⚠ Samsung has degraded performance

In 083d193, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2720 ms

Resolved: Samsung performance has improved in a60099d.


Libcurl transport layer issue under high concurrency data transfer

After running for a while, I keep getting Failed to get a new connection for [host], couldn't resolve host name, and the ingress and egress drop to zero.

reproduce code
// Copyright (c) Microsoft Corporation. All rights reserved.
// SPDX-License-Identifier: MIT

#include <curl/curl.h>
#undef min
#undef max

#include <algorithm>
#include <atomic>
#include <chrono>
#include <iostream>
#include <mutex>
#include <random>
#include <thread>

#include <azure/core/http/curl_transport.hpp>
#include <azure/storage/blobs.hpp>

#include "samples_common.hpp"

SAMPLE(BlobsGettingStarted, BlobsGettingStarted)
void BlobsGettingStarted()
{
  curl_global_init(CURL_GLOBAL_ALL);

  using namespace Azure::Storage::Blobs;

  const std::string containerName = "sample-container";
  BlobClientOptions options;
  options.Transport.Transport = std::make_shared<Azure::Core::Http::CurlTransport>();
  auto containerClient = BlobContainerClient::CreateFromConnectionString(
      GetConnectionString(), containerName, options);
  containerClient.CreateIfNotExists();

  const std::string blobNamePrefix = "sample-blob-";

  std::vector<std::size_t> blobSizes;
  for (int i = 0; i < 100; ++i)
  {
    blobSizes.emplace_back(10);
    blobSizes.emplace_back(100);
    blobSizes.emplace_back(1024);
    blobSizes.emplace_back(8 * 1024);
    blobSizes.emplace_back(10 * 1024);
    blobSizes.emplace_back(12 * 1024);
    blobSizes.emplace_back(16 * 1024);
    blobSizes.emplace_back(32 * 1024);
    blobSizes.emplace_back(64 * 1024);
    blobSizes.emplace_back(128 * 1024);
  }
  for (int i = 0; i < 5; ++i)
  {
    blobSizes.emplace_back(2 * 1024 * 1024);
  }

  std::string blobContent;
  blobContent.resize(*std::max_element(blobSizes.begin(), blobSizes.end()));
  for (std::size_t i = 0; i < blobContent.size(); ++i)
    blobContent[i] = char(i + 0x123);

  auto upload_blob_func = [&](int i, int concurrency, bool init = false) {
    const std::string blobName = blobNamePrefix + std::to_string(i) + (init ? "" : "d");
    auto blobClient = containerClient.GetBlockBlobClient(blobName);
    const std::size_t blobSize = blobSizes[i];
    if (init)
    {
      try
      {
        if (static_cast<std::size_t>(blobClient.GetProperties().Value.BlobSize) == blobSize)
        {
          return;
        }
      }
      catch (Azure::Storage::StorageException&)
      {
      }
    }
    UploadBlockBlobFromOptions options;
    options.TransferOptions.SingleUploadThreshold = 1024;
    options.TransferOptions.Concurrency = concurrency;
    blobClient.UploadFrom(reinterpret_cast<const uint8_t*>(blobContent.data()), blobSize, options);
  };

  // init
  for (int i = 0; i < blobSizes.size(); ++i)
  {
    upload_blob_func(i, 16, true);
  }

  auto download_blob_func = [&](int i, int concurrency) {
    const std::string blobName = blobNamePrefix + std::to_string(i);
    auto blobClient = containerClient.GetBlockBlobClient(blobName);
    auto blobProperties = blobClient.GetProperties();
    const std::size_t blobSize = blobProperties.Value.BlobSize;
    std::string downloadBuffer;
    downloadBuffer.resize(blobSize);
    DownloadBlobToOptions options;
    options.TransferOptions.InitialChunkSize = 1024;
    options.TransferOptions.Concurrency = concurrency;
    blobClient.DownloadTo(
        reinterpret_cast<uint8_t*>(&downloadBuffer[0]), downloadBuffer.size(), options);
  };

  std::atomic<int> concurrency = 1;

  auto changeConcurrencyThreadHandle = std::thread([&concurrency]() {
    std::mt19937 eg(std::random_device{}());
    int currentConcurrency = 1;
    while (true)
    {
      int newConcurrency = std::uniform_int_distribution<int>(1, 512)(eg);
      concurrency.fetch_add(newConcurrency - currentConcurrency, std::memory_order_relaxed);
      currentConcurrency = newConcurrency;
      std::cout << "Change concurrency to " + std::to_string(currentConcurrency) + "\n"
                << std::flush;
      std::this_thread::sleep_for(std::chrono::minutes(10));
    }
  });

  auto taskSchedulerThreadHandle = std::thread([&]() {
    std::mt19937 eg(std::random_device{}());

    struct WorkerContext
    {
      std::atomic<std::time_t> startTime = 0;
      std::atomic<std::time_t> endTime = 0;
      std::thread threadHandle;
    };
    std::list<std::shared_ptr<WorkerContext>> workerContexts;
    while (true)
    {
      int c = std::uniform_int_distribution<int>(1, 16)(eg);
      int oldConcurrency = concurrency.fetch_sub(c, std::memory_order_relaxed);
      if (oldConcurrency < c)
      {
        // give back some
        concurrency.fetch_add(c - std::max(oldConcurrency, 0), std::memory_order_relaxed);
        c = std::max(oldConcurrency, 0);
      }
      if (c > 0)
      {
        int rd = std::uniform_int_distribution<int>(1, 100)(eg);
        int blobId = std::uniform_int_distribution<int>(0, int(blobSizes.size() - 1))(eg);
        std::function<void()> func;
        if (rd < 50)
        {
          func = [upload_blob_func, blobId, c, &concurrency]() {
            upload_blob_func(blobId, c);
          };
        }
        else
        {
          func = [download_blob_func, blobId, c, &concurrency]() {
            download_blob_func(blobId, c);
          };
        }

        workerContexts.emplace_back(std::make_shared<WorkerContext>());
        auto context = workerContexts.back();
        context->threadHandle = std::thread([context, func, c, &concurrency]() {
          context->startTime.store(std::time(0), std::memory_order_release);
          try
          {
            func();
          }
          catch (Azure::Storage::StorageException& e)
          {
            std::cout << e.ErrorCode << " " << e.ErrorCode << std::endl;
          }
          catch (std::exception& e)
          {
            std::cout << e.what() << std::endl;
          }
          context->endTime.store(std::time(0), std::memory_order_release);
          concurrency.fetch_add(c, std::memory_order_relaxed);
        });
      }
      if (concurrency.load(std::memory_order_relaxed) > 0)
      {
        continue;
      }
      for (auto ite = workerContexts.begin(); ite != workerContexts.end();)
      {
        std::time_t startTime = (*ite)->startTime.load(std::memory_order_acquire);
        std::time_t endTime = (*ite)->endTime.load(std::memory_order_acquire);
        if (endTime != 0)
        {
          // means task finished
          (*ite)->threadHandle.join();
          ite = workerContexts.erase(ite);
        }
        else if (startTime != 0)
        {
          std::time_t delta = std::time(0) - startTime;
          if (delta > 1800)
          {
            std::cout << "task's been running for " + std::to_string(delta) + " seconds\n"
                      << std::flush;
          }
          ++ite;
        }
      }
      static std::time_t lastPrintTime = 0;
      std::time_t currentTime = time(0);
      if (currentTime - lastPrintTime > 60)
      {
        std::cout << "queue_size: " + std::to_string(workerContexts.size()) + "\n" << std::flush;
        lastPrintTime = currentTime;
      }
      std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }
  });

  // run forever
  taskSchedulerThreadHandle.join();
  changeConcurrencyThreadHandle.join();
}

This issue also exists on Linux, but with a different symptom.
$ ./azure-storage-sample BlobsGettingStarted
Change concurrency to 594
queue_size: 71
terminate called after throwing an instance of 'std::system_error'
  what():  Resource temporarily unavailable
Aborted (core dumped)

If the transport layer cannot handle too many concurrent connections, it should accept as many as connections as possible. Blocking all data transfer like on Windows or throwing std::system_error on Linux don't look like correct behavior.

@vhvb1989

Hey @Jinming-Hu , some questions:

Can you mention the system details from where you are running?

Can you describe what the code is doing in a brief?  For what I can tell, it starts 1005 threads just as part of the initializing. Each thread will then spawn 16 threads if the upload size is greater than 1024bytes (which are 705 items). So, the application is requesting to open ~705 000 connections in parallel.  Is that correct?   If yes, this type of application doesn't look right for one single computer. I would expect a cluster to take care of this kind of jobs.

Supposing we managed to get pass the initialize phase, then, the application is creating random numbers to choose the concurrency to create a new thread to either Download or Upload base on a 50% - 50% probability.  I don't fully understand if there is some way to control the max threads in the system at any given time or if it will just keep growing forever based on that randomization. Can you explain this part?

What is what you are expecting to happen?  The SDK does not contain a request-scheduler, all request are directly sent to the OS as soon as they arrive.  If we would want the SDK to create a queue to keep eventually dispatching requests, we might want to talk about it.

Is the track1 SDK supporting this?  What does it do?

Did you give a try using winHttp here?

In general, I consider this a bad application design and I would like to understand the general problem (if this is a customer- common-scenario) to help recommending some other approaches (like a work balancer, or an operation-scheduler) which would provide all the benefits of a well known design-pattern-solution.

Hey @Jinming-Hu , some questions:

Can you mention the system details from where you are running?

I tried on DS4 and DS14, and I can reproduce in both environment. So I assume it's not specific to any VM size.

Can you describe what the code is doing in a brief?  For what I can tell, it starts 1005 threads just as part of the initializing. Each thread will then spawn 16 threads if the upload size is greater than 1024bytes (which are 705 items). So, the application is requesting to open ~705 000 connections in parallel.  Is that correct?   If yes, this type of application doesn't look right for one single computer. I would expect a cluster to take care of this kind of jobs.

It creates 1000 blobs for test, in sequence, not in parallel. So the concurrency for initialization is just 16.

Supposing we managed to get pass the initialize phase, then, the application is creating random numbers to choose the concurrency to create a new thread to either Download or Upload base on a 50% - 50% probability.  I don't fully understand if there is some way to control the max threads in the system at any given time or if it will just keep growing forever based on that randomization. Can you explain this part?

The overall concurrency is controlled by atomic variable concurrency.

What is what you are expecting to happen?  The SDK does not contain a request-scheduler, all request are directly sent to the OS as soon as they arrive.  If we would want the SDK to create a queue to keep eventually dispatching requests, we might want to talk about it.
Is the track1 SDK supporting this?  What does it do?
Did you give a try using winHttp here?

In general, I consider this a bad application design and I would like to understand the general problem (if this is a customer- common-scenario) to help recommending some other approaches (like a work balancer, or an operation-scheduler) which would provide all the benefits of a well known design-pattern-solution.

All right. I get it.
Can you at lease help us understand why the application will crash on Linux when concurrency is high?
Do you think this is by-design behavior?

You might want to try this:
https://ma.ttias.be/linux-increase-ip_local_port_range-tcp-port-range/#:~:text=%24 sysctl net.ipv4.ip_local_port_range net.ipv4.ip_local_port_range %3D 32768 61000 The,heavy traffic servers can easily reach this limit.
or
https://access.redhat.com/solutions/41776
I am not Network expert, but from a quick re-search, I see that there could be a Max number of sockets in TIME_WAIT state allowed in the system for security reasons.
You might want to look for Windows/Linux Network experts for more details about it.  If you do, please share any cool finding.

For now, I will remove the blocking release and bug tags and remove the issue for the May release.  Let me know if you think we should still block on this otherwise.

You might want to try this:
https://ma.ttias.be/linux-increase-ip_local_port_range-tcp-port-range/#:~:text=%24 sysctl net.ipv4.ip_local_port_range net.ipv4.ip_local_port_range %3D 32768 61000 The,heavy traffic servers can easily reach this limit.
or
https://access.redhat.com/solutions/41776
I am not Network expert, but from a quick re-search, I see that there could be a Max number of sockets in TIME_WAIT state allowed in the system for security reasons.
You might want to look for Windows/Linux Network experts for more details about it. If you do, please share any cool finding.

That doesn't make any sense. Connections are reused, so if the concurrency is 500. The number of connections is also ~500

For now, I will remove the blocking release and bug tags and remove the issue for the May release. Let me know if you think we should still block on this otherwise.

Fine, we also agree this is not GA-blocking. From storage team's experience of performing perf-test, usually we can get 30~40Gbps with 32~64 threads. So we agree ~500 concurrency is not a common scenario.

BTW WinHttp transport layer doesn't have this problem.

BTW WinHttp transport layer doesn't have this problem.

I see.  This means that winHttp might have a queue to hold requests until resources are available from the OS.  I can try to design/implement something for the libcurl transport adapter for after GA.  I will check with Rick for planning/priority

@vhvb1989 I think we need first to confirm it's a scheduling issue or queue issue of libcurl, before we make any changes.


Custom firefox profile doesn't work in Windows

Documentation says you can select an existing firefox profile instead of creating a temporary one each time:
browser = Browser('firefox', profile='my_profile')

But this doesn't actually work, it doesn't know where to search for the profile:
browser = Browser('firefox', profile='default')
...
WindowsError: [Error 3] The system cannot find the path specified: 'default/*.*'

same for profile='272kp1a1.default', profile='272kp1a1', etc. though it isn't explained in the docs which type of string is correct.

@endolith what is your windows, firefox and splinter version?

I'll check exact numbers later, but it's Windows 7 Pro 64-bit, the version currently installed by pip install splinter (0.7.2?), and the latest version of firefox (39?).  Both were installed yesterday.  Python is python(x,y)-<IP_ADDRESS>


Add prometheus metrics access for keda operator

Please see the PR, I've added support for podMonitor to a build in set of metrics of the operatorSDK. Thanks to @avivgold098

Please see the PR, I've added support for podMonitor to a build in set of metrics of the operatorSDK. Thanks to @avivgold098

Thank you for your contribution!

Thank you for your contribution!

Don't forget to:

Document these new values in the README of the chart
Fix DCO

Thanks for your contribution!

Don't forget to:

Document these new values in the README of the chart
Fix DCO

Thanks for your contribution!

Thank you @oded-dd !


[Bug Report] $attrs is readonly. | el-time-picker type="fixed-time"

Element UI version
2.5.4
OS/Browsers version
Windows 10, Chrome, Electron
Vue version
2.6.7
Reproduction Link
https://github.com/t1gu1/Electron-Element-UI-VueJs-Nuxt-architecture-style/blob/master/src/renderer/pages/about.vue
Steps to reproduce
git clone: https://github.com/t1gu1/Electron-Element-UI-VueJs-Nuxt-architecture-style
npm install
npm run dev
Go to about page
Use the el-time-picker type="fixed-time" (Time picker)
What is Expected?
No warning
What is actually happening?
[Vue warn]: $attrs is readonly.
found in
--->
 at packages/date-picker/src/basic/time-spinner.vue

we don't have type="fixed-time", where do you find such usage?

Oh, you say true. 😨😅
I just copy paste the code from example on element ui web site.
If find that in the first form code example on this link:
https://element.eleme.io/#/en-US/component/form

For me the issue is close.
Thanks

fixed-time appears to be typo.
Do you observe this error after removing type='fixed-time' ?


Local gizmos

Fixes: #606

Furthermore, this makes visual debugging easier as gizmos can now be placed directly on an entity. This will in the future allow for e.g; debugging a player or enemy view direction with a line, or raycasts for AFPS

This will enable the physics example to work on the web as well since the web can't depend on the physics crate or its components


Create an Empty SAPUI5 Project

Tutorials: https://developers.sap.com/tutorials/sapui5-101-create-project.html
Hi @cjbernal,
For some reason I can't retrieve the subaccount level destination in the Fiori Application Generator wizard, although I am logged in to the correct CF org. The BAS I am using is also in the same CF org. Do you have any idea why that is?
Logging in again and restarting the dev space didn't fix it.
Best, Nico

Hi @nicoschoenteich, sorry to hear that you are having an issue. I have forwarded this to my colleagues working on the Application Generator to see if they can better help you out. They should be by soon :-)
Kind regards,
Conrad

Hi @nicoschoenteich Can you please confirm the destination properties as mentioned here: https://developers.sap.com/tutorials/cp-cf-create-destination.html


Why anonymous?

Just out of curiosity, why do you prefer to be anonymous?

+1

This had to do with the submission guidelines for SIGGRAPH. The paper has now been officially accepted, meaning we can interact here directly 😊


Fix WartRemoval warnings + tiny code fixes

Partially adresses #200.

Coverage increased (+0.2%) to 92.15% when pulling 8d1c163704cf158d4ac691fd406fe158ece47eec on fix-warnings into dc5717ab3edb1d381aaf5dfd19d47e45a1f59c9b on master.

Coverage increased (+0.2%) to 92.15% when pulling 8d1c163704cf158d4ac691fd406fe158ece47eec on fix-warnings into dc5717ab3edb1d381aaf5dfd19d47e45a1f59c9b on master.


two typo in get-gearpump-distribution.md

amend two typo.

also README.md

Please rebase by following https://github.com/gearpump/gearpump/blob/master/CommitGuideline.md

Current coverage is 62.71%

Merging #1800 into master will decrease coverage by -0.91% as of d564266

@@            master   #1800   diff @@
======================================
  Files          167     167
  Stmts         5015    5015
  Branches       551     551
  Methods
======================================
- Hit           3191    3145    -46
  Partial          0       0
- Missed        1824    1870    +46

Review entire Coverage Diff as of d564266

Uncovered Suggestions

+0.30% via ...cutor/Executor.scala#271...285
+0.28% via ...MetricsService.scala#118...131
+0.26% via .../master/Master.scala#123...135
See 7 more...

Powered by Codecov. Updated on successful CI builds.


[Issue] Blank Search should Return All, Better Using Logo Rutun Homepage

In GitLab by @liyanq528 on Sep 13, 2017, 18:11

In GitLab by @wknet123 on Nov 8, 2019, 07:36
Fixed with PR #303

In GitLab by @yhua123 on Nov 8, 2019, 07:36
LGTM

In GitLab by @sokril on Nov 8, 2019, 08:10
closed

In GitLab by @sokril on Nov 8, 2019, 08:10
assigned to @wknet123

In GitLab by @wknet123 on Nov 13, 2019, 03:54
mentioned in merge request !127

In GitLab by @wknet123 on Nov 13, 2019, 09:58
mentioned in merge request !202


Search by path

Do you guys provide a way to search by a path or an application? :)
I've been using that feature in Jennifer to see the performance of a specific API.

Aggregation (and by extension statistics) is definitely on our road map, but we don't have one ready just yet.
It should be added in the next couple of releases.

Hope it will be soon!


Broken tab-completion with file or directory names with spaces in the context of tilde-prefixed paths (~)

Prerequisites

[X] Write a descriptive title.
[X] Make sure you are able to repro it on the latest released version
[X] Search the existing issues.
[X] Refer to the FAQ.
[X] Refer to Differences between Windows PowerShell 5.1 and PowerShell.

Steps to reproduce
Note:

Currently, the problem only affects Unix-like platforms, because only there is the emulation of tilde expansion for native programs implemented.

However, once  #20402 is merged, it'll affect Windows too.

The solution is the same on both platforms: preserve the unquoted status of an initial ~ if specified as such.
$null = New-Item -Force "$HOME/a test"

(TabExpansion2 'code ~/a').CompletionMatches[0].CompletionText
(TabExpansion2 'code ~/''a').CompletionMatches[0].CompletionText
(TabExpansion2 'code ~/"a').CompletionMatches[0].CompletionText

# Remove-Item "$HOME/a test" # clean up

Related:

#20754

Expected behavior
~/'a test'
~/'a test'
~/"a test"

That is, the unquoted status of the initial ~ should be preserved.
Actual behavior
'~/a test'
'~/a test'
'~/a test'

That is, all expansions resulted in inappropriate quoting in that the previously unquoted ~ - required to trigger PowerShell's tilde-expansion emulation when calling external programs - is now quoted.
Error details
No response
Environment data
PowerShell 7.4.0 on Unix-like platforms.

Visuals
No response

Expected behavior

Quoted part of path also does not work in pwsh with native utilities:

But works with object:
$ $f = gi ~/Desktop/'a test'
$ cat $f
file content

What $f returns to cat, quoted Fullpath or space-escaped Fullpath?

Quoted part of path also does not work in pwsh with native utilities:

@237dmitry, yes that's the related bug linked to in the initial post.

What does $f returns to cat, quoted Fullpath or space-escaped Fullpath?

Neither, because - unlike on Windows -  there is no such a thing as a process command line on Unix-like platform, only an array of verbatim arguments (in the case at hand, it is the value of $f.ToString())

I understand that some (or all) Unix shells have this behavior so I can understand why people would want it to be consistent across the different shells. However, in my eyes the desired behavior seems a bit weird. To me a string is a string, it doesn't matter if you use single quotes, double quotes or no quotes at all, as long as you use whatever escape rules apply to the string type during assignment you are golden.
I can't think of any other example in PowerShell where a string is treated differently, depending on how it was quoted. Can you?

@MartinGC94, yes, the distinction should not and does not matter in PowerShell, but PowerShell's emulation of both the tilde expansion and pathname expansion (globbing) when calling external programs on Unix of necessity already does make this distinction:
E.g. printf '~' prints verbatim ~, and printf '*.txt' prints verbatim *.txt - only leaving these arguments unquoted triggers the emulation (as designed).
Similarly, printf '~/Documents' prints verbatim ~/Documents, whereas printf ~/'Documents'prints the equivalent of "$HOME/Documents" - note the of necessity partial quoting, which crucially leaves the ~/ prefix unquoted.
The point of this issue is that if the filename you're tab-completing happens to contain spaces, you end up with a broken command, because the completion quotes the whole argument and therefore deactivates tilde expansion.

Even if it's restricted to native commands it still seems weird to me:

Why should I care if "printf" is a native PowerShell command or if it's a native command? PS usually does a good job of making it seamless but here I have to be aware of the type of command.

The point of this issue is that if the filename you're tab-completing happens to contain spaces, you end up with a broken command, because the completion quotes the whole argument and therefore deactivates tilde expansion.

Yeah I understand. Ironically, I did consider just using whatever quotes was used in the input string and just escape the spaces if the string was unquoted because it would be easier to implement but I ended up doing the quoting to match the old behavior.
Also, slightly fun fact: I don't actually use ~ myself, I just added that feature because it seemed simple enough to add and it allowed me add the scaffolding for later adding the variable replacement fix. Lesson learned I guess, even seemingly simple things like a shortcut/alias character can be surprisingly complex.

Yes, it is somewhat awkward from a PowerShell perspective, but it is unavoidable when worlds collide, as happens when a different shell's features are emulated.
The emulation - sensibly - only applies to external programs, given that PowerShell commands do their own expansion of ~ and wildcard patterns such as *.txt (where applicable).
If the quoting distinction weren't made, there'd be no way to pass a verbatim ~ or ~/-prefixed argument to an external program.
I see that ~ expansion is now also coming to (calls to external programs) on Windows, as experimental feature PSNativeWindowsTildeExpansion, presumably first available in the next preview, which would  be v7.5.0-preview.1
This means that - if it even ever becomes a stable feature - the first stable version it would land in is v7.5 - unfortunately, this is way too late as a fix for #20750


View Stored Procedures, UDFs and Triggers in explorer

These should show up as nodes under each Cosmos DB account (all APIs support them) with the option to click the node and open the associated file.
Note: Persisting these is covered in issue #38

Re-purposing this to just be stored procedures. We can handle UDFs and Triggers in a separate issue


Added directory check and exit code 1

Hi there, this contains a quick fix for issue #39.
Love your tool !

@LadyDascalie Thanks for the contribution. Made a few comments.

Good shout @jingweno !
I reworked the check to be smaller and return an error instead so main can handle it as you suggested! Thanks for the code review, I hope this works for you!

Check err and return.

Thanks @LadyDascalie for this fix and @jingweno for accepting it. How long does it take/what is the process to get this pushed upstream to its brew formulae?
Cheers


Work around Safari date parser silent fail on particular TZ offsets

As described in #74, react-timeago renders <!-- react-empty: x --> on Safari and Safari on iOS when fed ISO 8601 dates containing offsets sans colon, e.g. 2017-03-05T08:54:30+0100. The ISO specification allows for 4 different permutations.
<time>Z
<time>±hh:mm
<time>±hhmm
<time>±hh

Safari returns null for new Date(isoDateWithoutColon). While there seem to be many ways to work around this, Date.UTC is particularly convenient. May need some more testing.

Sure, I'll see to it later today.

Anything else I can do?

This is great, thanks!

I need some help though, as your function totally doesn't type-check.
Can you help me understand what this line is doing?
parts[1] = --parts[1]

Nice – using 3.2.1 in production now. One thing though: Why return parsed that was previously checked to be Invalid Date? https://github.com/nmn/react-timeago/blob/master/src/dateParser.js#L11

@psolbach you were returning null instead. That changed the type of the function from (a: any) => Date to (a: any) => Date | null.
This would mean a whole bunch of changes elsewhere and adding a whole bunch of null checks.
Maybe I'll do that in the future anyway.


Token validation failed

Cannot log in to the application. The returned result of the /generated endpoint
{
"detail": "Token validation failed."
}

This is an intermittent issue that requires a retry.

support custom generate mode?

not seem in the docs.

support custom generate mode?  not seem in the docs.

it is /generate

I'm also getting this error, every request.

It has been said from time to time, but I constantly get token verification errors.

The endpoint https://clerk.suno.com/v1/client/sessions/{_sessionId}/tokens?__clerk_api_version=2021-02-05&_clerk_js_version={clerkversion} has been updated, and a new parameter has been added along with a CAPTCHA requirement. Currently, we are unable to log in due to the following error:
{
"errors": [
{
"message": "CAPTCHA verification is required",
"long_message": "CAPTCHA verification is required",
"code": "requires_captcha"
}
],
"clerk_trace_id": "aef4e77e4142a6b5d6346348eb6ccf92"
}

{'detail': 'Token validation failed.'}
every request.

The endpoint https://clerk.suno.com/v1/client/sessions/{_sessionId}/tokens?__clerk_api_version=2021-02-05&_clerk_js_version={clerkversion} has been updated, and a new parameter has been added along with a CAPTCHA requirement. Currently, we are unable to log in due to the following error:端点https：//clerk.suno.com/v1/client/sessions/{sessionId}/tokens？_ clerk_API_version=2021-02-05&_clerk_js_version={clerkversion}已更新，并且沿着了一个新参数和一个CAPTCHA要求。当前，由于以下错误，我们无法登录：
{ "errors": [ “错误”：[ { "message": "CAPTCHA verification is required",“message”：“需要验证码验证”， "long_message": "CAPTCHA verification is required",“long_message”：“需要CAPTCHA验证”， "code": "requires_captcha"“code”：“requires_captcha” } ], "clerk_trace_id": "aef4e77e4142a6b5d6346348eb6ccf92"“clerk_trace_id”：“aef4e77e4142a6b5d6346348eb6ccf92” }

so I used an old version clerk to skip it

successed once. but now
{
"detail": "Token validation failed."
}
everytime.

The endpoint https://clerk.suno.com/v1/client/sessions/{_sessionId}/tokens?__clerk_api_version=2021-02-05&_clerk_js_version={clerkversion} has been updated, and a new parameter has been added along with a CAPTCHA requirement. Currently, we are unable to log in due to the following error:端点https：//clerk.suno.com/v1/client/sessions/{sessionId}/tokens？_ clerk_API_version=2021-02-05&_clerk_js_version={clerkversion}已更新，并且沿着了一个新参数和一个CAPTCHA要求。当前，由于以下错误，我们无法登录：
{ "errors": [ “错误”：[ { "message": "CAPTCHA verification is required",“message”：“需要验证码验证”， "long_message": "CAPTCHA verification is required",“long_message”：“需要CAPTCHA验证”， "code": "requires_captcha"“code”：“requires_captcha” } ], "clerk_trace_id": "aef4e77e4142a6b5d6346348eb6ccf92"“clerk_trace_id”：“aef4e77e4142a6b5d6346348eb6ccf92” }

so I used an old version clerk to skip it

an old version clerk? any specific details?

successed once. but now
{ "detail": "Token validation failed." }
everytime.

I used my VIP account and create one song in browser before using API, you can have a try

successed once. but now
{ "detail": "Token validation failed." }
everytime.

I used my VIP account and create one song in browser before using API, you can have a try

it does not work out

It does not work for me either


Allow for menu options to be picked without clicking.

MenuDialog now has a new bool option: autoSelectFirstButton. If enabled, the first interactable button added will be selected automatically. This allows for the menu to be navigated without the need of a mouse, with the Vertical or Horizontal axes as defined by the current Standalone Input Module.
Even if this option is disabled, the menu may be navigated without the need of a mouse thanks to a new GameObject added to the MenuDialog prefab: DefaultSelectable. It's just an invisible Selectable that automatically selects itself when enabled. From there, the user can navigate to the first option with the Vertical input axis. The DefaultSelectable is marked as not interactable, so the user cannot navigate back to it.

Works great - thanks for the PR!


DROOLS-1286: Guided Decision Table: Unable to specify field type with Condition BRL fragment

See https://issues.jboss.org/browse/DROOLS-1286

@Rikkola Please review.


[Submitter] fix bump tx behavior

Issue:
In the event the gasCeil is reached on any tx in the chainPendingQueue, the every tx bump/submit is stopped. This happened with applyGasCeil where gas fee cap %s exceeds max price %s cancelling every other tx in the queue and completely halting it
This is because the chainQueue uses an error group so any issue anywhere in the queue cancels the whole queue
e.g. (every sub bump was also cancelled)

Proposed solution:
Needs more thought, but I put together a hotfix here: #2752

Fixed in #2756


Config NODE did not find any sonos any player under RedMatic on CCU3

I have installed the extension under RedMatic V.1.2.6 on a CCU3.
When configuring the sonos-config node, no Sonos players are found. However, after manually entering the serial number or IP address, the sonos-config node work.
Same Node-Red installation in a DOCKER container works fine.
Does anyone have an idea why it does not run on the CCU3 under Redmatic?

Hmmm. It should show the players. I run it also on a CCU3 and it works - as you can see in the picture.
How complex is your network? Are all player and the CCU in 192.178.168.xx ? Any repeater?
Do you know how to activate the debug mode and get the log file? Upload it or send it to my address<EMAIL_ADDRESS>and I will check it.

Solution: open ports at CCU3.
I solve this issue.


Implemented job saving in database and local client to backend communication

Fixes #166 and fixes #163
Changes
First, this PR implements the routes, models, and controllers for sessions and jobs. Sessions are database objects that connect a local client to a user. Jobs are database objects that connect a single source of truth to a user, spiced up with a status field and parameters.
Additionally, this implementation expands the functionality of our local client. Now a local client has a client id (currently still hardcoded) and a saved session. The user is questioned in the beginning, if he/she like to continue with the last session or start a new one. Starting a new one adds a new session to the database with the client id and the prompted user_id. Using the session-id the local client gets the session from the database and extracts the user id from that.
With the user_id the local client gathers all jobs that are waiting for execution for that user. For each, the local client uses the robot_id /ssot_id to get the executable robot code and executes it immediately.
After each job has been worked on, the local_client polls every 10 seconds for new jobs giving a quick status over the command line each time. This continues until the local client is interrupted.
Videos (lol, weiß auch nicht warum jetzt ab hier auf Deutsch)
Zum Erklären der Datenbank (mit Ton)
https://user-images.githubusercontent.com/38314662/111190966-e60c3080-85b7-11eb-8d4b-6a501e2e8062.mp4
Demo des lokalen clients (mit Ton)
https://user-images.githubusercontent.com/38314662/111191927-d50fef00-85b8-11eb-8824-b184f909cdcc.mp4
Todo: TESTS
Checklist before merge
Developer's responsibilities

[ ] Assign one or two developers
[ ] Change code if reviewer(s) has/have requested it
[ ] Pull request build has passed
[ ] tested locally (in at least chrome & firefox if frontend)
[ ] updated the documentation
[ ] added tests where necessary

Unfortunately, we probably won't need those changes anymore as we will use socket.io going forward.

I think we do, as #162 is only a spike limited to 10 hours of working time and no finished implementation is expected. Otherwise, the issue #166 would be marked as dependent on #162 which it isn't.

PR closed because too big and #166 will be implemented by #162


Cast to EGLNativeWindowType explicitly

In order to avoid off build failures due to mismatching (but compatible) declarations of wl_egl_window and EGLNativeWindowType, add an explicit cast to EGLNativeWindowType inside the TargetWayland::nativeWindow() function.
Solves the following build issue found by the Buildroot autobuilders:

http://autobuild.buildroot.net/results/92c5cc3134e92c263a0cbb4c05ef8956569e434b/

Cherry-picked into the wpebackend-fdo-1.14 branch as commit dbaac06edee2607359b5314d3ecef7d00740a88f.


Top 5000 not always relevant for smaller top-level domains

I'm from Norway and thus visit many Norwegian sites ending with .no. This top-level domain is highly vetted, but many of the domains are still flagged as "suspicious" since Norway is a small country with an unusual language. Maybe you could flag suspicious domains per top-level domain? Like exclude the top 1000 .no-domains (and other country domains) in addition to the 5k domains?
I guess each top-level domain should be tuned to find out what is "suspicious".. Like the .top and .online domains should be flagged as suspicious at maybe below top 50? ;) Many top-level domains are very suspicious in themselves..

Thanks for the suggestion! We'll need to look into how much of a maintenance burden it would be to flag domains at the tld level, but I think some amount of fleshing out the top sites list with popular domains by geo could be doable.

Even Alexa itself, as well as the blog where Google announced the Suspicious Site Reporter, flag as orange due to not being in the top 5k, not to mention sites of regional or local significance such as wmata.com or montgomerycountymd.gov.  And if a site such as cisco.com is actually in the top 5k but is slow to load (due to a firewall rule for example), the flag starts as orange and later turns green.  (If the firewall were blocking the plug-in from working at all I wouldn't expect this behavior.)

A simple solution that accomplishes the same goal would be to expand to top 50k. Only downside I could see would be if there were dubious sites in the top 50k. So if that's the case, maybe use top 40k then.

In my experience some top-level domains are nearly always malicious.  Example:  .xyz.
By contrast, .gov domains are hardly if ever malicious.


Semantic version numbers should always contain major, minor and patch

At the risk of nitpicking...
[bwood@mbp cli]$ terminus cli version
Terminus 0.4-beta

Should the above be 0.4.0-beta?
0.4-beta borks my function that checks for a minimum terminus version.  I assumed there would always be a patch number to check. I was going by http://semver.org/.  If you guys are doing things differently, I can adapt.

+1 for sticking with standards. :)

@bwood my bad ... I'll fix

The next version will be 0.5.0-beta

closing in favor of #142


pinentry: 1.1.0 -> 2020-07-17

(Support for pinentry-efl. Pinentry 1.1.0 relase from 2017, without a
recent tagged release)
Motivation for this change
Pinentry hasn't seen an update to its release since 2017,  however there has been quite a bit of development, including an addition of pinentry-efl for Elementary toolkit DEs like enlightenment. This change rebuilds pinentry from MASTER and includes pinentry-efl
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[x] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[ ] Fits CONTRIBUTING.md.

I would like to include some logic in this package so that when ${version} = "master" then it builds from source, otherwise use the pre-defined packages. Any suggestions on this approach?

Fixes addressed. Many thanks for the peer review

Any further action needed for this PR?

This should be rebased, instead of having master merged into it.

Squashed and rebased to recent master. Please advise further action

Thank  you for the comments. Updated repo with suggestions

And the branch commit history still looks messy/not squashed.

Superseeded by #143120.


Help Wanted : 'Error in Surface::configure: invalid surface'

Hello, Someone is trying to install an app that I made with iced. There are running in some wgpu error.
Seems related to vulkan drivers but I am not sure.
Could you please take a look ?
The issue is here: https://github.com/oknozor/onagre/issues/35#issuecomment-980434615

The user seems to have solved the issue by installing proper graphics drivers. Closing!


Color for 'cursor' for sass (SCSS) is wrong

VSCode Version:1.14.1
OS Version: 10.12.5
'cursor' had wrong color in SCSS file, but in the css file it had right color

The 'cursor' key had the same scope with html tag in the 'scss' file

This issue was moved to atom/language-sass#226