PowerShell scripts should be signed

Required Information
Type: Feature
Enter Task Name: PowerShells should be signed by Microsoft
Issue Description
As a security measure, some companies use AppLocker to restrict PowerShell to constrained language mode. As the PowerShell scripts are not signed, they can't be executed.
Task logs
2022-06-29T14:14:22.3070091Z ==============================================================================
2022-06-29T14:14:22.3070347Z Task         : PowerShell on Target Machines
2022-06-29T14:14:22.3070494Z Description  : Execute PowerShell scripts on remote machine(s)
2022-06-29T14:14:22.3070626Z Version      : 2.0.3
2022-06-29T14:14:22.3070743Z Author       : Microsoft Corporation
2022-06-29T14:14:22.3070901Z Help         : More Information
2022-06-29T14:14:22.3071057Z ==============================================================================
2022-06-29T14:14:24.2474614Z Deployment started for machine: 'REMOTESERVER.domain.tld:5986'
2022-06-29T14:14:48.0679894Z Deployment logs for Deployment operation on REMOTESERVER.domain.tld:5986
2022-06-29T14:14:48.0701108Z System.AggregateException:
2022-06-29T14:14:48.0701448Z Cannot invoke method. Method invocation is supported only on core types in this language mode.
2022-06-29T14:14:48.0701698Z  CategoryInfo :InvalidOperation: (:) [], RuntimeException
2022-06-29T14:14:48.0701908Z  FullyQualifiedErrorId :MethodInvocationNotSupportedInConstrainedLanguage
2022-06-29T14:14:48.0702124Z  ---> System.Management.Automation.RemoteException: Cannot invoke method. Method invocation is supported only on core types in this language mode.
2022-06-29T14:14:48.0704398Z    --- End of inner exception stack trace ---
2022-06-29T14:14:48.0704622Z    at Microsoft.VisualStudio.Services.DevTestLabs.Deployment.Deployment.PowershellExecutor.Invoke(String errorContextMessage, Boolean writeResultToLog, Boolean isCancellable)
2022-06-29T14:14:48.0704934Z    at Microsoft.VisualStudio.Services.DevTestLabs.Deployment.Deployment.RemoteDeploymentHelper.InstallServiceInternal(String serviceSourcePath, String serviceName, String destinationFileName)
2022-06-29T14:14:48.0705233Z    at Microsoft.VisualStudio.Services.DevTestLabs.Deployment.Deployment.RemoteDeploymentHelper.InstallService(String serviceSourcePath, String serviceName, String destinationFileName)
2022-06-29T14:14:48.0705497Z    at Microsoft.VisualStudio.Services.DevTestLabs.Deployment.Deployment.DeploymentClient.d__24.MoveNext()
2022-06-29T14:14:48.0705753Z ---> (Inner Exception #0) System.Management.Automation.RemoteException: Cannot invoke method. Method invocation is supported only on core types in this language mode.<---
2022-06-29T14:14:48.0705897Z
2022-06-29T14:14:48.0705959Z
2022-06-29T14:14:48.0793902Z Deployment status for machine 'REMOTESERVER.domain.tld:5986' : 'Failed'
2022-06-29T14:14:48.1670869Z ##[error], RuntimeException\r\n FullyQualifiedErrorId :MethodInvocationNotSupportedInConstrainedLanguage\r\n"}};]
2022-06-29T14:14:48.2308332Z ##[warning]'##vso[task.logissue type=error;code={"Task_Internal_Error":' contains logging command keyword '##vso', but it's not a legal command. Please reference documentation to fix any potentially syntax error (http://go.microsoft.com/fwlink/?LinkId=817296)
2022-06-29T14:14:48.2309093Z ##vso[task.logissue type=error;code={"Task_Internal_Error":
2022-06-29T14:14:48.2309758Z Cannot invoke method. Method invocation is supported only on core types in this language mode.
2022-06-29T14:14:48.2309947Z  CategoryInfo :InvalidOperation: (:) [], RuntimeException
2022-06-29T14:14:48.2310107Z  FullyQualifiedErrorId :MethodInvocationNotSupportedInConstrainedLanguage
2022-06-29T14:14:48.2310236Z };]
2022-06-29T14:14:48.4034215Z ##[error]
Cannot invoke method. Method invocation is supported only on core types in this language mode.
CategoryInfo :InvalidOperation: (:) [], RuntimeException
FullyQualifiedErrorId :MethodInvocationNotSupportedInConstrainedLanguage

@IAMJDA Thanks for reporting! We are working on more prioritized issues now but will get back to this one soon

Please don't close it... This is important as it's forcing us to lower the IT Security and allow unsigned PowerShell.

Still not stale...

Not stale, this is significant problem. The use of dot sourcing needs to be removed for the same reason.

@DmitriiBobreshev is that improvement placed on any roadmap? IT-Security department is asking when this will be fixed as the security exceptions are only temporary by nature.

Hi @IAMJDA, I'm sorry but I messed up with a task, seems like you've talked about the PowerShellOnTargetMachines and not the Powershell task, let's ping @rvairavelu, since one of the task owners.

@DmitriiBobreshev, this same issue of unsigned code exists in the PowerShellv2 task and presents in much the same way. My teams use that more then the remoting option.
I would hope that the whole of the tasks using PowerShell would end up signed versus a piecemeal solution for individual tasks.

This is an example of using a Powershell@2 task that is just trying to set a variable on a server being deployed to. It's the same issue, the code isn't signed (and therefore receives CLM). It's using an untrusted method invocation and fails the build.
==============================================================================
Task         : PowerShell
Description  : Run a PowerShell script on Linux, macOS, or Windows
Version      : 2.229.4
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell
==============================================================================
Cannot invoke method. Method invocation is supported only on core types in this language mode.
At line:1 char:1
+ . ([scriptblock]::Create('if ([Console]::InputEncoding -is [Text.UTF8 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodInvocationNotSupportedInConstrainedLanguage

Cannot invoke method. Method invocation is supported only on core types in this language mode.

Apologies for the comment spam, but this is the exact failure from PowerShell@2 on a CLM enabled device.
The issue is deeper then just signing like it initially looked like. You can see that we have code using method invocation being used not within a script file, but being passed directly on the command line, there isn't a script file listed here to whitelist at all.
That's expressly not supported by CLM since ownership and intent can't be verified.
##[error]Exit code 1 returned from process: file name 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe', arguments '-NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". ([scriptblock]::Create('if ([Console]::InputEncoding -is [Text.UTF8Encoding] -and [Console]::InputEncoding.GetPreamble().Length -ne 0) { [Console]::InputEncoding = New-Object Text.UTF8Encoding $false } if (!$PSHOME) { $null = Get-Item -LiteralPath ''variable:PSHOME'' } else { Import-Module -Name ([System.IO.Path]::Combine($PSHOME, ''Modules\Microsoft.PowerShell.Management\Microsoft.PowerShell.Management.psd1'')) ; Import-Module -Name ([System.IO.Path]::Combine($PSHOME, ''Modules\Microsoft.PowerShell.Utility\Microsoft.PowerShell.Utility.psd1'')) }')) 2>&1 | ForEach-Object { Write-Verbose $_.Exception.Message -Verbose } ; Import-Module -Name 'C:\azagent\A1_work_tasks\PowerShell_e213ff0f-5d5c-4791-802d-52ea3e7be1f1\2.229.4\ps_modules\VstsTaskSdk\VstsTaskSdk.psd1' -ArgumentList @{ NonInteractive = $true } -ErrorAction Stop ; $VerbosePreference = 'SilentlyContinue' ; $DebugPreference = 'SilentlyContinue' ; Invoke-VstsTaskScript -ScriptBlock ([scriptblock]::Create('. ''C:\azagent\A1_work_tasks\PowerShell_e213ff0f-5d5c-4791-802d-52ea3e7be1f1\2.229.4\powershell.ps1'''))"'.

@DmitriiBobreshev Can you please check the newest comments? Seems to be both the remote and local PowerShell task affected.

@IAMJDA, for what it is worth, there are actually several related bugs here regarding constrained language mode. My boss gave me permission to submit a bug fix for the ADO agent proper. That was the bug initially biting me for both the local and and remoting powershell commands. Not merged yet, but the changes are here.    https://github.com/microsoft/azure-pipelines-agent/pull/4502
My developer team is doing some internal testing now, but the initial round of testing passed for me using their common tooling.  Once I got the agent itself patched I've been able to whitelist the script files for the various job types via file hashes. So far I've verified the following:  batchscript, cmdline, copyfiles, deletefiles, dotnetcore,nugetauthenticate, nugetcommand, nugettoolinstaller, powershell, powershellontargetmachine, publishbuildartifacts, regexreplace, regextokens.
Official releases of these scripts from MS should 100% still be signed - I hate the fact that I have to add every version of every task to my wdac whitelist - but at least it's progress.


Create documentation for the diagnostic test

Create documentation for the diagnostic test.
The documentation should contain the series of steps required to launch the diagnostic test functionality.

@Nik-09 just a friendly ping on this issue please, thanks!

Hi @Nik-09
Could you please provide me with an update when you plan to open the PR?
thanks!

Hi @SubhashThenua the doc is under review, I am estimating its completion by tomorrow.

thanks @Nik-09 for updating.


@babel/plugin-syntax-bigint and @babel/plugin-proposal-numeric-separator are not listed in babel-preset-razzle package.json

🐛 Bug report
Current Behavior
When try build with new razzle preset, the error below are thrown:

Stack
Error: [BABEL] /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/src/client/index.tsx: Cannot find module '@babel/plugin-proposal-numeric-separator'
Require stack:
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/babel-preset-razzle/index.js
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/razzle/babel.js
-<EMAIL_ADDRESS>-<EMAIL_ADDRESS>-<EMAIL_ADDRESS>- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/babel-loader/lib/index.js
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/loader-runner/lib/loadLoader.js
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/loader-runner/lib/LoaderRunner.js
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/webpack/lib/NormalModule.js
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/webpack/lib/NormalModuleFactory.js
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/webpack/lib/Compiler.js
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/webpack/lib/webpack.js
- /home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/razzle/scripts/build.js (While processing: "/home/carlos/Documents/Projetos/Javascript/nest-new-graphql/node_modules/razzle/babel.js")
    at Generator.next ()
    at Generator.next ()
    at Generator.next ()

Expected behavior
Application builds correctly
Reproducible example
Just create a new sample project with razzle/babel in presets
Suggested solution(s)
Add both plugins to package.json
Your environment

Software
Version(s)

Razzle
3.3.3

Node
12.16.2

Browser
Chrome 85

Yarn
1.22.5

Operating System
Arch Linux 5.8.13

TypeScript
4.0.3

React
16.13.1

Fixed, released v3.3.4


Fixing few things

Updating whatsapp qr code classname
Updating the title when we change the service
Fixing overflow in css

Steam is using another method to create qr code, it uses custom divs and making it look like qr code using css, i will add a new code that bypass it soon.

@010Hamza010 Hello when do you think you are going to have it fixed as I need to do a proof of concept and I would like this tool to be updated to the new classnames of all domains as it does not work the PUT from the extension to the endpoint and gives a 404 when trying to get the qr from the client, greetings.


Feature: rename repo/tool to expand scope

slsa-verifier as a repo/CLI name means the tool is used to verify slsa provenance. However, in some scenarios, a developer may want to inspect the provenance. So it may be beneficial to change the repo name to some more generic like slsa-provenance and broaden the scope of the tool:

verify command to verify the provenance
inspect command to inspect the provenance
somethingelse

Thoughts?
cc @joshuagl @MarkLodato @asraa

I like this.
I've got some ugly local hacks for inspection when I've been testing changes and wanting to see the predicate in a generated jsonl file.

Personally I'd keep the name, but if you want something more generic, maybe "slsa-tool"?

Let's keep this PR open to see what others think. "slsa-tool" may also mean it can generate provenance, which may be feasible if we merge the code with the API/CLI being developed in https://github.com/slsa-framework/slsa-github-generator/pulls /cc @ianlewis


Window did not load after 5000ms

I have two Angular web applications. App_A is like a listener and will set/get the data in its sessionStorage when receiving messages. App_B is like a client and will send message to App_A.
App_A and App_B are running in different domains.
At the startup the App_B will try to load App_A into an iframe. The communication was working properly in the past. Recently I upgraded the Angular for v5 to v7 and the latest post-robot. Everything was still working fine when testing in local environment. But after I deployed both App_A and App_B to Azure web services, I got the error "Window did not load after 5000ms" when running App_B in a browser. Also if I only deploy App_A to Azure, and running App_B in the local, everything works fine. Do you have any idea what might be the problem(s)?
// listener.ts
export class StorageListenerService {
    private readListener: any;
    private writeListener: any;
    private clearListener: any;

    constructor() {
        this.init();
    }

    private init(): void {
        try {
            this.readListener = postRobot.on('read', { domain: '*' }, ({ origin, data }) => {
                return { result: this.readStore(data.key) };
            });
        } catch (e) { }

        try {
            this.writeListener = postRobot.on('write', { domain: '*' }, ({ origin, data }) => {
                this.writeStore(data.key, data.value);
            });
        } catch (e) { }

        try {
            this.clearListener = postRobot.on('clear', { domain: '*' }, ({ origin, data }) => {
                this.clearStore(data ? data.key : null);
            });
        } catch (e) { }

    }

    public destroyListener(): void {
        try {
            this.readListener.cancel();
            this.writeListener.cancel();
            this.clearListener.cancel();
        } catch (e) { }
    }

    private readStore(key: string): any {
        const value = window.sessionStorage.getItem(key);
        return value ? JSON.parse(value) : null;
    }

    private writeStore(key: string, value: any): void {
        const serializedData = JSON.stringify(value);
        window.sessionStorage.setItem(key, serializedData);
    }

    private clearStore(key?: string): void {
        if (key) {
            window.sessionStorage.removeItem(key);
        } else {
            window.sessionStorage.clear();
        }
    }

    public setLoginStaff(loginStaff: LoginStaff): void {
        try {
            this.writeStore(StorageKey.loginStaff, loginStaff);
        } catch (e) {
            console.error('write to storage failed.');
        }
    }

    public getLoginStaff(): Promise<LoginStaff> {
        try {
            return Promise.resolve(this.readStore(StorageKey.loginStaff));
        } catch (e) {
            return null;
        }
    }

    public clearLoginStaff(): void {
        try {
            this.clearStore(StorageKey.loginStaff);
        } catch (e) {
            console.error('clear login staff failed.');
        }
    }
}

// client.ts
export class StorageClientService {
    private win: any;
    constructor(@Inject(DOCUMENT) private document: any,
                       @Inject(STORAGE_LISTENER_URL) private StorageListenerUrl: string) {
        this.init();
    }

    private init(): void {
        const frame = this.document.createElement('iframe');
        frame.src = this.StorageListenerUrl;
        frame.id = 'childframe';
        frame.name = Math.random().toString();
        frame.onload = null;
        frame.style.visibility = 'hidden';
        this.document.body.appendChild(frame);
        this.win = frame.contentWindow;
    }

    public setLoginStaff(loginStaff: LoginStaff): void {
        try {
        postRobot.send(this.win, 'write',
        { key: StorageKey.loginStaff, value: loginStaff },
        { domain: this.StorageListenerUrl, timeout: 15000 })
        .then(() => {
    }

    public getLoginStaff(): Promise {
        try {
            return postRobot.send(this.win, 'read',
                { key: StorageKey.loginStaff },
                { timeout: 15000 })
            .then(
                ({ data }) => data.result as LoginStaff,
                () => null);
        } catch (e) {
            console.log(e);
            return null;
        }
    }

    public clearLoginStaff(): void {
        try {
            postRobot.send(this.win, 'clear', { key: StorageKey.loginStaff },
                          { domain: this.StorageListenerUrl }).then(() => {
        catch(e) {
            console.error(e);
        }
    }
}

The code looks fine to me. Can you link me to somewhere I can try it out?

Actually you can run my application from https://smarttest.csosadev.net. Look at the console log for the error message.

Looks like it's making me log in -- can you make this app public for a while?

Sorry about that. I don't want to disable the authentication because it might be culprit that caused the problem.
You can use
user<EMAIL_ADDRESS>pwd: Qocu72548
to login.
Do worry everything there is "fake" data.

Looks like you have different versions of post-robot in the parent and child windows.

Oh, sorry. Because it was working for post-robot v8.0.30 when I was using Angular 5. so I was trying to see whether it is the version issue. I will make the two using the latest post-robot and will let you know when it is done.

Ok, both applications are using post-robot 10.0.10 now.

Hmm nope, I still see an old version in the parent window

How do you see the version?

window.__postRobot__ is only defined for older versions

Thanks, you are right. It is the version issue. Angular 7 build has some changes which causes my CI/CD on Azure DevOps actually failed, though it reported as successfully deployed.

I can confirm the issue about version mismatch even with patch updates, we encountered this one with a parent using 10.0.14 (master) and child using 10.0.10.


Login/Register page

Users should navigate to the login page by default if not logged in. Login screen should resemble image below, featuring:
Login:

email field
password field
Login Button
switch to register page link

Register

name field
email field
password field
Register button
switch to login page link

I wouldn't mind working on this for you, could you assign this issue to me?


Add confidence interval bootstrap plot

In seaborn, when we use sns.pointplot, it calculates the confidence interval using a simple bootstrap if there's multiple values for a given x, and it's very handy. I think it would be awesome if plotly express could do something like that in an easy manner. Currently I have to calculate individually and manually these confidence intervals to plot in plotly.
This is an example of a pointplot:
http://mitalbalar.com/img/output_29_0.png

Thanks for the suggestion!
This is an area where Plotly Express will likely not go as far as Seaborn into the stats/modelling piece of things versus just displaying the data it's given... I want to avoid issues of reproducibility/telling people how to model their data as much as possible :)

The lack of seaborn-like interface for plotly has been stopping me for using plotly for a long time - now it is! - but some confidence intervals (like bootstrapping) are a must - this is should be very simple.

I'm going to close this issue in favour of https://github.com/plotly/plotly.py/issues/2418 wherein we will (someday!) add the ability for folks to plug in their own confidence-interval calculations.


experiment tags

eventually it would be cool to try experiments where people get aggressive ui and other weird UI behaviors.
Nudge could look at some file and then do it.

This will never see the light of day. Closing


proxy.golang.org:

What version of Go are you using (go version)?
1.13
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/bvoelker/Library/Caches/go-build"
GOENV="/Users/bvoelker/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/bvoelker/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/bvoelker/go/src/github.com/brianvoe/devlog_test/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/fp/3782qlys2m5gxtzrzctmq3z80000gn/T/go-build832680126=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?
go get<EMAIL_ADDRESS>What did you expect to see?
Downloading of latest published version
What did you see instead?
verifying<EMAIL_ADDRESS><EMAIL_ADDRESS>reading<EMAIL_ADDRESS>410 Gone

This isn't an issue with the module mirror. You can confirm by trying the same command with GOPROXY set to "direct":
$ cd $(mktemp -d)
$ export GOPATH=$(pwd)
$ export GO111MODULE=on
$ export GOPROXY=direct
$ go get<EMAIL_ADDRESS>go: finding github.com/brianvoe/gofakeit v3.20.1
go get<EMAIL_ADDRESS><EMAIL_ADDRESS>invalid version: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v3

The problem is that the v3.20.1 version of the github.com/brianvoe/gofakeit module has major version 3, yet its go mod doesn't have a v3 suffix:
https://github.com/brianvoe/gofakeit/blob/v3.20.1/go.mod
See https://github.com/golang/go/wiki/Modules#releasing-modules-v2-or-higher for more information.

Ok . thanks for the feedback. I may not agree with it but I appreciate your feedback and letting me know how to resolve the issue

Unfortunately i've the same issue.
export GO111MODULE=on
export GOPROXY=direct
go get -v -u<EMAIL_ADDRESS>
go: downloading github.com/alessiosavi/GoGPUtils v0.0.9
verifying<EMAIL_ADDRESS><EMAIL_ADDRESS>reading<EMAIL_ADDRESS>410 Gone

The repo is this one
https://github.com/alessiosavi/GoGPUtils
Is the fact that i don't use external dependencies related to the issue?

@alessiosavi I think your issue is not the same, albeit related. This is a closed issue so it'll be hard to discuss it here. Do you mind opening a new issue (you can include a reference to this issue) and please include information about what you were trying to do, what commands you ran, what output you got (and what you expected). Thanks.


refactor/Resovle dependencies

ip address
db username, password

db user, password 일치시키기: https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql


Fixes an opposite value of "deliverable" variable

It looks like a typo. Otherwise, why is returned an opposite of a product.is_deliverable?

That was strange indeed. Thanks for pointing this out


Showing timer on 2nd (extended) screen

Running Windows, is it possible to have the timer display on my 2nd (extended) screen?  (If it is, I'm don't know how).  I'm unable to drag the window around, like a normal window.

also true on a mac. Would be extremely useful for remote mobbing where mobster is not on a single shared screen.


Recommend add a mail notification feature

Can add a mail notification feature to send a mail to notification the new port on docker container started?
Because every time you start the port it will change

You can see the log or build something on top for example using transactional email, but it'd be out of scope of this project. This meant as a minimal image that run ngrok.


No output in Nomad allocation logs

I've recently set up the driver on a Nomad Client running Windows Server 2019. After adding IIS6 management compatibility (which is not enabled by default for IIS10, but seems to be required by the driver) tasks are running and working great!
However, I'm not seeing any log output from the driver at all. Neither errors (when I tried running without IIS6 compat) nor any informational messages appear in stdout or stderr. Am I missing some config or is this simply not implemented?
Looking at the source I would expect some log output, but I am not yet familiar enough with Nomad drivers to be sure.
Other tasks (powershell etc) running on the VM are logging fine by the way.

There is no default logging for this driver at this time. Due to the nature of IIS, I don't get stdout/err output from a running service and legacy Windows workflows tend to utilize Windows Event Logging. If you know of a good way to for a service to latch onto stdout/err on a running process within IIS, I am all ears.
I've got a thought on setting up a flat file tailing config and/or event log tailing, but haven't implemented on it yet. Cause logging is on the implementer of the service and IIS logging isn't uniform for all service. Though, there is also IIS logs in of themselves. Which do you think would be the more sensible logging for this driver for your use case?
which is not enabled by default for IIS10, but seems to be required by the driver This sounds like a bug 🤔 . I can try to run it against a Win2019 VM and see if I get this same error. My tests run against Win2016 (IIS10) via automation and Win2012R2 (for legacy fixes, manually). There might be a setting I am running to make Win2012R2 happy that makes Win2019 unhappy.

There is no default logging for this driver at this time.

Aha that explains it! I don't know what kind of output I expected to see in the logs to be honest. Just wanted to make sure I wasn't missing anything :)

This sounds like a bug 🤔 . I can try to run it against a Win2019 VM and see if I get this same error.

I tried it with Windows server 2016 and have the same issue. It's an Azure VM using the following params:

image_offer = "WindowsServer"
image_publisher = "MicrosoftWindowsServer"
image_sku = "2016-Datacenter"
os_type = "Windows"

With the following script run on startup:

Add-WindowsFeature Web-Server

After some experimentation, I found this command is required to make the driver work:

Dism /Online /Enable-Feature /FeatureName:IIS-IIS6ManagementCompatibility

Maybe it's an Azure thing.

This definitely sounds like an Azure VM specific problem. I have used Windows 2016 default OS images via virtualbox for these tests with no problems. I am going to take a guess and assume the Azure VMs doesn't like the idea of automation using appcmd.exe calls, but I am not 100% on that.
It may be worth calling out that Azure VMs need to have the IIS6 compat feature enabled in the README.

I'll do some more testing. I'm also having trouble with the TEMP environment variable not being set to the app pool user's temp dir. It works on my machine but on the VM using win_iis it's being set to the system temp dir. All the settings on the app pool look right in the IIS manager, but for some reason TEMP is still pointing to the wrong dir during runtime. My apppool's processmodel config:
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
I'm suspecting this is related to having to enable IIS6-compatibility, so I'll do some more digging and see if I can't get to the bottom of it.
Thank you for this driver by the way! Other than the aforementioned it's working swimmingly :)

This is due to the driver injecting the environment variables available to the Nomad service (Windows SC). Because the TEMP env var is set as a system level configuration, it gets picked up as an env var that the driver should pass along to the the child tasks (win_iis tasks), which consequently overrides your AppPool temp env var.
A few of solutions would be to either always respect the AppPool's TEMP env var, allow user level overrides from the Nomad spec meta env settings, or have an allow/deny list config of env vars a user would want to have populated from Nomad to the AppPool.
Thank you for this driver by the way! Other than the aforementioned it's working swimmingly :) ❤
If you feel like your questions have been adequately answered here and there is no need for a code change follow-up, I can close this issue.

Sorry for the late reply. Yes, all my questions have been answered so go ahead and close it :)


TestAdapter grouping by Traits should not create separate groups for Description and WorkItem attributes

I think the title and the picture illustrate where this can lead. Note also that Owner should not split into different groups. I don't believe this happened prior to MSTest-V2, at least not with WorkItem and Description.
Example of Description attribute:
        [TestMethod, SmokeTypeTest]
        [Description("Bug fix 1506 and 1516. If Alternative linked to Outage then Alternative date has to be updated to selected Outage occurrence date")]
        public void UpdateAlternative_LinkedToOutageTest()
        {

@robdalsanto : The behaviour has always been like this from adapter side, in both MSTestV1 and MSTestV2.
Tagging @AbhitejJohn @genlu to look into if there has been some behavior difference from test explorer end.

@jayaranigarg @AbhitejJohn We are seeing this duplication in VS2015, which occurred immediately after we started to use the NuGet MSTestV2 instead of the MSTestV1 shipped in VS2015.
We don't have a lot of these attributes, and they don't provide much value, like allowing TFS to link to the test-methods from the work-item. So we will likely remove them. Still it is odd to see these 3 attributes as traits.

@robdalsanto We identified and fixed the issue. It will be available in the next preview release of the adapter.


switch decorating order so attr works

With the existing implementation, plain @required tests (with no
broken_in) don't get tagged with the required attribute. This
switches the order of the application of skip and attr to fix that.

Never mind, this works already.


[YARN] Cut off 25% of the heap as a safety margin

Users were reporting issues with Flink on YARN because the NodeManager was killing containers due to resource overuse.
When a user requests for example a 4GB TaskManager, we can not just set the -Xmx value to 4G, because then the linux process (thats what YARN is monitoring) is growing bigger than 4GB. Also, YARN is very very strict with that limit.
So what we do is we remove a certain amount of the user specified memory. In the past, we were using 15%, but that was apparently not enough.
I've played around a lot and it seems that 25% is a good value.
This pull request also fixes potential null pointer exceptions in the web frontend and adds thread and classloader logging to the taskamangers.
Please discuss whether you want this.

I'm closing the PR again because I've found that there are more cases to consider ;)


Hardware wallets

Work in this branch implements support for Ledger and Trezor for use as Ethereum wallets, and in a future PR that is not far far away, Bitcoin wallets too. It uses web3-react, a well-written library for Ethereum interactions in React, which supports various types of wallets (eg. WalletConnect).
This PR implements "connect a wallet" functionality, with UX inspired from the Uniswap dApp. Some screenshots are attached below to illustrate. Ignore the terrible design until [WIP] is removed.

[x] Use WSS for ElectrumX connection, as hardware wallets require HTTPS with no mixed transport security.
[x] Integrate Ledger support
[x] Fix Ledger error handling when it's on the lockscreen - TransportStatusError: Ledger device: UNKNOWN_ERROR (0x6804). Looks like a weird Ledger bug.
[x] UX audit of choose wallet
[ ] Trezor support
[ ] Trusted certificate for ElectrumX server (refs: #194)

Depends-On: #195
Epic: #177
Image assets
Logos were taken from:

Metamask

https://github.com/MetaMask/brand-resources/blob/master/SVG/metamask-fox.svg

Ledger

https://github.com/makerdao/governance-dashboard/blob/master/src/imgs/ledger.svg

Trezor

https://github.com/makerdao/governance-dashboard/blob/master/src/imgs/trezor.png

Nice! Thanks for linking me to this. I had looked into the wallet choice options when doing initial research on the token dash. I've attached some screenshots below of other approaches I've seen.
From Basechain:

From IoTex:

From Staked:

The LOC on this change scared the bespitters out of me.
Can we actually split this out to:

Existing react-web3 PR (#195).
PR that introduces the dialog but maybe only supports Metamask.
1 additional PR per added wallet

? Or would that be too much of a pain? It would be helpful for me to maintain context and keep review turnaround times short, even if each PR is built on the other (as long as the base branch is set to keep the diff to just what that PR is adding).

@Shadowfiend If that helps us ship faster, then of course. Thanks for explaining why this would help too, that's something I find really useful.

Now that I see this updated diff, feels fine as is. Will try and do a full pass today.


fix(readme.md): update general wrapper

:tada: This PR is included in version 1.51.3 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Fix bug with AJAX view crashing on empty cart

Closes #1787
Pull Request Checklist

[ ] Privileged views and APIs are guarded by proper permission checks.
[ ] All visible strings are translated with proper context.
[ ] All data-formatting is locale-aware (dates, numbers, and so on).
[ ] Database queries are optimized and the number of queries is constant.
[ ] The changes are tested.
[ ] The code is documented (docstrings, project documentation).
[ ] Python code quality checks pass: pycodestyle, pydocstyle, pylint.
[ ] JavaScript code quality checks pass: eslint.

@akjanik What about cart_total? It's also nullable in the template and it's passed to the gross.


undefined method helper_method for ActionController::API:Class

Does current version of has_scope gem support Rails 5? I got this error when trying to use has_scope with ActionController::API
/Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/has_scope-0.6.0/lib/has_scope.rb:204:in `block in <top (required)>': undefined method `helper_method' for ActionController::API:Class (NoMethodError)
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/lazy_load_hooks.rb:38:in `instance_eval'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/lazy_load_hooks.rb:38:in `execute_hook'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/lazy_load_hooks.rb:45:in `block in run_load_hooks'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/lazy_load_hooks.rb:44:in `each'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/lazy_load_hooks.rb:44:in `run_load_hooks'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.beta1/lib/action_controller/api.rb:144:in `<class:API>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.beta1/lib/action_controller/api.rb:87:in `<module:ActionController>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.beta1/lib/action_controller/api.rb:5:in `<top (required)>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:302:in `require'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:302:in `block in require'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:266:in `block in load_dependency'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:682:in `new_constants_in'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:266:in `load_dependency'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:302:in `require'
from /Users/hoanghoa/projects/abc-ror/app/controllers/api/v1/application_controller.rb:1:in `<top (required)>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:492:in `load'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:492:in `block in load_file'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:682:in `new_constants_in'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:491:in `load_file'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:388:in `block in require_or_load'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:37:in `block in load_interlock'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies/interlock.rb:12:in `block in loading'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/concurrency/share_lock.rb:115:in `exclusive'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies/interlock.rb:11:in `loading'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:37:in `load_interlock'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:369:in `require_or_load'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:345:in `depend_on'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.beta1/lib/active_support/dependencies.rb:261:in `require_dependency'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/engine.rb:476:in `block (2 levels) in eager_load!'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/engine.rb:475:in `each'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/engine.rb:475:in `block in eager_load!'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/engine.rb:473:in `each'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/engine.rb:473:in `eager_load!'
from /Users/hoanghoa/projects/abc-ror/config.ru:6:in `block in <main>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-2.0.0.alpha/lib/rack/builder.rb:55:in `instance_eval'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-2.0.0.alpha/lib/rack/builder.rb:55:in `initialize'
from /Users/hoanghoa/projects/abc-ror/config.ru:in `new'
from /Users/hoanghoa/projects/abc-ror/config.ru:in `<main>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-2.0.0.alpha/lib/rack/builder.rb:49:in `eval'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-2.0.0.alpha/lib/rack/builder.rb:49:in `new_from_string'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-2.0.0.alpha/lib/rack/builder.rb:40:in `parse_file'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-2.0.0.alpha/lib/rack/server.rb:318:in `build_app_and_options_from_config'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-2.0.0.alpha/lib/rack/server.rb:218:in `app'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/commands/server.rb:56:in `app'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-2.0.0.alpha/lib/rack/server.rb:353:in `wrapped_app'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/commands/server.rb:134:in `log_to_stdout'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/commands/server.rb:74:in `start'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/commands/commands_tasks.rb:90:in `block in server'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/commands/commands_tasks.rb:85:in `tap'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/commands/commands_tasks.rb:85:in `server'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/command.rb:20:in `run'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-5.0.0.beta1/lib/rails/commands.rb:19:in `<top (required)>'
from /Users/hoanghoa/projects/abc-ror/bin/rails:9:in `require'
from /Users/hoanghoa/projects/abc-ror/bin/rails:9:in `<top (required)>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/spring-1.6.1/lib/spring/client/rails.rb:28:in `load'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/spring-1.6.1/lib/spring/client/rails.rb:28:in `call'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/spring-1.6.1/lib/spring/client/command.rb:7:in `call'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/spring-1.6.1/lib/spring/client.rb:28:in `run'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/spring-1.6.1/bin/spring:51:in `<top (required)>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/spring-1.6.1/lib/spring/binstub.rb:11:in `load'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/spring-1.6.1/lib/spring/binstub.rb:11:in `<top (required)>'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/hoanghoa/.rbenv/versions/2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/hoanghoa/projects/abc-ror/bin/spring:13:in `<top (required)>'
from bin/rails:3:in `load'
from bin/rails:3:in `<main>'

It already fixed on https://github.com/plataformatec/has_scope/pull/79


Revert "nixos/gnome3: launch gnome-shell wayland with RT scheduling"

Motivation for this change
This reverts commit 927a6fdaad493044f2344cba73e6310d3450ca00.
Fixes:
https://github.com/NixOS/nixpkgs/issues/90201
https://github.com/NixOS/nixpkgs/issues/90184
https://github.com/NixOS/nixpkgs/issues/86730
That commit adds support for an experimental feature that is disabled by default and has caused multiple people to waste hours debugging. To quote the author of the commit:

I've kinda forgot about the issue, but we should probably disable the wrapper for now since it breaks things (would be nice to get into 20.09). Regardless of our understanding the underlying issue, it's a fairly minor feature which probably aren't used by many people (especially since it's not enabled by default).

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

[x] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

I don't think we can do this since RT is now default.

I also can't reproduce one of the bugs for TZDIR https://github.com/NixOS/nixpkgs/issues/86730#issuecomment-701579385. This could either mean, this actually is working as expected since we know that LD_LIBRARY_PATH is going to be dropped by design, or that it's just broken (or my setup isn't correct) and why I can't reproduce.

this is superseded by https://github.com/NixOS/nixpkgs/pull/99697


Provide a way in navigator to push pages by popping to that page if it exists deep inside stack history

Use case
As I was creating a basic application with 4-5 screens just like youtube I found that when a user pushes a new screen then the old screen is stored in the stack which is expected behavior but there was no way or property which could help remove the duplicate pages from the stack.
To elaborate it more let's say:-
My application has four screens Screen 1 -->  Screen 2 --> Screen 3 --> Screen 4.
And if a user opens my application with Screen 1 and then moves to Screen 2  and then Screen 3 but now they decide to go to Screen 2 and Screen 3 repeatedly many times and later they decide to go back to screen 1 then they are expecting that pressing back 2 times will lead them to Screen 1 which we see in most apps but what will be happening is that they had to go through a long list of pages stored in stack opening repeatedly until they reach Screen 1 again.
This is how my application navigation performs. In this video, you can see that the user has to press too many times to reach Screen 1:-
https://user-images.githubusercontent.com/72334435/110109602-b1d48b00-7dd3-11eb-81da-a9c9bc614dfd.mp4
Solutions that didn't work:-

Over StackOverflow many suggested using pushNamedReplacement but then it fails the objective to create an application with navigation similar to youtube and other popular apps.
Some suggested using pushNamedAndRemoveUntil as onTap for the navigator home button.

Navigator.pushNamedAndRemoveUntil( context, PageRoutes.home,  (Route<dynamic> route) => false, );

This will clear the stack history when the user taps the navigator home button but this is not a solution as users may not do that.
This is how my onTap is set up on the bottom navigator buttons:-
 if (pageStackHistoryKeeper.tasksPageInStackBool == false) {
                    Navigator.pushNamed(
                      context,
                      PageRoutes.tasks,
                    );
                    context
                        .read(routePageStackHistoryKeeper)
                        .homePageInStackBoolSwitcher(false);
                    context
                        .read(routePageStackHistoryKeeper)
                        .tasksPageInStackBoolSwitcher(true);
                    context
                        .read(routePageStackHistoryKeeper)
                        .notesPageInStackBoolSwitcher(false);
                    context
                        .read(routePageStackHistoryKeeper)
                        .projectsPageInStackBoolSwitcher(false);
                  }

Here you can ignore the pageStackHistoryKeeper because it is just a provider class that keeps track of the last pushed Screen by setting the tasksPageInStackBool to true when the Screen pushed for the first time so that if the user requests the same Screen again then they fail to do so as the if statement fails.
Proposal
Now want I think would be great is a functionality from the flutter to automatically detect if the Screen we are pushing is already present in the stack or not and if it is then instead of pushing it should perform pops to that Screen.
Like going from Screen 1 --> Screen 2 --> Screen 3 and then repeatedly open Screen 2 and Screen 3 now instead of pushing Screen 2 over Screen 3 it should pop Screen  3 to reach Screen 2.
I request that this functionality should be added as a bool property to Navigator push and should be set to false by default. And when it is set to true then only it should pop instead of push if the page exists in the stack history.
This is how I want the navigator to work after setting that property true:-
https://user-images.githubusercontent.com/72334435/110115568-42af6480-7ddc-11eb-8ef7-e0b4f146c445.mp4
More optional property (Not necessarily required):-
Also in this property, there could be an option to set that if we want that page to which we may pop, to preserve its state or update its state.
What I don't know: -
Now I don't know if this functionality already exists or not. But I have searched all flutter communities for a solution to this but I failed to find it anywhere maybe it could be because I don't exactly know what to search for as I'm new to this platform. But I hope for an easy solution to this issue as this type of navigation is very general in applications.

Hi @brightseagit
The interesting proposal I'm also not sure if it possible or could be implemented in Navigator 2.0
Please read through Navigator 2.0 API Usability Research
  and provide feedback here
Labelling this for now and posting this issue on their feedback issue
Thanks

@brightseagit Have you tried "Navigator 2.0", i.e. the Router and Pages API?

Thanks, @TahaTesser for looking into this request.
I read through the links mentioned by you but sadly I didn't found any mention of functionality similar to what I requested here but I'm not sure of that.

@brightseagit Have you tried "Navigator 2.0", i.e. the Router and Pages API?
I looked at the working of navigator 2.0 on youtube but I found it difficult to use and understand. So I'm currently sticking with navigator 1.0

If you can provide a little example code on how to achieve it with navigator 2.0 then it would be very helpful for me and many others. Thank you.

It seems possible, https://github.com/flutter/uxr/issues/6#issuecomment-791443497 turning  into an example from proposal

but I found it difficult to use and understand

Yes, a classic Navigator 2.0 problem :)
Hopefully, the Usability Research will soon yield great results into simplifying it. There already are many useful packages for it.
The gist of Navigator 2.0 is that you are declaratively provide a stack of pages that you would like the Navigator to build. Like this (simplified):
List<Page> _choosePagesBasedOnSomeConditions() {
  // some code to decide which pages you want in the stack
  return [
    MyPage1(),
    MyPage2(),
  ];
}

// you put this Navigator somewhere in the Widget tree
Navigator(
  pages: _choosePagesBasedOnSomeConditions()
)

Navigator will know how to rebuild and animate the new stack of pages (if you give them keys), but you can (In most cases unnecessary) override that as well.

Thank you very much for providing a solution to this problem. I didn't know that navigator 2.0 reloves this. From now on I will be using it.

Hello slovnicki,
I tried to use navigator 2.0 to achieve navigation similar to youtube but I failed to understand navigator 2.0. Then I tried to use the beamer project created by you which was really easy to implement and I was able to implement navigation similar to what I made with navigator 1.0 but still, I failed to understand how to access the page stack history.

I'm posting a link to an example project that I created to showcase the issue I'm having with navigator 1.0.
https://github.com/brightseagit/youtube_navigation_example

Hello @slovnicki,
I tried to use navigator 2.0 to achieve navigation similar to youtube but I failed to understand navigator 2.0. Then I tried to use the beamer project created by you which was really easy to implement and I was able to implement navigation similar to what I made with navigator 1.0 but still, I failed to understand how to access the page stack history.

You can access all of the pages via Beamer.of(context).currentPages.
But if using beamer, I don't think you need to use push at all for navigation, so you won't have a problem with duplicate pages in the first place.

Thank you very much for providing a solution to this problem. I didn't know that navigator 2.0 reloves this. From now on I will be using it.

No, navigator 2.0 cannot resolve this issue. Navigator 2.0 can only manage hierarchy stack with pages you provide in the stack. It's not the same as the root issue, which is related to history stack.

Hello @slovnicki and @nguyenxndaidev ,
I did understand what you guys said. And I did try to treat navigator 2.0 pages as the history of the stack but I failed to do that correctly as it was very complicated for me and I did try to use beamer also for it but again I failed on how to approach that as I didn't find an example with a similar use case on the internet.
So for now, I  skipped forward on my project by just using pushReplacement which is quite annoying but I will be looking forward to this thread to an easy and detailed solution to this issue.
And I hope that the flutter team provides a solution to this in navigator 1.0 without any breaking changes (even 2.0 would be fine with an easy-to-understand & detailed doc) as this type of navigation is a very crucial and most seen way of navigating.
Thank you for looking into it.

@nguyenxndaidev @brightseagit
I realize that I misunderstood the problem a bit because I was focused on the push usage which is related only to page stack, not a stack of page stacks, i.e. "navigation-0 history". Of course, you didn't really have any other option to explain it than push with Navigator 1.0, so it's definitely my fault not seeing it at first.
You could have each tab be a separate Navigator / Router and then handle this tab-sequence yourself, but this is not a solution we need.
Yes, this is an interesting problem. I played a little with YouTube app and noticed that if you visit tabs 1,2,4,2,3 then with back button you'll go 3,2,4,1, so it's not removing repeating patterns, but removing anything that was already visited in history. This is definitely an easier problem to solve. But is this a desired behavior?

Hello, @slovnicki it's ok.
And what you said about the youtube navigation is correct as I noticed the same pattern now.
I have also noticed that many google apps were not following the same trend which I expected. Some were directly closing on pop, some were jumping to the home on pop, and some were following the repetition as seen in my example. I think as of now there are no set of guidelines on navigation should work and this is what was leading me to this confusion. But now I understood that.
But I really liked youtube's way of handling it as it is a very clean approach for general apps. So I will be looking forward to your resolution to this issue in beamer. Thank you for looking into it.

On Youtube, the oldest duplicate screens were being removed and the latest screens of the duplicates were being kept in reverse chronological order:-
Here what I visited - 1 , 2 , 4 ,  2 , 3 ,  4 , 2 , 3 , 2 , 4
What I got when I pressed back - 4 , 2 , 3 , 1
Here the latest screen means the most recent screens opened of duplicates.

I agree that the way youtube does is the most reasonable way user want when they travel the history.

@brightseagit did you tried Navigator.of(context).popUntil()  ?

So there is no way atm to achieve this behaviour?

Its in P6 so no I don't think it will get supported

@brightseagit did you tried Navigator.of(context).popUntil() ?

Lol really? I guess you missed the whole point.

🕸🕷 I have moved on from this issue much earlier(like other issues in life) so unsubscribing from it now ☺ .
But still keeping it open for other wandering souls out there 👻.


chore(e2e): update dependencies for e2e

I also corrected CHANGELOG a bit to be more meaningful and adjusted the command to generate CHANGELOG. If we use -r 0 it will regenerate the whole changelog. That means we also lose our manual modifications so I set to -r 2 to avoid it.

Pull Request Test Coverage Report for Build 4258

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 93.009%

Totals

Change from base Build 4256:
0.0%

Covered Lines:
1128

Relevant Lines:
1165

💛  - Coveralls


Move Unary Composite ops to ttnn

TOATAL NUMBER OPS = 53
Work For: 49/53

[x] #9913
[x] #10237
[x] #10238
[x] #10384
[x] #10385
[x] #10386
[x] #10505

There is progress on 20/53

@KalaivaniMCW do you know what is missing to close this as Done?

@ayerofieiev-tt I have created two issues for the pending items
#10640
#10820
I am closing this issue with the intention that the above two issues are being tracked.


Pr/fix npe

Resolved #50
I hadn't supported the generic type of the ParentRunner properly, locking the implementation into FrameworkMethod. This PR fixes that issue.

Try this on for size and see if you get the correct behavior:
9.4.4-SNAPSHOT.zip


param.sfo on macOS error

Godot version:
3.5rc2
OS/device including version:
M1 MacBook Air macOS Sonoma 14.1.2
Issue description:
Exporting to vita produces an invalid param.sfo on macOS. Unable to boot the game after installing the vpk

This is a duplicate issue, but it has been fixed for a while. The updated versions are in the Actions builds


Notebooks need updating on layer internals

Was trying to rerun Instrument Calib and ran into errors in block 6, line 5 and had to change to det_npix = lays[-1].pixels_out. I suspect this isn't the only case. Going forward, maybe get/set methods could avoid some of this but at the moment I think reaching into the layer is fine.

I agree, we should probably have get and set methods. I believe they were left out because we did not want users being able to modify the state (eqx.tree_at isn't a friendly function to begin with). layers.py is in an early stage, #59 discusses the long term plan for the script.

I think we don't want to resort to get and set methods - we want to stick to syntax as similar as possible to Equinox neural networks, for example https://github.com/patrick-kidger/equinox/blob/main/equinox/nn/conv.py.
The reason for this is if there is a significant Jax or Equinox update, we don't want things to break!

I mean the getter methods are trivial - its just a one line code wrapper so I would be horrendously surprised if that actually conflicted with anything. I also think the setter methods are crucial, going by the 'Peter test' it will be much easier to simply fix any problems than it will be to explain to Peter what a PyTree is and what a lambda function is 😅. Besides, its a single line wrapper to the same function call, I seriously doubt this could cause us trouble in the long run but it is a fair point.

Sure... I just am cautious about introducing any syntax that isn't core Jax or Equinox, because we know how Jax versions move...

I thought I would use this thread to explain how (I think :laughing:) equinox works under the hood. Most of you probably know this already (perhaps more) but thought it would be good to all be on the same page (If you do know more, please add to this thread).
equinox just registers the class as a PyTree by providing default implementations for flatten and unflatten (the names I used might not be correct) so that Jax can move the PyTree between XLA and Python. The real magic of equinox is that it let's us jit and grad with respect to certain attributes/fields of the class/PyTree. If our PyTree were a list; [[1, 2], 1, 1] we can essentially take the gradient of an operation with respect to the nested [1, 2]_only_. Forjitit just marks the other fields, i.e...., 1, 1]` as static arguments. Methods are registered as PyTree nodes (I believe, if they are registered at all) and so have no affect on this process.
Curiously, the process also means that all class methods are actually registered as tree_util.Partial objects. @benjaminpope you may remember back in my early days me and Patrick had a discussion about this. Turns out he was way ahead all along as you may have expected.
I think set_ and get_ methods are mostly just a convenience and tidy up the code. For example, the update_phasor in "pure" equinox is:
wavefront = eqx.tree_at(lambda wavefront : wavefront.amplitude, self, amplitude,
    is_leaf = lambda leaf : leaf is None)
wavefront = eqx.tree_at(lambda wavefront : wavefront.phase, self, phase,
    is_leaf = lambda leaf : leaf is None)

where phase and amplitude are assumed to exist and the is_leaf argument allows equinox to tree None as a leaf which in default JAX is actually a node.
Assuming that set_phase and set_amplitude exist and wrap the tree_at syntax the update_phasor method becomes:
self.set_amplitude(amplitude).set_phase(phase)

which is much more readable and concise. Due to the number of other functions that need to set_ some property I support keeping them. As @LouisDesdoigts said they are just wrappers to pure equinox and Partial wrappers at that which means they are entirely implemented in jax and equinox.
I think Patrick explores the idea of "parameterised functions" more, while we are looking more at the OOP capabilities. This is why I agree with @benjaminpope and @LouisDesdoigts for layers.py which are "parametrised functions" more than they are classes. Despite this I still think a class structure can be exploited to simplify this code although I am open to feedback based on the content of this discussion.
Sorry that was so long
Jordan

Hey @Jordan-Dennis this looks great and I love the idea of putting this info together. Maybe we could turn this into a discussions page, which can eventually be turned into some part of a tutorial with the on-boarding notebooks.
One thing I would say is that there was only ever one case that needed the is_leaf = lambda leaf : leaf is None syntax and that was for updating the Wavefront object in the CreateWavefront layer since the object is actually initialised in the OpticalSystem class with None values for wavefront size and pixel scale, and the default behavior for eqx.tree_at is to ignore None leaves. I would suspect we want to match this behavior unless its explicitly needed (such as in CreateWavefront) as None seems be an important class type in the equinox ecosystem.

Closing this issue as now all of the code used to run these notebooks previously now exists in the documentation notebooks, and the /notebooks folder has been removed


Can't run oh-my-zsh.sh on fresh OSX install

Just installed zsh by macports (port install zsh) and checked out oh my zsh from git.
However, trying to run oh-my-zsh.sh gives me
env: zsh: No such file or directory
./oh-my-zsh.sh: line 14: syntax error near unexpected token (' ./oh-my-zsh.sh: line 14: for config_file ($ZSH/lib/*.zsh) source $config_file'
Any help? Thanks!

Nevermind, seems building and installing from the zsh sources fixed it. Seems macports doesnt set the environment variables or smth..


Cart Search?

I get this when using cart search. I am trying to use it to get the rowid back of a specific item ID...

Please show your code.

I have fixed it. I found the rowID and I am happy now. I just have to figure out how to delete one item from the cart now lol.
You can close this one bro! :)
Good work on this BTW. I love the support.

Ok, glad you figured it out!


Possible generic tracking by Avast

A while ago I installed AdGuard Home on a lonely Raspberry Pi 3 Model B and immediately noticed several truck loads of traffic to avaststat.mailshell.net with approximately one request every 5 seconds. All of these requests came from my laptop and never from any other device, including my Android 8 phone which is running Avast Mobile. After much searching online I could find no explanation of what it does, and I never got an answer when I asked on the Avast forums.
About a month ago, a week after posting on the Avast forums, I decided to block it via AdGuard Home and have since had absolutely no issues, errors, pop-ups, bugs, or failures with my Avast Internet Security - including the update function - so it really seems like it does nothing of benefit to users.
Looking the subdomain up on ICANN yields no ownership information and another domain info tool proclaims the main domain is running on a Linode instance in Australia?

Whether or not this is actually related to Avast at all it seems like the only purpose it serves is to track when users' computers are on and connected to the Internet. I have prepended it to my own copy of this hosts file via HostsMan for the time being, but unless someone who knows how to probe domains proves I'm just paranoid then I would suggest adding it to this collection.

@Ultrabenosaurus it's definitely a reporting domain but it looks like it's connected to your mail clients spam folder and it's reporting the spam mail to Avast, i guess for diagnostics and feature blocking.It's coming from aswSpam module.I'd be cautious on blocking it as it will break some of the features.Their(in general) reporting and ads domains are different,this one is not one of them and also as somebody already replied to you in the forum you can easily opt out of any advertisements in the settings as you have the paid version. I hope this helps.

Hi @dnmTX and thanks for investigating this so quickly. I initially suspected it might be the anti-spam part of Avast, but the odd thing is that I don't use the Windows Mail app and only have Outlook open briefly when I need it. I do most of my email on my phone and rarely open any email software, or even gmail in my browser, so I don't understand why it's pinging every 5 seconds constantly without pause?

@Ultrabenosaurus doesn't matter how often or you ever open it,as long as you have any mail client in your system and the Avast mail shield active/installed Avast will always have access to it(you can't stop this).Avast in general have access to everything in your system with high privileges(call it however you want,me.personally i call it AVAST VIRUS).Why it's pinging so often,i don't know.I guess that's how it's coded and maybe,just maybe if you complain long enough in their forum they might do some changes.
Keep in mind also that Avast have full access to your hosts file and anything that contains the word "avast"(don't matter good or bad) is being erased,so mine as well double check if the domain that you added with HostsMan is even there.


Backgrounded jobs

I background things a lot. Especially with the editor. Then I come back to the window in tmux and forgot if I have the job backgrounded and type fg to check, which wastes time.
I thought the prompt could report this for me. So I threw something together:
https://github.com/rpdelaney/sexy-bash-prompt/tree/jobs
I guess this might be scope creep. I'm happy to leave it in my own fork.
But it's easy and useful. Shell builtins mostly. What do you think?

I don't think this is unreasonable, though it feels off as built-in behavior. The symbol is confusing (though I guess most of ours are) and this portion is very unrelated to git
I've also been wanting to add long-running command timer for a while but never put in the effort for it (e.g. show (2:33)$ when last command took 2 minutes and 33 seconds)
Maybe there's a good middleground for documenting "plugins" like this in our README for people to add as they see fit:

Allow defining function sexy_bash_prompt_after_git_progress
Allow defining function sexy_bash_prompt_before_symbol

The symbol is confusing

Yeah. I just picked something random; I'm not attached to it. I didn't put much thought into it. If this were to be in master, we could think of something better.

this portion is very unrelated to git

Well, we are "sexy-bash-prompt" not "sexy-git-prompt". But I agree the prompt is very git focused and so this could be seen as scope creep.

I've also been wanting to add long-running command timer for a while but never put in the effort for it (e.g. show (2:33)$ when last command took 2 minutes and 33 seconds)

I hadn't thought of that. Another feature I might like is some kind of indication of whether the last command exited nonzero though.

Maybe there's a good middleground for documenting "plugins" like this

This might be the way to go. I would name the functions differently, but if you think it's a good idea in general, I could whip something up. I would need help with the tests though -- even after all this time I still haven't grok'd how they work. heh.

Hmmm, yea. Now I'm on the other side of the pendulum. I feel like attempting to create a plugin framework is adding an unnecessary layer of abstraction. Maybe we could include code snippets in the README (unsure if too bulky) or an examples folder (e.g. examples/stopped-tasks)
Also, yes I like the non-zero exit idea as well. Always hate second guessing myself and doing a echo $?

Maybe we could include code snippets in the README (unsure if too bulky)

I dunno how you are visualizing this but it would be very bulky, I think. It might be better just to have forks or branches. That's extra maintenance overhead, but the master branch is so stable at this point, it might not be a big deal.
What caused you to change your mind? Supporting something like a before_sbp() and a after_sbp() function (again, with better names) seems like much less bulk than that and it gives more flexibility to the user. Otherwise we are now forced to make decisions like "Does everyone need the prompt to tell them how many backgrounded jobs they have?" Do we need to build in flags to disable some options? At what point does the prompt become too busy? etc

Also, yes I like the non-zero exit idea as well.

Cool. Very easy to do once we figure out how. :-) I can open a separate issue to discuss that.

When I think of the extreme version of customizaton, I imagine needing a function for every section between each dialogue (e.g. someone wants to put a timestamp after hostname)
For what it's worth, I already see 4 places that could be common (not even including augmenting something like the git info to support other VCSs) (i.e. before git branch, before git symbol, after git symbol, before prompt symbol)
This then feels like we're adding unnecessary abstraction to allow injecting at any point in the script. In reality, it'd be better performance and easier maintenance for everyone if people simply forked for what they needed OR we have explicit supported opt-in/opt-out features (so we don't need to vaguely guess where content goes) (you mentioned this in your last comment)
I know I'm jumping around a lot on this, that's because it feels like a small change which has huge implications for future revisions and I've over-engineered major revisions in the past
I'm going to take some more time to think about this

Hm. Sounds like a slippery slope fallacy honestly. If supporting injection in between every token is too much to maintain, then we should simply not support that. There's nothing requiring us to go to such lengths until we find a reason to. And we probably won't.
I mean, rather than do that, it would be better if we would rebuild the whole thing from scratch so that the prompt itself is a collection of tokens and sexy-bash-prompt is just a suggested or default configuration for it. That is wholly out of scope for this issue.

Yea, it's definitely a slipper slope mentality. Unsure it's that far of a
leap such that it's a fallacy here though. We've gotten plenty of one off
customization requests over the years
I might be missing something but isn't our prompt already pretty modular?
The PS1 is rather broken up
On Mon, Feb 25, 2019, 4:19 PM Ryan Delaney<EMAIL_ADDRESS>wrote:

Hm. Sounds like a slippery slope fallacy honestly. If supporting injection
in between every token is too much to maintain, then we should simply not
support that. There's nothing requiring us to go to such lengths until we
find a reason to. And we probably won't.
I mean, rather than do that, it would be better if we would rebuild the
whole thing from scratch so that the prompt itself is a collection of
tokens and sexy-bash-prompt is just a suggested or default configuration
for it. That is wholly out of scope for this issue.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/twolfson/sexy-bash-prompt/issues/80#issuecomment-467239075,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AA3FWO-krfIjNCS0evDCysOSyuxLoFakks5vRH10gaJpZM4bKeDq
.

Unsure it's that far of a leap such that it's a fallacy here though.  So we decide how slippery the slope is.

I might be missing something but isn't our prompt already pretty modular? The PS1 is rather broken up

I dunno if I would call it modular. But please please don't misunderstand me. I am not suggesting re-engineering it like that. I'm saying if we were to accommodate every 1-off customization request (which I don't think we should), it would be easier to rebuild it in a fully modular way, than to just keep building stuff into it.
Anyway. Where do we go from here? I guess the options are:

Do nothing:

Good, because we don't have to do anything
Good, because there's no scope creep.
Bad, because the feature might be useful to someone (although they can always fork it like I have).

Flesh out my branch, polish it up, and merge it into master:

Basically the opposite of No.1

Add a "before_prompt()" and "after_prompt()" of some kind:

Good, because users can customize their prompts with whatever weird stuff they want to add without bugging us to restructure everything
Bad, because of the threat of the slippery slope that we wind up building a whole scaffolding tokenizer structure over time

Rebuild the whole prompt to be nothing but modules (something like ${TOKEN1_COLOR}prompt_token1() ${TOKEN2_COLOR}prompt_token2()...

Good, because then the customization issue is dead forever since anyone can do whatever they want on their own
Bad, because it's a lot of work, basically scrapping everything in here and starting over from scratch
Bad, because it's a cartoonish instance of scope creep

I don't have super strong opinions except that I don't like No. 4. If that is done it should be a completely separate project. And I don't want to do it. Other than that, I lean ever so slightly toward No 3. What do you think?

We're missing opt-in/opt-out flags in this list but maybe that's option 2
I'm still going to take some time to about this more rather than making a
decision immediatly
On Tue, Feb 26, 2019, 9:14 AM Ryan Delaney<EMAIL_ADDRESS>wrote:

Unsure it's that far of a leap such that it's a fallacy here though.  So
we decide how slippery the slope is.
I might be missing something but isn't our prompt already pretty modular?
The PS1 is rather broken up
I dunno if I would call it modular. But please please don't misunderstand
me. I am not suggesting re-engineering it like that. I'm saying if we
were to accommodate every 1-off customization request (which I don't
think we should), it would be easier to rebuild it in a fully modular way,
than to just keep building stuff into it.
Anyway. Where do we go from here? I guess the options are:

Do nothing:

Good, because we don't have to do anything
Good, because there's no scope creep.
Bad, because the feature might be useful to someone (although they
can always fork it like I have).

Flesh out my branch, polish it up, and merge it into master:

Basically the opposite of No.1

Add a "before_prompt()" and "after_prompt()" of some kind:

Good, because users can customize their prompts with whatever weird
stuff they want to add without bugging us to restructure everything
Bad, because of the threat of the slippery slope that we wind up
building a whole scaffolding tokenizer structure over time

Rebuild the whole prompt to be nothing but modules (something like ${TOKEN1_COLOR}prompt_token1()
${TOKEN2_COLOR}prompt_token2()...

Good, because then the customization issue is dead forever since
anyone can do whatever they want on their own
Bad, because it's a lot of work, basically scrapping everything in
here and starting over from scratch
Bad, because it's a cartoonish instance of scope creep

I don't have super strong opinions except that I don't like No. 4. If that
is done it should be a completely separate project. And I don't want to do
it. Other than that, I lean ever so slightly toward No 3. What do you think?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/twolfson/sexy-bash-prompt/issues/80#issuecomment-467528076,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AA3FWBDZjB7MsnTNFHxKDSf5z4yV2A9Qks5vRWt5gaJpZM4bKeDq
.

Sure, take your time. I'm happy to have my prompt in my fork.

Coming back to this finally. I do think opt-in flags are the ideal extension structure for this repo -- however, when I think about them in application to this specific issue (background jobs), I feel like they're not applicable
I think it's that I don't see it a widespread use case (I think a minority of my coworkers have used stopped jobs in the past)
When I move the opt-in flag scope to things like error code detection and long running task timers, I feel like they are so useful across all programmers that it's silly to build out such an opt-in system
To summarize, let's keep backgrounded jobs as a forkable issue (maybe we can add links to other repos in the README as a middleground) and open issues for the 2 enhancements brought up (long running task timer, error code detection)
Thoughts?

Yeah that's fine. I'll make separate issues for opt-in flags, and for tracking exit status. Perhaps you should do the same for timers since I don't understand the use case as well there.

:+1: Will do


Parameters Should Be URL Encoded

According to https://github.com/google/google-authenticator/wiki/Key-Uri-Format#label, the parameters should be URL encoded, at least when constructing the URI. Otherwise, one would be able to pass in a value of ACME&Co=foo as the Issuer or Account, but then an attempt to use and parse the URI later would yield incorrect results.
So for example, here: https://github.com/petrsnd/OtpCore/blob/release-1.0/OtpCore/OtpAuthUri.cs#L25, I don't see the use of any URL encoding. Maybe I'm missing something. But if not, you have that and other similar places.
Also, since we are there, you may as well validate the Type parameter too:
https://github.com/petrsnd/OtpCore/blob/release-1.0/OtpCore/OtpAuthUri.cs#L16
It's an enum and one could pass in (OtpType)42. Validation is performed on other enums, so I figured you might as well do this one too.

@Kevin-Andrew
I think we may be reading the spec differently, and it is worth noting that this is an informal spec that has become a de facto standard.  The lack of proper scrutiny has left some holes.
This is a URI, not a URL, so the strict rules of web URLs don't need to be followed.  I added some tests that I hope cover your scenarios.  Please check to see if you think it is good enough based on the information below--
https://github.com/google/google-authenticator/wiki/Key-Uri-Format#label doesn't say that the Label should be URL-encoded.  It says that the label may optionally include an issuer prefix, and if it does, the issuer and account must be delimited by a colon which may or may not be url-encoded:

The issuer prefix and account name should be separated by a literal or url-encoded colon,

New Test -- GitHubIssueNo9Pt1

Test simple named account with ampersand and equal sign and make sure that it can be parsed and re-serialized
Test email-style named account with ampersand and equal sign and make sure that it can be parsed and re-serialized, even though it is a whacky, illegal email name
Test issuer with ampersand and equal sign and make sure that it can be parsed and re-serialized--note that it MUST be escaped in the parameter portion but MAY be unescaped in the label portion
Test that failure to escape the issuer when listed in the parameter portion throws an exception

I didn't need to make any changes to get those tests to pass.  However, I noticed that the spec also says this:

and optional spaces may precede the account name.

Which I wasn't allowing for.  I was treating all of those spaces as a literal part of the account name.  It is interesting to note that the ABNF specified doesn't allow for a literal space, only the url-encoded space:

label = accountname / issuer (“:” / “%3A”) *”%20” accountname

Also, issuer and account must conform to the next sentence, which I wasn't checking for:

Neither issuer nor account name may themselves contain a colon.

New Test -- GitHubIssueNo9Pt2

Test to be sure that optional spaces are allowed
Test to be sure that colons are not allowed

I took your advice on validating the type parameter.
New Test -- GitHubIssueNo9Pt3

Test to be sure you can't pass in an arbitrary number for type parameter to constructor

PR coming...

Sorry, if my wording was misleading, I was just using the same terminology that was in https://github.com/google/google-authenticator/wiki/Key-Uri-Format#label. I did call it a URI:

...when constructing the URI.

But I also did use the term:

...should be URL encoded...

Which is exactly how https://github.com/google/google-authenticator/wiki/Key-Uri-Format#label phrases it:

Of course they also use one instance of "URI-encoded", but perhaps that is on purpose, I don't know and I don't care.
I'm not going to argue semantics, so let me try getting my point across another way, because your code change does not address the problem.
If I use your new code with the following:
var account = "αccount";
var issuer = "ACME?Co=<IP_ADDRESS>:8080";

var o = new OtpAuthUri(OtpType.Totp, new byte[] { 0x01 }, account, issuer);

System.Diagnostics.Debug.WriteLine(o.Uri.ToString());

It outputs:
otpauth://totp/ACME?Co=<IP_ADDRESS>:8080:αccount?secret=AE&issuer=ACME?Co=<IP_ADDRESS>:8080&algorithm=SHA1&period=30&digits=6
I then generate a QR code for that string:

I then open up the Google Authenticator app on my cell phone and have it scan that QR code and I get the following:

In my opinion, that shouldn't happen.
Because, if I use code like the following, with the same two input values:
var account = "αccount";
var issuer = "ACME?Co=<IP_ADDRESS>:8080";

var ub = new UriBuilder();
ub.Scheme = "otpauth://";
ub.Host = "totp";
ub.Path = $"{Uri.EscapeDataString(issuer)}:{Uri.EscapeDataString(account)}";

var query = System.Web.HttpUtility.ParseQueryString("");

query.Add("secret", "AE");
query.Add("issuer", issuer);
query.Add("algorithm", "SHA1");
query.Add("period", "30");
query.Add("digits", "6");

ub.Query = query.ToString();

System.Diagnostics.Debug.WriteLine(ub.ToString());

It outputs:
otpauth://totp/ACME%3FCo%3D<IP_ADDRESS>%3A8080:%CE%B1ccount?secret=AE&issuer=ACME%3fCo%3d<IP_ADDRESS>%3a8080&algorithm=SHA1&period=30&digits=6
I then generate a QR code for that string:

Scan it using the Google Authenticator app, and everything is as I would expect it to be.

So, you more concerned with the parameterized constructor and not the string-based constructor? I think I missed that part. But, I guess I should have picked that up when you mentioned the enum type validation. My bad. Also, I'll use your test example to validate and make sure it is supported.
Thanks for taking a look.

Also, colons are forbidden in the spec unless I'm missing something.
"Neither issuer nor account name may themselves contain a colon."

One more thing... I think we might be talking past one another on the word "parameter". I was thinking of it in terms of the spec, and maybe you were talking about the class constructor.
Anyway, we will get it right. Thanks again for the feedback.

So, you more concerned with the parameterized constructor and not the string-based constructor?

My original post has the following:

So for example, here: https://github.com/petrsnd/OtpCore/blob/release-1.0/OtpCore/OtpAuthUri.cs#L25...

That line of code is in the constructor you're referring to as "...the parameterized constructor", yes.
Note, all of your constructors are "parameterized constructors".
Let me know how can I better write up the issue to prevent any other misunderstandings in the future.
To your other comment:

Also, colons are forbidden in the spec unless I'm missing something.
"Neither issuer nor account name may themselves contain a colon."

Yeah, that is mentioned in the Label part of the URI, but not for the issuer query string parameter. It then also states:

...they should be equal.

when referencing it's relation back to the value used in the Label. Typically, for specifications, there is a difference between "should" and "must".
So I would say, treat this as to what you eluded to earlier. We are simply referencing a wiki page on an unused/unpublished, unmaintained, now archived, open source project, that happens to be on the Internet. If, however, we go with real world examples of applications that are used/published, maintained, and not necessarily open source, like:

The official Google Authenticator app
Microsoft Authenticator app
Authy/Twillo app
Duo (Allows and displays colons in the account. The issuer prefix isn't displayed at all, regardless of the number of colons or if using the issuer query string parameter. So it's really just doing a split on the first colon.)
Okta Verify app
FreeOTP app
OneLogin Protect (allows colons, but doesn't display the name at all if present)

They all allow colons in the Label portion of the URI, within either the accountname or issuer portions. Also, all other open source OTP libraries I have looked at except one, also allow colons. So personally, I would deviate from what the wiki says and just leave a comment in the code or something. Another example is that a colon is even technically allowed in an email address, which is often used as the accountname value in the Label. I see no technical nor compatibility reason to disallow a colon.

Nah.  Some of my misreading was because I was responding from the GitHub app on my phone rather than the GitHub web interface.  Pretty good interface for skimming, but not so good for understanding.  I should have gone back to read your issue again when I sat down to write up the fixes.
I'm guessing the author's original thought to disallow colon was about parsing in the label, i.e., knowing whether the extra colon a delimiter or is part of the label or is part of the account.  The issuer parameter is only strongly recommended and not required, but I think you're right, in practice it is always there, and it can be used to parse the label correctly.
It is probably best to go with the de facto standard, in other words, what the most popular apps support.  I'll try some of your encodings and make sure the library generates URLs that work with all of the apps you have listed.  Then, I'll update the PR.
Thanks

@Kevin-Andrew
I added a specific test for your example and made a lot of changes to get everything passing again.
The ToString() method on the Uri class was problematic and comparing URIs for equivalence requires calling Uri.Compare() rather than trying to just compare strings.

The official Google Authenticator app
Microsoft Authenticator app
Authy/Twillo app
Duo (Allows and displays colons in the account. The issuer prefix isn't displayed at all, regardless of the number of colons or if using the issuer query string parameter. So it's really just doing a split on the first colon.)
Okta Verify app
FreeOTP app
OneLogin Protect (allows colons, but doesn't display the name at all if present)

Of course, all these apps can be used to add authenticators via QR code or URI.  I'm working on this same list to make sure that going the other direction, this library can parse 2FA URIs generated by all these providers.  I found it interesting that all of these vendors try to force you into their ecosystem by using a custom URI scheme:

👍 Google works just as expected via the otpauth:// scheme
👍 Microsoft tries to use a phonefactor:// URI by default, but you can switch it to a traditional TOTP authenticator app (however, I had to change issuer parsing to make MS format work, because they don't match issuer from label and parameter)
s
👎 Duo only supports generating their own duo:// URI from what I can see; I couldn't find a way to use the standard otpauth:// scheme
👍 Okta starts by pushing their own oktaverify:// URI, but you can add Okta Google Authenticator instead
👍 FreeOTP can't generate authenticators but recommends FreeIPA, and the format works as expected
👍 OneLogin Protect uses onelogin-otpauth:// URI, but you can use OneLogin Authenticator instead (however, it required a change to work because it doesn't add the issuer to the label, only to the parameter)


Adding *.log file preview

Summary
Add *.log file preview as text file.

Thanks @dom3k for the pull request!
Per the CONTRIBUTING.md file displayed when you created this pull request, we need to add you to the list of approved contributors for the Mattermost project.
Please help complete the Mattermost contribution license agreement?
This is a standard procedure for many open source projects. Your form should be processed within 24 hours and reviewers for your pull request will be able to proceed.
Please let us know if you have any questions.
We are very happy to have you join our growing community! If you're not yet a member, please consider joining our Contributors community channel to meet other contributors and discuss new opportunities with the core team.

Spinmint test server created at: https://i-0912cbd5f366e72ae.test.spinmint.com
Test Admin Account: Username: sysadmin | Password: sysadmin
Test User Account: Username: user-1 | Password: user-1
Instance ID: i-0912cbd5f366e72ae

Thanks @dom3k! Can you help provide an example file that's expected to preview?

It is basically any text file but with extension *.log. With this change you can now preview this kind files before download it.
example.log

Spinmint test running for more than 7 days. This test server was terminated.

Thank you very much @dom3k for the PR! :tada:


Mousemove event not working

https://github.com/d3/d3-selection/blob/97eb8038f2e5f8ad88e1d6c0cdb0df8eabfaf63a/src/touches.js#L5
sourceEvent() doesn't have touches prop.
chartWrapper.on('touchmove mousemove', function () {
  const xPos = d3.touches(this) // <- [], but expected [[x1, y1], ...]
}

See event.touches.
Please use Stack Overflow tag d3.js to ask for help. Although I make an effort to assist everyone that asks, I am not always available to provide help promptly or directly. Stack Overflow provides a better collaborative forum for self-help: tens of thousands of D3-related questions have already been asked there, and some answered questions may be relevant to you.
When asking for help, please include a link to a live example that demonstrates the issue, preferably on bl.ocks.org. It is often impossible to debug from code snippets alone. Isolate the issue and reduce your code as much as possible before asking for help. The less code you post, the easier it is for someone to debug, and the more likely you are to get a helpful response.
If you have a question about D3’s behavior and want to discuss it with other users, also consider the d3-js Google Group or joining the d3-js Slack.
Thank you! 🤗


Sh/better mdapi tmp retrieve

What does this PR do?
Changes the filesystem structure of output when SF_MDAPI_TEMP_DIR is set to make it easier to see what it contains.
For retrieves, the raw metadata zip is written along with the manifest, in addition to the converted source metadata and manifest.
What issues does this PR fix or reference?
@W-15846019@

QA

Linked SDR to PDR and PDR to sf
created scratch org with dreamhouse-lwc
sf project deploy start
 SF_MDAPI_TEMP_DIR=mdapiout sf project retrieve start --source-dir force-app

🟢 new directory structure is created
~/repos/trailheadapps/dreamhouse-lwc on  main [⇣!?] via ⬢ v18.17.0
❯ ls mdapiout/2024-06-03T19:21:50.612Z_retrieve
 .   ..   metadata   source

~/repos/trailheadapps/dreamhouse-lwc on  main [⇣!?] via ⬢ v18.17.0
❯ ls mdapiout/2024-06-03T19:21:50.612Z_retrieve/metadata
 .   ..   unpackaged   unpackaged.zip

~/repos/trailheadapps/dreamhouse-lwc on  main [⇣!?] via ⬢ v18.17.0
❯ ls mdapiout/2024-06-03T19:21:50.612Z_retrieve/source
 .   ..   main


Add proxy-tunnel project reference

includes example app to configure on-device proxy automatically
includes examples hosting the proxy server on AWS and DigitalOcean

Change-type: patch

Please make sure to read the CONTRIBUTING document before opening the PR for relevant information on contributing to the documentation. Thanks!

@balena-ci I self-certify!

@balena-ci retest


Search prioritises exact match over relevance

Run a search for "osan korea" (no quotes). The only result is for a bus stop named "Osan", which happens to be the only exact match. iD helpfully zooms in on this bus stop. Unfortunately, it is on the other side of the country to the city of Osan-si and its related Osan Air Base.
The only indication that this might not be the right Osan is the "More results" button, which when clicked, does indeed show the more expected results.
Not sure if this is the right place to file search algorithm bugs (are they in iD or the dataset)?

I did the search and I also get the bus stop.  We just get these results from https://nominatim.openstreetmap.org/search, so there could be an issue with Nominatim, or with the data itself.
There is something weird going on though, because I clicked on that bus stop and iD didn't take me there, instead it showed me the place I was already looking at, but with Osan's data in the sidebar.  It does look like a bug..

Fixed the bug in 1486c3d - it was not related to the Nominatim lookup.
Closing here, since the results are outside our control.
FWIW I do get that same bus stop as a result when doing the search on https://nominatim.openstreetmap.org/

Thanks, @bhousel. I take it your patch is for the issue you discovered; should I file the original bug against Nominatim?

should I file the original bug against Nominatim?

Yes, but when reporting the issue use https://nominatim.openstreetmap.org/ to do the search, not iD.
They both return the same results, but better to leave iD out of it.
cc @lonvia

Thanks, created as Nominatim bug 689.


[r] Additional matrix readers for NDArrays

This PR adds two more readers for dense and sparse matrices off corresponding SOMA*NDArrays.
This is still a draft which may benefit from additional discussion and refinement.

Codecov Report
Base: 71.77% // Head: 59.46% // Decreases project coverage by -12.31% :warning:

Coverage data is based on head (f204d65) compared to base (5985117).
Patch has no changes to coverable lines.

Additional details and impacted files
@@             Coverage Diff             @@
##             main     #720       +/-   ##
===========================================
- Coverage   71.77%   59.46%   -12.31%
===========================================
  Files          68       38       -30
  Lines        3745     1579     -2166
===========================================
- Hits         2688      939     -1749
+ Misses       1057      640      -417

Flag
Coverage Δ

python
?

r
59.46% <ø> (+0.59%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

R/SOMADenseNdArray.R
100.00% <0.00%> (ø)

R/SOMASparseNdArray.R
100.00% <0.00%> (ø)

apis/python/src/tiledbsoma/dataframe.py

...python/src/tiledbsoma/experiment_query/__init__.py

apis/python/src/tiledbsoma/util_tiledb.py

apis/python/src/tiledbsoma/io.py

apis/python/src/tiledbsoma/util_arrow.py

apis/python/src/tiledbsoma/experiment.py

apis/python/src/tiledbsoma/util_ann.py

apis/python/src/tiledbsoma/util.py

... and 22 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

Thanks all -- it's a little bit 'draft'-y but should move us along a little further.


Reduce memory allocations during endpoint restore

First commit is preparatory and moves a function from pkg/common
into pkg/endpoint which is only used there.
Second commit avoids excessive allocations during endpoint restore:
The way endpoint state currently is restored from header files could
potentially lead to a lot of memory allocations, partially due to the fact
that the respective base64 encoded state is converted to a string after
being read and then converted back to a byte slice in order to decode
it. Since every conversion of a byte slice to a string allocates (due to
the fact that strings are immutable in Go), this essentially doubles the
memory that is used which could lead to memory allocation spikes during
restore.
Avoid this by reading the base64 encoded endpoint state into a
byte slice directly and thus reducing the size and number of
allocations.
Before:
EndpointSuite.BenchmarkReadEPsFromDirNames        5000            399980 ns/op           83665 B/op        743 allocs/op

After:
EndpointSuite.BenchmarkReadEPsFromDirNames        5000            369643 ns/op           73479 B/op        731 allocs/op

For #12367 to slightly reduce chances of OOM.
Reduce memory allocations during endpoint restore

test-me-please

Coverage increased (+0.02%) to 36.936% when pulling 23e7952887006e1cb3a144d1732c80635f7bb88b on pr/tklauser/ep-restore-reduce-alloc into 86729fb8a0bb81a2cb08e875a725a727380167cf on master.


fix: gecko_driver_path is needed in local firefox executions

Coverage: 80.781% (+0.1%) from 80.636% when pulling cedfb4950f2e125796b911ee0d2e0f0e5364414a on fix/local_firefox_driver into 57eff18a5964ec6f350127f2e1448e54230f4e83 on feat/upgrade_dependencies.