text:
How can we help?
I would like someone else to build the manifest.
Please read and ensure the following

[X] The installer meets the above requirements

Please provide the following information
Package Requested

[X] I would like someone else to build the manifest.
[ ] I would like help so I can submit the manifest.
[X] I have performed a search and couldn't find this package.
[X] I have checked that the installer for this package is not a standalone or portable executable or a .zip file
[ ] I think there is a new version available and I have provided the URL.

Please provide the following information

Download Page URI
https://www.asrock.com/feature/appshop/#:~:text=Size%20%09Description-,Download,-4.26MB%20%09APP%20Shop

Publisher
ASRock

Package Name
ASRock.AppShop

Description
  ASRock APP Shop is an all-in-one utility designed for system update and software downloading.

Package Version
2.0.0.4

Installer URI
https://download.asrock.com/Utility/Others/APPShop%28v2.0.0.4%29.zip from https://www.asrock.com/feature/appshop/dl.asp

Really weird ...
10:42:18 D:\...\winget-pkgs  [issues/160709 +1 ~0 -0 !] 48.044s pwsh> sudo winget install -m .\manifests\a\ASRock\AppShop\2.0.0.4\
已找到 APP Shop [ASRock.AppShop] 版本 2.0.0.4
此应用程序由其所有者授权给你。
Microsoft 对第三方程序包概不负责，也不向第三方程序包授予任何许可证。
正在下载 https://download.asrock.com/Utility/Others/APPShop(v2.0.0.4).zip
  ██████████████████████████████  4.26 MB / 4.26 MB
已成功验证安装程序哈希
正在提取存档...
已成功提取存档
正在启动程序包安装...
已成功安装

https://github.com/microsoft/winget-pkgs/issues/160709#issuecomment-2198413118

@Dragon1573, are you using an ASRock motherboard? I've not had that error, but I am using one.

@Dragon1573, are you using an ASRock motherboard?

Nope ... None of my device use this motherboard.
Is ASRock motherboard required? If it is, the issue should be closed as not planned because it will never pass the validation pipelines hosted on Microsoft Azure.
Issue should be marked with Blocking-Issue and Hardware.

https://github.com/microsoft/winget-pkgs/issues/160709#issuecomment-2198500963

@Dragon1573, I don't know whether it does. However, this is a quite important vendor firmware updater, so it should probably be considered based upon the fact that the motherboard itself prompts the user to install it the moment that Windows is first configured - it solely being available from their website is going to cause people to accidentally install malware from similar websites higher in Google's search rankings.

Do you have any other devices with non-ASRock baseboard? Could you please check if this baseboard is required for running ASRock.AppShop?

[!NOTE]
My device is a laptop bought from HUAWEI. Some packages (such as Huawei.AppGallery and Huawei.HuaweiMobileCloud) are integrated to the initial OS image and support features only available for HUAWEI hardware.
In your situation, it would be better integrate to the OS image than asking users to install themselves. Or, provide the official link directly to users instead of asking users to search themselves.

https://github.com/microsoft/winget-pkgs/issues/160709#issuecomment-2198558234

@Dragon1573, I think you quite severely underestimate what would be bureaucratically necessary to integrate this into Windows, and why that would be wholly undesirable. Irrespective, that shan't occur.
I do have another device with the exact same baseboard, and it indeed installs, but why do you ask - what does that prove?

Could you launch App Shop on that non-ASRock baseboard?
I do able to submit a manifest for this package, but I think it will mostly fail during validation.

@stephengillie , this package seems hard depends on a specific hardware (baseboard), how can we dig deeper? :pray:
I created a manifest and validated with Tools/SandboxTest.ps1, it can be successfully installed but unable to launch. Should we reject this package?

Currently, the PR mentioned above pass the automatic validation. Moderators of this repository will perform manual validation with this package on Azure VMs.
Currently no responses from them. Patience are needed.

Unfortunately, we're not able to satisfy the hardware requirement.

@RokeJulianLockhart, the hardware requirements is proved. I think we can closed this issue as "not planned".

https://github.com/microsoft/winget-pkgs/issues/160709#issuecomment-2200500590
https://github.com/microsoft/winget-pkgs/pull/160878#issuecomment-2200499702


text:
VS Code' Explorer menu item is not added

Installing VS Code using Winget does not add the menu item "open file in VS Code" to Explorer while it is added by default using the standalone installer.
As it is a very convenient feature, and other software like 7-Zip are added to the menu, it would be great to have this menu item added.

By default only PATH is checked so silent installer does in fact work correctly.

You can override this behavior by passing in additional parameters

winget install Microsoft.VisualStudioCode -e --override "/verysilent /suppressmsgboxes /tasks=!runCode,desktopicon,quicklaunchicon,addcontextmenufiles,addcontextmenufolders,associatewithfiles,addtopath"

Prepending tasks with ! disables them.

This is exactly what I am looking for; it works like a charm.
However, I think without any explanation, most users would miss this option. I don't even know how to get this list of tasks.

Tradeoff for silent install, not much that can be done unless VS Code team decides these default values should be changed. Tasks can be found in VS Code setup manifest. https://github.com/microsoft/vscode/blob/aa98d29af94188825cbe2cf32864f1f33dc90b6e/build/win32/code.iss#L75-L82

source: gharchive/issue

authors: GauthierPLM Xeevis

repo: microsoft/winget-pkgs

license: MIT

license_type: permissive

license_source: github-api


text:
New version: Brave.Brave.Nightly version 116.1.59.59

Pull request has been created with WinGet Automation :rocket:
Microsoft Reviewers: Open in CodeFlow

Reset PR

source: gharchive/pull-request


text:
New version: Caprine.Caprine version 2.59.0

Pull request has been created with WinGet Automation :rocket:
Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:


text:
Update Dell.CommandUpdate to 5.0.0

[X] Have you signed the Contributor License Agreement?
[X] Have you checked that there aren't other open pull requests for the same manifest update/change?
[X] This PR only modifies one (1) manifest
[ ] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[X] Does your manifest conform to the 1.5 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

I dont know where to continue here. Everything looks correct and the logs from the validation doesnt deliver any helpful output.

Wont be merged until https://github.com/microsoft/winget-cli/issues/1417
Therefore I close the PR for now.


text:
Add MSI installer: SpanishGovernment.Autofirma version 1.8.2

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] This PR only modifies one (1) manifest
[x] Have you validated your manifest locally with winget validate --manifest <path>?
[x] Have you tested your manifest locally with winget install --manifest <path>?
[x] Does your manifest conform to the 1.5 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

Hi @MaanuelMM,
This manifest adds Apps and Features entries that aren't present in previous PR versions. Should these entries also be added to the previous versions?
(Automated response - build 704.)

authors: MaanuelMM stephengillie


text:
Datadog.Agent version 7.49.1.1

[ ] Have you signed the Contributor License Agreement?
[ ] Have you checked that there aren't other open pull requests for the same manifest update/change?
[ ] This PR only modifies one (1) manifest
[ ] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[ ] Does your manifest conform to the 1.6 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

https://github.com/microsoft/winget-pkgs/pull/140580#issuecomment-1960619471


text:
New version: LinwoodCloud.Butterfly.Nightly version 2.1.0-beta.4

Pull request has been created with WinGet Releaser v2 :rocket:
Microsoft Reviewers: Open in CodeFlow

see https://github.com/microsoft/winget-pkgs/pull/146365#issuecomment-2019793680

Automatic Validation ended with:

2024-04-01 06:00:27.101 [FAIL] D:\a_work\1\s\external\pkg\src\AppInstallerRepositoryCore\RepositorySource.cpp(757)\WindowsPackageManager.dll!00007FFBD017C11F: (caller: 00007FFBCFF08D6F) LogHr(1) tid(604) 8A15005E     Msg:[D:\a_work\1\s\external\pkg\src\AppInstallerRepositoryCore\Rest\Schema\HttpClientHelper.cpp(30)\WindowsPackageManager.dll!00007FFBD0082B08: (caller: 00007FFBD012BC20) Exception(1) tid(604) 8A15005E ]
2024-04-01 06:00:27.102 [REPO] Failed to open available source: msstore
2024-04-01 06:00:34.675 [FAIL] D:\a_work\1\s\external\pkg\src\AppInstallerRepositoryCore\RepositorySource.cpp(757)\WindowsPackageManager.dll!00007FFBB8FBC11F: (caller: 00007FFBB8D48D6F) LogHr(1) tid(145c) 8A15005E     Msg:[D:\a_work\1\s\external\pkg\src\AppInstallerRepositoryCore\Rest\Schema\HttpClientHelper.cpp(30)\WindowsPackageManager.dll!00007FFBB8EC2B08: (caller: 00007FFBB8F6BC20) Exception(1) tid(145c) 8A15005E ]
2024-04-01 06:00:34.675 [REPO] Failed to open available source: msstore
2024-04-01 06:00:36.241 [CLI ] No suitable installer found for manifest Microsoft.VCRedist.2015+.x64 with version 14.38.33135.0

(Automated response - build 876.)

there is a newer pr at #148172

authors: CodeDoctorDE stephengillie


text:
New version: goreleaser.goreleaser-pro 1.25.1-pro

Checklist for Pull Requests

[x] Have you signed the Contributor License Agreement?
[ ] Is there a linked Issue?

Manifests

[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] This PR only modifies one (1) manifest
[x] Have you validated your manifest locally with winget validate --manifest <path>?
[x] Have you tested your manifest locally with winget install --manifest <path>?
[x] Does your manifest conform to the 1.6 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Automated with GoReleaser
Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:
(Automated response - build 876.)

@wingetbot waivers Add Validation-Executable-Error


text:
Remove version: GamaPlatform.GamaAlpha version 2024.03.0-2

[Automated] It returns code over 400 in all urls
Microsoft Reviewers: Open in CodeFlow

For moderators or/and anyone else

[!Caution]
As a result of several personal problems I've had over the last few months + my final exams coming up very soon, I'm currently unable to look at my GitHub notifications every day and maintain my executions correctly.
If you detect a certain problem on a certain pul request:

Either you can close the pull request directly without mentioning me.
Or you can send me a message on X (Twitter): @Exorcism0666

Thank you for your understanding, and I'm sorry if some pull requests can't be approved due to the situation I'm in.

This account is automated by Github Actions and the source code was created by CoolPlayLin. If you have any questions about any pull request, don't hesitate to ping Exorcism0666.

[!warning]
With the new version of Komac, numerous Pull Requests may contain bugs or unwanted elements. If such issues arise, please tag russellbanks so that these bugs can be addressed in future updates.

[!important]
Please carefully review these Pull Request before merging. If it is a Pull Request for removing incorrect content and the URLs are issue, free upon manual checking, please close this Pull Request directly. (It is best to inform Exorcism0666 of the closure.)

良い一日をお過ごしください！

URL: https://github.com/gama-platform/gama/releases/download/2024.03.0/GAMA_2024.03.0_Windows_with_JDK_13.03.24_bc34c22.exe
Response Error: The remote server returned an error: (404) Not Found.
(Automated message - build 910)


text:
New version: astral-sh.uv version 0.2.13

Pull request has been created with komac v2.2.1 :rocket:
Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:

Installation failed with exit code -1978335187
2024-06-18 18:13:05.814 [FAIL] Installer failed security check. Url: https://github.com/astral-sh/uv/releases/download/0.2.13/uv-x86_64-pc-windows-msvc.zip Result: 0x80004005
2024-06-18 18:12:30.349 [FAIL] Installer failed security check. Url: https://github.com/astral-sh/uv/releases/download/0.2.13/uv-x86_64-pc-windows-msvc.zip Result: 0x80004005

Automated error analysis suggests -1978335187 may mean Installer failed security check. Another script should retry this every 18 hours.
(Automated response - build 886.)

/azp run

/azp run

/azp run

authors: stephengillie tianyeeT


text:
Microsoft.VisualStudioCode.Insiders.CLI_v1.91.0 cli

Microsoft.VisualStudioCode.Insiders.CLI_v1.91.0
Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:

Installation failed with exit code -1978335187
2024-06-21 07:18:45.507 [FAIL] Installer failed security check. Url: https://vscode.download.prss.microsoft.com/dbazure/download/insider/63d06667600a2c40245a0ab1f9e2ea816d2fe849/vscode_cli_win32_x64_cli.zip Result: 0x80004005

Automated error analysis suggests -1978335187 may mean Installer failed security check. Another script should retry this every 18 hours.
(Automated response - build 886.)

/azp run

authors: lszomoru stephengillie


text:
ExodusMovmentInc.Exdus version 21.5.14

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] Have you validated your manifest locally with winget validate --manifest <path>?
[x] Have you tested your manifest locally with winget install --manifest <path>?
[x] Does your manifest conform to the 1.0 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

FYI, apparently, the Exodus Devs do not want Exodus on Winget.
https://github.com/microsoft/winget-pkgs/pull/14368#issuecomment-851539516

Oh sorry

https://github.com/microsoft/winget-pkgs/pull/14368#issuecomment-955732889

authors: Xanthus58 catdogmat kimjammer


text:
JanDeDobbeleer.OhMyPosh version 21.19.0

Checklist for Pull Requests

[ ] Have you signed the Contributor License Agreement?
[ ] Is there a linked Issue?

Manifests

[ ] Have you checked that there aren't other open pull requests for the same manifest update/change?
[ ] This PR only modifies one (1) manifest
[ ] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[ ] Does your manifest conform to the 1.6 schema?

Note: <path> is the directory's name containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

/azp run

https://github.com/microsoft/winget-pkgs/issues/142854


text:
New version: Oracle.MySQL version 8.0.38

Pull request has been created with komac v2.3.0 :rocket:
Microsoft Reviewers: Open in CodeFlow

/azp run

Automatic Validation ended with:

2024-07-06 08:41:35.402 [CLI ] No suitable installer found for manifest Microsoft.VCRedist.2015+.x64 with version 14.40.33810.0

(Automated response - build 886.)

https://github.com/microsoft/winget-pkgs/issues/152555


text:
Remove version: TheDocumentFoundation.LibreOffice.LTS version 7.4.4.2

EOL'd
Microsoft Reviewers: Open in CodeFlow

URL: https://downloadarchive.documentfoundation.org/libreoffice/old/7.4.4.2/win/x86_64/LibreOffice_7.4.4.2_Win_x64.msi
OK
(Automated message - build 911)

https://github.com/microsoft/winget-pkgs/issues/142854

authors: stephengillie vikingnope


text:
New version: Opera.Opera version 112.0.5197.24

Checklist for Pull Requests

[ ] Have you signed the Contributor License Agreement?
[ ] Is there a linked Issue?

Manifests

[ ] Have you checked that there aren't other open pull requests for the same manifest update/change?
[ ] This PR only modifies one (1) manifest
[ ] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[ ] Does your manifest conform to the 1.6 schema?

Note: <path> is the directory's name containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

[Policy] Needs-Manual-Merge

https://github.com/microsoft/winget-pkgs/issues/142854

authors: SpecterShell mdanish-kh


text:
New version: CloudFoundry.CLI.v8 version 8.7.8

Checklist for Pull Requests

[x] Have you signed the Contributor License Agreement?
[x] Is there a linked Issue?

Manifests

[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] This PR only modifies one (1) manifest
[x] Have you validated your manifest locally with winget validate --manifest <path>?
[x] Have you tested your manifest locally with winget install --manifest <path>?
[x] Does your manifest conform to the 1.6 schema?

Note: <path> is the directory's name containing the manifest you're submitting.

Closes #163401
Microsoft Reviewers: Open in CodeFlow

https://github.com/microsoft/winget-pkgs/issues/142854

authors: SayakMukhopadhyay stephengillie


text:
Remove version: Tableau.PrepBuilder version 24.1.33422

[Automated] It returns code over 400 in all urls
Microsoft Reviewers: Open in CodeFlow

For moderators or/and anyone else

[!Caution]
As a result of several personal problems I've had over the last few months + my final exams coming up very soon, I'm currently unable to look at my GitHub notifications every day and maintain my executions correctly.
If you detect a certain problem on a certain pul request:

Either you can close the pull request directly without mentioning me.
Or you can send me a message on X (Twitter): @Exorcism0666

Thank you for your understanding, and I'm sorry if some pull requests can't be approved due to the situation I'm in.

This account is automated by Github Actions and the source code was created by CoolPlayLin. If you have any questions about any pull request, don't hesitate to ping Exorcism0666.

[!warning]
With the new version of Komac, numerous Pull Requests may contain bugs or unwanted elements. If such issues arise, please tag russellbanks so that these bugs can be addressed in future updates.

[!important]
Please carefully review these Pull Request before merging. If it is a Pull Request for removing incorrect content and the URLs are issue, free upon manual checking, please close this Pull Request directly. (It is best to inform Exorcism0666 of the closure.)

良い一日をお過ごしください！

URL: https://downloads.tableau.com/esdalt/tableau_prep/2024.1.1/TableauPrep-2024-1-1.exe
Response Error: The remote server returned an error: (403) Forbidden.
(Automated message - build 912)


text:
Update: Adobe.CreativeCloud version 6.3.0.207

Created by 🥟 Dumplings in workflow run #7293.

Log
Submitting WinGet manifests
Found existing pull requests:
New version: Adobe.CreativeCloud version 6.3.0.207 - https://github.com/microsoft/winget-pkgs/pull/161277
This task is configured to ignore existing pull requests
Creating manifests
Uploading manifests and making commits
Creating a pull request

Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:

(Automated response - build 887.)

Close with reason: Duplicate of #167448;

authors: spectopo stephengillie


text:
Move Radmin.VPN 1.1.4395 to Famatech.RadminVPN 1.1.4395

Microsoft Reviewers: Open in CodeFlow

Possible duplicate package entry.
Similar installer SHA256 hash found in manifest:

InstallerSha256: 828e267d7ef28eed64b6fe452f9e47269b309527470d72a0d5f84eb385795d54

manifests\r\Radmin\VPN\1.1.4395

Verify by hash.

authors: SpecterShell stephengillie


text:
New version: Zoom.ZoomRooms version 6.1.10

Pull request has been created with komac v2.3.0 :rocket:
Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:

Installation failed with exit code -1978335226
2024-08-26 15:11:59.171 [CLI ] ShellExecute installer failed: 1

Automated error analysis suggests -1978335226 may mean Running ShellExecute failed
(Automated response - build 888.)

authors: PckgrBot stephengillie


text:
Remove version: NumeRe.NumeRe version 1.1.3

[Automated] It returns code over 400 in all urls
Microsoft Reviewers: Open in CodeFlow

URL: https://sourceforge.net/projects/numere/files/Stable Release/numere-win-v113.exe/download
Status Code: 200
(Automated message - build 896)

Close with reason: Package still available.;


text:
iTop.iTopEasyDesktop version 2.7.1.12

Checklist for Pull Requests

[x] Have you signed the Contributor License Agreement?
[x] Is there a linked Issue?
Closes #196027

Manifests

[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] This PR only modifies one (1) manifest
[x] Have you validated your manifest locally with winget validate --manifest <path>?
[x] Have you tested your manifest locally with winget install --manifest <path>?
[ ] Does your manifest conform to the 1.9 schema?

Note: <path> is the directory's name containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

This may need to be verified manually.

@wingetbot run

Hi @stephengillie,
Would you mind to check this package manually? This is already going on months without an update.

Superseded by #197593

authors: ItzLevvie KarbitsCode


text:
New version: Microsoft.Edge.Beta version 98.0.1108.33

ARP entries are correct.
Auto-updated by vedantmgoyal2009/winget-pkgs-automation in workflow run 2047
Microsoft Reviewers: Open in CodeFlow

🤷♂


text:
New version: Microsoft.OneDrive version 22.012.0117.0003

[X] Have you signed the Contributor License Agreement?
[X] Have you checked that there aren't other open pull requests for the same manifest update/change?
[X] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[x] Does your manifest conform to the 1.0 schema?

Microsoft Reviewers: Open in CodeFlow

@wingetbot waivers Add Validation-Installation-Error

-_-

authors: ImJoakim zachcarp


text:
New version: Liberica JDK18 18.0.0.37

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] Have you validated your manifest locally with winget validate --manifest <path>?
[x] Have you tested your manifest locally with winget install --manifest <path>?
[x] Does your manifest conform to the 1.0 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

@wingetbot waivers Add Validation-Domain

authors: PakhomGolynga yao-msft


text:
Update Canva.Canva 1.50.0

null
Microsoft Reviewers: Open in CodeFlow

@wingetbot run

authors: ItzLevvie Trenly


text:
New version: pnpm.pnpm version 7.26.3

pnpm.pnpm 7.26.3
Previous version: 7.26.2

Duplicate of #95215

Duplicate of #95215

Thanks for letting me know @sitiom - hadn't realised pnpm was being automated now. This PR does have more metadata (you can add that to the other PR if you want) but I'll close in favour of that one. WinGet Releaser intends to use Komac as a backend in the near future so it will have the extra metadata later on.

The only extra field I see here is the ReleaseNotes, but it would be great to have extra metadata

The only extra field I see here is the ReleaseNotes, but it would be great to have extra metadata

1.4.0 Schemas are being accepted now, but that's not mandatory to change; WinGet Releaser still creates 1.2.0 schemas currently. The Release Notes would be nice to add though :)

authors: russellbanks sitiom


text:
Testing other dialogues

Hello,
We have a fairly complex bot set up with many dialogues, middleware, etc... I'd love a simple way of having a set of questions and answers that i can run through this test harness, but it appears as though every dialogue in the documentation is created inside of the harness. Is it straightforward to have the harness use the full extent of dialogues we've created?
Thanks

It absolutely can! The tests were simple to demonstrate usage.
If it's possible, I would create a clean instance of the bot for each test or collection of related tests, however this isn't absolutely necessary.
If you want a full e2e test of a dialog, you could run an example like this:
suppose you want to test the restaurant selection of the following dialog
user: Hello
bot: Hi there! What can I help you with?
user: I'd like to book a reservation
bot: awesome!, for what date and time?
user: May 29th at 7pm
bot: Got it! Now what restaurant would you like
user: <RESPONSE GOES HERE>
// bot then verifies restaurant here
you could have a function that builds the conversation to that point and seed the relevant test with that.
Try running some simple tests with your existing bot to get a feel for what it takes to test certain facets of your bot. It should be relatively straightforward.
Lmk if this helps or you need any further insight.

Hey Matthew,
Thanks for getting back to me. I've gotten some simple tests running and it
looks great. I'm struggling to find a way to use a separate file containing
my test scripts though. Have you done this and if so what would it look
like?
Thank you,
Mike
On Wed, May 9, 2018 at 4:11 PM, Matthew Schwartz notifications@github.com
wrote:

Closed #77 https://github.com/microsoftly/BotTester/issues/77.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/microsoftly/BotTester/issues/77#event-1618479240, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AWQn0rSoNoZFB7N1EtxY6_QMSYrG57UEks5tw016gaJpZM4T3Tar
.

What do you mean by separate the file containing your tests? From what are you separating it?

ahh. Yes. Here's a typescript snippet of a test data provider I wrote for a customer-agent handoff library
const bot = {
    id: 'bot',
    name: 'Bot'
};

const channelId = 'test';
const AGENT_1_USER: IIdentity = {
    id: 'agent1Id',
    name: 'agent1'
};

const AGENT_2_USER: IIdentity = {
    id: 'agent2Id',
    name: 'agent2'
};

const AGENT_1_CONVO_1: IAddress = {
    bot,
    channelId,
    user: AGENT_1_USER,
    conversation: {
        id: 'agent1Convo1'
    }
};

const AGENT_1_CONVO_2: IAddress = {
    bot,
    channelId,
    user: AGENT_1_USER,
    conversation: {
        id: 'agent1Convo2'
    }
};

const AGENT_2_CONVO_1: IAddress = {
    bot,
    channelId,
    user: AGENT_2_USER,
    conversation: {
        id: 'agent2Convo1'
    }
};

const AGENT_2_CONVO_2: IAddress = {
    bot,
    channelId,
    user: AGENT_2_USER,
    conversation: {
        id: 'agent2Convo2'
    }
};

const CUSTOMER_1: IAddress = {
    bot,
    channelId,
    user: {
        id: 'customer1Id',
        name: 'customer1'
    },
    conversation: {
        id: 'customer1ConvoId'
    }
};

const CUSTOMER_2: IAddress = {
    bot,
    channelId,
    user: {
        id: 'customer2Id',
        name: 'customer2'
    },
    conversation: {
        id: 'customer2ConvoId'
    }
};

const CUSTOMER_1_MESSAGE_1 = new Message()
    .text('customer 1 FIRST message')
    .address(CUSTOMER_1)
    .toMessage();

const CUSTOMER_2_MESSAGE_1 = new Message()
    .text('customer 2 FIRST message')
    .address(CUSTOMER_2)
    .toMessage();

const CUSTOMER_1_MESSAGE_2 = new Message()
    .text('customer 1 SECOND message')
    .address(CUSTOMER_1)
    .toMessage();

const CUSTOMER_2_MESSAGE_2 = new Message()
    .text('customer 2 SECOND message')
    .address(CUSTOMER_2)
    .toMessage();

const CUSTOMER_1_MESSAGE_3 = new Message()
    .text('customer 1 THIRD message')
    .address(CUSTOMER_1)
    .toMessage();

const CUSTOMER_2_MESSAGE_3 = new Message()
    .text('customer 2 THIRD message')
    .address(CUSTOMER_2)
    .toMessage();

const AGENT_1_CONVO_1_MESSAGE_1 = new Message()
    .text('agent 1 convo 1 FIRST message')
    .address(AGENT_1_CONVO_1)
    .toMessage();

const AGENT_1_CONVO_2_MESSAGE_1 = new Message()
    .text('agent 1 convo 2 FIRST message')
    .address(AGENT_1_CONVO_2)
    .toMessage();

const AGENT_2_CONVO_1_MESSAGE_1 = new Message()
    .text('agent 2 convo 1 FIRST message')
    .address(AGENT_2_CONVO_1)
    .toMessage();

const AGENT_2_CONVO_2_MESSAGE_1 = new Message()
    .text('agent 2 convo 2 FIRST message')
    .address(AGENT_2_CONVO_2)
    .toMessage();

const AGENT_1_CONVO_1_MESSAGE_2 = new Message()
    .text('agent 1 convo 1 SECOND message')
    .address(AGENT_1_CONVO_1)
    .toMessage();

const AGENT_1_CONVO_2_MESSAGE_2 = new Message()
    .text('agent 1 convo 2 SECOND message')
    .address(AGENT_1_CONVO_2)
    .toMessage();

const AGENT_2_CONVO_1_MESSAGE_2 = new Message()
    .text('agent 2 convo 1 SECOND message')
    .address(AGENT_2_CONVO_1)
    .toMessage();

const AGENT_2_CONVO_2_MESSAGE_2 = new Message()
    .text('agent 2 convo 2 SECOND message')
    .address(AGENT_2_CONVO_2)
    .toMessage();

const AGENT_1_CONVO_1_MESSAGE_3 = new Message()
    .text('agent 1 convo 1 THIRD message')
    .address(AGENT_1_CONVO_1)
    .toMessage();

const AGENT_1_CONVO_2_MESSAGE_3 = new Message()
    .text('agent 1 convo 2 THIRD message')
    .address(AGENT_1_CONVO_2)
    .toMessage();

const AGENT_2_CONVO_1_MESSAGE_3 = new Message()
    .text('agent 2 convo 1 THIRD message')
    .address(AGENT_2_CONVO_1)
    .toMessage();

const AGENT_2_CONVO_2_MESSAGE_3 = new Message()
    .text('agent 2 convo 2 THIRD message')
    .address(AGENT_2_CONVO_2)
    .toMessage();

export function getExpectedReceivedMessage(originalMessage: IMessage, expectedAddress: IAddress): IMessage {
    return Object.assign({}, originalMessage, { address: expectedAddress });
}

// tslint:disable
// I'm too lazy to build the return type for this ...
function getCustomerEventMessages(customerAddress: IAddress) {
// tslint:enable
    return {
        toQueue: new QueueEventMessage(customerAddress),
        toDequeue: new DequeueEventMessage(customerAddress)
    };
}

//tslint:disable
// I'm too lazy to type out the return type
function getAgentEventMessagesForConversation(convoAddress: IAddress) {
//tslint:enable
    return {
        toConnectTo: {
            customer1: new ConnectEventMessage(CUSTOMER_1, convoAddress),
            customer2: new ConnectEventMessage(CUSTOMER_2, convoAddress)
        },
        toDisconnectFrom: {
            customer1: new DisconnectEventMessage(CUSTOMER_1, convoAddress),
            customer2: new DisconnectEventMessage(CUSTOMER_2, convoAddress)
        },
        toWatch: {
            customer1: new WatchEventMessage(CUSTOMER_1, convoAddress),
            customer2: new WatchEventMessage(CUSTOMER_2, convoAddress)
        },
        toUnwatch: {
            customer1: new UnwatchEventMessage(CUSTOMER_1, convoAddress),
            customer2: new UnwatchEventMessage(CUSTOMER_2, convoAddress)
        }
    };
}

export const agent1 = {
    user: AGENT_1_USER,

    convo1: {
        address: AGENT_1_CONVO_1,

        message1: AGENT_1_CONVO_1_MESSAGE_1,
        message2: AGENT_1_CONVO_1_MESSAGE_2,
        message3: AGENT_1_CONVO_1_MESSAGE_3,

        eventMessage: getAgentEventMessagesForConversation(AGENT_1_CONVO_1)
    },

    convo2: {
        address: AGENT_1_CONVO_2,

        message1: AGENT_1_CONVO_2_MESSAGE_1,
        message2: AGENT_1_CONVO_2_MESSAGE_2,
        message3: AGENT_1_CONVO_2_MESSAGE_3,

        eventMessage: getAgentEventMessagesForConversation(AGENT_1_CONVO_2)
    }
};

export const agent2 = {
    user: AGENT_2_USER,

    convo1: {
        address: AGENT_2_CONVO_1,

        message1: AGENT_2_CONVO_1_MESSAGE_1,
        message2: AGENT_2_CONVO_1_MESSAGE_2,
        message3: AGENT_2_CONVO_1_MESSAGE_3,

        eventMessage: getAgentEventMessagesForConversation(AGENT_2_CONVO_1)
    },

    convo2: {
        address: AGENT_2_CONVO_2,

        message1: AGENT_2_CONVO_2_MESSAGE_1,
        message2: AGENT_2_CONVO_2_MESSAGE_2,
        message3: AGENT_2_CONVO_2_MESSAGE_3,

        eventMessage: getAgentEventMessagesForConversation(AGENT_2_CONVO_2)
    }
};

export const customer1 = {
    address: CUSTOMER_1,

    message1: CUSTOMER_1_MESSAGE_1,
    message2: CUSTOMER_1_MESSAGE_2,
    message3: CUSTOMER_1_MESSAGE_3,

    eventMessage: getCustomerEventMessages(CUSTOMER_1)
};

export const customer2 = {
    address: CUSTOMER_2,

    message1: CUSTOMER_2_MESSAGE_1,
    message2: CUSTOMER_2_MESSAGE_2,
    message3: CUSTOMER_2_MESSAGE_3,

    eventMessage: getCustomerEventMessages(CUSTOMER_2)
};

I use it like this:
    it('can handover to agents', async () => {
        await new BotTester(bot, { defaultAddress: TestDataProvider.customer1.address })
            .sendMessageToBotIgnoringResponseOrder(
                new ConnectEventMessage(TestDataProvider.customer1.address, TestDataProvider.agent1.convo1.address))
                .wait(EVENT_DELAY)
            .sendMessageToBot(
                TestDataProvider.agent1.convo1.message1,
                TestDataProvider.getExpectedReceivedMessage(TestDataProvider.agent1.convo1.message1, TestDataProvider.customer1.address))
            .sendMessageToBot(
                TestDataProvider.customer1.message2,
                TestDataProvider.getExpectedReceivedMessage(TestDataProvider.customer1.message2, TestDataProvider.agent1.convo1.address)
            )
            .runTest()
            .then(() => providerSpy.getAllConversations())
            .then((convos: IConversation[]) => {
                convos.forEach((convo: IConversation) => {
                    expect(convo.transcript).not.to.be.empty;
                });
            });
    });

Hmmm, You'll have to pardon me, my node is still fresh. Here's what I've
been trying to build so far. Maybe that'll help give you an idea of what
we're doing.
My Checker
function testBot(bot, messages, done) {
function checkStep(message) {
if(count < end -1) {
bot.sendMessageToBot(message.in,message.out)
console.log('THIS IS THE MESSAGE' + JSON.stringify(message))
} else {
console.log('ENDING THE ADDING')
bot.sendMessageToBot(message.in,message.out)
bot.runTest()
}
}
end = messages.length
count = 0
for(let i in messages) {
msg = messages[i]
console.log('count ' + count)
console.log('end ' + end)
console.log(count < end)
checkStep(msg)
count = count += 1
}
}
module.exports = {
testBot
};
My main file
const connector = new builder.ConsoleConnector()
describe('BotTester', () => {
before(function(done) {
Utils.populateMaps()
delay(12000)
.then(() => {
done();
})
})
bot = TestingBot.create(connector)
it('Testing stuff', () => {
const botTesterOptions = {
// the assertionLibrary field can be set in the bot-tester.json, but the
default is mocha/chai. It can be omitted if the desired assertion library
to use is chai.
assertionLibrary: 'chai',
// testContext is not used for chai expectations
}
const botTester = new BotTester(bot, botTesterOptions)
// .sendMessageToBot('jira orange tradeweb','Jira system:
https://support.iontrading.com/rest/api/2/search?jql=JQL: project in
("FICS") and cf[10021] in ("tradeweb")')
// return botTester.runTest()
testTools.testBot(botTester,newTest)
});
});
and How I'm reading in my test cases
module.exports = [
{
'in':'jira orange tradeweb',
'out':"Jira system: https://support.iontrading.com/rest/api/2/search?jql=JQL:
project in (FICS) and cf[10021] in (tradeweb)"
},
{
'in':'hello',
'out':'Hfowdy.'
}
]
Its running the test, but passing every time. Its not actually running my
cases.
Thanks,
Mike
On Fri, May 11, 2018 at 2:12 PM, Matthew Schwartz notifications@github.com
wrote:

ahh. Yes. Here's a typescript snippet of a test data provider I wrote for
a customer-agent handoff library
const bot = {
id: 'bot',
name: 'Bot'
};
const channelId = 'test';const AGENT_1_USER: IIdentity = {
id: 'agent1Id',
name: 'agent1'
};
const AGENT_2_USER: IIdentity = {
id: 'agent2Id',
name: 'agent2'
};
const AGENT_1_CONVO_1: IAddress = {
bot,
channelId,
user: AGENT_1_USER,
conversation: {
id: 'agent1Convo1'
}
};
const AGENT_1_CONVO_2: IAddress = {
bot,
channelId,
user: AGENT_1_USER,
conversation: {
id: 'agent1Convo2'
}
};
const AGENT_2_CONVO_1: IAddress = {
bot,
channelId,
user: AGENT_2_USER,
conversation: {
id: 'agent2Convo1'
}
};
const AGENT_2_CONVO_2: IAddress = {
bot,
channelId,
user: AGENT_2_USER,
conversation: {
id: 'agent2Convo2'
}
};
const CUSTOMER_1: IAddress = {
bot,
channelId,
user: {
id: 'customer1Id',
name: 'customer1'
},
conversation: {
id: 'customer1ConvoId'
}
};
const CUSTOMER_2: IAddress = {
bot,
channelId,
user: {
id: 'customer2Id',
name: 'customer2'
},
conversation: {
id: 'customer2ConvoId'
}
};
const CUSTOMER_1_MESSAGE_1 = new Message()
.text('customer 1 FIRST message')
.address(CUSTOMER_1)
.toMessage();
const CUSTOMER_2_MESSAGE_1 = new Message()
.text('customer 2 FIRST message')
.address(CUSTOMER_2)
.toMessage();
const CUSTOMER_1_MESSAGE_2 = new Message()
.text('customer 1 SECOND message')
.address(CUSTOMER_1)
.toMessage();
const CUSTOMER_2_MESSAGE_2 = new Message()
.text('customer 2 SECOND message')
.address(CUSTOMER_2)
.toMessage();
const CUSTOMER_1_MESSAGE_3 = new Message()
.text('customer 1 THIRD message')
.address(CUSTOMER_1)
.toMessage();
const CUSTOMER_2_MESSAGE_3 = new Message()
.text('customer 2 THIRD message')
.address(CUSTOMER_2)
.toMessage();
const AGENT_1_CONVO_1_MESSAGE_1 = new Message()
.text('agent 1 convo 1 FIRST message')
.address(AGENT_1_CONVO_1)
.toMessage();
const AGENT_1_CONVO_2_MESSAGE_1 = new Message()
.text('agent 1 convo 2 FIRST message')
.address(AGENT_1_CONVO_2)
.toMessage();
const AGENT_2_CONVO_1_MESSAGE_1 = new Message()
.text('agent 2 convo 1 FIRST message')
.address(AGENT_2_CONVO_1)
.toMessage();
const AGENT_2_CONVO_2_MESSAGE_1 = new Message()
.text('agent 2 convo 2 FIRST message')
.address(AGENT_2_CONVO_2)
.toMessage();
const AGENT_1_CONVO_1_MESSAGE_2 = new Message()
.text('agent 1 convo 1 SECOND message')
.address(AGENT_1_CONVO_1)
.toMessage();
const AGENT_1_CONVO_2_MESSAGE_2 = new Message()
.text('agent 1 convo 2 SECOND message')
.address(AGENT_1_CONVO_2)
.toMessage();
const AGENT_2_CONVO_1_MESSAGE_2 = new Message()
.text('agent 2 convo 1 SECOND message')
.address(AGENT_2_CONVO_1)
.toMessage();
const AGENT_2_CONVO_2_MESSAGE_2 = new Message()
.text('agent 2 convo 2 SECOND message')
.address(AGENT_2_CONVO_2)
.toMessage();
const AGENT_1_CONVO_1_MESSAGE_3 = new Message()
.text('agent 1 convo 1 THIRD message')
.address(AGENT_1_CONVO_1)
.toMessage();
const AGENT_1_CONVO_2_MESSAGE_3 = new Message()
.text('agent 1 convo 2 THIRD message')
.address(AGENT_1_CONVO_2)
.toMessage();
const AGENT_2_CONVO_1_MESSAGE_3 = new Message()
.text('agent 2 convo 1 THIRD message')
.address(AGENT_2_CONVO_1)
.toMessage();
const AGENT_2_CONVO_2_MESSAGE_3 = new Message()
.text('agent 2 convo 2 THIRD message')
.address(AGENT_2_CONVO_2)
.toMessage();
export function getExpectedReceivedMessage(originalMessage: IMessage, expectedAddress: IAddress): IMessage {
return Object.assign({}, originalMessage, { address: expectedAddress });
}
// tslint:disable// I'm too lazy to build the return type for this ...function getCustomerEventMessages(customerAddress: IAddress) {// tslint:enable    return {
toQueue: new QueueEventMessage(customerAddress),
toDequeue: new DequeueEventMessage(customerAddress)
};
}
//tslint:disable// I'm too lazy to type out the return typefunction getAgentEventMessagesForConversation(convoAddress: IAddress) {//tslint:enable    return {
toConnectTo: {
customer1: new ConnectEventMessage(CUSTOMER_1, convoAddress),
customer2: new ConnectEventMessage(CUSTOMER_2, convoAddress)
},
toDisconnectFrom: {
customer1: new DisconnectEventMessage(CUSTOMER_1, convoAddress),
customer2: new DisconnectEventMessage(CUSTOMER_2, convoAddress)
},
toWatch: {
customer1: new WatchEventMessage(CUSTOMER_1, convoAddress),
customer2: new WatchEventMessage(CUSTOMER_2, convoAddress)
},
toUnwatch: {
customer1: new UnwatchEventMessage(CUSTOMER_1, convoAddress),
customer2: new UnwatchEventMessage(CUSTOMER_2, convoAddress)
}
};
}
export const agent1 = {
user: AGENT_1_USER,
convo1: {
    address: AGENT_1_CONVO_1,

    message1: AGENT_1_CONVO_1_MESSAGE_1,
    message2: AGENT_1_CONVO_1_MESSAGE_2,
    message3: AGENT_1_CONVO_1_MESSAGE_3,

    eventMessage: getAgentEventMessagesForConversation(AGENT_1_CONVO_1)
},

convo2: {
    address: AGENT_1_CONVO_2,

    message1: AGENT_1_CONVO_2_MESSAGE_1,
    message2: AGENT_1_CONVO_2_MESSAGE_2,
    message3: AGENT_1_CONVO_2_MESSAGE_3,

    eventMessage: getAgentEventMessagesForConversation(AGENT_1_CONVO_2)
}

};
export const agent2 = {
user: AGENT_2_USER,
convo1: {
    address: AGENT_2_CONVO_1,

    message1: AGENT_2_CONVO_1_MESSAGE_1,
    message2: AGENT_2_CONVO_1_MESSAGE_2,
    message3: AGENT_2_CONVO_1_MESSAGE_3,

    eventMessage: getAgentEventMessagesForConversation(AGENT_2_CONVO_1)
},

convo2: {
    address: AGENT_2_CONVO_2,

    message1: AGENT_2_CONVO_2_MESSAGE_1,
    message2: AGENT_2_CONVO_2_MESSAGE_2,
    message3: AGENT_2_CONVO_2_MESSAGE_3,

    eventMessage: getAgentEventMessagesForConversation(AGENT_2_CONVO_2)
}

};
export const customer1 = {
address: CUSTOMER_1,
message1: CUSTOMER_1_MESSAGE_1,
message2: CUSTOMER_1_MESSAGE_2,
message3: CUSTOMER_1_MESSAGE_3,

eventMessage: getCustomerEventMessages(CUSTOMER_1)

};
export const customer2 = {
address: CUSTOMER_2,
message1: CUSTOMER_2_MESSAGE_1,
message2: CUSTOMER_2_MESSAGE_2,
message3: CUSTOMER_2_MESSAGE_3,

eventMessage: getCustomerEventMessages(CUSTOMER_2)

};
I use it like this:
it('can handover to agents', async () => {
    await new BotTester(bot, { defaultAddress: TestDataProvider.customer1.address })
        .sendMessageToBotIgnoringResponseOrder(
            new ConnectEventMessage(TestDataProvider.customer1.address, TestDataProvider.agent1.convo1.address))
            .wait(EVENT_DELAY)
        .sendMessageToBot(
            TestDataProvider.agent1.convo1.message1,
            TestDataProvider.getExpectedReceivedMessage(TestDataProvider.agent1.convo1.message1, TestDataProvider.customer1.address))
        .sendMessageToBot(
            TestDataProvider.customer1.message2,
            TestDataProvider.getExpectedReceivedMessage(TestDataProvider.customer1.message2, TestDataProvider.agent1.convo1.address)
        )
        .runTest()
        .then(() => providerSpy.getAllConversations())
        .then((convos: IConversation[]) => {
            convos.forEach((convo: IConversation) => {
                expect(convo.transcript).not.to.be.empty;
            });
        });
});

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/microsoftly/BotTester/issues/77#issuecomment-388443256,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AWQn0sswhFe-Jwp16XC_byWe19tKBMAfks5txdSogaJpZM4T3Tar
.

Would you mind formatting? I'm having trouble reading it in it's current layout

authors: Stikemanley microsoftly

repo: microsoftly/BotTester

license: mit

license_source: bigquery


text:
"redirect" causes "Rack::Lint::LintError at /file.erb, a header value must be a String, but the value of 'Content-Type' is a NilClass"

I have this line in index.erb:
<% redirect("ok.erb") %>
which produces the error documented below.
@dblock @rkh @rtomayko could you please help me fix this. It seems that @migrs is no longer mantaining this repository :( Possibly it has to do with changes in new Ruby versions?
I'm on Windows 7 64bit running ruby 2.3.0p0 (2015-12-25 revision 53290) [x64-mingw32] and rack-server-pages 0.0.6.
Thanks!
Rack::Lint::LintError at /index.erb
a header value must be a String, but the value of 'Content-Type' is a NilClass

c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/lint.rb: in assert
          raise LintError, message...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/lint.rb: in block in check_headers
        assert("a header value must be a String, but the value of " +...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/utils.rb: in block in each
          yield(k, v.respond_to?(:to_ary) ? v.to_ary.join("\n") : v)...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/utils.rb: in each
        super do |k, v|...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/utils.rb: in each
        super do |k, v|...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/lint.rb: in check_headers
      header.each { |key, value|...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/lint.rb: in _call
      check_headers headers...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/lint.rb: in call
      dup._call(env)...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/showexceptions.rb: in call
      @app.call(env)...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/commonlogger.rb: in call
      status, header, body = @app.call(env)...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/chunked.rb: in call
      status, headers, body = @app.call(env)...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/content_length.rb: in call
      status, headers, body = @app.call(env)...
c:/Ruby/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb: in service
        status, headers, body = @app.call(env)...
c:/Ruby/lib/ruby/2.3.0/webrick/httpserver.rb: in service
      si.service(req, res)...
c:/Ruby/lib/ruby/2.3.0/webrick/httpserver.rb: in run
          server.service(req, res)...
c:/Ruby/lib/ruby/2.3.0/webrick/server.rb: in block in start_thread
          block ? block.call(sock) : run(sock)

Sorry I barely used rack-server-pages, don't have the bandwidth to dig this up.

@dblock ok but thinking of it again, it's seems more a Rack problem, I also opened an issue there https://github.com/rack/rack/issues/1076 dunno if it makes it more relevant to you but thanks anyway!

So, in a older rack-server-pages application I used to do:
redirect("page.erb")
but I found that now it only works with:
request.redirect("page.erb")
Not sure this a bug or some naive mistake I'm doing...

authors: dblock jjgh

repo: migrs/rack-server-pages


text:
Automatically generate migrations

I am currently trying to get the auto-generate to work. I have orientated myself on your examples in the retrofun repo.
However, the migration files are always empty and look like this:
from alembic import op
import sqlalchemy as sa

# revision identifiers, used by Alembic.
revision = '27b94fadbd77'
down_revision = None
branch_labels = None
depends_on = None

def upgrade(engine_name: str) -> None:
    globals()["upgrade_%s" % engine_name]()

def downgrade(engine_name: str) -> None:
    globals()["downgrade_%s" % engine_name]()

def upgrade_() -> None:
    pass

def downgrade_() -> None:
    pass

I proceeded as described in the documentation and first initialized with python -m alchemical.alembic.cli init migrations alembic and then tried to create a migration with alembic revision --autogenerate -m "Initial migration".
I have also adjusted the alchemical_db variable accordingly.
Am I missing something?

An empty migration means that the models and the database have the same contents, so my guess is that you have already configured your database and now alembic finds nothing needs to be migrated.

the database is empty :/

If that is true, then for alembic to make an empty migration your database metadata must be empty as well.

I'm not quite sure what you mean.
What I have done so far is in the extensions.py I created Alchemical as variable db and then initialized it in the app.py via the init_app method.
from alchemical.flask import Alchemical

db = Alchemical()

def launch():
    """Create a Flask app."""

    app = Flask(__name__)

    app.config["AMQP_QUEUE"] = "amqp://rabbitmq"
    app.config["ALCHEMICAL_DATABASE_URI"] = "mysql://root:root@mysql/tech"

    configure_blueprints(app)
    configure_extensions(app)

    return app

 # snip

 def configure_extensions(app: ButterflyQuart):
    queue.init_app(app)
    db.init_app(app)

Then I created a class Language in models.py, which inherits from db.Model.
from webapp.extensions import db
import sqlalchemy.orm as so
import sqlalchemy as sa

class Language(db.Model):
    __tablename__ = "languages"

    id: so.Mapped[int] = so.mapped_column(primary_key=True)
    name: so.Mapped[str] = so.mapped_column(sa.String(32), index=True, unique=True)

This last step, is what you mean by "Make sure you import your models so that they are seen by SQLAlchemy and Alembic"?

Your models are in models.py. If no other modules import models.py, then your models will not be known. I hope this is clear, the models that you have in models.py have to be imported somewhere, because if nobody imports them, then it is as if they don't exist.
Try adding an import models in your env.py file.

ahh... I see. But there is a place where this is imported. in api/init.py
(and api is imported into the app.py file to be used as a blueprint.)
from quart import Blueprint
from webapp.models import Language
import sqlalchemy as sa
from webapp.extensions import db

api = Blueprint("api", __name__, url_prefix="/api")

@api.route("/test")
async def api_test():
    query = sa.select(Language)

    result = await db.session.execute(query)
    result = result.scalar_one()

    return result.name

I also tried to import the models.py in the env.py file, but that did not change anything.

I am out of ideas then. Try Alembic on its own (without the Alchemical's init command) to determine if the problem is in Alembic or Alchemical. Then submit a small example project to Alembic or myself depending on the results.

Thanks for the help!
I'll get back to you as soon as I've found something out.

Could it be a problem that the flask is initialized via the launch function and the config value for ALCHEMICAL_DATABASE_URI is set at that time?
As far as I understand correctly, the db variable from the extensions.py is imported by alembic. But the factory function is not called and therefore not the config parameter. Right?
So alembic can not look into the database at all or?

I guess it could be, but if Alembic does not know what the database is I would expect it would error, not just tell you there's nothing to migrate.
It's easy enough to confirm, right? Just call your factory function in env.py, for example, and that should fix the problem is this is the issue.

I would also have thought that there would be an error. But calling the factory function actually solves it.
I would see if I can find a nicer solution for this. If I find something, would that be something for the alchemical docs?

Yes, this sounds like something I would want to document.
I normally use Flask-Migrate when working with migrations in a Flask + Alchemical app, and this is why I have missed this potential problem in my projects.
Thanks for your patience in working through this!

repo: miguelgrinberg/alchemical


text:
特定情况下的滚动到顶部修复以及添加jsdelivr镜像站支持

在我的环境下，可能会出现给scrollTop赋值后立刻再次读取，两者结果存在极小的不一致的情况，可能是和浏览器优化滚动或者屏幕刷新率或者神奇的浮点数存储有关。

这个问题导致：在特定环境下，回到顶部的按键在滚动到特定位置不能正常使用。在经过几次距离迭代计算后会因为这个情况被判定为动画被中断从而停止迭代和向上滚动。
通过改用更加宽泛的停止条件来避免此问题。

将滚动速率和屏幕刷新率关联

由于window.requestAnimationFrame具有回调函数执行次数通常与浏览器屏幕刷新次数相匹配的特性，导致在高刷新率屏幕上滚动速率过快。
通过关联滚动速率和刷新率使得在不同分辨率设备上获得相对一致的滚动到顶部的体验。

添加jsdelivr镜像站选项，来加速静态资源加载。我这里基本不能正常访问jsdelivr了

我这边也是不能正常访问jsdelivr了，我们是否应该考虑将使用到的第三方静态资源迁移到其他镜像站，或者直接将静态资源文件嵌入到主题本身？

我这边也是不能正常访问jsdelivr了，我们是否应该考虑将使用到的第三方静态资源迁移到其他镜像站，或者直接将静态资源文件嵌入到主题本身？

以前为主题添加mathjax和clipboard.js时专门考虑了未来可能会存在的jsdelivr的访问问题，因此目前除了pollyfill（它现在可能主要用于mathjax的兼容支持且默认关闭。）以外都统一使用了jsdelivr的cdn。
而在这次PR中，添加这个镜像站域名功能后可以几乎零成本“迁移”所有常用的静态资源到可以访问的站点。无需主动进行迁移操作。
至于将静态资源嵌入主题，我本身并不是专业的前端和hexo开发，因而并不清楚目前嵌入静态资源需要多少改动，但是我认为改动可能会不小：直接添加资源文件到仓库可能会导致仓库体积膨胀和版本管理问题，使用依赖管理软件可能需要更改现有主题部署流程？
我的态度是：通过此PR添加jsdelivr镜像功能后先凑合着用，等到那些镜像站也基本不能用的时候再考虑更下一步计划，况且虽然主题本身很轻量，但是外挂的各种功能的东西打包后提及也不小......

authors: dangjinghao seeleclover

repo: miiiku/hexo-theme-flexblock


text:
FEATURE - Start OdometerView

Describe the feature you want the app to have that it currently doesn't

Create a view similar to the DashboardView and AddMaintenanceEventView for adding new odometer readings
Be able to select a Vehicle for the user that this new entry will belong to
Save to Firestore (in a similar way that the MaintenanceEvent and Vehicle is formatted, it should be in a collection called odometer_readings

Describe alternatives you've considered

N/A

Additional context

Only do "create" and "read" the update will be a separate issue
Create:

AddOdometerReadingView
struct OdometerReading for the model

Be able to handle entering miles or kilometers

I would indeed like to work on this! Thanks @mikaelacaron !

Use basic controls and make it simple! like the rest of the app, we can always optimize and make it prettier later! Thanks! @thx1766

repo: mikaelacaron/Basic-Car-Maintenance


text:
Camera icon when takePhotos is true

Hi,
It would be great if the camera icon is customizable when takePhotos is true. The blue color is not convenient for some people challenged with bad vision.
Thank you very much.
Sunil

The icon is actually black. So when the icon is displayed as blue, you are setting the color on it :)
You can change this by setting tintColor

Thank you :-)
My storyboard tintColor is not blue. The view tintColor is default to storyboard. So I am not sure which tintColor to set.

Ah! No worries got it.
vc.view.tintColor = UIColor.redColor()

I'm using BSImagePicker for selecting multiple images from gallery and shows the images in a collection view. I want to know that how can we select image through camera using BSImagePicker?

authors: Hamza-Brainplow gluecode mikaoj

repo: mikaoj/BSImagePicker


text:
Tests are failing

Tests are now failing for src/diagrams/diagramdirectives.js, probably due to the change in use of boundary box

Test failure details
          ✗ should scroll the diagram to the right
        Expected 50 to equal 94.
        /tmp/test/spec/diagramdirectives_spec.js:483:0 <- /tmp/b537b03b7f76eaea441fbfe1187f8528.browserify:95813:68

          ✗ should scroll down
        Expected 20 to equal 34.
        /tmp/test/spec/diagramdirectives_spec.js:494:0 <- /tmp/b537b03b7f76eaea441fbfe1187f8528.browserify:95824:67

          ✗ should expand the diagram to the right
        Expected 465 to equal 50.
        /tmp/test/spec/diagramdirectives_spec.js:507:0 <- /tmp/b537b03b7f76eaea441fbfe1187f8528.browserify:95837:68
        Expected spy setDimensions to have been called.
        /tmp/test/spec/diagramdirectives_spec.js:508:0 <- /tmp/b537b03b7f76eaea441fbfe1187f8528.browserify:95838:67
        Expected $.length = 0 to equal 2.
        Expected $[0] = undefined to equal 650.
        Expected $[1] = undefined to equal 390.
        /tmp/test/spec/diagramdirectives_spec.js:509:0 <- /tmp/b537b03b7f76eaea441fbfe1187f8528.browserify:95839:75

          ✗ should expand the diagram down
        Expected 265 to equal 50.
        /tmp/test/spec/diagramdirectives_spec.js:524:0 <- /tmp/b537b03b7f76eaea441fbfe1187f8528.browserify:95854:67
        Expected spy setDimensions to have been called.
        /tmp/test/spec/diagramdirectives_spec.js:525:0 <- /tmp/b537b03b7f76eaea441fbfe1187f8528.browserify:95855:67
        Expected $.length = 0 to equal 2.
        Expected $[0] = undefined to equal 590.
        Expected $[1] = undefined to equal 450.
        /tmp/test/spec/diagramdirectives_spec.js:526:0 <- /tmp/b537b03b7f76eaea441fbfe1187f8528.browserify:95856:75

These tests have been skipped in the test specification file, and need to be reinstated

repo: mike-goodwin/owasp-threat-dragon-core


text:
CSS selector does not work in production mode

I am using Angular 1.4.3 in production with debug mode switched off. I have been trying to integrate this plugin but have run into the following issue.
Angular in debug mode does not include 'ng-scope' or 'ng-isolate-scope' classes in the DOM. This is an issue in scroll-tabs.js line 837:
isWrappingAngularUITabset = isWrappingAngularUIBTabset || element.find('tabset, .scrtabs-tabs-movable-container .ng-isolate-scope > ul.nav').length > 0,
Could line be changed to the following, or something similar:
isWrappingAngularUITabset = isWrappingAngularUIBTabset || element.find('tabset, .scrtabs-tabs-movable-container div > ul.nav').length > 0,

v0.0.29 should fix this issue. Sorry about that--I hadn't considered that ng-scope and ng-isolate-scope classes are not included when debug mode is off.
I just implemented your proposed solution, which works for all scenarios that I tested. Thanks for suggesting a solution.

Hi Mike,
I had requested the same change with pull request.
https://github.com/raj-padalwar/angular-bootstrap-scrolling-tabs/tree/raj-padalwar-patch-1
Thanks for the latest version v0.0.29. This works fine even though debug mode is off.

authors: mikejacobson raj-padalwar trootski


text:
Deps/update ua parser

Quick update of the user-agent-parser dependency.
The npm entry's name has been updated to ua-parser-js (it's the same repository though - see last line of npm info screenshot)
This fixes issue #5 (and possibly #1 as well - looks like the same problem)

👍

authors: davidgovea mikemaccana

repo: mikemaccana/outdated-browser-rework


text:
Cable Spool doesn't "copy" the card, instead creates a new instance

Maybe use makeStatEquivalentCopy() so that it copies the upgrade status as well?
https://github.com/mikemayhemdev/EvilWithin/blob/a4ca79285af57d6002ceaf6d143f0f03ec9ba9d6/src/main/java/automaton/relics/CableSpool.java#L37-L45

applied

Noted

authors: Mwallx iTitus

repo: mikemayhemdev/EvilWithin


text:
Only emoji characters

Rephrase of an anonymous comment:
The numbers and Latin letters look somewhat off in between emoji symbols, particularly within strings like: 🎷🍖🪥💊⚡🛼🤡N📏🔌👋👗🦞🍣🪚V🐢V☀🤖🚽5⛰📎❤N🦴🫁🍖🧘🎲🌧.
Wouldn't it look better to have a list of only emojis?
Also, maybe these emojis could be used as a replacement for some characters: 0⃣1⃣2⃣3⃣4⃣5⃣6⃣7⃣8⃣9⃣🅰🅱🅾🅿

To achieve something similar rendering in the browser:
/* dynamic: font-size, color, border & border-radius */
span {
  display: inline-block;
  box-sizing: border-box;
  width: 1em;
  height: 1em;

  text-align: center;
  font-size: 48px;
  font-weight: bold;
  line-height: 1em;

  color: white;
  text-shadow: 0px 0px 4px #005191;

  background: linear-gradient(180deg, #4db1ff, #008eff);
  border: 0.05em solid #008eff;
  border-radius: 0.05em;
}

Maybe not ideal, cause it requires wrapping each character of the string into <span> tags and also having to separate Latin chars vs. emojis.

Possible emoji candidates for each digit or letter:

0⃣1⃣2⃣3⃣4⃣5⃣6⃣7⃣8⃣9⃣
#⃣*⃣
✅❎
©®
🅰🅱
Ⓜ
🅿
⚛🕉✡☸✝☦☪☮🔯
♈♉♊♋♌♍♎♏♐♑♒♓⛎
💴💵💶💷

Map Emoji "colors" to letters:

⬛ = 0
⬜ = F
🟥 = R
🟩 = G
🟦 = B
🟨 = Y

repo: mikeobank/mnemojis


text:
List elements appear only after scroll

Upon startup, i'm getting a blank screen. The content appears only after scrolling up or down.
Here is my code:
//in Fragment's onViewCreated()
recycler = (RecyclerView) view.findViewById(R.id.fragment_timetable2_recyclerview);
adapter = new FastItemAdapter<>();

recycler.setLayoutManager(
        new LinearLayoutManager(getContext()));
recycler.setAdapter(adapter);

List<LessonItem> items = new ArrayList<>();

for (SchoolDay d : result.getSchoolDays()) {
        for (Map.Entry<Integer, Lesson> entry : d.getLessons().entrySet()) {
                        items.add(new LessonItem(entry.getValue()));
        }
}

adapter.add(items);

//in LessonItem.java
public class LessonItem extends AbstractItem<LessonItem, LessonItem.ViewHolder> {

    private final Lesson lesson;

    public LessonItem(Lesson lesson) {
        this.lesson = lesson;
    }

    @Override
    public int getType() {
        return 0;
    }

    @Override
    public int getLayoutRes() {
        return R.layout.lesson_item;
    }

    @Override
    public void bindView(ViewHolder holder, List<Object> payloads) {
        super.bindView(holder, payloads);
        holder.subject.setText(lesson.getSubject().getName());
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        final TextView subject, teacher, badgeText, lessonNumber;
        final ImageView badgeIcon;
        View badge;

        ViewHolder(View view) {
            super(view);
            subject = (TextView) itemView.findViewById(R.id.lessonSubject);
            teacher = (TextView) itemView.findViewById(R.id.lessonTeacher);
            badge = itemView.findViewById(R.id.badge);
            badgeIcon = (ImageView) itemView.findViewById(R.id.badgeIcon);
            badgeText = (TextView) itemView.findViewById(R.id.badgeText);
            lessonNumber = (TextView) itemView.findViewById(R.id.lessonNumber);
        }
    }

    //the static ViewHolderFactory which will be used to generate the ViewHolder for this Item
    private static final ViewHolderFactory<? extends ViewHolder> FACTORY = new ItemFactory();

    /**
     * our ItemFactory implementation which creates the ViewHolder for our adapter.
     * It is highly recommended to implement a ViewHolderFactory as it is 0-1ms faster for ViewHolder creation,
     * and it is also many many times more efficient if you define custom listeners on views within your item.
     */
    private static class ItemFactory implements ViewHolderFactory<ViewHolder> {
        public ViewHolder create(View v) {
            return new ViewHolder(v);
        }
    }

    /**
     * return our ViewHolderFactory implementation here
     *
     * @return
     */
    @Override
    public ViewHolderFactory<? extends ViewHolder> getFactory() {
        return FACTORY;
    }
}

I'm also getting this very weird issue with MaterialDrawer that i think may be related. I use it to switch between fragments and it works absolutely fine, until i switch to the fragment with the RecyclerView. Then some weird things start to happen:

Upon clicking on an item in the drawer, old one does not deselect.
Title in the toolbar is getting truncated to 6 or so characters.
Account switcher does not work(only the arrow animation plays).
Despite of item click being registered, new fragments are not being shown.

It is also worth noting that if i comment out the line with adapter.add() everything works fine. Any help would be appreciated because i have absolutely no clue as to what might be causing this.

@shymmq seems like you have some issues in your app and in your code. the above described behavior does not exist on any app I implemented both in, nor does anyone else mention this

@mikepenz Yes, i have eventually figured it out. This behavior was caused by adapter.add() being called from a non-UI thread. It's still kind of weird considering that it appeared after i scrolled. Sorry for the inconvenience.

@shymmq the android system is very very unpredictable if things are not done via the UI thread :D

authors: mikepenz shymmq

repo: mikepenz/FastAdapter


text:
python version

Hi there,
Can you verify that this buildpack only works with 2.x ?

The build pack installs the Agent package, which has self-contained
versions of software used.
This means that it should work with any Python version.
Are you having an issue?
On Monday, May 16, 2016, Scott McWhirter notifications@github.com wrote:

Hi there,
Can you verify that this buildpack only works with 2.x ?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub
https://github.com/miketheman/heroku-buildpack-datadog/issues/16

Yes, I get
~/.apt/opt/datadog-agent $ exec /app/.apt/opt/datadog-agent/embedded/bin/python /app/.apt/opt/datadog-agent/agent/dogstatsd.py start
ImportError: No module named site

With ConnectionRefusedError: [Errno 111] Connection refused when attempting to connect to statsd.
This is with python-3.5.1 as the python version.

Can you show what version of the Agent package is installed? Also, what
other buildpacks are you running?
On Mon, May 16, 2016, 18:15 Scott McWhirter notifications@github.com
wrote:

Yes, I get
~/.apt/opt/datadog-agent $ exec /app/.apt/opt/datadog-agent/embedded/bin/python /app/.apt/opt/datadog-agent/agent/dogstatsd.py start
ImportError: No module named site
With ConnectionRefusedError: [Errno 111] Connection refused when
attempting to connect to statsd.
This is with python-3.5.1 as the python version.
—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub
https://github.com/miketheman/heroku-buildpack-datadog/issues/16#issuecomment-219565049

just heroku/python and agent version datadog-agent 5.7.4

Can you paste the output of heroku buildpacks ?
On Mon, May 16, 2016, 18:24 Scott McWhirter notifications@github.com
wrote:

just heroku/python and agent version datadog-agent 5.7.4
—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub
https://github.com/miketheman/heroku-buildpack-datadog/issues/16#issuecomment-219566684

1. https://github.com/miketheman/heroku-buildpack-datadog.git
2. heroku/python

I can confirm and reproduce this behavior with a runtime.txt value of "python-3.5.1", and will continue to see what can be done.

It appears that this failure is being induced by the Python buildpack, which sets some environment variables in the startup profile that conflict with path loading.
$ cat .profile.d/python.sh
export PATH=$HOME/.heroku/python/bin:$PATH
export PYTHONUNBUFFERED=true
export PYTHONHOME=/app/.heroku/python
export LIBRARY_PATH=/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LD_LIBRARY_PATH
export LANG=${LANG:-en_US.UTF-8}
export PYTHONHASHSEED=${PYTHONHASHSEED:-random}
export PYTHONPATH=${PYTHONPATH:-/app/}

$ unset PYTHONHOME
$ .profile.d/run-dogstatsd.sh
2016-05-17 12:37:57,462 | INFO | dd.dogstatsd | utils.pidfile(pidfile.py:31) | Pid file is: /app/.apt/opt/datadog-agent/run/dogstatsd.pid
2016-05-17 12:37:57,463 | INFO | dd.dogstatsd | daemon(daemon.py:157) | Starting
2016-05-17 12:37:57,463 | INFO | dd.dogstatsd | daemon(daemon.py:171) | Pidfile: /app/.apt/opt/datadog-agent/run/dogstatsd.pid

The reason this works with the Python 2.x runtime is that the PYTHONHOME variable is telling the dogstatsd runner to use the buildpack's Python interpreter (2.7.x), and the Agent is using Python 2.7 - so the app and Agent can both can find the site.py module on startup.

@konobi I forgot to mention here that the fix for Python 3.x is in, please let me know if you have any issues with that now.

authors: konobi miketheman

repo: miketheman/heroku-buildpack-datadog


text:
About the number of CPUs

Thanks for your reply in previous issue! I mistakely put EfficientZero results here (I fixed it now).
There is still a question that confuses me. How many CPUs should one single run take?
(Since you closed previous issue, I open a new one.)

We used 8-10 CPUs, 30-40GB of RAM, and one GPU for each run. I imagine that performance might improve a little bit with more CPUs, but probably not dramatically.

Got it. I will conduct experiments by your instruction. Thanks a lot.

repo: mila-iqia/spr


text:
mad() got an unexpected keyword argument 'verbose'

Just trying to grab the MAD value for my dataset, but faced this error. [Recently updated to 0.2.5]
Codes are as follow:
import benford as bf
mad1 = bf.mad(rawdata["Gross Total"], test=1)
Traceback (most recent call last):
File "", line 1, in
mad1 = bf.mad(rawdata["Gross Total"], test=1)
File "C:\Users\sebastianlimzj\AppData\Local\Continuum\anaconda3\lib\site-packages\benford\benford.py", line 1362, in mad
start.first_digits(digs=test, MAD=True, MSE=True, simple=True)
File "C:\Users\sebastianlimzj\AppData\Local\Continuum\anaconda3\lib\site-packages\benford\benford.py", line 639, in first_digits
self.MAD = mad(df, test=digs, verbose=self.verbose)
TypeError: mad() got an unexpected keyword argument 'verbose'

Thanks for reporting.
This is probably a bug resulting from the deprecation of the ìnformargument in favor of verboseone, and the latter must have been incorrectly inserted in themad()` function.
I will look into it.

All should be fine now, in the latest master branch.
It will be in Pypi (pip install) in the next version (0.2.6).
Let me know if there is any other problem.
Cheers

Version 0.2.6 now in Pypi
pip install --upgrade benford_py

authors: milcent sebbylim


text:
Fix for the 406 Session Identifier Missing issue

For people who are attempting to use this plugin in environments that don't support sticky sessions, this is how I got it to work...

Install and activate this plugin: https://wordpress.org/plugins/wp-native-php-sessions/
Include $parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] ); require_once( $parse_uri[0] . 'wp-load.php' ); at the top of wordpress-social-login/hybridauth/index.php

Hope this plugin gets updated soon!

Thanks for sharing this @mellinger! I'm having this exact same problem, and this post has been really helpful.
I'd already tried using the plugin wp-native-php-sessions, but it wasn't working. It makes sense now to realise that WordPress isn't actually loaded in those callbacks!
Have you put together a Pull Request for this to be merged into the plugin? Patching that file is going to be difficult since I'm using composer and wpackagist to manage plugins.

Great contribution ..
Helped me a lot, thank you.

Also hope this is added soon, very difficult to test social login on a local development server this way.
Thanks in advance.

what if I am not able to log in as an admin to download this plugin, any solution, please?

You are the best, this works too super well, only place I could fine a lasting solution.

I have been trying to resolve this for almost 3 weeks this saves my ass :D

authors: AUCoinonline SumeetGohil carollsdk mellinger moahammadalt ollietreend rvmourik

repo: miled/wordpress-social-login


text:
Another Copy Of LUNAR

check here https://github.com/zeyad-mansour/lunar

Check it :v:

authors: iHafez milksense

repo: milksense/venus


text:
Sign requests to HTTP API Gateway

By design the HTTP API Gateway is currently exposed publicly.
It's not a major security flaw because it uses a random API Gateway subdomain that are hard to guess and accessing it would only give an attacker the benefit of bypassing CloudFront security rules (like DDOS protection).
Anyway since every other resource (like S3, Lambdas) are not accessible from the outside we should enforce this policy to the API Gateway too.
Idea: Sign requests in proxy component with IAM authorization: https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-access-control-iam.html
https://stackoverflow.com/a/54298963/831465

POC proved that this is currently not possible: https://github.com/ofhouse/cloudfront-iam-authorizer

repo: milliHQ/terraform-aws-next-js


text:
LED Strips - no color/brightness change

Describe the bug

I have 2 Treat Life brand LED Strips installed. When I set them up as a light in Homebridge, I have most all devices not responding and the strips only go on/off and do no change color. When I disable the 'color, brightness, color temp' on the strips, my other devices don't have connectivity issues anymore.
"id": "ebb7a61d34ed0889d44kub",
"device_type": "light",
"light_characteristics": [
"Brightness",
"Color",
"Color Temperature"
Logs:
[15/01/2021, 09:19:04] [TuyaWebPlatform] [TV Strip ] - Unsetting debouncedDeviceStateRequestPromise
[15/01/2021, 09:19:04] [TuyaWebPlatform] [TV Strip ] - Resolving resolveDeviceStateRequest from cache
[15/01/2021, 09:19:04] [TuyaWebPlatform] [TV Strip ] Characteristic.On - [GET] false
[15/01/2021, 09:19:04] [TuyaWebPlatform] [TV Strip ] Characteristic.Hue - [GET] undefined
[15/01/2021, 09:19:04] [TuyaWebPlatform] [TV Strip ] Characteristic.Saturation - [GET] undefined
[15/01/2021, 09:19:04] [TuyaWebPlatform] [TV Strip ] Characteristic.ColorTemperature - [GET] undefined
[15/01/2021, 09:19:04] [TuyaWebPlatform] [TV Strip ] Characteristic.Brightness - [GET] undefined
[15/01/2021, 09:19:04] [TuyaWebPlatform] [TV Strip ] Characteristic.Brightness - Tried to set brightness but failed to parse data.
{ color_mode: 'colour', online: true, state: 'false' }
Steps To Reproduce

Plugin Version

Firmware: 0.7.1
Homebridge Config

{
           "name": "TuyaWebPlatform",
           "options": {
               "username": "",
               "password": "",
               "countryCode": "1",
               "platform": "smart_life"
           },
           "defaults": [
               {
                   "id": "ebd17423347b2ae9d1stn2",
                   "device_type": "light",
                   "light_characteristics": [
                       "Brightness",
                       "Color",
                       "Color Temperature"
                   ]
               },
               {
                   "id": "44462287d8bfc0c107f7",
                   "device_type": "light",
                   "light_characteristics": [
                       "Brightness",
                       "Color",
                       "Color Temperature"
                   ]
               },
               {
                   "id": "10012004c82b960e4ddc",
                   "device_type": "light",
                   "light_characteristics": [
                       "Brightness",
                       "Color",
                       "Color Temperature"
                   ]
               },
               {
                   "id": "017743508caab5f0a068",
                   "device_type": "switch"
               },
               {
                   "id": "017743508caab5f12c24",
                   "device_type": "switch"
               },
               {
                   "id": "ebb7a61d34ed0889d44kub",
                   "device_type": "light",
                   "light_characteristics": [
                       "Brightness",
                       "Color",
                       "Color Temperature"
                   ]
               },
               {
                   "id": "eb1453e96158bb30d7bypa",
                   "device_type": "light",
                   "light_characteristics": [
                       "Brightness",
                       "Color",
                       "Color Temperature"
                   ]
               },
               {
                   "id": "eb5bebfaa0171efbb7k4q2",
                   "device_type": "light",
                   "light_characteristics": [
                       "Brightness",
                       "Color",
                       "Color Temperature"
                   ]
               },
               {
                   "id": "eb621ee7843356e9e3r7yr",
                   "device_type": "light",
                   "light_characteristics": [
                       "Color"
                   ]
               },
               {
                   "id": "eb859f00a06603600atmhi",
                   "device_type": "light",
                   "light_characteristics": [
                       "Brightness",
                       "Color",
                       "Color Temperature"
                   ]
               },
               {
                   "id": "eb728d534acef0fb5al4zl",
                   "device_type": "light",
                   "light_characteristics": [
                       "Brightness",
                       "Color",
                       "Color Temperature"
                   ]
               },
               {
                   "id": "017743508caab5f12c33",
                   "device_type": "switch"
               },
               {
                   "id": "5311784410521ce81930",
                   "device_type": "fan"
               }
           ],
           "scenes": true,
           "platform": "TuyaWebPlatform"
       }

Device Config

{   'data': {   'color_mode': 'colour',
'online': True,
'state': 'false'},
'dev_type': 'light',
'ha_type': 'light',
'icon': 'https://images.tuyaus.com/smart/solution/142006/b9dd72a8410f8faa_cover.png',
'id': 'ebb7a61d34ed0889d44kub',
'name': 'TV Strip '},
Additional Context

Great app and HUGE thanks for all of your support.

Due to the error

Characteristic.Brightness - Tried to set brightness but failed to parse data.
{ color_mode: 'colour', online: true, state: 'false' }

Your other devices do not respond, the plugin does log this error but does not properly inform Homebridge that an error occurred. This influences all your other Homebridge devices and makes them unresponsive, I'll fix this.
What we can also see in that error is that your devices does not expose its brightness to this API. This is a limitation imposed by Tuya and not something that I can alter. I advice you to disable color and brightness on these devices if you want to use them through HomeBridge.

Due to the error

Characteristic.Brightness - Tried to set brightness but failed to parse data.
{ color_mode: 'colour', online: true, state: 'false' }

Your other devices do not respond, the plugin does log this error but does not properly inform Homebridge that an error occurred. This influences all your other Homebridge devices and makes them unresponsive, I'll fix this.
What we can also see in that error is that your devices does not expose its brightness to this API. This is a limitation imposed by Tuya and not something that I can alter. I advice you to disable color and brightness on these devices if you want to use them through HomeBridge.

That's what I have been doing to lessen the errors. I just wanted to bring it to your attention. It's also interesting that a TreatLife/SmartLife/Tuya device doesn't expose all characteristics. But, it is what it is. Thanks for the quick response.

That's what I have been doing to lessen the errors. I just wanted to bring it to your attention. It's also interesting that a TreatLife/SmartLife/Tuya device doesn't expose all characteristics. But, it is what it is. Thanks for the quick response.

I can understand why you would think that, however it is very VERY common for these devices to expose only part of their devices.
This API is a giant mess and I'm trying to work around as many of its problem as I can to create the best possible plugin given my tools.

I can understand why you would think that, however it is very VERY common for these devices to expose only part of their devices.
This API is a giant mess and I'm trying to work around as many of its problem as I can to create the best possible plugin given my tools.


text:
jd.union.open.promotion.common.get

调用JdUnionOpenPromotionCommonGetRequest方法，返回{"error_response":{"code":"67","en_desc":"platform connecting service process unknown exception information(Solution reference: https://jos.jd.com/commondoc?listId=171)","zh_desc":"java.lang.NumberFormatException: For input string: ""（解决方案参考: https://jos.jd.com/commondoc?listId=171）"}}
经过查找京东文档code67是平台连接后端服务处理过程中出现未知异常信息，你有遇到过吗

应该是入参导致的 对方服务无法解析 报错了
看这里
[:"java.lang.NumberFormatException]  For input string: ""

感谢~

authors: TahmLi mimicode

repo: mimicode/tksdk


text:
deepspeech2模型ascend执行训练报错

【Document Link】/【文档链接】
https://github.com/mindspore-lab/mindaudio/blob/main/recipes/LibriSpeech/ASR/README_CN.md
【Issues Section】/【问题文档片段】
python train.py -c "./deepspeech2.yaml"
【Existing Issues】/【存在的问题】
执行训练报错：python train.py -c "./deepspeech2.yaml"

[ERROR] DEVICE(44814,7f3352ffd700,python):2023-06-01-22:47:58.744.915 [mindspore/ccsrc/plugin/device/ascend/hal/hardware/ascend_graph_executor.cc:195] RunGraph] run task error!
[ERROR] DEVICE(44814,7f3352ffd700,python):2023-06-01-22:47:58.744.961 [mindspore/ccsrc/plugin/device/ascend/hal/hardware/ascend_utils.cc:35] ReportErrorMessage] Ascend error occurred, error message:
E39999: Inner Error!
E39999  Aicpu kernel execute failed, device_id=0, stream_id=12, task_id=2.[FUNC:PrintAicpuErrorInfo][FILE:task.cc][LINE:747]
Aicpu kernel execute failed, device_id=0, stream_id=12, task_id=2, fault op_name=[FUNC:GetError][FILE:stream.cc][LINE:846]
rtStreamSynchronize execute failed, reason=[the model stream execute failed][FUNC:FuncErrorReason][FILE:error_message_manage.cc][LINE:45]
Traceback (most recent call last):
File "/data1/rhx/mindaudio/recipes/LibriSpeech/ASR/train.py", line 124, in
train(args=args)
File "/data1/rhx/mindaudio/recipes/LibriSpeech/ASR/train.py", line 92, in train
model.train(
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/train/model.py", line 1044, in train
self._train(epoch,
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/train/model.py", line 98, in wrapper
func(self, *args, **kwargs)
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/train/model.py", line 622, in _train
self._train_dataset_sink_process(epoch, train_dataset, list_callback,
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/train/model.py", line 701, in _train_dataset_sink_process
outputs = train_network(*inputs)
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/nn/cell.py", line 578, in call
out = self.compile_and_run(*args)
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/nn/cell.py", line 988, in compile_and_run
return _cell_graph_executor(self, *new_inputs, phase=self.phase)
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/common/api.py", line 1202, in call
return self.run(obj, *args, phase=phase)
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/common/api.py", line 1239, in run
return self._exec_pip(obj, *args, phase=phase_real)
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/common/api.py", line 98, in wrapper
results = fn(*arg, **kwargs)
File "/opt/buildtools/python-3.9.11/lib/python3.9/site-packages/mindspore/common/api.py", line 1221, in _exec_pip
return self._graph_executor(args, phase)
RuntimeError: Launch graph failed, graph id: 1

C++ Call Stack: (For framework developers)

recipe folder has been removed. please check examples/deepspeech2

repo: mindspore-lab/mindaudio


text:
feat: support custom amp cast list

Thank you for your contribution to the MindCV repo.
Before submitting this PR, please make sure:

[x] You have read the Contributing Guidelines on pull requests
[x] Your code builds clean without any errors or warnings
[x] You are using approved terminology
[ ] You have added unit tests

Motivation
support custom amp cast list
Test Plan
(How should this PR be tested? Do you require special setup to run the test or repro the fixed bug?)
Related Issues and PRs
(Is this PR part of a group of changes? Link the other relevant PRs and Issues here. Use https://help.github.com/en/articles/closing-issues-using-keywords for help on GitHub syntax)

what is the difference with original api below?
mindcv/utils/amp.py

The difference of function 'auto_mixed_precision' between mindspore and mindcv is that mindcv supports custom black list and white list. If we use the default black list and white list, the effect is the same.

repo: mindspore-lab/mindcv


text:
Showing Windows builds download count in a chart

Screenshots of different screen resolutions has been attached.

I'm against this, users downloading Minetest won't be interested in these graphs. The most I'd want is a single number download counter, but even then it's just noise. This stuff is better for a more general statistics page

I was just trying to solve https://github.com/minetest/minetest.github.io/issues/131

...So?

This could be an interesting statistic to display on a modding guide (e.g. so people know which Minetest version to target in their mods), but I don't think it's suited for an user-facing download page.

authors: Calinou farooqkz rubenwardy


text:
The duration groud truth data shouldn't be used in synthesis in the validation step.

The duration_target is not None even when it is called in the validation step, which will cause the model to use the ground truth directly instead of the predicted data in validation.
if duration_target is not None:
            x, mel_len = self.length_regulator(x, duration_target, max_len)
            duration_rounded = duration_target
else:
    duration_rounded = torch.clamp(
        (torch.round(torch.exp(log_duration_prediction) - 1) * d_control),
        min=0,
    )
    x, mel_len = self.length_regulator(x, duration_rounded, max_len)
    mel_mask = get_mask_from_lengths(mel_len)

https://github.com/ming024/FastSpeech2/blob/d4e79eb52e8b01d24703b2dfc0385544092958f3/model/modules.py?_pjax=%23js-repo-pjax-container%2C div[itemtype%3D"http%3A%2F%2Fschema.org%2FSoftwareSourceCode"] main%2C [data-pjax-container]#L128
We should slice out the duration_target data by changing  output = model(*(batch[2:])) into output = model(*(batch[2:11])) here.
https://github.com/ming024/FastSpeech2/blob/d4e79eb52e8b01d24703b2dfc0385544092958f3/evaluate.py?_pjax=%23js-repo-pjax-container%2C div[itemtype%3D"http%3A%2F%2Fschema.org%2FSoftwareSourceCode"] main%2C [data-pjax-container]#L43

The duration_target is not None even when it is called in the validation step, which will cause the model to use the ground truth directly instead of the predicted data in validation.
if duration_target is not None:
            x, mel_len = self.length_regulator(x, duration_target, max_len)
            duration_rounded = duration_target
else:
    duration_rounded = torch.clamp(
        (torch.round(torch.exp(log_duration_prediction) - 1) * d_control),
        min=0,
    )
    x, mel_len = self.length_regulator(x, duration_rounded, max_len)
    mel_mask = get_mask_from_lengths(mel_len)

https://github.com/ming024/FastSpeech2/blob/d4e79eb52e8b01d24703b2dfc0385544092958f3/model/modules.py?_pjax=%23js-repo-pjax-container%2C div[itemtype%3D"http%3A%2F%2Fschema.org%2FSoftwareSourceCode"] main%2C [data-pjax-container]#L128
We should slice out the duration_target data by changing output = model(*(batch[2:])) into output = model(*(batch[2:11])) here.
https://github.com/ming024/FastSpeech2/blob/d4e79eb52e8b01d24703b2dfc0385544092958f3/evaluate.py?_pjax=%23js-repo-pjax-container%2C div[itemtype%3D"http%3A%2F%2Fschema.org%2FSoftwareSourceCode"] main%2C [data-pjax-container]#L43

I think this is not a bug. During evaluation, we still want to calculate the loss of mel spectrograms. So we should use ground truth durations to make sure that our model can generate predicted mel spectrogram which has the same lengths as ground truth mel spectrograms. Otherwise we may get predictions which have different lengths from corresponding ground truths and this can make loss calculation harder.


text:
🛑 [MineVN] Grafana is down

In 4068feb, [MineVN] Grafana (https://grafana.minevn.net) was down:

HTTP code: 502
Response time: 3894 ms

Resolved: [MineVN] Grafana is back up in a7c0d09 after 18 minutes.


text:
Add python module ezodf

It would be useful to be able to read .ods files in R, since that's the format a lot of government statistical publications are now being published in. However, the R package readODS is (currently) extremely slow, particularly for large spreadsheets. The python module ezodf seems to be much faster, so it would be useful to be able to access it through R via reticulate.
If there's a better R package/method for reading .ods files, that would of course be preferred.

Evidently you can install python modules from the terminal, using the command python -m pip install --user ezodf, so no need to install on a system level (I may make a wrapper package like dbtools to help facilitate this for others). Naturally a decent native package solution would be preferred.

@Thomas-Hirsch should we close this then?

Yeah I think so

authors: Thomas-Hirsch xoen


text:
(500) Explicit IDs

Context
We prefer to use explicit IDs where possible
Changes in this PR
Use explicit IDs where possible. Not sure how useful the second commit is
Release checklist
Release process documentation
As part of our continuous deployment strategy we must ensure that this work is
ready to be released once merged.
Pre-merge

[ ] There are changes required to the Accredited Programmes API for this change to work...

[ ] ... and they been released to production already

Post-merge

[ ] This adds, extends or meaningfully modifies a feature...

[ ] ... and I have written or updated an end-to-end test for the happy path in the Accredited Programmes E2E repo

[ ] This makes new expectations of the API...

[ ] ... and I have notified the API developer(s) of changes to the contract tests (Pact), or the API is already compliant

[ ] Manually approve release to preprod
[ ] Manually approve release to prod

 Consistently user explicit id params


text:
(642a) Add navigation

Context

The designs have a navigation menu with "List of programmes" and "My cases". The latter doesn't currently have a corresponding page in our service, but the former does
This is part one of (probably) two PRs to introduce the refer start page
Changes in this PR

Add the navigation with a "List of programmes" link
A few iterations in the same area of code

Screenshots of UI changes
Before
Courses page:

Course page:

Dashboard page (no change):

After
Courses page:

Course page:

Dashboard page (no change):

Release checklist
Release process documentation
As part of our continuous deployment strategy we must ensure that this work is
ready to be released once merged.
Pre-merge

[ ] There are changes required to the Accredited Programmes API for this change to work...

[ ] ... and they have been released to production already

Post-merge

[ ] This adds, extends or meaningfully modifies a feature...

[ ] ... and I have written or updated an end-to-end test for the happy path in the Accredited Programmes E2E repo

[ ] This makes new expectations of the API...

[ ] ... and I have notified the API developer(s) of changes to the contract tests (Pact), or the API is already compliant

[ ] Manually approve release to preprod
[ ] Manually approve release to prod

 Make a referral start page (UI)


text:
Solution for migrating HMPPS domain from azure

User Story
As a DSO tech lead
I need to create some EC2s instances directly in the Modernisation Platform Live and Non-Live data VPCs
So that I can migrate domain controllers from Azure FixNGo without running into environment isolation problems.
Value / Purpose
Allows us to decommission the Azure FixNGo platform in the longer term.  In the short term can also avoids domain controller traffic traversing the AWS - Azure VPN in theory improving performance of domain reliant services (Remote Desktop, Planet FM and CSR/MyDetail)
Useful Contacts
Dominic Robinson; David Sibley; David Elliot
Additional Information
Background can be found in https://dsdmoj.atlassian.net/browse/DSOS-2415
Following discussion with Dom Robinson/David Sibley/David Elliot, we agreed tactical solution to solve migration of Azure FixNGo domains while both PlanetFM and CSR/MyDetail applications exist, hence creation of this ticket.
The solution falls outside of the normal architecture since the AZURE.noms.root domain spans both development and test environments, and the HMPPS.noms.root domain spans both pre-production and production.  Creating Domain Controllers (DCs) in development/test/preproduction/production won't work as they need to sync with each other.
We need the ability to create resources directly in the Live / NOMS-Live VPCs to avoid the environment isolation issue.  The ask is for a pipeline and associated terraform infra to allow us to do this .  Core-shared-services potentially.  The actual terraform for creating the instances will be managed by DSO team so outside of the scope for this ticket.
Proposal / Unknowns
Proposal: EC2 instances are built in Live and Non-Live data.
Definition of Done

[ ] Documentation has been written / updated
[ ] README has been updated
[ ] User docs have been updated
[ ] Another team member has reviewed
[ ] Tests are green
[ ] Solution has been communicated with DSO team [Dominic Robinson]
[ ] DSO team have verified they can run terraform using the given solution

Check to see whether this is via an AMI or a new build

Re AMI - plan to use our hmpps_windows_server_2022 existing AMI image and configure the DC tools using powershell (hopefully automating as much as we can)

Talked this one through with @drobinson-moj via Slack. The short version is that code for new instances would be placed here, and picked up and run by this action.
We'd still need to talk about the work required for permissions to access and administer the instances, but could use the instance-management role in the interim.

authors: SimonPPledger dms1981 drobinson-moj


text:
공백이 있는 파일을 다운로드 할 수 없는 문제

tfb.minpeter.cf/dl/(파일이름) 형식으로 다운로드를 요청하는데 공백문자의 경의 url이 나눠지는 문제가 있음

공백을 -로 치완하여 해결

repo: minpeter/tempfiles-backend


text:
🛑 Matrix is down

In 69f0877, Matrix (https://matrix.mint.lgbt:8448/_matrix/federation/v1/version) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Matrix is back up in 1761aae after 35 minutes.

repo: mint-lgbt/status


text:
🛑 Matrix is down

In d9c9176, Matrix (https://matrix.mint.lgbt:8448/_matrix/federation/v1/version) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Matrix is back up in 1e5793e after 8 minutes.


text:
🛑 Matrix is down

In 1d46322, Matrix (https://matrix.mint.lgbt:8448/_matrix/federation/v1/version) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Matrix is back up in d282419 after 17 minutes.