Implemented avoid throwing an error if private key is missing unless .send() is executed

This is a WIP PR for resolving the issue https://github.com/o1-labs/snarkyjs/issues/930
Issue discovered while working on https://github.com/sqrt-xx/mina-ui-deployment
The related discussion thread is: https://discord.com/channels/484437221055922177/1109079490111479848

Unfortunately I am having huge issues building, should it be the following?
git submodule update --init --recursive
npm run build:node

I could not find the info in current https://github.com/o1-labs/snarkyjs/blob/e55c71d1c47011c78d8c23a0db0eae394ff2c8af/CONTRIBUTING.md guide.
Another problem I face is
npm run test

gives
./run-jest-tests.sh: line 3: shopt: globstar: invalid shell option name

my bash version is 5.2.15(1)-release so I don't get why I have this issue but this I can resolve myself.

Even if tests are passing and review is positive please hold on with merging until I test with AURO.

I also plan to PR https://github.com/o1-labs/snarkyjs-bindings/blob/main/mina-transaction/gen/transaction.ts#L112 change this to
authorization: string | undefined;

thanks a lot for your efforts @marekyggdrasil!
Yes, as you found out you need git submodule update --init before you can build.

I also plan to PR https://github.com/o1-labs/snarkyjs-bindings/blob/main/mina-transaction/gen/transaction.ts#L112 change this to
authorization: string | undefined;

that file is auto-generated, so please don't edit it. We also need a signature on the fee payer for some interactions with OCaml. Right now in snarkyjs we use a dummy signature if we need to

Thank you @mitschabaude for your comments! It's very helpful.
I updated the code to use dummy signature to indicate signature is missing. This should not violate the OCaml code.
If you have any other suggestions please feel free to share. In the meantime I will test it with AURO and see if I can fund new account.

Don't worry @mitschabaude I'm happy to handle that.
Here's some update. I tested with AURO and SnarkyJS no longer blocks the transaction building. AURO seems to successfully sign it and post it. Below you can find a zkApp deployment transaction that was signed and broadcasted using AURO wallet.
https://berkeley.minaexplorer.com/transaction/5JvA3mhiWmQxiak2dsh3vRBT355tGBxy6mYbpFeJ19FHqJPCzDEr
Unfortunately, the transaction was failed anyway, due to another reason Account_nonce_precondition_unsatisfied. Is it unnecessary to increment the nonce? Do you mind leaving some hints?
As always, many thanks!

Unfortunately, the transaction was failed anyway, due to another reason Account_nonce_precondition_unsatisfied. Is it unnecessary to increment the nonce?  SnarkyJS should handle that correctly if you tell it what the fee payer is, with Mina.transaction(sender, () => {...}). Did you do that?

@mitschabaude you were right!
Behold the first in history zkApp deployed via UI using AURO wallet!
https://berkeley.minaexplorer.com/transaction/5JvRpM56zg5goMez3Kw9sj5vLakn6B5xRZeu4pgc2VnucYPtpEyX
https://berkeley.minaexplorer.com/wallet/B62qqy8Fya3ghPZYuzfqVXpz1JZuT6YsuDjzDQAiACfKZS6UjsU599q
Got any champagne? ;)
Thanks for pointing out the type signature problem. Of course I'll fix and I'll also add a test to check if lack of private key is detected while .send is run. Please hold on with merging!

🍾

@mitschabaude would you approve of adding an integration test of transaction building? Thinking of what would be a good way to test it. From what I see none of the AccountUpdate validators are tested currently.

Yeah I would approve. FWIW we have lots of tests that test transaction building from various perspectives, for example all the "integration tests" that CI runs have some form of local zklApp e2e flow.
But I'm very much in favor of adding tests for particular aspects, like signing here. You could make it a .unit-test.ts (plain nodejs script, should throw an error when the test fails), or a Jest test

@mitschabaude I implemented a jest test case, thanks for the hints!
I have just one more suggestion. I noticed that the bindings is perfectly capable to detect the missing signature. Before even my AccountUpdate validation is executed, the bindings already throws Check signature: Invalid signature on fee payer for key {public key here}. For that reason I suggest to revert my changes from mina.ts. Let me know what do you think about it.

@mitschabaude I implemented a jest test case, thanks for the hints!
I have just one more suggestion. I noticed that the bindings is perfectly capable to detect the missing signature. Before even my AccountUpdate validation is executed, the bindings already throws Check signature: Invalid signature on fee payer for key {public key here}. For that reason I suggest to revert my changes from mina.ts. Let me know what do you think about it.

That's interesting! According to my reading of the code, that's unexpected. But I think even if the check is redundant, it doesn't hurt to leave it in. I'll investigate this when there's time, but the code at this point seems solid enough and I'd be in favor of merging

Thanks @mitschabaude for your time! If anything else is needed feel free to ping me, happy to help with Snarky!


Testnet-Prod < Main Sync

Description

Type of change

[ ] Docs change / dependency upgrade
[ ] Configuration / tooling changes
[ ] Refactoring
[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Requires changes in customer code

High-level change(s) description - from the user's perspective

Related Issue(s)
Fixes
Related pull request(s)

Merging since we just tested these on staging CI.


Enable Firewall on Node, Add Windows Firewall rules for required ports

What this PR does / why we need it:
Secures K8's Windows Nodes by enabling Firewall.
Allows only Master node to connect to kubelet ports
Creates Firewall exceptions for container websockets for communicating to PowerShell Console workloads
The fixes have been verified in DF cluster.
Release note:
- Enable Firewall (with exceptions) for Windows Nodes to lockdown access to the nodes

This change is

@raghushantha,
Thanks for your contribution as a Microsoft full-time employee or intern. You do not need to sign a CLA.
Thanks,
Microsoft Pull Request Bot

Incorrect PR. Meant to merge with Anders's fork


"Omit value" option for loot tracker

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always
frustrated when [...]
No related problems to what I would like to suggest.  Loot tracker doesn't have an option for not counting value of a specific loot, i.e. if I kill zulrah and receive 237 scales, 2 calquat seeds and 12 noted dragon bones I may consider leaving the calquat seeds as they are a very low value.  Other times you have possibly received the drop but were unable to collect it due to dying in an instance for example, and thus can't count that loot anymore.  Loot tracker only finds what was dropped and adds them together with no way to remove in certain circumstances for more precise measurement of gain.
Describe the solution you'd like
A clear and concise description of what you want to happen.
The most user-friendly option I could think of personally would consist of a user being able to simply left click one of the loots displayed from a recent kill.  It would act as a toggle to remove the item's value from the overall value displayed.  It should also have some clear visual feedback, such as turning the panel behind that item specifically red to show that the loot's value has been omitted.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've
considered.
A possible solution might be to include a minimum value threshold for drops received in the player's name.  This would help players set the value to act as a catch all for loots under a specific amount to just not be added to the tracker.  This wouldn't offer the functionality of removing drops that were unable to be secured as previously described.
Additional context
Add any other context or screenshots about the feature request here.
Example of what visual feedback what look like if player selected to omit noted flax from loot:
https://i.imgur.com/Bq8QWaY.png

If I could suggest a visual improvement, maybe the bank filler icon could be displayed on top of the item instead of painting the background red.

I think there should be a "Hide items below x gp" option.


wrong recognition via microphone but perfect via wav upload

Related to #141
So I'm running client/server setup (from the tutorial) with a Raspberry 3B with docker.
I have this soundcard and this microphone.
I've tried to speak different sentences and it was never recognized correctly.

what time is it  -> turn on the bedroom light
tell me the time -> turn on the living room lamp
whats the temperature -> turn on bedroom light
how cold is it -> how hot is it (this seems to be close, but it's just random, see next attempt)
how hot is it -> turn on the bedroom light

Also the hotword doesn't work.
See logs at the bottom.
When I record on the same Raspberry wav file with this command:
arecord -r 16000 -f S16_LE -c 1 -t wav -d 4 -D hw:CARD=Device,DEV=0 how-cold-is-it.wav

and upload the file to rhasspy, all my 5 sentences are recognized correctly.
Of course I use the same microphone the same distance, voice, ...
Rhasspy logs during the recording. First two were recorded via Hold to record, the others via Tap to record.
# server start

DEBUG:__main__:Namespace(host='<IP_ADDRESS>', log_level='DEBUG', port=12101, profile='en', set=[], ssl=None, system_profiles='/usr/share/rhasspy/profiles', user_profiles='/profiles')
DEBUG:RhasspyCore:Loaded profile from /profiles/en/profile.json
DEBUG:RhasspyCore:Profile files will be written to /profiles/en
DEBUG:root:Loading default profile settings from /usr/share/rhasspy/profiles/defaults.json
DEBUG:WebSocketObserver: -> started
DEBUG:DialogueManager: -> started
DEBUG:DialogueManager:started -> loading
DEBUG:DialogueManager:Loading actors
DEBUG:DialogueManager:Actors created. Waiting for ['recorder', 'player', 'speech', 'wake', 'command', 'decoder', 'recognizer', 'handler', 'speech_trainer', 'intent_trainer', 'word_pronouncer'] to start.
DEBUG:ARecordAudioRecorder: -> started
DEBUG:DummyAudioPlayer: -> started
DEBUG:DummySentenceSpeaker: -> started
DEBUG:RemoteRecognizer: -> started
DEBUG:SnowboyWakeListener: -> started
DEBUG:WebrtcvadCommandListener: -> started
DEBUG:RemoteDecoder: -> started
DEBUG:DummyIntentHandler: -> started
DEBUG:DummySpeechTrainer: -> started
DEBUG:DummyIntentTrainer: -> started
DEBUG:PhonetisaurusPronounce: -> started
DEBUG:DialogueManager:recorder started
DEBUG:WebrtcvadCommandListener:started -> loaded
DEBUG:DialogueManager:player started
DEBUG:DialogueManager:speech started
DEBUG:DialogueManager:recognizer started
DEBUG:DialogueManager:decoder started
DEBUG:DialogueManager:handler started
DEBUG:DialogueManager:speech_trainer started
DEBUG:DialogueManager:intent_trainer started
DEBUG:DialogueManager:word_pronouncer started
DEBUG:DialogueManager:command started
DEBUG:SnowboyWakeListener:Loading snowboy model from /profiles/en/snowboy/snowboy.umdl
DEBUG:SnowboyWakeListener:Loaded snowboy model snowboy/snowboy.umdl ({'sensitivity': '0.5', 'audio_gain': 1.0, 'apply_frontend': False})
DEBUG:SnowboyWakeListener:started -> loaded
DEBUG:DialogueManager:wake started
DEBUG:DialogueManager:Actors loaded
DEBUG:DialogueManager:loading -> ready
INFO:DialogueManager:Automatically listening for wake word
DEBUG:DialogueManager:ready -> asleep
DEBUG:SnowboyWakeListener:loaded -> listening
DEBUG:ARecordAudioRecorder:started -> recording
INFO:__main__:Started
DEBUG:ARecordAudioRecorder:['arecord', '-q', '-r', '16000', '-f', 'S16_LE', '-c', '1', '-t', 'raw', '-D', 'hw:CARD=Device,DEV=0']
DEBUG:__main__:Starting web server at http://<IP_ADDRESS>:12101
DEBUG:ARecordAudioRecorder:Recording from microphone (arecord)
Running on https://<IP_ADDRESS>:12101 (CTRL + C to quit)
[2020-01-05 11:33:58,771] ASGI Framework Lifespan error, continuing without Lifespan support
WARNING:quart.serving:ASGI Framework Lifespan error, continuing without Lifespan support
[2020-01-05 11:34:02,684] <IP_ADDRESS>:64160 GET / 1.1 200 1029 24961
INFO:quart.serving:<IP_ADDRESS>:64160 GET / 1.1 200 1029 24961
[2020-01-05 11:34:02,701] <IP_ADDRESS>:64137 GET /api/events/log 1.1<PHONE_NUMBER>
INFO:quart.serving:<IP_ADDRESS>:64137 GET /api/events/log 1.1<PHONE_NUMBER>
ERROR:__main__:api_events_log
Traceback (most recent call last):
  File "app.py", line 1123, in api_events_log
    text = await q.get()
  File "/usr/lib/python3.6/asyncio/queues.py", line 167, in get
    yield from getter
concurrent.futures._base.CancelledError
ERROR:quart.serving:Error in ASGI Framework
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/hypercorn/asgi/wsproto.py", line 91, in handle_asgi_app
    await asgi_instance(self.asgi_receive, self.asgi_send)
  File "/usr/local/lib/python3.6/dist-packages/quart/asgi.py", line 106, in __call__
    await _cancel_tasks(pending)
  File "/usr/local/lib/python3.6/dist-packages/quart/asgi.py", line 189, in _cancel_tasks
    raise task.exception()
  File "/usr/local/lib/python3.6/dist-packages/quart/asgi.py", line 157, in handle_websocket
    'code': 1000,
  File "/usr/local/lib/python3.6/dist-packages/hypercorn/asgi/wsproto.py", line 149, in asgi_send
    await self.asend(CloseConnection(code=int(message["code"])))
  File "/usr/local/lib/python3.6/dist-packages/hypercorn/asyncio/wsproto.py", line 93, in asend
    self.write(self.connection.send(event))
  File "/usr/local/lib/python3.6/dist-packages/wsproto/__init__.py", line 64, in send
    data += self.connection.send(event)
  File "/usr/local/lib/python3.6/dist-packages/wsproto/connection.py", line 101, in send
    "Connection cannot be closed in state %s" % self.state
wsproto.utilities.LocalProtocolError: Connection cannot be closed in state ConnectionState.CLOSED
[2020-01-05 11:34:02,782] Error in ASGI Framework
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/hypercorn/asgi/wsproto.py", line 91, in handle_asgi_app
    await asgi_instance(self.asgi_receive, self.asgi_send)
  File "/usr/local/lib/python3.6/dist-packages/quart/asgi.py", line 106, in __call__
    await _cancel_tasks(pending)
  File "/usr/local/lib/python3.6/dist-packages/quart/asgi.py", line 189, in _cancel_tasks
    raise task.exception()
  File "/usr/local/lib/python3.6/dist-packages/quart/asgi.py", line 157, in handle_websocket
    'code': 1000,
  File "/usr/local/lib/python3.6/dist-packages/hypercorn/asgi/wsproto.py", line 149, in asgi_send
    await self.asend(CloseConnection(code=int(message["code"])))
  File "/usr/local/lib/python3.6/dist-packages/hypercorn/asyncio/wsproto.py", line 93, in asend
    self.write(self.connection.send(event))
  File "/usr/local/lib/python3.6/dist-packages/wsproto/__init__.py", line 64, in send
    data += self.connection.send(event)
  File "/usr/local/lib/python3.6/dist-packages/wsproto/connection.py", line 101, in send
    "Connection cannot be closed in state %s" % self.state
wsproto.utilities.LocalProtocolError: Connection cannot be closed in state ConnectionState.CLOSED
[2020-01-05 11:34:02,991] <IP_ADDRESS>:64160 GET /api/sentences 1.1<PHONE_NUMBER>5
INFO:quart.serving:<IP_ADDRESS>:64160 GET /api/sentences 1.1<PHONE_NUMBER>5
INFO:quart.serving:<IP_ADDRESS>:64165 GET /api/events/log 1.1 101 - 94782
[2020-01-05 11:34:03,026] <IP_ADDRESS>:64165 GET /api/events/log 1.1 101 - 94782
DEBUG:__main__:Loading phoneme examples from /usr/share/rhasspy/profiles/en/phoneme_examples.txt
[2020-01-05 11:34:03,071] <IP_ADDRESS>:64160 GET /api/profiles 1.1<PHONE_NUMBER>2
INFO:quart.serving:<IP_ADDRESS>:64160 GET /api/profiles 1.1<PHONE_NUMBER>2
INFO:quart.serving:<IP_ADDRESS>:64166 GET /api/slots 1.1 200 2 55695
[2020-01-05 11:34:03,078] <IP_ADDRESS>:64166 GET /api/slots 1.1 200 2 55695
INFO:quart.serving:<IP_ADDRESS>:64167 GET /api/phonemes 1.1 200 1526 56969
[2020-01-05 11:34:03,079] <IP_ADDRESS>:64167 GET /api/phonemes 1.1 200 1526 56969
[2020-01-05 11:34:03,081] <IP_ADDRESS>:64172 GET /api/profile 1.1 200 8697 56679
INFO:quart.serving:<IP_ADDRESS>:64172 GET /api/profile 1.1 200 8697 56679
INFO:quart.serving:<IP_ADDRESS>:64160 GET /api/profile 1.1 200 6825 28885
[2020-01-05 11:34:03,113] <IP_ADDRESS>:64160 GET /api/profile 1.1 200 6825 28885
INFO:quart.serving:<IP_ADDRESS>:64166 GET /api/unknown-words 1.1 200 2 19630
[2020-01-05 11:34:03,116] <IP_ADDRESS>:64166 GET /api/unknown-words 1.1 200 2 19630
INFO:quart.serving:<IP_ADDRESS>:64168 GET /api/microphones 1.1 200 1010 117473
[2020-01-05 11:34:03,140] <IP_ADDRESS>:64168 GET /api/microphones 1.1 200 1010 117473
[2020-01-05 11:34:03,142] <IP_ADDRESS>:64169 GET /api/speakers 1.1 200 2 118582
INFO:quart.serving:<IP_ADDRESS>:64169 GET /api/speakers 1.1 200 2 118582
[2020-01-05 11:34:03,144] <IP_ADDRESS>:64167 GET /api/problems 1.1<PHONE_NUMBER>6
INFO:quart.serving:<IP_ADDRESS>:64167 GET /api/problems 1.1<PHONE_NUMBER>6
[2020-01-05 11:34:03,148] <IP_ADDRESS>:64172 GET /img/favicon.png 1.1<PHONE_NUMBER>2
INFO:quart.serving:<IP_ADDRESS>:64172 GET /img/favicon.png 1.1<PHONE_NUMBER>2

#################  recording ###########################

speak: what time is it

INFO:quart.serving:<IP_ADDRESS>:64263 POST /api/start-recording 1.1 200 2 10670
[2020-01-05 11:34:17,455] <IP_ADDRESS>:64263 POST /api/start-recording 1.1 200 2 10670
DEBUG:__main__:Recorded 154604 byte(s) of audio data
DEBUG:RemoteDecoder:POSTing 154604 byte(s) of WAV data to http://<IP_ADDRESS>:12101/api/speech-to-text
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/speech-to-text?profile=en HTTP/1.1" 200 14
DEBUG:__main__:make the on it
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/text-to-intent?profile=en&nohass=True HTTP/1.1" 200 582
DEBUG:__main__:{"entities": [{"end": 7, "entity": "state", "raw_end": 7, "raw_start": 5, "raw_value": "on", "start": 5, "value": "on"}, {"end": 25, "entity": "name", "raw_end": 25, "raw_start": 12, "raw_value": "bedroom light", "start": 12, "value": "bedroom light"}], "intent": {"confidence": 0.86, "name": "ChangeLightState"}, "raw_text": "turn on the bedroom light", "raw_tokens": ["turn", "on", "the", "bedroom", "light"], "siteId": "default", "slots": {"state": "on", "name": "bedroom light"}, "speech_confidence": 1, "text": "turn on the bedroom light", "time_sec": 0.11514592170715332, "tokens": ["turn", "on", "the", "bedroom", "light"], "wakeId": ""}
[2020-01-05 11:34:20,244] <IP_ADDRESS>:64263 POST /api/stop-recording 1.1<PHONE_NUMBER>068
INFO:quart.serving:<IP_ADDRESS>:64263 POST /api/stop-recording 1.1<PHONE_NUMBER>068

speak: tell me the time
[2020-01-05 11:34:35,228] <IP_ADDRESS>:64370 POST /api/start-recording 1.1 200 2 10497
INFO:quart.serving:<IP_ADDRESS>:64370 POST /api/start-recording 1.1 200 2 10497
DEBUG:__main__:Recorded 143084 byte(s) of audio data
DEBUG:RemoteDecoder:POSTing 143084 byte(s) of WAV data to http://<IP_ADDRESS>:12101/api/speech-to-text
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/speech-to-text?profile=en HTTP/1.1" 200 23
DEBUG:__main__:tell room lamp to light
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/text-to-intent?profile=en&nohass=True HTTP/1.1" 200 606
DEBUG:__main__:{"entities": [{"end": 7, "entity": "state", "raw_end": 7, "raw_start": 5, "raw_value": "on", "start": 5, "value": "on"}, {"end": 28, "entity": "name", "raw_end": 28, "raw_start": 12, "raw_value": "living room lamp", "start": 12, "value": "living room lamp"}], "intent": {"confidence": 0.67, "name": "ChangeLightState"}, "raw_text": "turn on the living room lamp", "raw_tokens": ["turn", "on", "the", "living", "room", "lamp"], "siteId": "default", "slots": {"state": "on", "name": "living room lamp"}, "speech_confidence": 1, "text": "turn on the living room lamp", "time_sec": 0.1124122142791748, "tokens": ["turn", "on", "the", "living", "room", "lamp"], "wakeId": ""}
[2020-01-05 11:34:37,758] <IP_ADDRESS>:64370 POST /api/stop-recording 1.1<PHONE_NUMBER>18
INFO:quart.serving:<IP_ADDRESS>:64370 POST /api/stop-recording 1.1<PHONE_NUMBER>18

speak: whats the temperature
[2020-01-05 11:34:58,226] <IP_ADDRESS>:64526 POST /api/start-recording 1.1 200 2 10570
INFO:quart.serving:<IP_ADDRESS>:64526 POST /api/start-recording 1.1 200 2 10570
DEBUG:__main__:Recorded 165164 byte(s) of audio data
DEBUG:RemoteDecoder:POSTing 165164 byte(s) of WAV data to http://<IP_ADDRESS>:12101/api/speech-to-text
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/speech-to-text?profile=en HTTP/1.1" 200 34
DEBUG:__main__:blue temperature turn on how light
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/text-to-intent?profile=en&nohass=True HTTP/1.1" 200 560
DEBUG:__main__:{"entities": [{"end": 7, "entity": "state", "raw_end": 7, "raw_start": 5, "raw_value": "on", "start": 5, "value": "on"}, {"end": 21, "entity": "name", "raw_end": 21, "raw_start": 8, "raw_value": "bedroom light", "start": 8, "value": "bedroom light"}], "intent": {"confidence": 0.86, "name": "ChangeLightState"}, "raw_text": "turn on bedroom light", "raw_tokens": ["turn", "on", "bedroom", "light"], "siteId": "default", "slots": {"state": "on", "name": "bedroom light"}, "speech_confidence": 1, "text": "turn on bedroom light", "time_sec": 0.10992002487182617, "tokens": ["turn", "on", "bedroom", "light"], "wakeId": ""}
[2020-01-05 11:35:01,208] <IP_ADDRESS>:64526 POST /api/stop-recording 1.1<PHONE_NUMBER>380
INFO:quart.serving:<IP_ADDRESS>:64526 POST /api/stop-recording 1.1<PHONE_NUMBER>380

speak: how cold is it
[2020-01-05 11:35:20,878] <IP_ADDRESS>:64677 POST /api/start-recording 1.1 200 2 10701
INFO:quart.serving:<IP_ADDRESS>:64677 POST /api/start-recording 1.1 200 2 10701
DEBUG:__main__:Recorded 154604 byte(s) of audio data
DEBUG:RemoteDecoder:POSTing 154604 byte(s) of WAV data to http://<IP_ADDRESS>:12101/api/speech-to-text
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/speech-to-text?profile=en HTTP/1.1" 200 24
DEBUG:__main__:room bedroom light to it
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/text-to-intent?profile=en&nohass=True HTTP/1.1" 200 283
DEBUG:__main__:{"entities": [], "intent": {"confidence": 0.86, "name": "GetTemperature"}, "raw_text": "how hot is it", "raw_tokens": ["how", "hot", "is", "it"], "siteId": "default", "slots": {}, "speech_confidence": 1, "text": "how hot is it", "time_sec": 0.13121891021728516, "tokens": ["how", "hot", "is", "it"], "wakeId": ""}
[2020-01-05 11:35:23,855] <IP_ADDRESS>:64677 POST /api/stop-recording 1.1<PHONE_NUMBER>675
INFO:quart.serving:<IP_ADDRESS>:64677 POST /api/stop-recording 1.1<PHONE_NUMBER>675

speak: how hot is it
[2020-01-05 11:35:41,422] <IP_ADDRESS>:64823 POST /api/start-recording 1.1 200 2 10871
INFO:quart.serving:<IP_ADDRESS>:64823 POST /api/start-recording 1.1 200 2 10871
DEBUG:__main__:Recorded 165164 byte(s) of audio data
DEBUG:RemoteDecoder:POSTing 165164 byte(s) of WAV data to http://<IP_ADDRESS>:12101/api/speech-to-text
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/speech-to-text?profile=en HTTP/1.1" 200 11
DEBUG:__main__:turn on set
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): <IP_ADDRESS>:12101
DEBUG:urllib3.connectionpool:http://<IP_ADDRESS>:12101 "POST /api/text-to-intent?profile=en&nohass=True HTTP/1.1" 200 582
DEBUG:__main__:{"entities": [{"end": 7, "entity": "state", "raw_end": 7, "raw_start": 5, "raw_value": "on", "start": 5, "value": "on"}, {"end": 25, "entity": "name", "raw_end": 25, "raw_start": 12, "raw_value": "bedroom light", "start": 12, "value": "bedroom light"}], "intent": {"confidence": 0.86, "name": "ChangeLightState"}, "raw_text": "turn on the bedroom light", "raw_tokens": ["turn", "on", "the", "bedroom", "light"], "siteId": "default", "slots": {"state": "on", "name": "bedroom light"}, "speech_confidence": 1, "text": "turn on the bedroom light", "time_sec": 0.10613441467285156, "tokens": ["turn", "on", "the", "bedroom", "light"], "wakeId": ""}
[2020-01-05 11:35:44,458] <IP_ADDRESS>:64823 POST /api/stop-recording 1.1<PHONE_NUMBER>194
INFO:quart.serving:<IP_ADDRESS>:64823 POST /api/stop-recording 1.1<PHONE_NUMBER>194

my profile.json
{
    "intent": {
        "remote": {
            "url": "http://<IP_ADDRESS>:12101/api/text-to-intent"
        },
        "system": "remote"
    },
    "microphone": {
        "arecord": {
            "device": "hw:CARD=Device,DEV=0"
        },
        "pyaudio": {
            "device": "2"
        },
        "system": "arecord"
    },
    "sounds": {
        "system": "dummy"
    },
    "speech_to_text": {
        "remote": {
            "url": "http://<IP_ADDRESS>:12101/api/speech-to-text"
        },
        "system": "remote"
    },
    "text_to_speech": {
        "system": "dummy"
    },
    "wake": {
        "system": "snowboy"
    }
}

Hi @timaschew
Am I right you run arecord outside of docker?
If you have custon asound.conf it may be the reason
Try to run arecord from docker container and check the result
For reference please check the link below.  It's for hassio addon but it will work for you too
https://community.rhasspy.org/t/hass-io-addon-make-rhasspy-use-custom-asound-conf/106

And for hotword please try https://github.com/synesthesiam/rhasspy/issues/117#issuecomment-569540334
I believe it's hardware or docker misconfuguration...

Am I right you run arecord outside of docker?

No, I've can run the command in the host and in the docker container. In both cases the wav files is good. This is how I did it:

disabled audio recording in the settings (otherwise there is a "device busy error") and restart rhasspy
copy hash from docker ps and start a bash inside the container: docker exec -it 02d69699c7fd bash
then execute the record command in the profiles directory (file is mounted to the host automatically).

If you have custom asound.conf it may be the reason

This is my /home/pi/.asoundrc file:
pcm.!default {
        type hw
        card 1
}

ctl.!default {
        type hw
        card 1
}

I've copied the file to the container: sudo docker cp /home/pi/.asoundrc 02d69699c7fd:/root/.asoundrc
and restarted rhasspy and nothing has changed.
Changing the snowboy settings did also not help, but I don't expect that this will work before the manual triggered recording is working.

I've changed the code to use wav instead of raw but it didn't help.
@synesthesiam Any chance to save the recorded wav files to listen them and find out what's wrong with them?

Yes, the plan is to add an intent tests page where you can record examples and use them as unit tests for your assistant.
In the mean time, something could be added to have Rhasspy write recorded commands (WAVs) out to a directory. Would this be helpful?

Yes, that would be great!

v2.4 and v2.5 both have playback buttons for the last recorded voice command


consider  adding mouse lock

i like to start steam in cage for many reasons
but i can't play shooters or any other games that need mouse lock
also a feature i would love
is a key combo that unlocks my mouse
and let's my drag it over cage without it locking again

Please see if https://github.com/Hjdskes/cage/pull/215 solves your issue with mouse lock.

yes it does appear to work tried running gzdoom and cs:go
I am going to test one more thing launching cage outside of a windows manager just to make sure I'm not messing something up

at least with gzdoom cage has a bug where in headless mode your character can only turn so far before you get stuck
i am 90% certain this is the mouse getting stuck on the edge of the window because it doesn't get sent back to the center of the screen
I can kinda of tell because when i pause the game the cursor is not in the center of my screen like it would be outside of cage or while cage is running with sway as the head (have not tested other compositors yet)
it works for what i intended though and that is good enough for me

Please see if #215 solves your issue with mouse lock.

it's been almost a year, that issue was closed since then, can you still implement something similar?

any updates on this issue? cage would become a really useful minimal package to replace having to use gamescope for games which don't correctly lock / confine the cursor. Minecraft 1.8.9 is one of these which behaves really badly.

Ref https://github.com/cage-kiosk/cage/pull/300


Mapbox reverse geocoder errors our on certain points due to literal number as address

It seems that the Mapbox Geocoding API will occasionally return the address field of the result as a literal number instead of the expected string encoded number (as per this link). This causes problems for the json decoder which is expecting a string.
Here's a test case to see what I am talking about
package main_test

import (
	"testing"

	"github.com/codingsince1985/geo-golang/mapbox"
)

var key string = "<your-key-here>"

func TestReverseGeocode(t *testing.T) {
	g := mapbox.Geocoder(key)
	_, err := g.ReverseGeocode(-33.932933, 150.865816)
	if err != nil {
		t.Error("Got an error:", err)
	}
}

I've filed a bug with Mapbox but as this may happen for more points it may be worthwhile to fix/handle in this library. At the very least it would be worthwhile to keep track of this for future devs running into this problem.

The Mapbox people have got back to me and have updated their code to ensure .address is always returned as a string. Closing this.

Thank you @ezk84 for the update!


Added new method to join array using comma as separator.

As starting to look into the project I just started with an small improvement on how to create the parameters strings comma separated from the array.
I hope have time to be helping you on it, is quite nice app :)

I just saw a mac os demo app on xiaomi site, could be used as reference as well.
https://www.yeelight.com/en_US/developer
https://www.yeelight.com/download/developer/yeelight_local_mac_demo.zip

The demo app is quite intricated. Some parts are written in Chinese and no so interesting features are available. I prefer to refer to Developer Protocol Specification.
I need to build a new UI for the Yeelight class. If you would like, this is the new step =)

Any design suggestion? :)

Any design you want. In any case, there is a previous version design in the main README file

On 25 Feb 2018, at 08:39, jesuslg123<EMAIL_ADDRESS>wrote:
Any design suggestion? :)
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub https://github.com/alessandro308/YeelightController/pull/3#issuecomment-368289952, or mute the thread https://github.com/notifications/unsubscribe-auth/AFzmbPl-V7zt0JsadVyNP5yd95BkfTwmks5tYQ4_gaJpZM4SSGZ7.


0.23 migrations add superuser

Hi, I'm currently experimenting with 0.23.0-rc14 and migrations.
In the docs there is an example for adding an Admin in version 0.22:
    const admin = new Admin();
    admin.email =<EMAIL_ADDRESS>    admin.setPassword("1234567890")

    dao.saveAdmin(admin)

How can I do this with 0.23?
I've tried it like so, which did not work:
    const record = new Record(
        "_superusers",
        {email<EMAIL_ADDRESS>password: "1234567890"},
    )
    app.save(record)

Thanks! I'm sorry for the issue!


Stationary obstacles always return hit

When running mission evaluation, all stationary obstacles are always hit.
When reviewing trajectory in the KML produced by the server, UAS seems to clear the obstacles.
Here's our database dumped from the server, kml from server, kml with UAS telemetry and obstacles and scoring generated by the server.
Any help would be greatly appreciated.
mission data.zip

I'm having trouble importing your database (complaining about a unique constraint violation), and as it wasn't dumped in formatted (e.g. --format=json --indent=2) I can't read it manually. Can you re-upload the database dump?
I see that you're using a custom kml render. Ideally after #311 next year that won't be necessary. Hopefully that's right (e.g. not mixing radius vs diameter, feet vs meters, etc).
From what I can tell, the KML does show it doesn't go near the stationary obstacles. Let's try and narrow down the source. Can you comment out line 154-157 here and rerun the evaluation? Does that still return a hit?

For posterity, what I was seeing in KML:

Here's the indented log. I'll follow up with the commented lines shortly.
database_indent.zip

One thing I noticed, the xslx file uploaded has 1,154 telemetry points, but executing the following command indicates there are 323,956 points. There appears to be telemetry data spanning 3 different days according to timestamps.
$ grep "auvsi_suas.gpsposition" database_indent.json | wc -l
323956

Yeah we ran tests on a few days but didn't clean up between flights. Only clearing on/off clock and in/out flight events.

I ran an evaluation with the commented out lines and all stationary obstacles return false as expected.

Wasn't able to import it again despite trying to manipulate the dump. So let's try something else.
Can you add the following snippets so that if a collision is detected with interpolation it logs the test data so we can create a unit test from it to reproduce?
Add this to the top of the stationary obstacle file:
import logging
logger = logging.getLogger(__name__)

Then add this to the if-statement block on line 157:
logger.warning('Collision: (%s, %s, %s)' % (str(self), str(uas_telemetry_logs[i - 1]), str(cur_log)))

I get this error running at runtime when adding the logger.
[Tue Jun 12 00:59:31.354365 2018] [wsgi:error] [pid 92:tid<PHONE_NUMBER>33120] No handlers could be found for logger "auvsi_suas.models.stationary_obstacle"
Do you want me to dump some specific tables to help you with the import?

Filed #317 for the logger issue.
Was able to do the import finally, turns out that the "admin logging" table is what was conflicting (guessing that loaddata generates events and populates the logging table, which then later fails to import).

Still working on putting that logged data into a unit test to reproduce. Current suspicion is that the interpolation code doesn't handle the distinction between the line between points intersecting the cylinder, and the line segment between points intersecting.

@yogishadixit Can you take a look tonight to verify?
If this is indeed the situation, then I think the most reliable route forward given the limited time to code (just tomorrow morning effectively) would be to implement #314.

I'm signing off for tonight. I'll check in tomorrow to work on any fixes we might need.
Thank you @GodCed and @AGuilbault for finding this and helping to triage/diagnose the issue!

Our pleasure @pmtischler. Let us now if you need anything.

Just merged in #319. This should be fixed- I verified with the data you provided.


Short solution needed: "Get current year and month" (python-pandas)

Please help us write most modern and shortest code solution for this issue:
Get current year and month (technology: python-pandas)
Fast way
Just write the code solution in the comments.
Prefered way

Create pull request with a new code file inside inbox folder.
Don't forget to use comments to make solution explained.
Link to this issue in comments of pull request.

Get current year and month


haskellPackages.xattr: fix build with attr-2.4.48 (see ##53716)

Motivation for this change
Fixes the build with attr-2.4.48. I've submitted with patch (https://github.com/deian/libattr-hs/pull/3) to upstream as well.
Things done

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

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

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

This patch needs to be backported to 19.03 as well.

@GrahamcOfBorg build haskellPackages.xattr

Cherry-picked to 19.03 in 009976d1b9f3649d16ebf0a3fd40833bd0cb243c.


Not working on newer new Reddit

While the extension works on the older new Reddit, on newer new Reddit it is not working.
e.g. For this comment, older new Reddit:

Newer new Reddit:

I heard that the newer new UI is presented randomly (A/B testing) and I am not sure whether there is a way to force the use of older / newer new UI.

Hmmm I'll have to look into how feasible it is to implement it here. It wouldn't surprise me if jsAPI just isn't implemented in this new view at all, and if it's not then I'll need to introduce a new compatibility shim to get it working.
FWIW this view is available at https://sh.reddit.com and so is referred to as "shreddit"


Warn when using ${workspaceFolder} in a multiroot workspace

Testing #44447
Steps to Reproduce:

In a multiroot workspace:

{
	"folders": [
		{
			"path": "/Users/matb/projects/a"
		},
		{
			"path": "/Users/matb/projects/b"
		}
	],
	"settings": {
		"launch": {
			"version": "0.2.0",
			"configurations": [
				{
					"type": "node",
					"request": "launch",
					"name": "Launch Program",
					"program": "${workspaceFolder}/index"
				}
			]
		}
	}
}

(The settings were migrated automatically from my workspace settings)

Try debugging

Bug

This error makes sense but what you need to do to address it is not very clear. We should something in the message about needing to use ${workspaceFolder:X} in multi-root workspaces
Possibly related to #44449

This problem should never hit the debug adapter like this.
VS Code should prevent that launch configs with unresolved variables are started.

/findDuplicates

Nice try bot
Duplicate of https://github.com/Microsoft/vscode/issues/44411


Update User Guide

Add get zoom link and venue documentation
Add command summary

Codecov Report

Merging #38 (87c9abe) into master (3b23c50) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master      #38   +/-   ##
=========================================
  Coverage     72.15%   72.15%
  Complexity      399      399
=========================================
  Files            70       70
  Lines          1232     1232
  Branches        125      125
=========================================
  Hits            889      889
  Misses          311      311
  Partials         32       32

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 3b23c50...87c9abe. Read the comment docs.

LGTM


Acceptance Tests for #253 view all the documents and forms that have been submitted with a booking request

User story
#253
Acceptance Test Checklist

[x] View document/form by downloading it on booking request page.
[x] Upload document/form on booking request page.

Tested and accepted.


heres why i uploaded to thunderstore.

heres the proof im crimsonteam. yes i uploaded both mods to thunderstore so people dont take time to compile the github project and download stuff. i just made it so people can download it easily, and faster then compiling. im sorry if i made you mad or annoyed. i will not take credit for any mods i upload. i will link your kofi link in the upload later tomorrow or later midnight. once you upload fusion im deleting my upload. same with the mag perception upload i did.

Please stop reuploading people's mods. I speak on behalf of most code modders that we'd rather them not be uploaded until finished, especially ones without licenses permitting that, and without permission being asked in the first place. I don't care whether or not you link my kofi, just dont upload them. If you want people to be able to play patch 5 fusion or mag perception or whatever, then link them the github, or send them the file yourself. There is a reason that your uploads have been taken down multiple times and a reason that these versions are not currently on thunderstore.

you annoying as hell and the reason im hesitant on open sourcing mods

  heres the proof im crimsonteam. yes i uploaded both mods to thunderstore so people dont take time to compile the github project and download stuff. i just made it so people can download it easily, and faster then compiling. im sorry if i made you mad or annoyed. i will not take credit for any mods i upload. i will link your kofi link in the upload later tomorrow or later midnight. once you upload fusion im deleting my upload. same with the mag perception upload i did.

You didn't even ask for Permission to upload any of this.


Whether it can be used offline？

Whether it can be used offline？

Hey, can you please specify what you mean by offline? It does not require any internet and can run independently on one machine.

Thank you for your reply，I am a graduate student from China, now I want to use it on my computer, and try to add some sonar modules to it.But I couldn't use it on my computer after following the tutorial.So can you teach me how to use it specifically，or send me a detailed tutorial?I really need your help,please.Looking forward to your reply again!
侯文健
@.***

------------------ 原始邮件 ------------------
发件人:                                                                                "org-arl/UWRoboticsSimulator"                                                                                @.>;
发送时间: 2022年11月30日(星期三) 晚上11:19
@.>;
<EMAIL_ADDRESS>主题: Re: [org-arl/UWRoboticsSimulator] Whether it can be used offline？ (Issue #3)
Hey, can you please specify what you mean by offline? It does not require any internet and can run independently on one machine.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.Message ID: @.***>

Thank you for your reply，I am a graduate student from China, now I want to use it on my computer, and try to add some sonar modules to it.But I couldn't use it on my computer after following the tutorial.So can you teach me how to use it specifically，or send me a detailed tutorial?I really need your help,please.Looking forward to your reply again! 侯文健 @.***
…
------------------ 原始邮件 ------------------ 发件人: "org-arl/UWRoboticsSimulator" @.>; 发送时间: 2022年11月30日(星期三) 晚上11:19 @.><EMAIL_ADDRESS>主题: Re: [org-arl/UWRoboticsSimulator] Whether it can be used offline？ (Issue #3) Hey, can you please specify what you mean by offline? It does not require any internet and can run independently on one machine. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

Hey, I am sorry for such a late reply. Please let me know where the simulation fails so that I can help you better

Thank you for your kind reply. I can't unzip and open the simulator by downloading the compressed package and install it on my computer. Besides, if possible, I want to make a simple simulator by myself, just for my paper, which mainly includes input of AUV model and then control AUV to carry out inspection of underwater pipeline. I would like to know how to build my own simulator in order to accomplish the above tasks. Thank you very much!
侯文健
@.***

------------------ 原始邮件 ------------------
发件人:                                                                                "org-arl/UWRoboticsSimulator"                                                                                @.>;
发送时间: 2023年1月24日(星期二) 凌晨0:13
@.>;
<EMAIL_ADDRESS>主题: Re: [org-arl/UWRoboticsSimulator] Whether it can be used offline？ (Issue #3)
Thank you for your reply，I am a graduate student from China, now I want to use it on my computer, and try to add some sonar modules to it.But I couldn't use it on my computer after following the tutorial.So can you teach me how to use it specifically，or send me a detailed tutorial?I really need your help,please.Looking forward to your reply again! 侯文健 @.***
…
------------------ 原始邮件 ------------------ 发件人: "org-arl/UWRoboticsSimulator" @.>; 发送时间: 2022年11月30日(星期三) 晚上11:19 @.><EMAIL_ADDRESS>主题: Re: [org-arl/UWRoboticsSimulator] Whether it can be used offline？ (Issue #3) Hey, can you please specify what you mean by offline? It does not require any internet and can run independently on one machine. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
Hey, I am sorry for such a late reply. Please let me know where the simulation fails so that I can help you better
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.Message ID: @.***>

Hey, I just looked at the files, and it seems that there seem to be some problem with the zip files. I'll update them as soon as possible. Sorry for the inconvenience.
As for how to build one for yourself, the way I did it was watch some videos to learn basics of Unity and then start implementing the features that I wanted and learn them whenever I encountered something that I didn't know. It was an interative process, so you can take a look at the source code of the project to understand how I implemented some of the features like SONAR etc


Fix error overlay

Happy new year!
This is a quick fix for some regressions (my fault from at least year ago) that have been bothering me.

Error screens had the clouds overlay the error message, so in some cases the buttons aren't even clickable. This is fixed.

If you delete a street from the gallery and it's the street you're currently looking at, the gallery disappears (it's obscured by the "No street selected" message), so you can't get back to another street. This is fixed.

I just updated the original comment with more info, but I'll merge now, since there are no red flags! Thanks!


Reset pointer focus on surface commit

This should fix https://github.com/swaywm/sway/issues/5911. I want to test it, but I don't know how to. Do I need to recompile sway before testing? Most of the examples don't run (see #2580), so I can't test those.

I don't like this, wouldn't this be racy with the compositor updating focus on commit?

I didn't know that was a job for the compositor. I'm not familiar with the codebase. The focus change on surface destroy is handled by wlroots thought (which is where I copied it from).

@fwSmit Yes, the compositor is responsible for setting and clearing the focus. In the case that a surface is unmapped, it is a bit different because the surface cannot continue to be focus anyway and the compositor has to set another focus.

Alright, thanks for the info. This PR can be closed then.


Getting the history of transactions

Hello, I know if we run minifab blockquery it will generate the transactions for the last block, but is there a way we can generate the history of all transactions or the history of all blocks and transactions?

Use minifab blockquery -b  command to get transactions of the block. Please close this issue.

-b blocknumber


dev-Container go version mismatch

Describe the bug
Hi,
I set up the dev environment using the dev-container method. Builds failed with error go 1.23.3 expected, 1.23.2 found.

After manually deinstalling 1.23.2 and installing 1.23.3 evcc can be built successfully.
Steps to reproduce

Setup dev environment using dev-container
start build

Configuration details
VSCode/docker on W11, cross compiling for arm (Pi4)

Log details
n/a

What type of operating system are you running?
Linux
Nightly build

[X] I have verified that the issue is reproducible with the latest nightly build

Version
No response

I‘m not maintaining the devcontainer, but the error is strange. Go should be able to download the required toolchain itself. Anybody wants to grab this feel free.

I guess the GOTOOLCHAIN breaks it. No idea where that comes from, sorry. Shouldn‘t be there.

#17451 fixes the problem for me by changing the GOTOOLCHAIN value

sorry, wrong fix, that only worked initially

Digging a bit deeper, the Beispiel: '...' and Example: '...' parts in https://github.com/evcc-io/evcc/commit/5da0a943bf57a2a6a9af2177fa4055dd806cb9ba break it for me. Removing the : solved that for me


[TIR][Printer] text format printer considering future parsing use

Several Points

Rename vars/size_vars/buffers to use name hints to identify them
A node is either in META or not. If ref A is put in META, ref B is contained in A, then when we need to print ref B we print its META.
Now only the node in AttrStmt may be put in META except that node is StringImm/Var/Buffer/IterVar.
Print the Type of vars when we first encounter them on the tree.
This PR hasn't combine relay's printer with tir's printer. I put several choices here for combined API for discussion.

add an astext member function for IRModule: we only do mix printing when printing an IRModule. Keep relay.astext and tir.astext separate for other uses.
merge relay's printer & tir's printer into one printer and use only one API ir.astext

cc @tqchen @Hzfengsy
Several Examples
Simple
primfn(A0_1: handle, A1_1: handle, C_1: handle) -> ()
  attr = {"tir.noalias": bool(1), "global_symbol": "main"}
  buffers = {A1: Buffer(A1_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
           C: Buffer(C_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
           A0: Buffer(A0_2: handle, float32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
  buffer_map = {C_1: C, A0_1: A0, A1_1: A1} {
  attr [B.v0: handle] "storage_scope" = "global";
  allocate(B.v0, float32, [n])  {
    attr [B.v1: handle] "storage_scope" = "global";
    allocate(B.v1, float32, [n])  {
      for (i: int32, 0, m) {
        for (j: int32, 0, n) {
          B.v0[j] = (load(float32, A0_2[((i*stride_4) + (j*stride_5))]) + float32(2))
          B.v1[j] = (load(float32, A0_2[((i*stride_4) + (j*stride_5))])*float32(3))
        }
        for (j_1: int32, 0, n) {
          C_2[((i*stride_2) + (j_1*stride_3))] = (load(float32, A1_2[((i*stride) + (j_1*stride_1))]) + load(float32, B.v0[j_1]))
        }
      }
    }
  }
}

Conv on GPU
primfn(A_1: handle, W_1: handle, B_1: handle) -> ()
  attr = {"tir.noalias": bool(1), "global_symbol": "cuda"}
  buffers = {W: Buffer(W_2: handle, float32, [3, 3, 256, 512], []),
           B: Buffer(B_2: handle, float32, [14, 14, 512, 256], []),
           A: Buffer(A_2: handle, float32, [14, 14, 256, 256], [])}
  buffer_map = {B_1: B, A_1: A, W_1: W} {
  attr [IterVar(blockIdx.z: int32, [(nullptr)], "ThreadIndex", "blockIdx.z")] "thread_extent" = 196;
  attr [B.local: handle] "storage_scope" = "local";
  allocate(B.local, float32, [64])  {
    attr [Apad.shared: handle] "storage_scope" = "shared";
    allocate(Apad.shared, float32, [512])  {
      attr [W.shared: handle] "storage_scope" = "shared";
      allocate(W.shared, float32, [512])  {
        attr [Apad.shared.local: handle] "storage_scope" = "local";
        allocate(Apad.shared.local, float32, [8])  {
          attr [W.shared.local: handle] "storage_scope" = "local";
          allocate(W.shared.local, float32, [8])  {
            attr [IterVar(blockIdx.y: int32, [(nullptr)], "ThreadIndex", "blockIdx.y")] "thread_extent" = 8;
            attr [IterVar(blockIdx.x: int32, [(nullptr)], "ThreadIndex", "blockIdx.x")] "thread_extent" = 4;
            attr [IterVar(threadIdx.y: int32, [0:8], "ThreadIndex", "threadIdx.y")] "thread_extent" = 8;
            attr [IterVar(threadIdx.x: int32, [0:8], "ThreadIndex", "threadIdx.x")] "thread_extent" = 8 {
              for (ff.c.init: int32, 0, 4) {
                for (nn.c.init: int32, 0, 4) {
                  B.local[((ff.c.init*4) + nn.c.init)] = float32(0)
                  B.local[(((ff.c.init*4) + nn.c.init) + 32)] = float32(0)
                  B.local[(((ff.c.init*4) + nn.c.init) + 16)] = float32(0)
                  B.local[(((ff.c.init*4) + nn.c.init) + 48)] = float32(0)
                }
              }
              for (rc.outer: int32, 0, 32) {
                for (ry: int32, 0, 3) {
                  for (rx: int32, 0, 3) {
                    for (ax3.inner.outer: int32, 0, 2) {
                      Apad.shared[ramp((((threadIdx.y*64) + (threadIdx.x*8)) + (ax3.inner.outer*4)), 1, 4)] = call("tvm_if_then_else", [((((1 <= (floordiv(blockIdx.z, 14) + ry)) and ((floordiv(blockIdx.z, 14) + ry) < 15)) and (1 <= (rx + floormod(blockIdx.z, 14)))) and ((rx + floormod(blockIdx.z, 14)) < 15)), load(float32x4, A_2[ramp((((((((((ry*917504) + (blockIdx.z*65536)) + (rx*65536)) + (rc.outer*2048)) + (threadIdx.y*256)) + (blockIdx.x*64)) + (threadIdx.x*8)) + (ax3.inner.outer*4)) - 983040), 1, 4)]), broadcast(float32(0), 4)], float32x4, "pure_intrin", 0)
                    }
                    for (ax3.inner.outer_1: int32, 0, 2) {
                      W.shared[ramp((((threadIdx.y*64) + (threadIdx.x*8)) + (ax3.inner.outer_1*4)), 1, 4)] = load(float32x4, W_2[ramp((((((((ry*393216) + (rx*131072)) + (rc.outer*4096)) + (threadIdx.y*512)) + (blockIdx.y*64)) + (threadIdx.x*8)) + (ax3.inner.outer_1*4)), 1, 4)])
                    }
                    for (rc.inner: int32, 0, 8) {
                      for (ax3: int32, 0, 4) {
                        Apad.shared.local[ax3] = load(float32, Apad.shared[(((rc.inner*64) + (threadIdx.x*4)) + ax3)])
                        Apad.shared.local[(ax3 + 4)] = load(float32, Apad.shared[((((rc.inner*64) + (threadIdx.x*4)) + ax3) + 32)])
                      }
                      for (ax3_1: int32, 0, 4) {
                        W.shared.local[ax3_1] = load(float32, W.shared[(((rc.inner*64) + (threadIdx.y*4)) + ax3_1)])
                        W.shared.local[(ax3_1 + 4)] = load(float32, W.shared[((((rc.inner*64) + (threadIdx.y*4)) + ax3_1) + 32)])
                      }
                      for (ff.c: int32, 0, 4) {
                        for (nn.c: int32, 0, 4) {
                          B.local[((ff.c*4) + nn.c)] = (load(float32, B.local[((ff.c*4) + nn.c)]) + (load(float32, Apad.shared.local[nn.c])*load(float32, W.shared.local[ff.c])))
                          B.local[(((ff.c*4) + nn.c) + 32)] = (load(float32, B.local[(((ff.c*4) + nn.c) + 32)]) + (load(float32, Apad.shared.local[nn.c])*load(float32, W.shared.local[(ff.c + 4)])))
                          B.local[(((ff.c*4) + nn.c) + 16)] = (load(float32, B.local[(((ff.c*4) + nn.c) + 16)]) + (load(float32, Apad.shared.local[(nn.c + 4)])*load(float32, W.shared.local[ff.c])))
                          B.local[(((ff.c*4) + nn.c) + 48)] = (load(float32, B.local[(((ff.c*4) + nn.c) + 48)]) + (load(float32, Apad.shared.local[(nn.c + 4)])*load(float32, W.shared.local[(ff.c + 4)])))
                        }
                      }
                    }
                  }
                }
              }
              for (ff.inner.inner.inner: int32, 0, 4) {
                for (nn.inner.inner.inner: int32, 0, 4) {
                  B_2[(((((((blockIdx.z*131072) + (blockIdx.y*16384)) + (threadIdx.y*1024)) + (ff.inner.inner.inner*256)) + (blockIdx.x*64)) + (threadIdx.x*4)) + nn.inner.inner.inner)] = load(float32, B.local[((ff.inner.inner.inner*4) + nn.inner.inner.inner)])
                  B_2[((((((((blockIdx.z*131072) + (blockIdx.y*16384)) + (threadIdx.y*1024)) + (ff.inner.inner.inner*256)) + (blockIdx.x*64)) + (threadIdx.x*4)) + nn.inner.inner.inner) + 8192)] = load(float32, B.local[(((ff.inner.inner.inner*4) + nn.inner.inner.inner) + 32)])
                  B_2[((((((((blockIdx.z*131072) + (blockIdx.y*16384)) + (threadIdx.y*1024)) + (ff.inner.inner.inner*256)) + (blockIdx.x*64)) + (threadIdx.x*4)) + nn.inner.inner.inner) + 32)] = load(float32, B.local[(((ff.inner.inner.inner*4) + nn.inner.inner.inner) + 16)])
                  B_2[((((((((blockIdx.z*131072) + (blockIdx.y*16384)) + (threadIdx.y*1024)) + (ff.inner.inner.inner*256)) + (blockIdx.x*64)) + (threadIdx.x*4)) + nn.inner.inner.inner) + 8224)] = load(float32, B.local[(((ff.inner.inner.inner*4) + nn.inner.inner.inner) + 48)])
                }
              }
            }
          }
        }
      }
    }
  }
}

TensorCore for Conv
primfn(A_1: handle, W_1: handle, Conv_1: handle) -> ()
  attr = {"tir.noalias": bool(1), "global_symbol": "main"}
  buffers = {W: Buffer(W_2: handle, float16, [3, 3, 16, 32, 16, 16], []),
           A: Buffer(A_2: handle, float16, [16, 14, 14, 16, 16, 16], []),
           Conv: Buffer(Conv_2: handle, float32, [16, 14, 14, 32, 16, 16], [])}
  buffer_map = {A_1: A, Conv_1: Conv, W_1: W} {
  attr [IterVar(blockIdx.z: int32, [(nullptr)], "ThreadIndex", "blockIdx.z")] "thread_extent" = 196;
  attr [Conv.wmma.accumulator: handle] "storage_scope" = "wmma.accumulator";
  allocate(Conv.wmma.accumulator, float32, [2048])  {
    attr [Apad.shared: handle] "storage_scope" = "shared";
    allocate(Apad.shared, float16, [12288])  {
      attr [W.shared: handle] "storage_scope" = "shared";
      allocate(W.shared, float16, [12288])  {
        attr [Apad.shared.wmma.matrix_a: handle] "storage_scope" = "wmma.matrix_a";
        allocate(Apad.shared.wmma.matrix_a, float16, [512])  {
          attr [W.shared.wmma.matrix_b: handle] "storage_scope" = "wmma.matrix_b";
          allocate(W.shared.wmma.matrix_b, float16, [1024])  {
            attr [IterVar(blockIdx.x: int32, [(nullptr)], "ThreadIndex", "blockIdx.x")] "thread_extent" = 2;
            attr [IterVar(blockIdx.y: int32, [(nullptr)], "ThreadIndex", "blockIdx.y")] "thread_extent" = 4;
            attr [IterVar(threadIdx.y: int32, [(nullptr)], "ThreadIndex", "threadIdx.y")] "thread_extent" = 4;
            attr [IterVar(threadIdx.z: int32, [(nullptr)], "ThreadIndex", "threadIdx.z")] "thread_extent" = 2 {
              for (n.c.init: int32, 0, 2) {
                for (o.c.init: int32, 0, 4) {
                  eval(call("tvm_fill_fragment", [Conv.wmma.accumulator, 16, 16, 16, ((n.c.init*4) + o.c.init), float32(0)], handle, "intrin", 0))
                }
              }
              for (ic.outer: int32, 0, 8) {
                for (kh: int32, 0, 3) {
                  for (ax2: int32, 0, 3) {
                    for (ax3: int32, 0, 2) {
                      for (ax4.ax5.fused.outer: int32, 0, 8) {
                        attr [IterVar(threadIdx.x: int32, [(nullptr)], "ThreadIndex", "threadIdx.x")] "thread_extent" = 32;
                        Apad.shared[((((((threadIdx.y*3072) + (threadIdx.z*1536)) + (ax2*512)) + (ax3*256)) + (ax4.ax5.fused.outer*32)) + threadIdx.x)] = call("tvm_if_then_else", [((((1 <= (floordiv(blockIdx.z, 14) + kh)) and ((floordiv(blockIdx.z, 14) + kh) < 15)) and (1 <= (ax2 + floormod(blockIdx.z, 14)))) and ((ax2 + floormod(blockIdx.z, 14)) < 15)), load(float16, A_2[(((((((((((blockIdx.x*6422528) + (threadIdx.y*1605632)) + (threadIdx.z*802816)) + (kh*57344)) + (blockIdx.z*4096)) + (ax2*4096)) + (ic.outer*512)) + (ax3*256)) + (ax4.ax5.fused.outer*32)) + threadIdx.x) - 61440)]), float16(0)], float16, "pure_intrin", 0)
                      }
                    }
                  }
                  for (ax1: int32, 0, 3) {
                    for (ax2_1: int32, 0, 2) {
                      attr [IterVar(threadIdx.x, [(nullptr)], "ThreadIndex", "threadIdx.x")] "thread_extent" = 32;
                      W.shared[ramp((((((ax1*4096) + (ax2_1*2048)) + (threadIdx.y*512)) + (threadIdx.z*256)) + (threadIdx.x*8)), 1, 8)] = load(float16x8, W_2[ramp(((((((((kh*393216) + (ax1*131072)) + (ic.outer*16384)) + (ax2_1*8192)) + (blockIdx.y*2048)) + (threadIdx.y*512)) + (threadIdx.z*256)) + (threadIdx.x*8)), 1, 8)])
                    }
                  }
                  for (ic.inner: int32, 0, 2) {
                    for (kw: int32, 0, 3) {
                      for (ax0: int32, 0, 2) {
                        eval(call("tvm_load_matrix_sync", [Apad.shared.wmma.matrix_a, 16, 16, 16, ax0, call("tvm_access_ptr", [call("type_annotation", [], float16, "pure_intrin", 0), Apad.shared, ((((threadIdx.y*3072) + (ax0*1536)) + (kw*512)) + (ic.inner*256)), 256, 1], handle, "intrin", 0), 16, "row_major"], handle, "intrin", 0))
                      }
                      for (ax3_1: int32, 0, 4) {
                        eval(call("tvm_load_matrix_sync", [W.shared.wmma.matrix_b, 16, 16, 16, ax3_1, call("tvm_access_ptr", [call("type_annotation", [], float16, "pure_intrin", 0), W.shared, ((((kw*4096) + (ic.inner*2048)) + (threadIdx.z*1024)) + (ax3_1*256)), 256, 1], handle, "intrin", 0), 16, "row_major"], handle, "intrin", 0))
                      }
                      for (n.c: int32, 0, 2) {
                        for (o.c: int32, 0, 4) {
                          eval(call("tvm_mma_sync", [Conv.wmma.accumulator, ((n.c*4) + o.c), Apad.shared.wmma.matrix_a, n.c, W.shared.wmma.matrix_b, o.c, Conv.wmma.accumulator, ((n.c*4) + o.c)], handle, "intrin", 0))
                        }
                      }
                    }
                  }
                }
              }
              for (n.inner: int32, 0, 2) {
                for (o.inner: int32, 0, 4) {
                  eval(call("tvm_store_matrix_sync", [Conv.wmma.accumulator, 16, 16, 16, ((n.inner*4) + o.inner), call("tvm_access_ptr", [call("type_annotation", [], float32, "pure_intrin", 0), Conv_2, (((((((blockIdx.x*12845056) + (threadIdx.y*3211264)) + (n.inner*1605632)) + (blockIdx.z*8192)) + (blockIdx.y*2048)) + (threadIdx.z*1024)) + (o.inner*256)), 256, 2], handle, "intrin", 0), 16, "row_major"], handle, "intrin", 0))
                }
              }
            }
          }
        }
      }
    }
  }
}

GEMM on CPU
primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
  attr = {"tir.noalias": bool(1), "global_symbol": "main"}
  buffers = {C: Buffer(C_2: handle, float32, [1024, 1024], []),
           B: Buffer(B_2: handle, float32, [1024, 1024], []),
           A: Buffer(A_2: handle, float32, [1024, 1024], [])}
  buffer_map = {C_1: C, A_1: A, B_1: B} {
  attr [packedB: handle] "storage_scope" = "global";
  allocate(packedB, float32x32, [32768])  {
    for (x: int32, 0, 32) "parallel" {
      for (y: int32, 0, 1024) {
        packedB[ramp(((x*32768) + (y*32)), 1, 32)] = load(float32x32, B_2[ramp(((y*1024) + (x*32)), 1, 32)])
      }
    }
    for (x.outer: int32, 0, 32) "parallel" {
      attr [C.global: handle] "storage_scope" = "global";
      allocate(C.global, float32, [1024])  {
        for (y.outer: int32, 0, 32) {
          for (x.c.init: int32, 0, 32) {
            C.global[ramp((x.c.init*32), 1, 32)] = broadcast(float32(0), 32)
          }
          for (k.outer: int32, 0, 256) {
            for (x.c: int32, 0, 32) {
              C.global[ramp((x.c*32), 1, 32)] = (load(float32x32, C.global[ramp((x.c*32), 1, 32)]) + (broadcast(load(float32, A_2[(((x.outer*32768) + (x.c*1024)) + (k.outer*4))]), 32)*load(float32x32, packedB[ramp(((y.outer*32768) + (k.outer*128)), 1, 32)])))
              C.global[ramp((x.c*32), 1, 32)] = (load(float32x32, C.global[ramp((x.c*32), 1, 32)]) + (broadcast(load(float32, A_2[((((x.outer*32768) + (x.c*1024)) + (k.outer*4)) + 1)]), 32)*load(float32x32, packedB[ramp((((y.outer*32768) + (k.outer*128)) + 32), 1, 32)])))
              C.global[ramp((x.c*32), 1, 32)] = (load(float32x32, C.global[ramp((x.c*32), 1, 32)]) + (broadcast(load(float32, A_2[((((x.outer*32768) + (x.c*1024)) + (k.outer*4)) + 2)]), 32)*load(float32x32, packedB[ramp((((y.outer*32768) + (k.outer*128)) + 64), 1, 32)])))
              C.global[ramp((x.c*32), 1, 32)] = (load(float32x32, C.global[ramp((x.c*32), 1, 32)]) + (broadcast(load(float32, A_2[((((x.outer*32768) + (x.c*1024)) + (k.outer*4)) + 3)]), 32)*load(float32x32, packedB[ramp((((y.outer*32768) + (k.outer*128)) + 96), 1, 32)])))
            }
          }
          for (x.inner: int32, 0, 32) {
            for (y.inner: int32, 0, 32) {
              C_2[((((x.outer*32768) + (x.inner*1024)) + (y.outer*32)) + y.inner)] = load(float32, C.global[((x.inner*32) + y.inner)])
            }
          }
        }
      }
    }
  }
}

cc @jroesch @antinucleon @junrushao1994 @Hzfengsy @mbrookhart

Some comments:

There are more than one spaces before the left brace in the allocation line
allocate(B.local, float32, [64])  {

Can we use the same rule for the allocation stmt as the one for attr? Allocation stmt now will bring extra indentation

 attr [IterVar(blockIdx.z: int32, [(nullptr)], "ThreadIndex", "blockIdx.z")] "thread_extent" = 196;

It is strange to print nullptr here especially in square brackets. Perhaps we can use IterVar(blockIdx.z: int32, (nullptr), "ThreadIndex", "blockIdx.z")] or IterVar(blockIdx.z: int32, , "ThreadIndex", "blockIdx.z")]

Considering future parsing use, we must print the dtype for every const number. But we may use some shorthand for common dtype. e.g. 2f for float32, 2h for float16(half), direct2 for int32 (for here most integer numbers in schedule are int32). But still, keep the complete form for every type. e.g. int8(2), float64(2)(or may be fp64(2)) , also, float32(2) is legal as well.

Allocate float32x32 is not the actual data type. Perhaps we can just show allocate the flattened size since that is the semantics.
eval is not necessary since they can be implied in a call.
We might need to update call later to something like @intrin.func_name(args)

Some comments:

There are more than one spaces before the left brace in the allocation line
allocate(B.local, float32, [64])  {

Can we use the same rule for the allocation stmt as the one for attr? Allocation stmt now will bring extra indentation

 attr [IterVar(blockIdx.z: int32, [(nullptr)], "ThreadIndex", "blockIdx.z")] "thread_extent" = 196;

It is strange to print nullptr here especially in square brackets. Perhaps we can use IterVar(blockIdx.z: int32, (nullptr), "ThreadIndex", "blockIdx.z")] or IterVar(blockIdx.z: int32, , "ThreadIndex", "blockIdx.z")]

Considering future parsing use, we must print the dtype for every const number. But we may use some shorthand for common dtype. e.g. 2f for float32, 2h for float16(half), direct2 for int32 (for here most integer numbers in schedule are int32). But still, keep the complete form for every type. e.g. int8(2), float64(2)(or may be fp64(2)) , also, float32(2) is legal as well.

fixed
fixed. But here we implicitly assume that Allocate and Attr will have at least one child. Otherwise, for such a scenario

attr...;
attr...;
attr...;

We can not determine whether it is attr|attr|attr or attr(attr)|attr
3. fixed

To avoid making this page too long, I will edit&update the examples for reference in the top if I change the format.

Going to merge it in two days

Relay's type printing requires attr and relayExpr printing, so It is not straightforward to make type printing independent. Meanwhile, relay's attir printing overlaps PrimExpr printing in tir now. We'd better combine them in later PRs.

Binds in some pass function is not clean for round trip dump ir, how do we deal with it?

Binds in some pass function is not clean for round trip dump ir, how do we deal with it?

Do you mean that buffer_bind is not necessary to print after the pass storage_flatten?
Yes, the buffer no longer exists after the flatten pass. All we have is that Var(buffer->data) in Load and Store. But we still need a place to define those vars, and that's why we still have buffer_bind, where we define buffer as well as buffer->data, in low-level functions
Furthermore, maybe one day we can use BufferLoad/ BufferStore after the flatten and use buffer from the beginning to the end.

I can not reproduce the errors in CI.

I found the problem. It is due to the different behavior of gcc5.4 and gcc 7.4
doc << "(" << Print(op->a) << OpString << Print(op->b) << ")";

gcc5.4 will execute Print(op->b) first.
gcc7.4 will execute Print(op->a) first.

Both release and debug under gcc5.4 will show the same behavior. It is not likely that O2 causes this problem.

clang6.0 also works. But I will fix it under gcc5.4

Take another look please @tqchen

THanks @spectrometerHBH @xqdan @junrushao1994 @Hzfengsy !

Binds in some pass function is not clean for round trip dump ir, how do we deal with it?

Do you mean that buffer_bind is not necessary to print after the pass storage_flatten?
Yes, the buffer no longer exists after the flatten pass. All we have is that Var(buffer->data) in Load and Store. But we still need a place to define those vars, and that's why we still have buffer_bind, where we define buffer as well as buffer->data, in low-level functions
Furthermore, maybe one day we can use BufferLoad/ BufferStore after the flatten and use buffer from the beginning to the end.

https://github.com/apache/incubator-tvm/blob/master/src/driver/driver_api.cc#L139
that's i'm asking, seems binds is embedding into ir at the beginning, looks good


Sync eng/common directory with azure-sdk-tools for PR 2604

Sync eng/common directory with azure-sdk-tools for PR https://github.com/Azure/azure-sdk-tools/pull/2604  See eng/common workflow

Not related to this PR. Overriding and merging.

/check-enforcer override


Script wont run. Failed to fetch

Script wouldnt run, tried troubleshooting with commands under FAQ as well. plz help.

Did you run it in Chrome? I found it only works well there.


Support semi-interactive registration of services from Standalone query

Summary
#1672

How did you test this change?

[ ] Test(s) added
[x] Manual testing (please provide screenshots/recordings)
[ ] No testing (please provide an explanation)

https://user-images.githubusercontent.com/87973126/213707075-c743c181-efeb-48a5-95e5-1a3c65d96095.mp4

@beekemarie

@gayathrir11 lets remove the dependency on sdlc-server on stand alone query. For owners we can just go back to simple inputs.
Reason being is there are lot of implications of adding sdlc to query. We can look for the search users api to take an api in the future but for now lets just do that.


Linking FirebaseInstallation fails with lld

[REQUIRED] Step 1: Describe your environment

Xcode version: 13.4.1
Firebase SDK version: 8.7.0
Installation method: Zip file (select one)
Firebase Component: Analytics
Target platform(s): All

[REQUIRED] Step 2: Describe the problem
When linking our app using lld, we receive the following error:
error: framework not found for -framework FBLPromises

We discovered that this is coming from FirebaseInstallation whose LC_LINKER_OPTIONS includes FBLPromises as a load command
...
  string #1 -framework
  string #2 FBLPromises
Load command 5
     cmd LC_LINKER_OPTION
...

It appears that FBLPromises was renamed to PromisesObjC and is a dependency of FirebaseInstallation & included in the zipped release of frameworks. We do link PromisesObjC into our bundle, but my guess is that the distribution step still links against the old FBLPromises name?
This doesn't throw an error in ld though since it'll ignore invalid frameworks included by the LC_LINKER_OPTIONS flag (https://github.com/llvm/llvm-project/issues/56939).
Steps to reproduce:
Link an app using lld against FirebaseInstallation + dependencies.
What happened? How can we make the problem occur?
error: framework not found for -framework FBLPromises
If you have a downloadable sample project that reproduces the bug you're reporting, you will
likely receive a faster response on your issue.
Relevant Code:

Thanks for the report. This may be a CocoaPods issue with the Promises dependency.  How serious is the issue for you? Is it more than an annoyance in the build log?

@paulb777 The issue is an error using lld, not just an annoyance in the build log. ld still works, but it'd be awesome to use lld since we're seeing >50% improvements in linking times.
Does the zipped distribution get built from the podspecs? Looks like the PromisesObjC module_name is set to FBLPromises which could be the source of the issue? (https://github.com/google/promises/blob/master/PromisesObjC.podspec#L20)

Yes, the zip distribution is created from the podspecs. It looks like our build tooling is trying to sort out the module name/pod name conflation at https://github.com/firebase/firebase-ios-sdk/blob/master/ReleaseTooling/Sources/ZipBuilder/FrameworkBuilder.swift#L291
cc: @ykjchen

@sebastianv1 Does renaming PromisesObjC.xcframework to FBLPromises.xcframework make a difference?

@paulb777 I have not tried this yet, currently we are able to workaround it by using an empty FBLPromises dummy framework that we include the link list. Would it help if I tried?

@sebastianv1 Yes. It's essentially what the fix in #10073 does and I'd like to confirm it works for your use case.

I believe that #10073 should fix the issue and it will be part of the next 9.5.0 release.


restarting jack in qjacktl does not reflect in jack-select

hi, I think I found a bug:
When I start JACK via Qjackctl, jack-select goes green. When I stop it in Qjackctl, it gets red. But when I now start it again in Qjackctl, it stays red, the stop jack is grayed out. I did not see this with cadence, where it gets green when I start the first time, and when I stop and start again, it also works as it should - IF  I quit jack-select, and start it new. If I leave it open, then start JACK via cadence, it shows the same erroneous behaviour: it stays red

I can't reproduce this. Are you sure you are starting JACK via DBUS in both instances from QjackCtl/Cadence?
jack-select only listens to the DBUS notifications about the JACK status, it doesn't work with JACK started as a normal (background) program without DBUS support.
Check which versions of JACK are running with ps -x | grep jack. There should be only jackdbus, not jackd.

Closing this, since there was no further feedback. If the problem persists, feel free to re-open the issue.


[BUG] Component being rendered over Header

Describe the bug.
On main home page, another component is being rendered over the header component
Expected behavior
Either there needs to be some content over there or that extra components needs to be removed like
Screenshots
Bug:

Expected (if nothing needs to be rendered over the header)

How to Reproduce

Head over to the main page of the website here

🥦 Browser
Google Chrome
👀 Have you checked for similar open issues?

[X] I checked and didn't find similar issue

🏢 Have you read the Contributing Guidelines?

[X] I have read the Contributing Guidelines

Are you willing to work on this issue ?
Yes I am willing to submit a PR!

I would like to work on this issue, can you assign it to me?

/attempt


Bug: Calendar Yearly View - Incorrect Week and Date Positioning, Responsive Screen Issue

Description
In the calendar's yearly view, the weeks are misaligned, and dates are displayed in incorrect positions. Additionally, when resizing the screen (responsive behavior), the positioning of weeks and dates changes unexpectedly.
Steps to Reproduce
Go to the calendar component in the yearly view.
Observe the misalignment of weeks and dates.
Resize the browser window or use a responsive screen (e.g., mobile or tablet).
Notice the change in the positions of the weeks and dates.
Expected Behavior
The weeks and dates should remain correctly aligned, regardless of the screen size.
Actual Behavior
The weeks are floating incorrectly, and the dates are displayed in the wrong positions.
On resizing, the issue becomes more noticeable, with inconsistent positioning.
Screenshots/Video

https://github.com/user-attachments/assets/968e0e37-9f7b-440a-afa0-8e7eb89fed21
Environment
Browser: Chrome, Firefox, Safari
Device: Desktop
OS:  Windows, macOS
Webapp Configuration
React Version: "^18.3.1"
Mantine: "^7.1.3"
System Configuration
Laptop/PC Brand & Model: Acer Aspire 7
Operating System:  Windows 11
Processor: Intel Core i5 12th Gen 12450H
RAM: 32 GB
GPU: 4 GB NVIDIA GeForce RTX 3050
Screen Resolution: 1920x1080
Browser Version: Chrome Version 131.0.6778.86

Getting the same issue with responsiveness, please provide the steps to resolve this issue


Split the cli-code in a separate repository

As proposed, we should split the cli-code into a dedicated repository which can be optimized and extended with more features (commands) and actions using commander module.
Since most of the users who use it like a node module will never touch the cli code it will reduce the weight of submodule itself and give us the possibility to extend the cli functions more.

I made a quick and working cli tool that map inner functions: https://github.com/b4dnewz/subquest-cli

@skepticfx can you run a version patch and publish again? 😀 yesterday while testing I fixed a couple of errors and today I'm updating my domain-scanner and I need those fixes.
thanks in advance!

@b4dnewz Done! Also added you to the npm package collabs :) Feel free to publish. Lets ping each other for code reviews and ideas


Enhancement: complementary foreground color when using background color in 16color terminals

It would be nice to have the editor use complementary colors for foreground (text).
If we use, for instance 'brightblack' as background color for cursor-line and we are on a line that has elements with 'brightblack' as text color, practically, we don't see any text in that area since the foreground and background are the same.
In this case, a complementary color should be used for the text, to make sure it's visible to the user.
See the screenshot, line 19, on the right view. It's the same file from the left view, with current editor line being 19.

** I think the current editor line should have some special treatment for text, for better readability (not only when overlapping with same color text but also when using colors that are close to it).
See line 8 on the right:

Actually, this would apply to any terminal, regardless of color depth.
This is a (really neat) text editor, so, readability must have priority 0 over anything else.

This will require an HSL (hue-saturation-light) complimentary color calculator function (RGB->HSL->opposite H->RGB).

In 16 color terminals, we could hardcode the readable combinations like suggested here:
https://dev.yorhel.nl/dump/nccolour

FYI: I have stumbled upon this: http://terminal.sexy/
It seems very useful for building / exporting color schemes.

Ahoy there! I'm working on improving the syntax highlighting and color themes presently. When I've got that sufficiently done, I'm putting in a pull request that's related to that. This should help/resolve this. I could probably also give a look into inverting the color if the current line contains text that's the color of the current line highlight as well.


spurious error "must NOT have additional properties" for required field

I am encountering an unexpected behavior from ajv-cli.
$ npx ajv -s sch.json -d dat.json
dat.json invalid
[
  {
    instancePath: '/obj',
    schemaPath: '#/properties/obj/additionalProperties',
    keyword: 'additionalProperties',
    params: { additionalProperty: 'r' },
    message: 'must NOT have additional properties'
  }
]
$

with the following sch.json
{
    "$id": "sch.json",
    "$schema": "http://json-schema.org/schema",
    "definitions": {
        "Obj": {
            "type": "object",
            "properties": {
                "r": {
                    "type": "number"
                },
                "o": {
                    "type": "string"
                }
            },
            "required": [
                "r"
            ],
            "additionalProperties": false
        }
    },
    "type": "object",
    "properties": {
        "obj": {
            "type": "object",
            "$ref": "#/definitions/Obj",
            "additionalProperties": false
        }
    }
}

and the following dat.json
{
    "$id": "dat.json",
    "$schema": "./sch.json",
    "obj": {
        "r": 123
    }
}

but the field r is required, and must be set.

Your schema should be:
{
    "$id": "sch.json",
    "$schema": "http://json-schema.org/schema",
    "definitions": {
        "Obj": {
            "type": "object",
            "properties": {
                "r": {
                    "type": "number"
                },
                "o": {
                    "type": "string"
                }
            },
            "required": [
                "r"
            ],
            "additionalProperties": false
        }
    },
    "type": "object",
    "properties": {
        "obj": {
            "$ref": "#/definitions/Obj"
        }
    }
}

Hi @shoops
From what I can see comparing the original schema from yours, you suggest to drop type and additionalProperties from obj's properties.

I'm not sure to understand the reason, however: according to the 2020-12 draft

The "$ref" keyword is an applicator that is used to reference a statically identified schema. Its results are the results of the referenced schema. Note that this definition of how the results are determined means that other keywords can appear alongside of "$ref" in the same schema object.

I may have misunderstood the paragraph, but to me this means that

the two fields are allowed
they are "merged" with the definition in the referenced object
2.1 in this specific case they are not necessary, but shouldn't change the behavior of the validator

Yes, that is correct but the problem is that the "additinalProperties": false is evaluated without any properties being defined. I have seen this behavior with all schema validators I tried. You can use "additionalProperties": "[or]" which would allow only properties o and r.


Use an auto dependency updater

Is your feature request related to a problem? Please describe.
Dependency updates are currently a manual process.
With js packages the process is run npm outdated and copy the new versions into package.json
With gradle the process is lookup each dependency on maven central to see if a new version has been published.
Describe the solution you'd like
On a regular basis, have pull requests automatically opened with new version numbers.

https://renovatebot.com looks promising, it supports Docker, Gradle, and NPM.
Gradle support still needs some polishing to work with uPortal's dependency setup (https://github.com/renovatebot/renovate/issues/2749), the NPM and Docker setup already appears to meet uPortal's needs.

Additional polish work being tracked at https://github.com/renovatebot/renovate/issues/2758


Day 6 Challenge

Getting ready before-hand in order to do well!

looks good Dakota, damn you're so good


Fix Genotype tests

Actually call check on Props. Also adds a test
verifying equality of gtPair and gtPairSqrt.

@cseed This is actually why I didn't find the bugs in Genotype. ;)

Oh, man.  I think we should have a new kind of test suite, PropertySuite (and SparkPropertySuite, or a Spark mixin) which just declares a bunch of properties to verify, like the current check.Properties (which can maybe go away).  Thoughts?

I particularly like that a PropertySuite would reduce the possibility of human error.

I had to choose rather small upper bounds to avoid a variety of overflow errors in Genotype. I imagine these are practically not a problem, but I didn't take a particularly principled approach to choosing upper bounds.

@cseed, this is working now (Jenkins is a liar). Can I merge it?


Unable to target v3 using carthage

After the v4.0-beta2 release, I am unable to specifically use the v3 release.
After playing around with my cartfile, it appears the issue is with the versioning of Reachability.swift.
This is the line in my cartfile:
github "ashleymills/Reachability.swift" == 3.0.0.
However, running carthage update my cartfile.resolved file looks like this:
github "ashleymills/Reachability.swift" "v4.0-beta2".
This then leads to the reachability project not building in Xcode 8.3.3, with the following error:
*** Building scheme "Reachability" in Reachability.xcodeproj
Build Failed
        Task failed with exit code 65:
        /usr/bin/xcrun xcodebuild -project /Workspaces/ios/Carthage/Checkouts/Reachability.swift/Reachability.xcodeproj -scheme Reachability -configuration Release -derivedDataPath /Users/Library/Caches/org.carthage.CarthageKit/DerivedData/8.3.3_8E3004b/Reachability.swift/v4.0-beta2 -sdk iphoneos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES build (launched in /Workspaces/ios/Carthage/Checkouts/Reachability.swift)

This usually indicates that project itself failed to compile. Please check the xcodebuild log for more details: /var/folders/z7/whc3fjp55850rd_tvy161v6m0000gn/T/carthage-xcodebuild.8mYYP1.log

It is possible to specifically target the commit for 3.0 (a17b2882db4803aaea08d7eb1c894304d744be64), but I feel this is not ideal.

The line in your cartfile is formatted incorrectly. Use…
github "ashleymills/Reachability.swift" "v3"


[IMPROVEMENT] Add icon preview after the selection in a select

Hi,
It would be great to keep the icon view in a select after the option has been selected.
As the selected value already have a large left padding, I assume adding an image circle floating on the left wouldn't be too diffcult no ?
Thanks.

Great idea, in my opinion. Although I don't think it's following the material design rules.


ARM simulator & IDE

https://www.keil.com/demo/eval/arm.htm#/DOWNLOAD

I can't download it and the previous 1 also . The website shows homepage only

no need to download.. We have downloaded already..
Regards,
Chandra Shekhar Sengupta
On Tue, May 24, 2016 at 1:25 AM, suvra-technicise<EMAIL_ADDRESS>wrote:

I can't download it and the previous 1 also . The website shows homepage
only
—
You are receiving this because you were assigned.
Reply to this email directly or view it on GitHub
https://github.com/sayan801/ShabdoKhojEngine/issues/5#issuecomment-221077565

Yes , but the download  link is not opening...showing homepage of the website only.....So can't have it.


Docs: mentions of master branch/version/image when we use develop/main now

Hello!
Issue overview

The documentation says master branch or master version on several locations, whereas we've moved to using the main and develop branches primarily.

Details

See master branch in this page: developer_docs.rst / developer_docs.html
See master version in this page: from_development.md /  from_development.html
Also note, this page recommends:...
wget -O docker-compose.yml https://raw.githubusercontent.com/argilla-io/argilla/develop/docker-compose.yaml
# use the master image of the argilla container instead of the latest
sed -i 's/argilla:latest/argilla:master/' docker-compose.yml
...

argilla:latest does not occur in docker-compose.yaml, so there's no point in the replacement anymore. This ought to get looked at.

cc: @davidberenstein1957 @rhoitjadhav

Tom Aarsen

@tomaarsen I believe the second page (now Docker compose) doesn't have the issue anymore, but I can fix the mention of master branch on the first page!


Delete ignored key from config.json

Since the exercise implementations are all in the exercises directory
we no longer need to ignore any non-exercise directories in the root
of the track.
See https://github.com/exercism/meta/issues/3 for context.

I've created another PR, #700, which normalizes all of the whitespace in the config.json so
that the change in this PR is minimized and easier to see.
If you merge the other PR first, I'll go ahead and rebase this one onto master.
Sorry about the noise!

An interesting question comes up. The build is broken but that is because master would be broken right now too. Since the ignored key was removed and it was being used to ignore error-handling (https://github.com/exercism/xgo/commit/55de1e8e09f76a1b6b3d41b70b9d81e43ce249bd) now error-handling is not in any category.
The reasonable options are to add it to any other section.

exercises
deprecated
foregone

I let y'all choose. There is no more reason to ignore it since the reason for doing so is gone. So I suggest placing it in exercises again to let students get at it. The binary is gone at https://github.com/exercism/xgo/commit/46c376fa9f2b9d54f539ebfd73517ec7e0be6af4

You make a good case for putting it back in exercises. I think we should go with your suggestion.

Also, whitespace changes removed (squashed in the reverse of #700) so that this PR is only about removing ignored

Thanks @petertseng!


Help command doesn't work if you can use more than 25 commands

The help command doesn't respond if you can use over 25 commands and it has the embed links permission.

That is because the embed cannot have more than 25 embed fields in one message. I will implement pagination to the command soon.

Still needs some testing, @advaith1 could you confirm?

Now it sends the embed, but only lists 25 commands and the footer says you can use 25 commands. Would it be possible to move the remaining commands into a second embed, or as Sanil said add pagination? Or it might be a better idea to always send the plaintext version when there are over 25.

Pretty sure pagination works, try <prefix>help 2

Doesn't work, there are more commands but it only shows the same first 25 (if I use a modified version that forces the non-embed view it shows all of them)

I will look in it tomorrow


pin minor zeromq version

avoids ABI conflicts when installing with the wrong zeromq version
The 'right' fix is to pin the zeromq ABI runtime dependency based on what is loaded at build time, but I don't think that's possible at the moment.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.


add a search bar

add a search bar to search for a particular word and it's definition/meaning

Can you assign me this issue?

I would like to be assigned to this issue.

assign it to me @BhaktaGopal

assign it to me @BhaktaGopal

sure

Can you assign me this issue? and are you ok with me changing the UI a bit?

create a new issue for that ui part


Dark Mode doesn't render text properly

Picture speaks a thousand words. The text appears to be white/invisible but when you hit enter you can see it on the blue background.

Hi there. We will improve dark mode on iOS!
We plan to release a quick fix to correct the problem.

Hi there.
We released a fix for that. You can use from now the new version 3.1.0.


sshfs: don't use obsoleted fsspec_loop

https://github.com/fsspec/filesystem_spec/pull/1134/files

Codecov Report
Base: 94.17% // Head: 93.42% // Decreases project coverage by -0.76% :warning:

Coverage data is based on head (0c6913f) compared to base (973559a).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #26      +/-   ##
==========================================
- Coverage   94.17%   93.42%   -0.76%
==========================================
  Files          13       13
  Lines         670      669       -1
==========================================
- Hits          631      625       -6
- Misses         39       44       +5

Impacted Files
Coverage Δ

sshfs/spec.py
91.97% <100.00%> (-1.89%)
:arrow_down:

sshfs/utils.py
81.25% <0.00%> (-2.09%)
:arrow_down:

tests/test_sshfs.py
98.44% <0.00%> (-0.52%)
:arrow_down:

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

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


Option to disable cursor position restoration

Hi all!
I have a problem with mouse cursor. I think it is related (collided?) with #193 issue.
Situation:

User moves mouse over the gui button -> button highlighted.
User presses left mouse button -> application sets cursor to GLFW_CURSOR_DISABLED mode (i need this mode, not GLFW_CURSOR_HIDDEN)
User drags mouse somewhere and releases button -> application sets cursor to GLFW_CURSOR_NORMAL mode.
Cursor position is now in the center, so application sets it to the new position with glfwSetCursorPos.

But the library sets cursor to the old position, which was before GLFW_CURSOR_DISABLED and gui button still thinks that it is highlighted.
New position becomes actual only after moving mouse a little.

I understand, that restoring old cursor position may be useful in other situations, but can this behavior be controlled with some parameter?

The problem with not restoring the cursor position after leaving disabled cursor mode is that the position the application has been told is often far outside the screen. I understand that in your case this is not an issue, but I'm not sure this is a sufficiently common need to warrant complicating the code.

I'm a little confused by your description,

Cursor position is now in the center, so application sets it to the new position with glfwSetCursorPos.

What is the new position?

@shurcooL : new position = actual position to where user dragged mouse cursor. After restoring GLFW_CURSOR_NORMAL mode library sets mouse cursor position to position where it was set to GLFW_CURSOR_DISABLED last time.
@elmindreda : Well then. I'm against unwanted complexity in the library. I think I just will use my own image cursors (including "empty" cursor instead of GLFW_CURSOR_DISABLED) for all situations. It is even more generalized way to deal with different cursors.

new position = actual position to where user dragged mouse cursor.

That doesn't make sense to me. If the cursor is disabled, it can't be moved by the user.

After restoring GLFW_CURSOR_NORMAL mode library sets mouse cursor position to position where it was set to GLFW_CURSOR_DISABLED last time.

It sounds like you do want to use GLFW_CURSOR_HIDDEN instead of GLFW_CURSOR_DISABLED, so why do you use GLFW_CURSOR_DISABLED? Can you elaborate?

"If the cursor is disabled, it can't be moved by the user."
You can get mouse coords through glfwSetCursorPosCallback even if the cursor is disabled.
"...you do want to use GLFW_CURSOR_HIDDEN instead of GLFW_CURSOR_DISABLED"
Tried to use "hidden" and it seems to work, but it was my old project. Need to refresh it in memory to remember why I use "disabled" and not "hidden". May be something with very fast moving of the cursor to the window bounds.
Also as stated in the docs: "If you wish to implement mouse motion based camera controls or other input schemes that require unlimited mouse movement, set the cursor mode to GLFW_CURSOR_DISABLED."


Command not found on Mac

I tried multiple options for the Aseprite command path on MacOS but it always says "Command not found"
The same project works perfectly fine on Windows.
I tried using the path provided by Steam and the one in the Applications folder:
"/Users/username/Library/Application Support/Steam/steamapps/common/Aseprite/Aseprite.app"
"/Users/username/Applications/Aseprite.app"
I am using Godot 4.1.2.stable and MacOS Sonoma 14.0

Hello. In MacOS, Aseprite.app is actually a folder and the actual executable is inside. There is an example in the Readme. For the path you wrote I reckon it should be:
/Users/username/Library/Application Support/Steam/steamapps/common/Aseprite/Aseprite.app/Contents/MacOS/aseprite

You're right! I thought I had tried that as well.
It works perfectly now. Thank you (and especially thanks to your work with this plugin, I use it constantly and it saves soooo much time and effort!)

By the way, I looked for a readme file but could not find it. I downloaded your plugin via the Asset Browser in Godot; maybe that's why?

Thank you! I'm glad it's been useful.
Good call out about the README. It currently lives in the root folder, which I do not include in the export so it won't be part of the exported zip. I'll find a way to include it in the right addon folder. Cheers


Fixing an assert on double to string coversion

The assert is an overzealous assert as the exponent can be higher then
number of digits can be. Removed that assert.

@abchatra - please have a look at this one.

I am going to hold on this change for now.


Allow for :first-child

It would be great to be able to do something like:
h2:first-child' => 'mt-0',
So that the first element on the page has no top-margin, but does elsewhere. I tried it but it doesn't seem to work.

Oh yes this would be a good feature. But it is only necessary if you use Tailwind CSS,isn't it? In plain CSS you can define it by a selector.

Would be awesome to do it in Tailwind though ;)

@michaelmannucci
I think that should work fine already. I have used the pseudo classes from TailwindCSS like this.
classify.php
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Stylesets
    |--------------------------------------------------------------------------
    |
    | Here you can define different style collections.
    | To add a new styleset you have to add a new array like the 'blog' array.
    |
    */

    'default' => [
        'h2' => 'font-bold text-5xl first:text-red-900 last:text-sky-600',
    ],
];

Or dou I understand you wish wrong?

I believe that would style the first H2 on the page, regardless if it's the first-child of the div... so if you wanted to remove top-margin for the first H2, it wouldn't work if the first element isn't an H2.
Also, your example doesn't seem to work for me... lol

Hi @michaelmannucci,
you should be able to use the first or first-of-type utility from tailwindcss to accomplish your goal.


OR Tools 9.4 Flatzinc release

Are you going to release binaries for OR-Tools FlatZinc 9.4?
I'm particularily interested in a Debian version but the release of 9.3 for Ubuntu 20.04 works just fine on Debian Sid (> 11).
Alternatively, build instructions would be fine, too.

bad news: flatzinc support in Makefile has been removed so we can't generate flatzinc archive anymore
good new: you can still build it using the CMake based build by enabling it using -DBUILD_FLATZINC=ON
https://github.com/google/or-tools/blob/ae7e6b59e8efb358aebc0e746fb4a261b2c1d1cc/CMakeLists.txt#L96-L97

cpp archives contains a bin/fzn-ortools binary which should be the flatzinc binary.
Is it sufficient for you ?

Yes, the binary from the CPP archive works on my current Debian Sid installation.
Thank you very much for your input.