api,server: allow project role-based api access

Description
Fixes #9071
Allows API access when the API is called with a project and ProjectRoleBasedApiAccessChecker allows it.
Types of changes

[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] New feature (non-breaking change which adds functionality)
[ ] Bug fix (non-breaking change which fixes an issue)
[ ] Enhancement (improves an existing feature and functionality)
[ ] Cleanup (Code refactoring and cleanup, that may add test cases)
[ ] build/CI

Feature/Enhancement Scale or Bug Severity
Feature/Enhancement Scale

[ ] Major
[ ] Minor

Bug Severity

[ ] BLOCKER
[ ] Critical
[ ] Major
[ ] Minor
[ ] Trivial

Screenshots (if appropriate):
How Has This Been Tested?

How did you try to break this feature and the system with this change?

With cmk,
(localcloud) 🐱 > set username admin
(localcloud) 🐱 > list projectroles projectid=b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270
{
  "count": 1,
  "projectrole": [
    {
      "id": "3f79738e-d279-415d-8e08-655d714de4ef",
      "ispublic": true,
      "name": "TestRole",
      "projectid": "b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270"
    }
  ]
}
(localcloud) 🐱 > list projectrolepermissions projectroleid=3f79738e-d279-415d-8e08-655d714de4ef projectid=b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270
{
  "count": 1,
  "projectrolepermission": [
    {
      "description": "",
      "id": "9406a1d9-28a5-40bb-84e4-cb14c7b995be",
      "permission": "allow",
      "projectid": "b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270",
      "projectroleid": "3f79738e-d279-415d-8e08-655d714de4ef",
      "projectrolename": "TestRole",
      "rule": "listRouters"
    }
  ]
}
(localcloud) 🐱 > list projectaccounts projectid=b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270
{
  "count": 2,
  "projectaccount": [
    {
      "account": "user",
      "accountid": "d5a668bc-24d0-4b2b-ad3e-b76d33bfb8ad",
      "accounttype": 0,
      "domain": "ROOT",
      "domainid": "f5fbb046-168b-11ef-b711-a02942fcdd70",
      "project": "test",
      "projectid": "b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270",
      "projectroleid": "3f79738e-d279-415d-8e08-655d714de4ef",
      "role": "Regular",
      "user": [
        {
          "account": "user",
          "accountid": "d5a668bc-24d0-4b2b-ad3e-b76d33bfb8ad",
          "accounttype": 0,
          "created": "2024-05-20T15:53:48+0530",
          "domain": "ROOT",
          "domainid": "f5fbb046-168b-11ef-b711-a02942fcdd70",
          "email"<EMAIL_ADDRESS>          "firstname": "User",
          "id": "736c21b2-26ec-4286-ae5b-820a1162063b",
          "is2faenabled": false,
          "is2famandated": false,
          "iscallerchilddomain": false,
          "isdefault": false,
          "lastname": "User",
          "roleid": "02579f2d-168c-11ef-b711-a02942fcdd70",
          "rolename": "User",
          "roletype": "User",
          "state": "enabled",
          "username": "user",
          "usersource": "native"
        }
      ]
    },
    {
      "account": "admin",
      "accountid": "f5fc3642-168b-11ef-b711-a02942fcdd70",
      "accounttype": 1,
      "domain": "ROOT",
      "domainid": "f5fbb046-168b-11ef-b711-a02942fcdd70",
      "project": "test",
      "projectid": "b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270",
      "role": "Admin",
      "user": [
        {
          "account": "admin",
          "accountid": "f5fc3642-168b-11ef-b711-a02942fcdd70",
          "accounttype": 1,
          "apikey": "mvD2LzAcCAu8PeSv_JZ4EGWqF0yIM_OD6RAMyiuImQdDhKjSfMfR18RQeVaRvCEUBiflGFnLC5Z7Mqxt2Bu7uw",
          "created": "2024-05-20T20:33:05+0530",
          "domain": "ROOT",
          "domainid": "f5fbb046-168b-11ef-b711-a02942fcdd70",
          "email"<EMAIL_ADDRESS>          "firstname": "Admin",
          "id": "f5fcab99-168b-11ef-b711-a02942fcdd70",
          "is2faenabled": false,
          "is2famandated": false,
          "iscallerchilddomain": false,
          "isdefault": true,
          "lastname": "User",
          "roleid": "025770df-168c-11ef-b711-a02942fcdd70",
          "rolename": "Root Admin",
          "roletype": "Admin",
          "state": "enabled",
          "username": "admin",
          "usersource": "native"
        }
      ]
    }
  ]
}
(localcloud) 🐱 > set username user
(localcloud) 🐱 > list routers projectid=b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270
{
  "count": 1,
  "router": [
    {
      "created": "2024-05-20T17:20:57+0530",
      "dns1": "<IP_ADDRESS>",
      "domain": "ROOT",
      "domainid": "f5fbb046-168b-11ef-b711-a02942fcdd70",
      "gateway": "<IP_ADDRESS>",
      "hasannotations": false,
      "healthchecksfailed": false,
      "hypervisor": "Simulator",
      "id": "81bf48cb-207b-440b-8eb1-ba369be5f4c3",
      "isredundantrouter": false,
      "linklocalip": "<IP_ADDRESS>",
      "linklocalmacaddress": "0e:00:a9:fe:80:95",
      "linklocalnetmask": "<IP_ADDRESS>",
      "linklocalnetworkid": "263e8962-4d06-49e8-8c4e-fba43795ce55",
      "name": "r-4-QA",
      "nic": [
        {
          "gateway": "<IP_ADDRESS>",
          "id": "b627bc47-a302-4604-be6c-ec01119fc28b",
          "ipaddress": "<IP_ADDRESS>",
          "isdefault": false,
          "macaddress": "0e:00:a9:fe:80:95",
          "netmask": "<IP_ADDRESS>",
          "networkid": "263e8962-4d06-49e8-8c4e-fba43795ce55",
          "traffictype": "Control"
        },
        {
          "broadcasturi": "vlan://50",
          "gateway": "<IP_ADDRESS>",
          "id": "0f4909b9-e8f8-4d3b-b41b-28c947bc4ced",
          "ipaddress": "<IP_ADDRESS>",
          "isdefault": true,
          "isolationuri": "vlan://50",
          "macaddress": "1e:00:40:00:00:ca",
          "mtu": 1500,
          "netmask": "<IP_ADDRESS>",
          "networkid": "279c5f4e-7751-4189-9e6f-681293ccf448",
          "traffictype": "Public"
        }
      ],
      "project": "test",
      "projectid": "b0e2ec2f-cd50-4c95-8f7a-6ccc3d828270",
      "publicip": "<IP_ADDRESS>",
      "publicmacaddress": "1e:00:40:00:00:ca",
      "publicnetmask": "<IP_ADDRESS>",
      "publicnetworkid": "279c5f4e-7751-4189-9e6f-681293ccf448",
      "redundantstate": "UNKNOWN",
      "requiresupgrade": false,
      "role": "VIRTUAL_ROUTER",
      "scriptsversion": "2e3cc644-1f77-48a1-8a71-d93ca4fa2b2a",
      "serviceofferingid": "a3813a41-847b-41da-8014-6d1ed82a5961",
      "serviceofferingname": "System Offering For Software Router",
      "softwareversion": "<IP_ADDRESS>",
      "state": "Running",
      "templateid": "50b16e30-1691-11ef-b711-a02942fcdd70",
      "templatename": "SystemVM Template (simulator)",
      "version": "4.10.0",
      "zoneid": "d6974a22-cfc5-4e25-b580-eb843fbc90b3",
      "zonename": "Sandbox-simulator"
    }
  ]
}

@blueorangutan package

@shwstppr a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@rajujith @andrijapanicsb I've created this PR to allow API access for accounts within the project irrespective of their account role.
Though this would give them access to info which is otherwise not accessible to them.
The other option could be disallowing adding accounts to project with a projectrole which has higher access than their account role. (ie, testrole is a ProjectRole inside project which has listRouters API access. ACS will throw an error when project admin tries to add an account which has a role which doesn't have listRouters API access).

Packaging result [SF]: ✔ el7 ✔ el8 ✔ el9 ✔ debian ✔ suse15. SL-JID 9658

@blueorangutan test alma9 kvm-alma9 keepEnv

@DaanHoogland a [SL] Trillian-Jenkins test job (alma9 mgmt + kvm-alma9) has been kicked to run smoke tests

[SF] Trillian test result (tid-10252)
Environment: kvm-alma9 (x2), Advanced Networking with Mgmt server a9
Total time taken: 50449 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr9090-t10252-kvm-alma9.zip
Smoke tests completed. 129 look OK, 2 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_events_resource
Error
428.95
test_events_resource.py

test_02_trigger_shutdown
Failure
341.41
test_safe_shutdown.py

This would need some discussions so moving to draft for now.
To support the use-case of elevating account privileges we may need to:

either implement changes from this PR with restrictions on normal user/domain-admin account elevating privileges for another user/domain-admin account
or allow changing role of an account https://github.com/apache/cloudstack/issues/9015

cc @rajujith @andrijapanicsb @Pearl1594 @rohityadavcloud @DaanHoogland

This would need some discussions so moving to draft for now.
To support the use-case of elevating account privileges we may need to:
* either implement changes from this PR with restrictions on normal user/domain-admin account elevating privileges for another user/domain-admin account

* or allow changing role of an account [admin should be allowed to elevate user from role `User` to `Domain Admin` #9015](https://github.com/apache/cloudstack/issues/9015)

cc @rajujith @andrijapanicsb @Pearl1594 @rohityadavcloud @DaanHoogland

Based on the discussions, closing this and the behaviour will be documented

Doc PR: https://github.com/apache/cloudstack-documentation/pull/403


Realsense Process and ProcessModel v2.

Continuation of #10

Looks good, only one thing, should we move the images bgr_1 and bgr_2 to git lfs? (not sure how big they are)

I think they already are in git lfs.
For some reason, they are displayed in the "Files changed" tab and there is not "Git LFS file not shown" as there is for the .exr files... But I think they should be in lfs nonetheless.
If you look at the .gitattributes files, you'll see that both .exr and .png files are tracked by git lfs.

Please rename the Process RealSense as that's the spelling of the camera.


Problem with using ProxylessNAS in example from nni guide

Hello!
I started with the example provided in https://nni.readthedocs.io/en/latest/NAS/NasGuide.html and chose ProxylessNAS as trainer. However I have an error in mutator.py
object of type 'InputChoice' has no len()
When I removed all stuff with InputChoice there is a dimension mismatch appeared in first linear layer.
class Net(nn.Module):
	def __init__(self):
		super(Net, self).__init__()
		self.conv1 = mutables.LayerChoice([
			nn.Conv2d(1, 32, 3, 1),
			nn.Conv2d(1, 32, 5, 3)
		])
		self.conv2 = nn.Conv2d(32, 64, 3, 1)
		self.dropout1 = nn.Dropout2d(0.25)
		self.dropout2 = nn.Dropout2d(0.5)
		self.fc1 = nn.Linear(9216, 128)
		self.fc2 = nn.Linear(128, 10)

	def forward(self, x):
		x = self.conv1(x)
		x = F.relu(x)
		x = self.conv2(x)
		x = F.relu(x)
		x = F.max_pool2d(x, 2)
		x = self.dropout1(x)
		x = torch.flatten(x, 1)
		x = self.fc1(x)
		x = F.relu(x)
		x = self.dropout2(x)
		x = self.fc2(x)
		output = F.log_softmax(x, dim=1)
		return output

As far as I know ProxylessNAS does not support InputChoice. We will fix the doc.
The shape of fc1 is affected by input data. You can print the shape and change 9216 to correct value.

But for the different LayerChoise there will be different tensor size, ho it is possible to initialize LinearLayer dynamically depending on chosen layer?

Generally LayerChoice should only contain layers with identical output shape. This is not about shape inference. LayerChoice must have constant output shape as long as the following layer is trainable.
To satisfy this constraint, first you can use padding anywhere to make the image size constant. Then if the channel number varies, you can group each candidate layer with an extra reshaping op, typically an 1x1 conv layer. Besides standard layers you can use custom modules in LayerChoice as well.

Thank you that's answering my question


Remove use of github.com/pkg/errors (fix #31)

Codecov Report

Merging #32 into master will decrease coverage by 0.14%.
The diff coverage is 90.9%.

@@            Coverage Diff             @@
##           master      #32      +/-   ##
==========================================
- Coverage    99.1%   98.95%   -0.15%
==========================================
  Files          19       20       +1
  Lines        1335     1337       +2
==========================================
  Hits         1323     1323
- Misses          6        8       +2
  Partials        6        6

Flag
Coverage Δ

#dot
98.95% <90.9%> (-0.15%)
:arrow_down:

#dot_encoding
95.2% <90.9%> (-0.77%)
:arrow_down:

#dot_encoding_rich_text
100% <ø> (ø)
:arrow_up:

#dot_encoding_set
100% <ø> (ø)
:arrow_up:

#dot_encoding_sparse
100% <ø> (ø)
:arrow_up:

Impacted Files
Coverage Δ

encoding/strerr.go
0% <0%> (ø)

encoding/string16.go
93.54% <100%> (ø)
:arrow_up:

encoding/catalog.go
94.11% <100%> (ø)
:arrow_up:

encoding/dict.go
100% <100%> (ø)
:arrow_up:

encoding/array.go
100% <100%> (ø)
:arrow_up:

encoding/encodings.go
96.55% <100%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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


build(deps): bump url from 2.5.0 to 2.5.4

Closes #
📑 Description

✅ Checks

[ ] My pull request adheres to the code style of this project
[ ] My code requires changes to the documentation
[ ] I have updated the documentation as required
[ ] All the tests have passed

ℹ Additional Information

:warning: Please install the  to ensure uploads and comments are reliably processed by Codecov.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 68.7%. Comparing base (0dac60a) to head (e12b561).

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##            main     #80     +/-   ##
=======================================
- Coverage   68.9%   68.7%   -0.3%
=======================================
  Files         25      25
  Lines       2606    2590     -16
=======================================
- Hits        1798    1781     -17
- Misses       808     809      +1

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Sysex for MS-50G+ patch

Hi.
This is the sysex data for a patch from the MS-50G+ pedal. The actual patch data probably starts at offset 10 or 11 in this buffer.
The sysex message is what the MS-50G+ sends out if you change a parameter and wait for 3 seconds. It was captured using this tool: https://www.waveformer.net/zoom-explorer/
It'd be great if you could run it through your scripts and see if anything interesting pops up.
Let me know if you want the data on another format.

F0 52 00 6E 64 02 00 07 00 F7

Yeah. That patch was created by me. It was the first patch I created, so it was based on the original preset 027 and instead of saving it to a new preset, I accidently wrote over the old one.
Anyway, here's the sysex output after sending "F0 52 00 6E 64 02 00 07 00 F7" to the pedal. Oddly enough, the device ID is the same for the MS-50G+ and the G1Four, "6E".
TXJ1
00000040: 54 00 00 00 83 49 81 5B  83 67 83 8F 83 45 82 F0  T....
None
Checksum error 0x71f165e8

ms_plus_patch.py.txt
Unfortunately my decoder script glitches on this, but I can looks to see why later...

Correction; --summary glitches, but --dump works OK.
$ python3 decode_preset.py -d temp.zptc
Container:
    p = Container:
        l = 460
        v = 2
    length = 460
    version = 2
    fx_count = 6
    targets = Container:
...

ms_plus_patch.txt

Wow! That's very useful. I'll have a go at doing the 7-bit to 8-bit conversion in the web app.
In the mean time, I managed to accidentally send the sysex command to enter firmware update mode to the pedal, and now the pedal won't boot regularly. It's just a black screen, blinking red light, presumably waiting for firmware.
It does show up as a MIDI device when I connect it to my computer, but I'm afraid to start sending MIDI messages to it in fear of bricking it permanently.
I have tried holding down all the buttons while powering up, but it still ends up in the same state.
 Any suggestions on how to tell the pedal to not wait for firmware anymore?

Ah - this is the newer 50G ... so the sysex seems to be quite different to the original and more like the G1XFour?

...I managed to accidentally send the sysex command to enter firmware update mode

Which command did you send?

...I managed to accidentally send the sysex command to enter firmware update mode

Which command did you send?

I don't think we should document that in a public post, at least not until we can document how to fix it at the same time. Currently my pedal is for all practical purposes bricked. If you email me at<EMAIL_ADDRESS>I'll let you know the command in private.

On the G1Four the FW upload process has a display on the screen, it seems unbelievable that the newer MS+ pedals would not have similar display. In seems that you may have discovered a factory mode, or perhaps triggered something very special... :-( The fact that it's not totally dead (ie has USB Midi) is somewhat hopeful.
I (and a user in Russia) had an issue where our pedals 'forgot' what they were (device ID 0x00). But I had a legit FW uploader EXE, and I was able to patch it to be valid for the 0x00 device. Can you confirm the response to 'SysEx Inquiry'?
I also had a glitch when uploading random ZD2's from the Voice line, but that was my 'old' pedal with a broken screen so I don't know if it had anything on it. Randomly poking around of the SPI EEPROM at boot time time recovered that - I figure I must have cause a checksum error, and had it do a global reset....
I really don't know what to suggest. :-(

Figured out/remembered that mido automatically strips the header/footer from SysEx. The checksum works, is the same as G1Four.
ms_plus_patch.py.txt
I've also pushed a change so that --summary doesn't glitch. We will need to figure out the format of the PPRM block for version 2 patches.

Thanks for the input on getting my pedal back to normal operations. I haven't been able to get it back yet, so I'm posting some more info here in the hope that we'll be able to figure this out eventually.
Here's what happened, in detail:

I sent a certain sysex command to the MS-50G+ just as an experiment. I have not seen that command referenced in any of the readme files for the zoon-related github repositories I have looked through, so it was just an unlucky experiment from my side.
The screen on the S-50G+ displayed something along the lines of "Ready to receive firmware. Please restart the pedal".
I did not restart the pedal, but tried sending a few sysex commands to the pedal to see if it would snap out of it. If I remember correctly, I did get replies from the pedal (it likes to send me a "F0 52 00 6E 00 00 F7" message back whenever I send it something it recognizes but doesn't have another reply for), but it would still just display the same message.
Eventually, I disconnected the USB cable from my laptop, leaving the pedal without power.
I connected the pedal to a regular 9V power adaptor. The screen is black, with a slowly blinking red LED.
I connected the pedal to the "Handy Guitar Lab for MS-50G+" app from zoom. The app went into a little dance trying to connect to the pedal and then showing the "Let's connect" screen and then trying to connect, etc. It never managed to connect to the pedal. The pedal has a black screen and a slowly blinking red LED.
I connected the pedal to the computer. It still has a black screen and a slowly blinking red LED. It shows up as a MIDI device in Device Manager and in MIDI-OX.
 I tried a few other regular commands, but got no reply. The screen is just black with a slowly blinking red LED.

So that's the current state: No matter what I do, the screen is black and the red LED is blinking slowly. It shows up as a MIDI device when connected to a computer, but otherwise does not work.

Bummer this is... Just a wild idea, did you try sending audio signal through? This is to check if the pedal did complete the booting?
None of us has yet seen the fw update prompt on the MS-50G+, so it's hard to speculate. From previous models, the fw update mode is usually exclusive from normal mode (default) -- user needs to trigger it on power-on. If you triggered the "Ready to receive the firmware" by sending a SysEx from the normal mode, then this implementation is different.
A good thing is that the pedal is being responding to MIDI. We can try to query it to determine which mode it is in. It's unlikely that you could erase the firmware, since the pedal needs to receive the new one first (verify it, wipe the current module, and then apply). But something is out of order.

Yay! I managed to get the pedal back to working mode again :-D.
So, what I have painfully discovered by careless experimentation is this:

If you send sysex F0 52 00 6E 01 F7 to the MS-50G+, it enters firmware update mode. The screen says "Ready for firmware update! Please restart."
After restart, the pedal screen is black and the red LED is blinking slowly. I assume it's waiting for the firmware sysex over MIDI.
Connect the pedal to your computer. It should show up as a MIDI device. Send sysex F0 52 00 6E 04 F7 to the pedal, and the display will light up and display "Complete!".
Restart the pedal and it's back in normal mode.

I cannot guarantee that this will work for everyone and that it's a reliable method.

@thammer  Now that you're back on the roll. You may dump out the following SysEx -- all of that are info commands (banks, model info, settings, DSP details), nothing of the sorts you painfully "discovered".
F0 52 00 6e 44 00 00 00 00 F7
F0 52 00 6e 48 00 00 00 00 F7
F0 52 00 6e 55 00 00 00 00 F7

F0 52 00 6e 64 0a 00 00 00 F7
F0 52 00 6e 64 11 F7
F0 52 00 6e 64 18 00 00 64 00 F7

We'll try to compare the output to other models, like B2 FOUR and G1 FOUR. Also, which OS are you on?

The version screen displays the following:
System: 1.10
Preset: 1.00
Boot: 1.00
Checksum: EE8E

Here are the 6-byte commands that the MS-50G+ responded to. I added a comment behind those I know what means.
 WARNING: Wipes all user patches!

I mean the PC OS

Haha :-D. I'm on Windows 11 Pro 21H2.

@thammer Now that you're back on the roll. You may dump out the following SysEx -- all of that are info commands (banks, model info, settings, DSP details), nothing of the sorts you painfully "discovered".
F0 52 00 6e 44 00 00 00 00 F7
F0 52 00 6e 48 00 00 00 00 F7
F0 52 00 6e 55 00 00 00 00 F7

F0 52 00 6e 64 0a 00 00 00 F7
F0 52 00 6e 64 11 F7
F0 52 00 6e 64 18 00 00 64 00 F7

We'll try to compare the output to other models, like B2 FOUR and G1 FOUR. Also, which OS are you on?

I'm on Windows 11 Pro 21H2.

Do you have Python3 installed? It's easier to use it for scripting and analysis. Though you can adapt the scripts for JS, if you're more comfy with it.
We can try to list the contents of the pedal's internal filesystem.
Just a warning for your SysEx explorations, some SysEx commands may just erase/format the internal flash, so you'd loose the contents as it's not part of firmware.

On the top of my list of what I want to figure out is:

How can I get the pedal to send me the current patch (what is in memory, possibly not saved to patch memory yet)?
Is it possible to change the effect in a slot without sending the whole patch?

Regarding item 2, I'm pretty sure its the second parameter number that specifies this, but I haven't been able to figure out how to specify the effect.
To set a parameter for an effect in a slot, I do
F0 52 00 6E 64 20 00 <effect slot> <param number> <LSB> <MSB> 00 00 00 F7

To set the effect in slot 0 to nothing (delete effect), I do
F0 52 00 6E 64 20 00 00 01 00  00 00 00 00 F7

In other words, I set parameter number 1 to zero.
I have tried sending some random numbers as LSB and MSB, but the pedal keeps telling me "? Missing effect not found". So there's some effect numbering scheme I haven't figured out (numbers XX and YY below).
F0 52 00 6E 64 20 00 00 01 XX  YY 00 00 00 F7

Get Current Patch (Edit Buffer) SysEx: 64 13
With effect slots, it's trickier as some effects may be "wide" (taking 2 units/slots).

@thammer Glad you're back, it's a big relief when you confirm you haven't destroyed your $$$ pedal ;-)
1). Current patch. Command in the command line python script.
$ python3 zoomzt2.py --help
usage: zoomzt2 [-h] [-d] [-s] [-b BUILD] [-A ADD] [-v VER] [-i ID] [-D DELETE] [-N] [-t TOGGLE] [-w] [-R] [-S]
               [-I | -U | --install-only | --uninstall-only] [-a] [-p PATCHDOWN | -P PATCHUP | -c] [--old-patch] [-M MIDISKIP]
               FILE [FILE ...]

...

ZPTC:
  Process ZPTC patch file

  -p PATCHDOWN, --patchdown PATCHDOWN
                        download specific zptc
  -P PATCHUP, --patchup PATCHUP
                        upload specific zptc
  -c, --curdown         download current zptc

2). Setting invididual parameters is possible via SysEx.
https://github.com/mungewell/zoom-zt2?tab=readme-ov-file#effects-settings

@thammer All the Effects have an ID, 32bits with the high 8 being the effect group.
All the ones that we know are listed:
https://github.com/mungewell/zoom-zt2/blob/master/zoom_fx_AllZDL7/master.txt
There is a script which can 'decode_effect.py'...
$ python3 decode_effect.py -s ZNR.ZD2
0x01000040 : ZNR (v1.50, 4.35%), ZNR.ZD2

Get Current Patch (Edit Buffer) SysEx: 64 13
With effect slots, it's trickier as some effects may be "wide" (taking 2 units/slots).

Wonderful. That worked :-).
F0 52 00 6E 64 13 F7 -> <985 byte long buffer with the current patch>

I'm able to run the python scripts in this repo.

BTW we also have another way (which @shooking  discovered), where pedal sends a textual description of what's on the screen - rather than patch data.
$ head decode_screens.py
#!/usr/bin/python
#
# Script decode 'screen data' from Zoom G1Four
# (c) Simon Wood, 10 Dec 2020
#
# read with:
# $ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 02 00 09 00 F7' -r temp.bin -t 2
#

To list the files on the internal filesystem:

First send SysEx for listing file info for All *.* files; it should return info for the First file:

SysEx: 60 25 00 00 2a 2e 2a 00

Then LOOP to get info for each Next file, until it returns "File Not Found" status:

SysEx: 60 26 00 00 2a 2e 2a 00

End the file list mode:

SysEx: 60 27

Dump it out  here, we'll decode the output. The output contains file name and size.

I changed midiname to "ZOOM MS Plus Series" in zoomzt2.py and was able to connect to the pedal (it changed mode to PC mode).
But I get a million CRC errors:
PS C:\source\zoom-zt2> python zoomzt2.py -R FLST_SEQ.ZT2
Checksum error 0x0
Checksum error 0x0
<repeated until I got bored and pressed CTRL-C>

BTW we also have another way (which @shooking discovered), where pedal sends a textual description of what's on the screen - rather than patch data.
$ head decode_screens.py
#!/usr/bin/python
#
# Script decode 'screen data' from Zoom G1Four
# (c) Simon Wood, 10 Dec 2020
#
# read with:
# $ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 02 00 09 00 F7' -r temp.bin -t 2
#

That works fine on the MS-50G+ as well.

To list the files on the internal filesystem:

First send SysEx for listing file info for All *.* files; it should return info for the First file:

SysEx: 60 25 00 00 2a 2e 2a 00

Then LOOP to get info for each Next file, until it returns "File Not Found" status (7a 7f 7f 7f 0f):

SysEx: 60 26 00 00 2a 2e 2a 00

End the file list mode:

SysEx: 60 27

Dump it out here, we'll decode the output. The output contains file name and size.
P.S. The SysEx commands above are read-only. Please, easy (read not) on trying out other '60' SysEx commands for now.

Here's what I got - 201 files...

Where's the ZT2?
$ cat files.txt | cut -f 1 | cut -d '.' -f 2 | sort | uniq
ZD2
ZIC
ZIR

...Interestingly, there is no FLST_SEQ.ZT2 in the list.

@thammer  Can you try to get info for it explicitly, by naming it in the File Info SysEx?
SysEx: 60 25 00 00 46 4c 53 54 5f 53 45 51  2e 5a 54 32 00

Then File Info end:
SysEx: 60 27

But I get a million CRC errors:

Huh, maybe a bug in the code... you could try disabling the check and just add the block regardless.. https://github.com/mungewell/zoom-zt2/blob/master/zoomzt2.py#L401
It might be that the pedal sends a longer data packet and that length is not correctly interpreted.

I disabled the CRC check and added some debug output.
Oddly enough I had to run the script twice to make it work. The first run it will return lots of short data buffers (length 4) and never complete. But every other run it will return this:
PS C:\source\zoom-zt2> python zoomzt2.py -R output.txt -d
Downloading file
Counter:  0 length:  512
Counter:  1 length:  512
Counter:  2 length:  512
Counter:  3 length:  512
Counter:  4 length:  512
Counter:  5 length:  512
Counter:  6 length:  512
Counter:  7 length:  512
Counter:  8 length:  512
Counter:  9 length:  512
Counter:  10 length:  512
Counter:  11 length:  512
Counter:  12 length:  512
Counter:  13 length:  512
Counter:  14 length:  512
Counter:  15 length:  512
Counter:  16 length:  512
Counter:  17 length:  512
Counter:  18 length:  512
Counter:  19 length:  512
Counter:  20 length:  512
Counter:  21 length:  512
Counter:  22 length:  512
Counter:  23 length:  512
Counter:  24 length:  36
Counter:  25 length:  0
ListContainer:
    Container:
        name = u'BLANK.ZD2' (total 9)
    ListContainer:
        Container:
            group = 1
            groupname = (enum) DYNAMICS 1
            effects = ListContainer:
                Container:
                    effect = u'COMP.ZD2' (total 8)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 16777232
                    group = 1
                Container:
                    effect = u'RACKCOMP.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 16777248
                    group = 1
                Container:
                    effect = u'GRAYCOMP.ZD2' (total 12)
                    version = u'1.20' (total 4)
                    installed = 1
                    id = 16777264
                    group = 1
                Container:
                    effect = u'BLACKOPT.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 16777296
                    group = 1
                Container:
                    effect = u'LMT1176.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 16777312
                    group = 1
                Container:
                    effect = u'ZNR.ZD2' (total 7)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 16777328
                    group = 1
                Container:
                    effect = u'N_GATE.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 16777344
                    group = 1
                Container:
                    effect = u'SLWATK.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 16777360
                    group = 1
            group_end = 1
        Container:
            group = 2
            groupname = (enum) FILTER 2
            effects = ListContainer:
                Container:
                    effect = u'AUTOWAH.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 33554448
                    group = 2
                Container:
                    effect = u'LOWPASSF.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 33554480
                    group = 2
                Container:
                    effect = u'EGFLTR1U.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 33554512
                    group = 2
                Container:
                    effect = u'SEQFLTR.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 33554544
                    group = 2
                Container:
                    effect = u'STEP5G.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 33554576
                    group = 2
                Container:
                    effect = u'GTGEQ75G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 33554608
                    group = 2
                Container:
                    effect = u'PARAEQ5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 33554640
                    group = 2
            group_end = 2
        Container:
            group = 3
            groupname = (enum) DRIVE 3
            effects = ListContainer:
                Container:
                    effect = u'EPSTMP5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331664
                    group = 3
                Container:
                    effect = u'RCBST5G.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331680
                    group = 3
                Container:
                    effect = u'TS_DRIVE.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331696
                    group = 3
                Container:
                    effect = u'GOLD_DRV.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331712
                    group = 3
                Container:
                    effect = u'SWEETDRV.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331728
                    group = 3
                Container:
                    effect = u'ZEN_DRV.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331744
                    group = 3
                Container:
                    effect = u'DYNDRIVE.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331776
                    group = 3
                Container:
                    effect = u'DISTPL5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331792
                    group = 3
                Container:
                    effect = u'DIST1_5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331808
                    group = 3
                Container:
                    effect = u'SQUEAK5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331824
                    group = 3
                Container:
                    effect = u'REDCR5G.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331840
                    group = 3
                Container:
                    effect = u'VIOLTD5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331856
                    group = 3
                Container:
                    effect = u'TB_MK15.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331872
                    group = 3
                Container:
                    effect = u'OCTFUZZ.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331888
                    group = 3
                Container:
                    effect = u'NYC_MUFF.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331904
                    group = 3
                Container:
                    effect = u'WAVSHPR.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331920
                    group = 3
                Container:
                    effect = u'RAZORDRV.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331936
                    group = 3
                Container:
                    effect = u'BGTHRTTL.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50331968
                    group = 3
                Container:
                    effect = u'ACOSIM.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 50332064
                    group = 3
            group_end = 3
        Container:
            group = 4
            groupname = (enum) AMP 4
            effects = ListContainer:
                Container:
                    effect = u'MS45OSLT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67108881
                    group = 4
                Container:
                    effect = u'MS1959LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67108897
                    group = 4
                Container:
                    effect = u'MS800_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67108913
                    group = 4
                Container:
                    effect = u'FDBMANLT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67108929
                    group = 4
                Container:
                    effect = u'FD_TWRLT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67108945
                    group = 4
                Container:
                    effect = u'FDDLXRLT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67108961
                    group = 4
                Container:
                    effect = u'FDMSTRLT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67108977
                    group = 4
                Container:
                    effect = u'UK30A_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67108993
                    group = 4
                Container:
                    effect = u'BGMK1_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109009
                    group = 4
                Container:
                    effect = u'BGMK3_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109025
                    group = 4
                Container:
                    effect = u'RCTORGLT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109041
                    group = 4
                Container:
                    effect = u'XTSBL_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109057
                    group = 4
                Container:
                    effect = u'HW100_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109073
                    group = 4
                Container:
                    effect = u'ORG120LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109089
                    group = 4
                Container:
                    effect = u'DZ_DRVLT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109105
                    group = 4
                Container:
                    effect = u'MACH30LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109121
                    group = 4
                Container:
                    effect = u'KRMPS_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109137
                    group = 4
                Container:
                    effect = u'REDLM_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109153
                    group = 4
                Container:
                    effect = u'VELVT_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109169
                    group = 4
                Container:
                    effect = u'MUDDY_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109185
                    group = 4
                Container:
                    effect = u'7HEVN_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109201
                    group = 4
                Container:
                    effect = u'POLEX_LT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 67109217
                    group = 4
            group_end = 4
        Container:
            group = 6
            groupname = (enum) MODULATION 6
            effects = ListContainer:
                Container:
                    effect = u'CLONECHO.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663328
                    group = 6
                Container:
                    effect = u'SUPERCHO.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663344
                    group = 6
                Container:
                    effect = u'CRNTRI5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663360
                    group = 6
                Container:
                    effect = u'ANA234CH.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663376
                    group = 6
                Container:
                    effect = u'STEREOCH.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663392
                    group = 6
                Container:
                    effect = u'DETUNE5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663424
                    group = 6
                Container:
                    effect = u'TREMOLO.ZD2' (total 11)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 100663440
                    group = 6
                Container:
                    effect = u'PHASER.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663456
                    group = 6
                Container:
                    effect = u'STONEPHA.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663472
                    group = 6
                Container:
                    effect = u'WRPPHASE.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663488
                    group = 6
                Container:
                    effect = u'THEVIBE.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663520
                    group = 6
                Container:
                    effect = u'VINFLNG5.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663536
                    group = 6
                Container:
                    effect = u'KKFLNG1U.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663552
                    group = 6
                Container:
                    effect = u'VIBRATO.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663568
                    group = 6
                Container:
                    effect = u'SWELLVIB.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663584
                    group = 6
                Container:
                    effect = u'OCTAVE5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663600
                    group = 6
                Container:
                    effect = u'PLYOCT.ZD2' (total 10)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 100663632
                    group = 6
                Container:
                    effect = u'HPS.ZD2' (total 7)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663648
                    group = 6
                Container:
                    effect = u'PLYLIGHT.ZD2' (total 12)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 100663665
                    group = 6
                Container:
                    effect = u'GEMINOS.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663680
                    group = 6
                Container:
                    effect = u'RINGMOD.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663696
                    group = 6
                Container:
                    effect = u'SLICER.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 100663712
                    group = 6
            group_end = 6
        Container:
            group = 7
            groupname = (enum) SFX 7
            effects = ListContainer:
                Container:
                    effect = u'AUTOPAN.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 117440528
                    group = 7
                Container:
                    effect = u'LOOPROLL.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 117440544
                    group = 7
                Container:
                    effect = u'HOTSPICE.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 117440560
                    group = 7
                Container:
                    effect = u'BOMBER.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 117440576
                    group = 7
                Container:
                    effect = u'LINESEL.ZD2' (total 11)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 117444352
                    group = 7
                Container:
                    effect = u'BPM_MDL.ZD2' (total 11)
                    version = u'1.00' (total 4)
                    installed = 1
                    id = 117444592
                    group = 7
            group_end = 7
        Container:
            group = 8
            groupname = (enum) DELAY 8
            effects = ListContainer:
                Container:
                    effect = u'DELAY_M.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217744
                    group = 8
                Container:
                    effect = u'ANDLY_M.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217760
                    group = 8
                Container:
                    effect = u'TAPECH_M.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217776
                    group = 8
                Container:
                    effect = u'TPEC3_M.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217792
                    group = 8
                Container:
                    effect = u'DUADLY_M.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217808
                    group = 8
                Container:
                    effect = u'SOFTEC5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217824
                    group = 8
                Container:
                    effect = u'SLAPBKD.ZD2' (total 11)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217840
                    group = 8
                Container:
                    effect = u'PP_DLY_M.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217856
                    group = 8
                Container:
                    effect = u'RVRSDL_M.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217872
                    group = 8
                Container:
                    effect = u'MODDLY_M.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217888
                    group = 8
                Container:
                    effect = u'FLTDLY_M.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217904
                    group = 8
                Container:
                    effect = u'PITDLY_M.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134217920
                    group = 8
                Container:
                    effect = u'HLDDLY_M.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 134218000
                    group = 8
            group_end = 8
        Container:
            group = 9
            groupname = (enum) REVERB 9
            effects = ListContainer:
                Container:
                    effect = u'ROOM5G.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 150994960
                    group = 9
                Container:
                    effect = u'BRGTROOM.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 150994976
                    group = 9
                Container:
                    effect = u'SPRING5G.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 150994992
                    group = 9
                Container:
                    effect = u'HALL5G.ZD2' (total 10)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 150995040
                    group = 9
                Container:
                    effect = u'BRGTHALL.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 150995056
                    group = 9
                Container:
                    effect = u'AIR5G.ZD2' (total 9)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 150995136
                    group = 9
                Container:
                    effect = u'EARLYREF.ZD2' (total 12)
                    version = u'1.10' (total 4)
                    installed = 1
                    id = 150995152
                    group = 9
            group_end = 9
PS C:\source\zoom-zt2>

...Interestingly, there is no FLST_SEQ.ZT2 in the list.

@thammer Can you try to get info for it explicitly, by naming it in the File Info SysEx?
SysEx: 60 25 00 00 46 4c 53 54 5f 53 45 51 2e 5a 54 32 00

Then File Info end:
SysEx: 60 27

Here's the output:
F0 52 00 6E 60 25 00 00 46 4c 53 54 5f 53 45 51 2e 5a 54 32 00 F7 -> F0 52 00 6E 60 04 25 00 00 17  00 00 00 00 00 46 4C 53 54 5F  53 45 51 2E 5A 54 32 00 00 00  24 60 00 00 00 00 00 00 00 00  F7
F0 52 00 6E 00 00 F7 -> F0 52 00 6E 60 03 00 00 00 00  00 F7

But every other run it will return this:

That's pretty AWESOME! If you wanted a more readable table use --summary rather than --dump.
I don't see any installed=0 as we had on the G1Four, so perhaps Zoom has no plans for letting the user upload more - not that would make any difference to US... ;-)

@thammer All the Effects have an ID, 32bits with the high 8 being the effect group.
All the ones that we know are listed: https://github.com/mungewell/zoom-zt2/blob/master/zoom_fx_AllZDL7/master.txt
There is a script which can 'decode_effect.py'...
$ python3 decode_effect.py -s ZNR.ZD2
0x01000040 : ZNR (v1.50, 4.35%), ZNR.ZD2

EDIT you can also get a list of Effects installed on your pedal if you request the FLST_SEQ.ZT2 file (the original purpose of this project)...

I assume I should be able to take one of the effect IDs we have identified above and select it for a specific slot using this command
F0 52 00 6E 64 20 00 <effect slot> 01 <LSB> <MSB> 00 00 00 F7

But I haven't yet understood how to get from the 32 bit Effect ID to a 14 bit LSB + MSB in the message above.

I'm able to list and download files using zoomzt2-gui.py :-).

But I haven't yet understood how to get from the 32 bit Effect ID to a 14 bit LSB + MSB in the message above.

The pedal will actually accept 5x 7-bit 'bytes', ie those extra 0x00 at the end of the packet....
I thought I had something scripted, but don't find it. Basically it would be the same as used for the CRC32 checksum upload.
            packet.append(crc & 0x7f)
            packet.append((crc >> 7) & 0x7f)
            packet.append((crc >> 14) & 0x7f)
            packet.append((crc >> 21) & 0x7f)
            packet.append((crc >> 28) & 0x0f)

I think that a huge applause is needed for @thammer, he's confirmed what we suspected and has opened a new chapter...
I'd also like to ask what he wants to do. Originally he had started a project page of his own. I'd offer my support to that, if he feels that it is more on task with what he wants. I imagine that the general public want a PC/Apple app to control their pedals, and a smaller population what to experiment with uploading new effects.

...I'm able to list and download files using zoomzt2-gui.py

@thammer Great! Can you pull and attach here the FLST_SEQ.ZT2 (it's binary)?  It seems to be different from the older models.

...I'm able to list and download files using zoomzt2-gui.py

@thammer Great! Can you pull and attach here the FLST_SEQ.ZT2 (it's binary)? It seems to be different from the older models.

Here you go.
FLST_SEQ.zip

But I haven't yet understood how to get from the 32 bit Effect ID to a 14 bit LSB + MSB in the message above.

The pedal will actually accept 5x 7-bit 'bytes', ie those extra 0x00 at the end of the packet....
I thought I had something scripted, but don't find it. Basically it would be the same as used for the CRC32 checksum upload.
            packet.append(crc & 0x7f)
            packet.append((crc >> 7) & 0x7f)
            packet.append((crc >> 14) & 0x7f)
            packet.append((crc >> 21) & 0x7f)
            packet.append((crc >> 28) & 0x0f)

That worked very well! Fantastic :-D

Attached is the MS-50G+ FLST_SEQ effects index dump:
ms-50gplus-flst_seq.txt
It lists 105 effects by category:

catid
category
neffects

0
BYPASS
1

1
DYN
8

2
FLT
7

3
DRV
19

4
PRE
22

5

6
MOD
22

7
SFX
6

8
DLY
13

9
REV
7

Category 5 used to be CAB on older models, while category 4 was AMP. On MS-50G+ the amps are now "scaled down" pre-amps (which do use IR profiles), and cabinets are not offered as separate modules.

@thammer Two more info queries for free space on the filesystem SysEx:  60 29, and the filesystem index info SysEx: 60 11.
Again, at this stage I recommend not to experiment with unknown SysEx: 60 commands.

I think that a huge applause is needed for @thammer, he's confirmed what we suspected and has opened a new chapter...
I'd also like to ask what he wants to do. Originally he had started a project page of his own. I'd offer my support to that, if he feels that it is more on task with what he wants. I imagine that the general public want a PC/Apple app to control their pedals, and a smaller population what to experiment with uploading new effects.

Thank you for your kind words :-). You and nomadbyte's help has been invaluable to me.
I would like to create a webpage/web-app where people can exchange their custom patches. It'll probably just be a client-side solution where a user connects his pedal, downloads a patch from the pedal to the web-app, converting into an ASCII string that can be shared in posts in various forums. Others can copy that patch-string into the same web-app and upload it to their pedal.
Next step for me might be to create an editor, first on-line, and perhaps later as a standalone app.
I'd be happy to accept contributions to the code. And I'd be happy to test out any updates you make to your tools, should you decide to support the MS-50G+.

@thammer Two more info queries for free space on the filesystem SysEx: 60 29, and the filesystem index info SysEx: 60 11.
Again, at this stage I recommend not to experiment with unknown SysEx: 60 commands.

Here's what I got from those queries:
F0 52 00 6E 60 29 F7 -> F0 52 00 6E 60 04 29 00 00 08 00 72 58 7A 02 00 74 2D 60 00 00 00 00 00 00 00 F7
F0 52 00 6E 60 11 F7 -> F0 52 00 6E 60 04 11 01 00 08 00 04 00 00 68 07 00 10 0C 00 00 02 00 00 00 00 00 00 F7

MS-50G+:

DiskSize:[72 58 7A 02 00]:6204530 bytes,
DiskFree:[74 2D 60 00 00]:1578740 bytes,
DiskUsage:(6204530-1578740)/6204530. *100% = 75%

Interesting, the TOTAL from the filesystem list is only 3545637 bytes, which is 1080153 short of the DiskUsage; 1MB is being used by something else.

filesystem list is only 3545637 bytes

We already noted that FLST_SEQ.ZT2 not listed, and the block size will likely more space is used than reported file length.

The TOTAL includes the FLST_SEQ.ZT2, I did adjust it. There are just more files that are not listed, at least not listed the "old" way.
The blocksize is 4090 bytes, so the DiskSize is 1517 blocks, DiskFree is 386 blocks. The TOTAL is 968 blocks (aggregated by file). So we're still 163 blocks short, that is 666670 bytes.
If you look at file info SysEx response, all files are attributed with 0x66='f', which may mean "file". While FLST_SEQ.ZT2 info is returned as usual with 0x00. Perhaps, there are just "unlisted" files altogether.

OK, we also have BDL for output EQ, GUARDZDL.ZT2 for blocking some ZD2 and the raw drum samples (do the MS-plus have the drum machine??).

:)  None of this stuff should be on the MS-50G+, especially the GUARDZDL.ZT2 or .raw (no RHYTHM). We can try to get info for those, of course.
The whole thing is that the file info access is now partial. Maybe there's additional parameter to query all.

@thammer  Here's another SysEx to test, this one is related to New/Empty Patch. It may clear the currently selected patch, so for the test your may need to create and select some Test patch which is Ok if it gets cleared.  It may just return a SysEx with an Empty Patch instead.
First SysEx: 64 47
Then SysEx: 64 42

@thammer Here's another SysEx to test, this one is related to New/Empty Patch. It may clear the currently selected patch, so for the test your may need to create and select some Test patch which is Ok if it gets cleared. It may just return a SysEx with an Empty Patch instead.
 I wonder if all that "Received" SysEx output was from the first command or you also used the buttons/controls on the pedal after the first SysEx?

On the B1XFour there is what I call GetMoreData that clears buffers.
GetMoreData	f0 52 00 6e 60 05 00 f7	whats in buffer	seems to flush the current buffer. Useful for getting clean data
So I send a command. Get response. GetMoreData. Repeat
It cleans up the decoding on the earlier pedals at least.
BTW - great work everyone.

...The current patch was cleared after sending the first sysex command.

@thammer Thanks for describing the test in detail. I wonder if all that "Received" SysEx output was from the first command or you also used the buttons/controls on the pedal after the first SysEx?

...Received: F0 52 00 6E 64 20 01 5F 00 55 00 00 00 00 F7
....
...Received: F0 52 00 6E 64 20 01 5F 1B 20 00 00 00 00 F7

This is the new patch name (char[00]:0x55='U', .., char[1B]:0x20=' ' , "USER-003 ....").
From the output you showed, only three first letters are received ("USE"), then letters are missing, and only blanks from the letter 15. Where did the letters in the middle go?

If I turn off parameter edit mode by sending "F0 52 00 6E 51 F7", and then send "F0 52 00 6E 64 47 F7", I get no reply, and the pedal says "New Patch Memory Created".
 I don't know why I got the extra "C0 00" messages last time I tried. I'm not able to reproduce that now.

We have come far :-).
One thing I still haven't figured out is how to upload a patch to the current patch memory (edit buffer) - the opposite of 64 13.
So if I for instance first send 64 13 to get the current patch data, then switch to another patch number on the pedal, or clear the current patch, I would like to know how I could send the patch data back to the pedal to update the current patch memory / edit buffer.

...how to upload a patch to the current patch memory (edit buffer)

Write Current Patch SysEx:28 <patch-data>; actually it's similar to the response of Get Current Patch SysEx:29.
These are "older" commands. SysEx:29 may return some garbage data at the end of the patch; it's still a valid patch, just may not be properly initialized past its end. So for getting the Current Patch/Edit Buffer use SysEx:64 13, that one includes a checksum. It may be possible to send back the received 64 12 but in my tries it did not work as expected. SysEx: 28 worked OK.

@thammer Another query to dump settings, SysEx: F0 52 00 6e 64 18 00 00 64 00 F7, not sure if this model responds.

F0 52 00 6e 64 18 00 00 64 00 F7
It responded :-).

 Sometimes that let find some more hidden sysex. I am guessing you are doing this but the pedal isn't emitting the special sauce?

I have created a simple web app that uses the Web MIDI API, here:
https://www.waveformer.net/zoom-explorer/
I also have some code snippets that I run from a local version of that webpage that I haven't published yet, as it isn't very well structured.
So I'm basically just sending some MIDI messages to the pedal and listening to what it sends back using regular Web MIDI.
I would really like to be able to listen to the traffic between Zoom's Handy Guitar Lab for MS-50G+ (iPhone) and the pedal, but I haven't figured out a way to do that yet.

Not sure about the iPhone. If there is a Mac app then Wireshark can tun on that. I used it on Windows with the older pedals.

...how to upload a patch to the current patch memory (edit buffer)

Write Current Patch SysEx:28 <patch-data>; actually it's similar to the response of Get Current Patch SysEx:29.
These are "older" commands. SysEx:29 may return some garbage data at the end of the patch; it's still a valid patch, just may not be properly initialized past its end. So for getting the Current Patch/Edit Buffer use SysEx:64 13, that one includes a checksum. It may be possible to send back the received 64 12 but in my tries it did not work as expected. SysEx: 28 worked OK.

If I send sysex command 29, I get two short replies:
Sent: F0 52 00 6E 64 29 F7
Received: F0 52 00 6E 00 00 F7
Received: F0 52 00 6E 64 2A F7

I don't know what that means.
If I send sysex command 64 13, I get back a 985 bytes long sysex that starts with "F0 52 00 6E 64 12 01 50 06 00..."
I assume everything after (not including) the sixth byte is the patch data, ending with the 5 (7-bit) byte CRC and F7.
If I try to send that same patch data back to the pedal using sysex command 28, I get no reply, and nothing changes on the pedal.

...Sent: F0 52 00 6E 64 29 F7

You need to send SysEx: 29 , not 64 29.

...Sent: F0 52 00 6E 64 29 F7

You need to send SysEx: 29 , not 64 29.

Sorry. That was a typo. If I send "F0 52 00 6E 29 F7 ", I get no reply. If I try to set the patch with "F0 52 00 6E 28  F7", I get no reply, and the pedal doesn't change state. The patch data I send start with "01 50 06 00", and ends with the 5 7-bit byte CRC.

BTW - I would like to link your work on ZoomPedalFun wiki so others can find it.
If you are OK with this please send the link I should add.
I can also open up ZPF wiki if you or others would like to tabulate these new strings for the device - we cab also check if it unlocks other strings on the older pedals.
Best regards
Steve

...The patch data I send start with "01 50 06 00", and

The 7bit packed patch data starts with 04 50 54 43 46, in SysEx: 28 is without checksum.
As for SysEx:29 giving you no response, you may want to send Editor Mode On SysEx:50 before it (51 is Off). Though, it's possible that MS-50G+ no longer supports the "older" SysEx.

...The patch data I send start with "01 50 06 00", and

@thammer The 7bit packed patch data starts with 04 50 54 43 46; SysEx: 28 is without checksum.
As for SysEx:29 giving you no response, you may want to send Editor Mode On SysEx:50 before it (51 is Off). Though, it's possible that MS-50G+ no longer supports the "older" SysEx.

I tried sending command 50 first, and then a new message with 29. This works fine with my MS-50G, but it does not work with the MS-50G+.

Great! As I mentioned earlier, SysEx:28 does not need a checksum.

Great! As I mentioned earlier, SysEx:28 does not need a checksum.

Noted.
Do we know what those 5 bytes I shaved off before the patch data represent?
64 12 01 50 06

The first two (64 12) represent the data type (patch data). But what about the remaining 3 bytes (01 50 06)?

...The current patch was cleared after sending the first sysex command.

@thammer Thanks for describing the test in detail. I wonder if all that "Received" SysEx output was from the first command or you also used the buttons/controls on the pedal after the first SysEx?

...Received: F0 52 00 6E 64 20 01 5F 00 55 00 00 00 00 F7
....
...Received: F0 52 00 6E 64 20 01 5F 1B 20 00 00 00 00 F7

This is the new patch name (char[00]:0x55='U', .., char[1B]:0x20=' ' , "USER-003 ....").
From the output you showed, only three first letters are received ("USE"), then letters are missing, and only blanks from the letter 15. Where did the letters in the middle go?

Yes. This is strange.
I tried sending the same two commands using the MIDI-OX software, just to see if there was a problem with my code, but I got a similar reply in MIDI-OX.
  If you are OK with this please send the link I should add.
I can also open up ZPF wiki if you or others would like to tabulate these new strings for the device - we cab also check if it unlocks other strings on the older pedals.
Best regards Steve

Hi Steve.
That's kind of you.
You could link to https://github.com/thammer/zoom-explorer/ and https://www.waveformer.net/zoom-explorer/.
If you give me access to the ZPF wiki, I can add some of the commands I know works with the MS-50G+.

...But what about the remaining 3 bytes (01 50 06)?

In SysEx: 64 12, 50 06 is length of the unpacked data, that is the patch (0x50 + 0x06*128 = 848 bytes)

@thammer How did you get the SysEx: 64 26 response? You mentioned it on your repo's README. I wonder what was the SysEx request or action?

@thammer How did you get the SysEx: 64 26 response? You mentioned it on your repo's README. I wonder what was the SysEx request or action?

I first send the parameter edit enable command F0 52 00 6E 50 F7. Then, whenever I change to a different patch on the pedal using the arrow up or down buttons, the pedal will send a burst of MIDI messages. This is what happens when I change to patch number 42 using the arrow buttons:
1 Received: F0 52 00 6E 64 26 00 00 04 00 01 00 F7
2 Received: F0 52 00 6E 64 20 00 64 02 29 01 00 00 00 F7
3 Received: B0 00 00
4 Received: B0 20 04
5 Received: C0 01

Message number 1 is F0 52 00 6E 64 26   00 00 <bank> 00 <program> 00 F7.
Message number 2 is tempo, F0 52 00 6E 64 20 00 64 02 <LSB> <MSB> 00 00 00 F7
Message number 4-5 is program and bank change, isn't it? I haven't looked to closely at it.
I'm not sure why the pedal sends message number 3?

@mungewell What are your thoughts on having zoomzt2.py support the MS Plus pedals?
If you're interested, I have a few small local changes that I could clean up and submit a PR for.

...I'm not sure why the pedal sends message number 3?

Bank number is 2 7-bit bytes, and consists of  MSB (most significant bits, as set with MIDI:B0 00) and LSB (least significant bits, MIDI: B0 20)

What are your thoughts on having zoomzt2.py support the MS Plus pedals?

@thammer I am all for it, from comments so far this might be as easy as adding some changes so that the different Midi identification is recognized. Please continue discussions on this topic under #71.

Closing, this should all be working now with latest release.


fix: allow "foo/bar@baz" values in uses property

Fixes #77

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


removed app context refreshing

Phases
MP
MM
MB
MR
JM
Total

ETA
0
0
0
0
0
0

Developing
1
0
0
0
0
0

Review
0
0
0
0
0
0

Total
-
-
-
-
-
0

ETA est.

0

ETA cust.
-
-
-
-
-
0

Problem description
The checks are passing. Please fix the problematic test and remove the refreshing of the application context.

Accomplished here: https://github.com/dataquest-dev/DSpace/pull/796


[bug] WebviewWindow doesn't adhere to x,y WindowOptions

Describe the bug
When I try to create a new window using WebviewWindow with x,y options, the newly created Window appears on the Display, based on the x,y coordinates, but then jumps to the primary Display. I have to use setPosition method to move it to the right Display.
Sample code here:
async function createNewWindow(position: PhysicalPosition) {
	const label = "sw-1"+Math.round(Math.random()*1000000)

	const window_options: WindowOptions = {
		title: label,
		x: position.x, // broken, use setPosition()
		y: position.y, // broken, use setPosition()
		visible: false,
		theme: "dark"
	}

	let webview = new WebviewWindow(label, window_options)
	await webview.once('tauri://created', async function() {
		console.log('tauri://created');

		// position was reset to 0,0
		console.log(await webview.position())

		// we need to set position here again:
		// await webview.setPosition(position)

		await webview.show()
	});

	await webview.once('tauri://error', function(e) {
		console.log('tauri://error', e);
	});
}

Reproduction
No response
Expected behavior
A New Window should appear on the Display based on the x ,y and stay there. This is how it worked in Tauri 1.
Full tauri info output
[✔] Environment
    - OS: Windows 10.0.22631 x86_64 (X64)
    ✔ WebView2: 129.0.2792.89
    ✔ MSVC: Visual Studio Community 2022
    ✔ rustc: 1.79.0 (129f3b996 2024-06-10)
    ✔ cargo: 1.79.0 (ffa9cf99a 2024-06-03)
    ✔ rustup: 1.27.1 (54dd3d00f 2024-04-24)
    ✔ Rust toolchain: stable-x86_64-pc-windows-msvc (environment override by RUSTUP_TOOLCHAIN)
    - node: 20.15.0
    - npm: 10.7.0
    - bun: 1.1.21

[-] Packages
    - tauri 🦀: 2.0.5
    - tauri-build 🦀: 2.0.1
    - wry 🦀: 0.46.2
    - tao 🦀: 0.30.3
    - tauri-cli 🦀: 2.0.3
    - @tauri-apps/api : 2.0.3
    - @tauri-apps/cli : 2.0.3

[-] Plugins
    - tauri-plugin-shell 🦀: 2.0.2
    - @tauri-apps/plugin-shell : 2.0.1

[-] App
    - build-type: bundle
    - CSP: unset
    - frontendDist: ../build
    - devUrl: http://localhost:1420/
    - framework: Svelte
    - bundler: Vite

Stack trace
No response
Additional context
No response

I can't reproduce, please make a minmal repro

I can't reproduce, please make a minmal repro

Here's a repo

opened https://github.com/tauri-apps/tao/pull/992 to fix it, thanks for the repro

Awesome! Thanks!


UI Enhancement for Age calculator

Title and Issue number

Title : UI Enhancement fore age calculator
Issue No. : #795
Code Stack : Html , css
Close #795

before:

After:

Video (mandatory)

https://github.com/apu52/METAVERSE/assets/79627715/cc1a5731-ef40-495e-b48f-21066bc44939
Checklist:

[x] I have mentioned the issue number in my Pull Request.
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have created a helpful and easy to understand README.md
[x] I have gone through the  contributing.md file before contributing

Additional context (Mandatory )
Are you contributing under any Open-source programme?

[ ] I'm a GSSOC'24 contributor
[x] I'm a SSOC'24 contributor

@anuragverma108  considered implementing a dark mode switch, but I believe this theme is more visually appealing than the standard dark and light alternatives.

@HWKDS there are some recent changes in this same project .that's why this PR is facing some merging conflicts .please try to resolve the merging conflicts & try to make a new PR .

Will make a new one .
But it Will take some time due to my ongoing examination

@HWKDS there are some recent changes in this same project .that's why this PR is facing some merging conflicts .please try to resolve the merging conflicts & try to make a new PR .

Will make a new one . But it Will take some time due to my ongoing examination

no problem .take ur time .I am closing this PR for now . But the issue is still open So u can submit your new PR.


nixos/pgadmin: don't assume creation of user

Description of changes

Updated the PGAdmin module to be in line with e.g. Caddy, which does not assume that the service user is created with users.users.
with lib was replaced with inherit (lib)
Ran nixfmt

Using an external user was tested and found to be working (1, 2) with Kanidm's POSIX account functionality. WebUI is confirmed to be accessible while running as said user.
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

Apologies for the plethora of force pushes/rebases as I juggle figuring out how git rebase works/how to check for missing inherits without pushing (nix eval .#nixosConfigurations.aer.config.system.build.toplevel --override-input nixpkgs ~/Documents/nixpkgs) etc.
Everything should be good to merge, assuming there aren't any more edits you'd like


add BME

@al6ifj First stage of verification passed, official domain for Budapest University of Technology and Economics is hit.bme.hu as far as I verified. This is just an informational note. Pull request is still in the review. I appreciate your patience while waiting for the final decision.

@al6ifj Thank you for your patience while waiting for a review and processing your request. Pull request merged.


Recursive imports crashes

Hi :) Thanks for this plugin. I encountered this little bug on a project with circular dependencies.
I assume the issue is in the recursive in the reduce, we may need a check if this dependency has already been discovered, and break the loop.
Expected Behavior
Build should not crash when 2 less files imports each others.
Actual Behavior
An infinite loop in starts in this code https://github.com/iam-medvedev/esbuild-plugin-less/blob/main/src/less-utils.ts
Steps to Reproduce the Problem
a.less imports b.less, b.less imports a.less
It is a real use case when we load other less files as "reference" to have all exported mixins and variables, without importing the raw CSS from it.
Versions

esbuild: 0.19.10
esbuild-plugin-less: 1.3.1
Platform: Node / MacOS

Sorry for the long delay. Fixed in v1.3.7


bug: CoinbaseWalletConnector resets to mainnet on refresh

Is there an existing issue for this?

[X] I have searched the existing issues

Package Version
0.6.6
Current Behavior
After connecting with Coinbase Wallet and switching networks, if I refresh the page the network is reset to mainnet.
If I open the Coinbase Wallet extension, it still thinks I'm connected to the network I originally switched to.
Expected Behavior
After refreshing the page, I expect to be on the same network.
Steps To Reproduce
I've shared a link to a repro below.

Start dev server.
Connect with Coinbase.
Switch to Polygon.
Refresh the page.

Link to Minimal Reproducible Example (CodeSandbox, StackBlitz, etc.)
https://github.com/markdalgleish/wagmi-coinbase-chain-issue
Anything else?
I've dug into the logic a bit, and I can manually pass in a chainId to the Coinbase connector, but internally it falls back to the first chain if a chain ID wasn't passed in.
Instead, this logic might need to fall back to the chain the Coinbase Wallet extension is already connected to. When using the extension, I found that the CoinbaseWalletSDK instance has a walletExtension property with a getChainId method that returns the expected chain ID on load. If I hard code this value as the 2nd arg to makeWeb3Provider, it seems to resolve the issue.

Fixed on 0.6.7


Using Whispering to dictate in multiple languages in my work as a patent translator

Hi Braden,
Thanks so much for this amazing tool, which is super handy in my work as a Dutch-English patent translator. It allows me to easily switch back and forth between Dutch and English dictation. Something like this was totally impossible only a few years ago when I was still struggling with Dragon Naturally Speaking.
I usually use Talon, for English dictation and voice commands, but have recently switched to using Whispering for Dutch and English dictation, and Talon for commands.
I've also written a quick post about Whispering over on LinkedIn so fellow translators become aware of it as well: https://www.linkedin.com/posts/michaelbeijer_%3F%3F%3F%3F%3F-%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F-%3F%3F%3F-activity-7210317838350233600-vMZa?utm_source=share&utm_medium=member_desktop
Michael

I think you just lost this auto switch language ability in V4 ;) as state in this issue #116

Hey everyone, thank you for bringing this to my attention!
@OLH21 as of writing, #125 was merged and now closes #116. Thank you again, everyone—would not have made this feature without this issue!

Also @michaelbeijer , thank you so much for the shoutout! Really appreciate it :)

I've also written a quick post about Whispering over on LinkedIn so fellow translators become aware of it as well: https://www.linkedin.com/posts/michaelbeijer_%3F%3F%3F%3F%3F-%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F-%3F%3F%3F-activity-7210317838350233600-vMZa?utm_source=share&utm_medium=member_desktop


Handle errors in Task callbacks

Any task could cause an Error by throwing an exception. This handles
those by wrapping task function calls in a try/catch and then pushes
errors to the errors callback. Closes #4

Going to verify this doesn't breaking Promises.


Update README

README requires review by a fresh set of eyes. Some specific requirements are:

improved install instructions for Windows users
links to example data and notebooks

Think i can help.

This is now done


fix(react): remove the default shadow

Purpose
Remove the shadow set for elevation 0 paper in the default theme
Related Issues

Issue #1 or (None)

Related PRs

Related PR #1 or (None)

Checklist

[ ] UX/UI review done on the final implementation.
[ ] Story provided. (Add screenshots)
[ ] Manual test round performed and verified.
[ ] Unit tests provided. (Add links if there are any)
[ ] Documentation provided. (Add links if there are any)

Security checks

[ ] Followed secure coding standards in http://wso2.com/technical-reports/wso2-secure-engineering-guidelines?
[ ] Ran FindSecurityBugs plugin and verified report?
[ ] Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets?

Let's update the snapshots before merging :)


make script issue

https://github.com/cxd4/rsp/blob/855a26f53497d5f51273ceadbc4998541c551495/make.sh#L19
It should just be a single equal sign, the double equals causes this error in the shell
./make.sh: 19: [: x86_64: unexpected operator

GNU Bash conditional syntax

When the ‘==’ and ‘!=’ operators are used, the string to the right of the operator is considered a pattern and matched according to the rules described below in Pattern Matching, as if the extglob shell option were enabled. The ‘=’ operator is identical to ‘==’.

conditional expressions in bash

string1 == string2
string1 = string2

True if the strings are equal. When used with the [[ command, this performs pattern matching as described above (see Conditional Constructs).
‘=’ should be used with the test command for POSIX conformance.

I have never seen the = variant in shell script checks before.  The latter of the two sources seems to suggest it may be the superior alternative in the case of test commands (i.e., conditional suspensions delimited between [ and ] before returning to the calling shell).

@bryanperris what version shell are you using?  If you are on Windows, was this the result of running ./make.sh in Windows 10's UNIX shell script support from within Git Bash?
Unless it is a non-bash shell (I am not sure if that's possible for this file; I'm not an expert on various shells.), bash --version should identify the full version of GNU bash you are using.  So what is the output of that?  e.g.,
bash-5.1$ bash --version
GNU bash, version 5.1.8(1)-release (x86_64-slackware-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Ubuntu 21.04
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
The odd thing now that it works, also zsh is the shell I use, but I added #!/bin/bash and thought it still had the same issue

I guess I'm just uncertain if it can be concluded that the non-POSIX-compliant == necessarily was what caused the syntax error at the time you used to get it, among other borrowed syntactical deviations I was using outside of that.
I will agree that I have found more than enough evidence that = is more universally compatible than ==, so there can be no harm from eliminating that possibility in the (most likely) event that it was the cause or could have been.  I am not very good with bash so almost certainly had to have copied that convention years ago off of somewhere; aside from C sentimentality there is no advantage to keeping it the way it is.  So this ticket will be closed as soon as the syntax is corrected for better compatibility.

Also the script should provide the shebang, especially if you prefer the bash style comparison.

I'm not sure what the "shebang" is in reference to.  If there is another good idea missing in the implementation that is outside the issue here I would be happy to look at a separate ticket.

shebang is #!/bin/bash at the very first line of the file, its good practice to have it in every script that way the shell figures out exactly what interpreter to run for the script.  Python files can include #!/bin/python to run script automatically in the python environment else the shell may try to parse the python script as bash or sh.
https://en.wikipedia.org/wiki/Shebang_(Unix)
I am not an bash expert either, I always have to google things for bash.

What about using cmake over scripts?  You won't then need platform specific scripts as cmake works under windows, msys2, Mac and linux

Cmake can be setup to let the user to specify settings they want to enable through -D args

My experience thus far has been pretty positive with projects depending on CMake to build them.  It's usually quite the time-saver for larger projects with lots of dependencies my distribution doesn't officially track out-of-the-box, so while I am needing to build a complex package on my distro I can get detailed errors of what I'm missing when a project requires CMake.
I also like that it's more high-level than the plain old GNU make is.  I will typically just use low-level shell scripts because a) I haven't learned how to use CMake and not sure I have time to learn it and b) most of my projects are very simple and low on dependency requirements (if any exist), so there is less for CMake to have to configure.  It's mostly just me being lazy; I wouldn't see anything wrong with keeping a contributed CMake build alternative to the existing low-level script I can maintain.  However, if problems do arise with my shell script solution being dependent on a particular flavor shell (such as bash), I do also see them as opportunities to learn how to eliminate those and practice making more agnostic shell scripts.

Cmake can be setup to let the user to specify settings they want to enable through -D args

I actually ended up having to learn that just recently.  I was building OpenMW (which was more of a pain for me because Slackware has no automatic dependency resolution (which I am content with for the most part)), and the cutting-edge branch required a version of bullet library that needed to be build with double-precision.  So I had to edit the SlackBuild to append -DBT_USE_DOUBLE_PRECISION to CMAKE_C_FLAGS since none of the pre-built packages for that library would let me compile OpenMW.
To be fair, though, that particular feature is also supported in plain shell scripts.  You would just instead pass -DBT_USE_DOUBLE_PRECISION as an operand to GCC, so I think the syntax is the same for both CMake and old-fashioned Unix shell scripts in that regard.

You can also use environment vars CFLAGS and CXXFLAGS as well.
Are you directly adding -DBT_USE_DOUBLE_PRECISION to CMAKE_C_FLAGS? Remember the -D defined variables are only visible inside of Cmake and not the underlying toolchain with the exception of some variables that auto translate to C/CXX flags.
Maybe you just need: export CLFAGS=" BT_USE_DOUBLE_PRECISION " before running the make`
Are you part of the Discord64 server?

https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=17624&sid=f5190231c49c8eee2ac77cac0a338d90#p17624

I quickly wrote up a CMakeLists file for the library, and verified it compiles and executes.  I haven't tested it under Windows or msys2.
https://github.com/bryanperris/rsp/blob/master/CMakeLists.txt

It had worked out fine the way I did it.  The SlackBuild is basically just a shell script that references a tarred/compressed source archive for compiling and linking the package.  (And I just really did not feel like unzipping, editing the CMake lists, and re-zipping with an updated macro.)  So yes, in so many words, I added the -DBT_USE_DOUBLE_PRECISION to SLKCFLAGS (which more-or-less directly equates to the CMAKE_C_FLAGS vector passed by the SlackBuild/SLK CFLAGS).


WOTS in spec

All parts mentioning WOTS should be removed

https://github.com/iotaledger/wallet.rs/pull/385


Top-level await support in @swc-node/jest

I use top-level await in TS, and it works fine, however, Jest tests importing modules with top-level await don't work. If they are supposed to work, let me know and I'll prepare a minimal broken demo, which works with TS but modules can't be tested with Jest, either with @swc-node/jest or with other methods. It is not clear where the problem lies, as of now. It could be swc, Jest or somewhere else. It may be related to #120 or not.

I encountered the same issue. It seems to me, @swc/jest (or @swc/core) ignore some settings in the tsconfig, like "module" or "target".


How to validate indentation of prop values?

OSX 10.12.6, eslint 4.9.0, eslint-plugin-react 7.4.0, babel-eslint 8.0.1.
This code does not trigger any warnings (with jsx-indent and jsx-indent-props set to ["error", 2]):
return (
  <Component
    prop={true}
    anotherProp={[
      {
        id: 1
      },
  {
        id: 2
  }
    ]}
  />
);

Is there a way to trigger a warning for mis-indented curly braces around second object in anotherProp? My expectation is that the value of anotherProp would be treated as a regular array of objects, triggering an indent warning from eslint (or jsx-indent-props from eslint-plugin-react).

What's the setting for the indent rule?

@ljharb same, ["error", 2].

hm, I do wonder if JSXElement * needs to be refined a bit. Just for testing, let's remove that one, and see what it complains about? My expectation is that it will fix the array in question but probably will break other things.

Indeed, setting "indent": [ "error", 2, { "ignoredNodes": [ "JSXElement" ] }] helped: invalid indentation in my test case is correctly identified and fixed.

For now, that's a great workaround; would you mind filing this on airbnb/javascript? I don't think it's an issue with this repo.

Thanks, will do!


defcomponent - missing some serializable types?

Arcadia release seems to be missing String, GameObject, Transform (probably more)
  (import '[UnityEngine Vector3 Color GameObject])

  (arcadia.core/defcomponent Hinted [^String s ^int i ^float f ^GameObject go ^Transform t ^Vector3 v ^Color c] )

  (.AddComponent (find-name "Cube") Hinted)

results:

Any updates on this?

It's back in again! Keeping an eye on it though.


Add german translation

Hello.
I'm creating a german chat bot using the microsoft bot framework.
So I tought it would be useful if I translated the messages into german.

Hi @haefele, I'm your friendly neighborhood Azure Pull Request Bot (You can call me AZPRBOT). Thanks for your contribution!

In order for us to evaluate and accept your PR, we ask that you sign a contribution license agreement. It's all electronic and will take just minutes. I promise there's no faxing. https://cla.azure.com.

TTYL, AZPRBOT;

Thanks for your contribution.


Implement a stub kclient package for odo

Signed-off-by: John Collier<EMAIL_ADDRESS>What type of PR is this?
/kind feature
What does does this PR do / why we need it:
This PR implements a stub kclient package for use in odo (particularly for use with the upcoming Devfile integration), allowing odo to interact with non-OpenShift clusters (as occlient requires an OpenShift cluster). For now, the forked k8s.io/client-go is used, as it will work fine on non-OpenShift clusters, but we should consider pulling down the upstream version when possible.
The following files are added to the new kclient package:

kclient.go - For creating and initializing a Kube client with client-go
pods.go - For interacting with pods. Has just two functions in it right now: WaitAndGetPod and ExecCMDInContainer.
pods_test.go and fakeclient.go: For running tests against the kclient package

Which issue(s) this PR fixes:
Fixes https://github.com/openshift/odo/issues/2436
How to test changes / Special notes to the reviewer:

cd pkg/kclient
go test

johns-mbp-3:odo johncollier$ cd pkg/kclient/
johns-mbp-3:kclient johncollier$ go test
 ✓  Waiting for component to start [225986ns]
 ✗  Waiting for component to start [106133ns]
 ✗  Waiting for component to start [111110ns]
PASS
ok  	github.com/openshift/odo/pkg/kclient	0.118s

/ok-to-test

/retest

@dharmit @kadel @girishramnani I've updated the PR to address your review comments, please review at your convenience, thanks!

/approve

This is a good start. 👍
/lgtm
It maybe takes a little bit too much a similar approach o our current occlient package. Which I think doesn't have a good structure. I wouldn't be afraid to do big changes. But we can do that as we start using kclient in new code.


[beta] Clarify Instruction for "Regular Expressions: Match Characters that Occur One or More Times"

Challenge match-characters-that-occur-one-or-more-times has an issue.
User Agent is: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36.
This is not a bug, but something I suspect could confuse people.
I think the second sentence of the following example

could be clearer if it was changed to

Because of the +, it would also find a single match (...)

Also, the next sentence could be slightly changed, and moved to it's own paragraph to make it easier to read.

If it instead were checking the (...)

ooh, missed this. Will do this too!


False positive for react/prop-types in namespaced components

const SideMenu = ({ children }) => (

    {children}

);

SideMenu.propTypes = {
  children: React.PropTypes.node,
};

SideMenu.Item = ({ onClick, children }) => (

{children}

);

SideMenu.Item.propTypes = {
  onClick: React.PropTypes.func,
  children: React.PropTypes.node,
};

Here eslint complains about missing prop types validation for SideMenu.Item

Why is it a false positive? SideMenu.Item is a component, and it needs propTypes.

Yes, and as you can see in the provided code chunk propTypes are defined on it. But it seems that eslint does not see it.

aha, thanks for clarifying :-)


Support looking up Japanese-English

Like this

Beta version is not availrable.
https://github.com/wtetsu/mouse-dictionary/wiki/Getting-started

@RobertB4
Thank you for pointing it out.
The scripts "*-ja" are no longer needed, so I'll remove them.
My first idea was creating another build in order to support the Japanese-English feature. "*-ja" are scripts for the build. My current idea is make one build support both English-Japanese and Japanese-English. I'm developping it in another branch. The beta version was built from this branch.
https://github.com/wtetsu/mouse-dictionary/tree/feature/support_ja-en
Note: In reallity,  this extension can lookup English-* and Japense-*.(e.g. English-Spanish, Japanese-Chinese, ...)

v1.2.0


Added gradle support in UI for spring framework

@harsha-wedaa please review again and merge if it looks good to you.


APIs design issues for performance testing

Performance testing APIs are not designed rigorously, which can easily lead to unfair treatment by many frameworks.
I found the following problems:

What the / route returns is actually a Map or content waiting to be json encoded. Many frameworks here support it and use json.encode
/echo reads it from the body as JSON content. Here you need to use the json.decode function
/json_obj This is where the JSON performance routing should really be verified

I ask this question because Dart's own JSON encoding/decoding is notoriously inefficient, and while there are alternatives in Dart, they are not commonly used.
And I found that only one of the reports of this performance test is for JSON data, but it is unfair to require all Dart frameworks to use json.encode and json.decode.
I have a few suggestions as follows:

/constant - used to test the matching performance of hard-coded routes
/text - used to test the processing performance of plain text
/json/encode - used to test JSON encoding performance
/json/decode - used to test JSON decoding performance
/form-data - used to test FormData decoding performance
/dynamic-route/<param> - used to test dynamic route matching performance

Those are really great ideas! Thanks a lot for suggesting them.
I also need to implement a way to have JIT and AOT comparisons.


Use portable version for usleep

usleep is not available on Windows.

https://github.com/Mergifyio backport humble iron