Could not find JS function 'hr';

Hi !
There an issue for

https://www.youtube.com/watch?v=v7uOXHMhaO8
https://www.youtube.com/watch?v=xfj6r5tfEf4

[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-x', '--audio-format', 'vorbis', 'https://www.youtube.com/watch?v=v7uOXHMhaO8', '-v']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2015.11.24
[debug] Python version 3.5.1 - Linux-4.3.3-2-ARCH-x86_64-with-arch
[debug] exe versions: ffmpeg 2.8.4, ffprobe 2.8.4, rtmpdump 2.4
[debug] Proxy map: {}
[youtube] v7uOXHMhaO8: Downloading webpage
[youtube] v7uOXHMhaO8: Downloading video info webpage
[youtube] v7uOXHMhaO8: Extracting video information
[youtube] {22} signature length 40.43, html5 player en_US-vfl2TFPXm
[youtube] v7uOXHMhaO8: Downloading player https://s.ytimg.com/yts/jsbin/player-en_US-vfl2TFPXm/base.js
ERROR: Signature extraction failed: Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 856, in _decrypt_signature
    video_id, player_url, s
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 771, in _extract_signature_function
    res = self._parse_sig_js(code)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 834, in _parse_sig_js
    initial_function = jsi.extract_function(funcname)
  File "/usr/lib/python3.5/site-packages/youtube_dl/jsinterp.py", line 241, in extract_function
    raise ExtractorError('Could not find JS function %r' % funcname)
youtube_dl.utils.ExtractorError: Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
 (caused by ExtractorError("Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.",)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 856, in _decrypt_signature
    video_id, player_url, s
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 771, in _extract_signature_function
    res = self._parse_sig_js(code)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 834, in _parse_sig_js
    initial_function = jsi.extract_function(funcname)
  File "/usr/lib/python3.5/site-packages/youtube_dl/jsinterp.py", line 241, in extract_function
    raise ExtractorError('Could not find JS function %r' % funcname)
youtube_dl.utils.ExtractorError: Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 856, in _decrypt_signature
    video_id, player_url, s
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 771, in _extract_signature_function
    res = self._parse_sig_js(code)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 834, in _parse_sig_js
    initial_function = jsi.extract_function(funcname)
  File "/usr/lib/python3.5/site-packages/youtube_dl/jsinterp.py", line 241, in extract_function
    raise ExtractorError('Could not find JS function %r' % funcname)
youtube_dl.utils.ExtractorError: Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/YoutubeDL.py", line 663, in extract_info
    ie_result = ie.extract(url)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/common.py", line 290, in extract
    return self._real_extract(url)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 1410, in _real_extract
    encrypted_sig, video_id, player_url, age_gate)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 866, in _decrypt_signature
    'Signature extraction failed: ' + tb, cause=e)
youtube_dl.utils.ExtractorError: Signature extraction failed: Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 856, in _decrypt_signature
    video_id, player_url, s
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 771, in _extract_signature_function
    res = self._parse_sig_js(code)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 834, in _parse_sig_js
    initial_function = jsi.extract_function(funcname)
  File "/usr/lib/python3.5/site-packages/youtube_dl/jsinterp.py", line 241, in extract_function
    raise ExtractorError('Could not find JS function %r' % funcname)

same here :
 youtube2mp3 https://www.youtube.com/playlist?list=PLKfM8QA4eHXDQnYA9HApJNLjhZ7JgFpfe --verbose
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-t', '-x', '--audio-format', 'mp3', '--audio-quality', '0', 'https://www.youtube.com/playlist?list=PLKfM8QA4eHXDQnYA9HApJNLjhZ7JgFpfe', '--verbose']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2015.11.24
[debug] Python version 3.5.1 - Linux-4.3.3-2-ARCH-x86_64-with-arch
[debug] exe versions: ffmpeg 2.8.4, ffprobe 2.8.4, rtmpdump 2.4
[debug] Proxy map: {}
[youtube:playlist] PLKfM8QA4eHXDQnYA9HApJNLjhZ7JgFpfe: Downloading webpage
[download] Downloading playlist: Feels like: Violent
[youtube:playlist] playlist Feels like: Violent: Downloading 77 videos
[download] Downloading video 1 of 77
[youtube] JSpKPsGoyHc: Downloading webpage
[youtube] JSpKPsGoyHc: Downloading video info webpage
[youtube] JSpKPsGoyHc: Extracting video information
[youtube] {43} signature length 40.43, html5 player en_US-vfl2TFPXm
[youtube] JSpKPsGoyHc: Downloading player https://s.ytimg.com/yts/jsbin/player-en_US-vfl2TFPXm/base.js
ERROR: Signature extraction failed: Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 856, in _decrypt_signature
    video_id, player_url, s
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 771, in _extract_signature_function
    res = self._parse_sig_js(code)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 834, in _parse_sig_js
    initial_function = jsi.extract_function(funcname)
  File "/usr/lib/python3.5/site-packages/youtube_dl/jsinterp.py", line 241, in extract_function
    raise ExtractorError('Could not find JS function %r' % funcname)
youtube_dl.utils.ExtractorError: Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
 (caused by ExtractorError("Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.",)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 856, in _decrypt_signature
    video_id, player_url, s
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 771, in _extract_signature_function
    res = self._parse_sig_js(code)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 834, in _parse_sig_js
    initial_function = jsi.extract_function(funcname)
  File "/usr/lib/python3.5/site-packages/youtube_dl/jsinterp.py", line 241, in extract_function
    raise ExtractorError('Could not find JS function %r' % funcname)
youtube_dl.utils.ExtractorError: Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 856, in _decrypt_signature
    video_id, player_url, s
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 771, in _extract_signature_function
    res = self._parse_sig_js(code)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 834, in _parse_sig_js
    initial_function = jsi.extract_function(funcname)
  File "/usr/lib/python3.5/site-packages/youtube_dl/jsinterp.py", line 241, in extract_function
    raise ExtractorError('Could not find JS function %r' % funcname)
youtube_dl.utils.ExtractorError: Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/YoutubeDL.py", line 663, in extract_info
    ie_result = ie.extract(url)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/common.py", line 290, in extract
    return self._real_extract(url)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 1410, in _real_extract
    encrypted_sig, video_id, player_url, age_gate)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 866, in _decrypt_signature
    'Signature extraction failed: ' + tb, cause=e)
youtube_dl.utils.ExtractorError: Signature extraction failed: Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 856, in _decrypt_signature
    video_id, player_url, s
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 771, in _extract_signature_function
    res = self._parse_sig_js(code)
  File "/usr/lib/python3.5/site-packages/youtube_dl/extractor/youtube.py", line 834, in _parse_sig_js
    initial_function = jsi.extract_function(funcname)
  File "/usr/lib/python3.5/site-packages/youtube_dl/jsinterp.py", line 241, in extract_function
    raise ExtractorError('Could not find JS function %r' % funcname)
youtube_dl.utils.ExtractorError: Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
 (caused by ExtractorError("Could not find JS function 'hr'; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.",)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

Both of you are using outdated versions of youtube-dl. See our FAQ on how to update. If you can reproduce the problem with the current version (2016.01.01 as of writing), please post the output you get with that version and we will reopen this issue. Thanks!

Ok it's cool.
I bet the community package of Archlinux was up to date enough, and I didn't checkout the version.
My bad Thanks ! :heart_eyes:

yup the community package is out of date...


Add roadmap issue for 2021, goals to be achieved.

I think having a roadmap for some time span such as a whole year or whatever is good for the team would be great! and it should be pinned so people have an idea about what will be happening and what is the prioritized tasks.
For 2021 we would like to have web shipped to stable and all desktops shipped to beta and maybe macOS to stable also.

The above is just a tiny example.
maybe like the fireflutter roadmap: https://github.com/FirebaseExtended/flutterfire/issues/2582

I agree with @YazeedAlKhalaf
I really like the idea of having a better idea of what  new feature / fixes are coming;
maybe a whole year is a long time and of course estimated time is always flexible
(Elon Musk style, not cyberpunk 2077 style!)
but I'd be happy to see what is coming next and in what direction flutter is heading

There is already a high-level yearly roadmap; it's on the wiki.

Yup, I saw it but it is so vague, If the team could create an issue for the roadmap, maybe every 3 months one roadmap, the roadmap should contain goals, specific ones, and issues related to getting to that goal. it should be limited to only owners so that it does not transform into a mess there.

I think @YazeedAlKhalaf has a point here,
the current road map is quite generic,
something more granular would be great.
Maybe should be re-titled as "improve road map" or something along this line
since it already exists

From few months now working with Flutter issues I was able to notice that the priority of issues in this repository is not constant, it may vary for time to time. I mean that Flutter may focus on improving Windows support today and next month focus on  improving Linux. Having an issue to track roadmap does not seems valid because currently we can see what issues belongs to which goal by filtering issues by Milestones.
Filter by Milestones

For more advanced search you can filter by project as well

What I mean is there is no real plan or measurable goal. If there is an issue where people can look at and know what issues to fulfill would be great

Issues are added to specific Milestones, meaning that the issue is supposed to be fixed by that Milestone. By filtering by Milestone you will get all issues related to a specific plan.

@pedromassangocode
I think that @YazeedAlKhalaf is trying to make the point
that a more transparent and granular road map
might help developer to choose how to invest their time and resources
given that both a road map and milestones exist
I personally see a possible improvement of one or both as a reasonable request
milestones for example appear to be limited to a 3 month projection
and in my personal opinion road map could be more detailed
maybe the title of the issue could be misleading,
but I can easily agree with a request like provide a more detailed road map for 2021

Will leave this for @stuartmorgan or Hixie to decide.

Maybe should be re-titled as "improve road map" or something along this line
since it already exists

The suggested example text of what the 2021 year-long roadmap should say is roughly the level of granularity that's there now. (It's less detailed, in fact.) Maybe a clearer example of what is being suggested would help?

that a more transparent and granular road map

The more granular a year-long roadmap is though, the less accurate it will be. The granular roadmap is the prioritized issue tracker, but it doesn't have a year's worth of dates because they would end up being wrong.

might help developer to choose how to invest their time and resources

Giving guidance to developers on how they should invest time and resources is exactly what priorities are for though.

Will leave this for @stuartmorgan or Hixie to decide.

It's not my call, I just saw the issue go by and wanted to point out that what it appeared to be asking for (a very high-level, year-long roadmap) already exists.

An example would be like:
This issue will be a roadmap from Jan_2021 to Mar_2021:
We will be Web Support in the stable channel, to accomplish this we need to solve those issues:
#6444
#6444

This will give developers a better view of what will happen in the near future and also let them know what to help in exactly 🚀. Let's say I want to help in Windows UWP support, I can come to the roadmap issue and see which one I can solve and try to solve it. I believe it will make the development process way faster.

All you said here is now possible with issue filter! And as I said what if the priorities changes? the Roadmap will be updated with new issues, new descriptions and will be useless. From my point of view that is why there is no issues mentioned in the current roadmap. Again, I might be wrong as well :) this is just my point of view.
Cc @Hixie

Fundamentally the roadmap on the wiki is as detailed as it's going to get. (I mean, I'll update it for 2021 in the next few weeks, but the level of detail isn't going to get much greater.)
There are several reasons for this.

It's extremely difficult to accurately predict what we will actually be doing 12 months from now, or ever 3 months from now, or even, frankly, 3 days from now, because we're an open source project with several hundred contributors who are all following their own (or their employers') priorities.
Everyone's priorities may not be widely communicated. For example, I know that Canonical are working on Flutter, and I know they're working on Linux desktop features primarily, but I don't know what precisely they plan to be working on each week of the next year. How can I write a roadmap that accurately reflects what is going to happen if I just don't know?
Even if I did know, priorities change. Google Pay uses Flutter. If the Google Pay team runs into some problem with Flutter that they care about, one or more Google engineers working on Flutter will likely drop what they are doing and work on that problem instead. If someone suddenly decides they are going to hire 20 engineers to fix all our Cupertino bugs, then we'll suddenly have a lot more effort spent there than we would otherwise (20 engineers' worth of more effort!).
Even if the priorities didn't change and I knew all about all of them, there is an inherent conflict between our marketing team and product managers on the one hand, and our openness and transparency on the other. @timsneath in particular is a big fan of having splashy events to announce new features, and who can blame him, those events are fantastic. But those events don't work if all the splashy stuff was preannounced a year in advance, or three months in advance, so at some level, we have to keep the details somewhat vague just to give the press something new to write about. (And you do want that, because more press means more users means more funding for Flutter to get better faster.) That we are as open as we are is a testament to how much our PMs understand and appreciate open source.
Even if I knew what we wanted to do, and could communicate it, that still wouldn't be enough to write a reliable detailed roadmap, because engineering is an unpredictable art. We'll probably say we want to work on https://github.com/flutter/flutter/issues/51752 in 2021, but maybe we'll find that after 9 months of working on it, we discover that fundamentally the problem is harder than we anticipated and it'll actually take us another 3 years.

(There are also some legal issues around giving forward guidance but I won't go into those.)
Given all these problems, I find the 2020 roadmap is actually remarkably detailed and actually remarkably accurate. There's a few things we've not really succeeded at executing on (e.g. our investment in Cupertino wasn't as great as we'd intended), but pretty much everything else listed is exactly what we worked on.

On this aspect of the proposal specifically:

We will be shipping Windows to the beta channel with UWP, to accomplish this we need to solve those issues:

We already use GitHub Projects to do this kind of thing (e.g., there are projects for both UWP and Windows beta). Maintaining a Project is dramatically easier than maintaining a bug list that lives somewhere else, as well as providing more information and utility.

[triage]
Given the last two comments, I feel safe to close this issue. Please feel free to reopen it if necessary.
Thank you


Major refactor

I wasn't too happy with how... organic the code had gotten, so I decided to do a major refactor.
Quoting myself from the commit message:

Switch USB audio code to C++.
Add new HA and HAManager classes.
Add PseudoAtomic library for proper variable syncing. This allows compiling in Release mode.
The shared audio buffer is now a C++ class.
Various other refactors.

No real improvements on the audio side. I am currently doing zero buffering, so the connection is unstable, but properly synced audio. Some ideas might be to detect underruns and insert silent packets to compensate, or figure out how to properly buffer without the stereo going out of sync.
I'd be interested to see your thoughts on this refactor @thewierdnut . I think it's better than what I had before, but I'm biased.

Finally got my pico. What console settings are you using to connect to the compiled-in serial port? I've tried both minicom and kermit with various settings and haven't seen any output.

Settings are in the readme, but here they are:

Baud Rate: 115200
Data Bits: 8
Stop Bits:" 1
Parity: None
DTR and RTS enabled

The other problem you might have is if you connect too late, you might not see any new output. That's why I prefer UART debugging myself, because my debug probe serial is always connected.

Oh, just checked, without hearing aids connected, there is no output. Maybe I need to add some scanning logs back in...

I'm still having trouble during the service discovery part. I think you are trying to initiate the service discovery before the connection has been secured, so the hearing device ignores the request.
I've attached an hci dump: pico_output.log

Thanks for that log @thewierdnut
It shows me that your device doesn't support LE Secure connections, so pairing fails.

I'm still having trouble during the service discovery part. I think you are trying to initiate the service discovery before the connection has been secured, so the hearing device ignores the request.

Yeah, I think I know what I'm doing wrong there.
I've tried changing some stuff this morning, but it hasn't worked yet and I've got to go to work. I'll pick back up this evening.
Sigh... I'm back to the pairing game...

In the meantime, could you try the following:
In bt_main(), could you change sm_set_authentication_requirements(SM_AUTHREQ_SECURE_CONNECTION | SM_AUTHREQ_MITM_PROTECTION | SM_AUTHREQ_BONDING);
to
`sm_set_authentication_requirements(SM_AUTHREQ_BONDING);

Just pushed those changes.
You can delete pairings again. Compile with -DENABLE_PAIR_DEL=ON.
Anyway, to work!

@thewierdnut I've made some changes to the security requirements. I'll be interested to see if this helps for you.
Your Starkey's are a PITA when it comes to pairing by the way :) They don't seem to support LE Secure Connections, wheras my Oticon's require it. So I've hacked in a "upgrade requirements on authentication failure and try again" mode.

No luck:
[Pico-ASHA  INFO] MFI UUID discovered
    Flags: LE General Discoverable Mode; BR/EDR Not Supported;
    Complete List of 128-bit Service Class UUIDs: 7D74F4BD-C74A-4431-862C-CCE884371592

[Pico-ASHA  SCAN] Got Ad Report from 9C:9C:1D:96:2F:5E
[Pico-ASHA  SCAN] RSSI: -62
[Pico-ASHA  INFO] Identity resolving succeeded
[Pico-ASHA  INFO] Connecting to address 9C:9C:1D:96:2F:5E
[Pico-ASHA  INFO] Device connected. Discovering ASHA service
[Pico-ASHA  INFO] Reencryption started
[Pico-ASHA  INFO] ASHA service not found. Continuing scanning
[Pico-ASHA ERROR] Reencryption failed with ERROR_CODE_PIN_OR_KEY_MISSING
[Pico-ASHA  INFO] Received disconnection event.
[Pico-ASHA  INFO] Expected disconnection

Here is another hci dump with the latest code: pico_output.log
I don't see the Read by group type request going out to discover the ASHA services.

It's still failing to properly pair - you can tell that by the reencryption failure.
Until you get it working, can you please enable ENABLE_PAIR_DEL to ensure a fresh pairing DB on every startup?

I think longer term, I'm going to need at least some level of control via USB serial, if not a GUI app to manage pairings etc.

In that packet log, you can see in frame 226 where it requests Encryption, and in frame 258,  (201ms later) it responds, but before that in frame 240 is the client timeout stop message (5ms from the previous frame, 82ms from the encryption start, and 380ms from the connection start) , and it gives up listening.
What timeout is this? The supervision timeout negotiated on connection start is 720 ms, which is much longer than this.

I think that timeout is a red herring. It appears to be an internal btstack GATT timeout, and is set to 30 seconds. I believe that message in the log is the timeout cancellation message.
I've changed the way pairing works so that it doesn't rely on the implicit pairing initiated by the GATT client API. Now, pairing happens before any attempt to discover services/characteristics.

Also, thank you for your patience as we attempt to get this working for your hearing aids. It is most appreciated.

More progress. I still don't hear audio, but it appears to find the service and the characteristics:
[Pico-ASHA  INFO] MFI UUID discovered
    Flags: LE General Discoverable Mode; BR/EDR Not Supported;
    Complete List of 128-bit Service Class UUIDs: 7D74F4BD-C74A-4431-862C-CCE884371592

[Pico-ASHA  SCAN] Got Ad Report from 9C:9C:1D:96:2F:5E
[Pico-ASHA  SCAN] RSSI: -67
[Pico-ASHA  INFO] Hearing aid discovered with addr 9C:9C:1D:96:2F:5E. Connecting...
[Pico-ASHA  INFO] Device connected. Attempt pairing
[Pico-ASHA  INFO] Pairing started
[Pico-ASHA  INFO] Just Works requested
[Pico-ASHA  INFO] Pairing complete, success
[Pico-ASHA  INFO] Device paired. Discovering ASHA service
[Pico-ASHA  SCAN] Service Query: Service ID: 0x1800 : UUID: 00001800-0000-1000-8000-00805F9B34FB
[Pico-ASHA  SCAN] Service Query: Service ID: 0x1801 : UUID: 00001801-0000-1000-8000-00805F9B34FB
[Pico-ASHA  SCAN] Service Query: Service ID: 0x180a : UUID: 0000180A-0000-1000-8000-00805F9B34FB
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: 896C9518-D4EA-11E1-AF45-58B035FEA743
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: 5446A83A-D711-11E4-B9D6-1681E6B88EC1
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: 5446E254-D711-11E4-B9D6-1681E6B88EC1
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: CED5FDB4-E645-0BB4-7A43-CABDF3197A77
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: 544709DA-D711-11E4-B9D6-1681E6B88EC1
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: 5446EC0E-D711-11E4-B9D6-1681E6B88EC1
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: 48DDF118-EFD0-48FC-8F44-B9B8E17BE397
[Pico-ASHA  SCAN] Service Query: Service ID: 0xfdf0 : UUID: 0000FDF0-0000-1000-8000-00805F9B34FB
[Pico-ASHA  INFO] ASHA service found
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: D0B6DC42-03C8-457A-A347-ADE8D1C4E98D
[Pico-ASHA  SCAN] Service Query: Service ID: 0x180d : UUID: 0000180D-0000-1000-8000-00805F9B34FB
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: 7D74F4BD-C74A-4431-862C-CCE884371592
[Pico-ASHA  SCAN] Service Query: Service ID: 0x0000 : UUID: 8341F2B4-C013-4F04-8197-C4CDB42E26DC
[Pico-ASHA  INFO] Got ROP Characteristic
[Pico-ASHA  INFO] Got ACP Characteristic
[Pico-ASHA  INFO] Got AUS Characteristic
[Pico-ASHA  INFO] Got VOL Characteristic
[Pico-ASHA  INFO] Got PSM Characteristic
[Pico-ASHA  INFO] ASHA characteristic discovery complete
[Pico-ASHA  INFO] Getting ReadOnlyProperties value
[Pico-ASHA  INFO] Completed value read of ReadOnlyProperties
[Pico-ASHA  INFO] Getting PSM value
[Pico-ASHA  INFO] PSM: 161
[Pico-ASHA  INFO] Completed value read of PSM
[Pico-ASHA  INFO] Read Only Properties
  Version:        1
  Side:           Right
  Mode:           Binaural
  CSIS:           No
  Manufacture ID: baxu
  LE CoC audio:   Yes
  Render delay:   160
  Supports 16KHz: Yes
  Supports 24KHz: No
[Pico-ASHA  INFO] AudioStatusPoint notification enabled.

Slightly more success when using both of my devices. It looks like you are seeing the same thing I do with asha_pipewire_sink, where if you connect to the right device first, then the left device, the left device tends to disconnect. I don't know why, and I don't observe this behavior with android.
[Pico-ASHA  INFO] AudioStatusPoint notification enabled.
[Pico-ASHA  INFO] Connected to all aid(s) in set.
[Pico-ASHA  INFO] Left: Updating connection parameters
[Pico-ASHA  INFO] Right: Updating connection parameters
[Pico-ASHA  INFO] Right: Updated connection parameters
[Pico-ASHA  INFO] Right: Connecting to L2CAP
[Pico-ASHA  INFO] Left: Updated connection parameters
[Pico-ASHA  INFO] Left: Connecting to L2CAP
[Pico-ASHA ERROR] Left: L2CAP CoC failed with status code: 0x6a
[Pico-ASHA  INFO] Received disconnection event.
[Pico-ASHA ERROR] Disconnected with reason: 19
[Pico-ASHA  INFO] Left device disconnected.

Latest hci trace:
pico_output.log

Slightly more success when using both of my devices. It looks like you are seeing the same thing I do with asha_pipewire_sink, where if you connect to the right device first, then the left device, the left device tends to disconnect. I don't know why, and I don't observe this behavior with android.

I've definitely had issues with unexpected disconnections, and I don't know why, because as you said, Android doesn't seem to have such troubles.

So... spurious disconnect aside, when it tries to reconnect a second time it always gets this:
[Pico-ASHA  INFO] MFI UUID discovered
    Flags: LE General Discoverable Mode; BR/EDR Not Supported;
    Complete List of 128-bit Service Class UUIDs: 7D74F4BD-C74A-4431-862C-CCE884371592

[Pico-ASHA  SCAN] Got Ad Report from 9C:9C:1D:98:BE:82
[Pico-ASHA  SCAN] RSSI: -88
[Pico-ASHA  INFO] Identity resolving succeeded
[Pico-ASHA  INFO] Connecting to address 9C:9C:1D:98:BE:82
[Pico-ASHA  INFO] Device connected. Attempt pairing
[Pico-ASHA  INFO] Reencryption started
[Pico-ASHA ERROR] Reencryption failed with ERROR_CODE_PIN_OR_KEY_MISSING

One thing that may help... You can go ahead and establish the CoC connection right after you have paired with the device. You don't have to wait until just before you want to start audio.

Latest info logs.
[Pico-ASHA  INFO] Connected to all aid(s) in set.
[Pico-ASHA  INFO] Right: Updating connection parameters
[Pico-ASHA  INFO] Left: Updating connection parameters
[Pico-ASHA  INFO] Left: Updated connection parameters
[Pico-ASHA  INFO] Left: Connecting to L2CAP
[Pico-ASHA  INFO] Right: Updated connection parameters
[Pico-ASHA  INFO] Right: Connecting to L2CAP
[Pico-ASHA ERROR] Right: L2CAP CoC failed with status code: 0x6a
[Pico-ASHA  INFO] Received disconnection event.
[Pico-ASHA ERROR] Disconnected with reason: 19
[Pico-ASHA  INFO] Right device disconnected.
[Pico-ASHA  INFO] MFI UUID discovered
[Pico-ASHA  INFO] Identity resolving succeeded
[Pico-ASHA  INFO] Connecting to address 9C:9C:1D:96:2F:5E
[Pico-ASHA  INFO] Device connected. Attempt pairing
[Pico-ASHA  INFO] Reencryption started
[Pico-ASHA ERROR] Reencryption failed with ERROR_CODE_PIN_OR_KEY_MISSING
[Pico-ASHA ERROR] Left: L2CAP CoC failed with status code: 0x6a
[Pico-ASHA  INFO] Received disconnection event.
[Pico-ASHA ERROR] Disconnected with reason: 19
[Pico-ASHA  INFO] Left device disconnected.
[Pico-ASHA  INFO] MFI UUID discovered
[Pico-ASHA  INFO] Identity resolving succeeded
[Pico-ASHA  INFO] Connecting to address 9C:9C:1D:98:BE:82
[Pico-ASHA  INFO] Device connected. Attempt pairing
[Pico-ASHA  INFO] Reencryption started
[Pico-ASHA ERROR] Reencryption failed with ERROR_CODE_PIN_OR_KEY_MISSING

This brings back nightmares of when I was attempting to get my HA's to properly pair...
That L2CAP error code seems to be L2CAP_CONNECTION_BASEBAND_DISCONNECT fwiw.

That L2CAP error code seems to be L2CAP_CONNECTION_BASEBAND_DISCONNECT fwiw.

Yeah, the real error is the next one, 19 (0x13) which is ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION
The HAs didn't like something they saw, and just stopped responding.

I also notice that the connection update doesn't seem to work. The meta event that returns after the update request still contains the old parameters.

Oh FFS! Your Starkeys keep on giving :)
Don't worry, I'm not upset. It's just perplexing.

Latest log dump:
pico_output.log

I've made a few changes, I will be interested to see if that helps for your device @thewierdnut
I'm just setting the default connection parameters up front, and doing away with the parameter update.
I'm trying to perform the ASP notification subscription after the L2CAP connection is created (this is what Android appears to do, at least according to my android HCI snoop).
I also now attempt to delete a pairing on reencryption failure.

I'll give it a try.
A small note about the android setup state machine... As soon as the Gatt is connected, it triggers a call to UpdateBleConnParams, and if it ever gets a parameter update with the wrong parameters, it just calls UpdateBleConnParams again. It will actually connect to the gap socket as soon as the the encryption is complete and the characteristics are known (discovered or cached), which means the connection parameter update process and the service discovery can actually run in parallel. Once the connection parameters are correct and the socket is available, then it finally calls the ACP start.

Still isn't happy
pico_output.log

Why oh why oh why? What am I doing wrong?

I get the distinct idea that we are somehow overcomplicating this. I'm tempted to steal a btstack sample app and just statically connect to the psm via a mac address, just to see if it is stable.
Also... what do you want to accomplish with this particular peer review? Do you want me to review code style? design? functionality? I think we have moved past that somewhat into troubleshooting a specific hearing aid.

I get the distinct idea that we are somehow overcomplicating this. I'm tempted to steal a btstack sample app and just statically connect to the psm via a mac address, just to see if it is stable.

Yeah, maybe give that a go. Or feel free to hack away at my code.

Also... what do you want to accomplish with this particular peer review? Do you want me to review code style? design? functionality? I think we have moved past that somewhat into troubleshooting a specific hearing aid.

Just whatever springs to mind really. This troubleshooting is fine, because it's a major refactor in draft state, so I have no worries making major changes. If you can suggest better ways of doing things, feel free, as this is my first ever microcontroller and bluetooth project, so I'm still learning stuff.

While I'm not caching the advertising packets, I decided to implement a cache of successfully connected HA's so that subsequent reconnections don't have to rediscover services and characteristics.
Anecdotally, the connection seems less stable after that change, but that could be anything, because bluetooth...
I think once we can get your Starkey's working, I will like to focus on stream stability. I think I will probably need to modify btstack a little to get access to the available outgoing credits.

Just did a quick bit of logging, it seems the audio streaming never falls behind the PCM stream, at least not to a significant degree. I tried logging with a difference of 8 and 4 packets, and the only time I saw any logging was when things had already gone wrong. I seem to have some state issues...
Maybe I partly just need to find some efficiencies as well. I keep having to remind myself this is running on a dual core ARM  Cortex M0+ with 256K of RAM. The M0+ is basically ARM's cheapest and slowest 32-bit CPU.
I may also have to experiment with __not_in_flash_func() to force certain functions to always run from RAM, and not from flash using Execute In Place (XIP). (The XIP cache is 16K I believe).

Another option might be to investigate the SDK alarm API to schedule the streaming stuff instead of using an infinite loop.

Here is the latest log output (with advertisements disabled) that you requested via slack:
[Pico-ASHA  INFO] BT ASHA star[Pico-ASHA  INFO] BT ASHA starting.
[Pico-ASHA  INFO] L2CAP Init.
[Pico-ASHA  INFO] SM Init.
[Pico-ASHA  INFO] GATT Client Init.
[Pico-ASHA  INFO] HCI power on.
[Pico-ASHA  INFO] Device DB is empty, allowing a 60s timeout
[Pico-ASHA  INFO] BTstack up and running on 28:CD:C1:0F:41:4A
[Pico-ASHA  INFO] Removing paired devices
[Pico-ASHA  INFO] Start scanning.
[Pico-ASHA  INFO] MFI UUID discovered
[Pico-ASHA  INFO] Hearing aid discovered with addr 9C:9C:1D:96:2F:5E. Connecting...
[Pico-ASHA  INFO] Device connected. Attempt pairing
[Pico-ASHA  INFO] Pairing started
[Pico-ASHA  INFO] Just Works requested
[Pico-ASHA  INFO] Pairing complete, success
[Pico-ASHA  INFO] Device paired. Discovering ASHA service
[Pico-ASHA  INFO] ASHA service found
[Pico-ASHA  INFO] Got ROP Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00b9  Value: 0x00ba  End: 0x00bb
[Pico-ASHA  INFO] Got ACP Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00bc  Value: 0x00bd  End: 0x00be
[Pico-ASHA  INFO] Got AUS Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00bf  Value: 0x00c0  End: 0x00c2
[Pico-ASHA  INFO] Got VOL Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00c3  Value: 0x00c4  End: 0x00c5
[Pico-ASHA  INFO] Got PSM Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00c6  Value: 0x00c7  End: 0x00c8
[Pico-ASHA  INFO] ASHA characteristic discovery complete
[Pico-ASHA  INFO] Getting ReadOnlyProperties value
[Pico-ASHA  INFO] Completed value read of ReadOnlyProperties
[Pico-ASHA  INFO] Getting PSM value
[Pico-ASHA  INFO] PSM: 161
[Pico-ASHA  INFO] Completed value read of PSM
[Pico-ASHA  INFO] Read Only Properties
  Version:        1
  Side:           Right
  Mode:           Binaural
  CSIS:           No
  Manufacture ID: 00ba
  LE CoC audio:   Yes
  Render delay:   160
  Supports 16KHz: Yes
  Supports 24KHz: No
[Pico-ASHA  INFO] MFI UUID discovered
[Pico-ASHA  INFO] Hearing aid discovered with addr 9C:9C:1D:98:BE:82. Connecting...
[Pico-ASHA  INFO] Device connected. Attempt pairing
[Pico-ASHA  INFO] Pairing started
[Pico-ASHA  INFO] Just Works requested
[Pico-ASHA  INFO] Pairing complete, success
[Pico-ASHA  INFO] Device paired. Discovering ASHA service
[Pico-ASHA  INFO] ASHA service found
[Pico-ASHA  INFO] Got ROP Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00b9  Value: 0x00ba  End: 0x00bb
[Pico-ASHA  INFO] Got ACP Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00bc  Value: 0x00bd  End: 0x00be
[Pico-ASHA  INFO] Got AUS Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00bf  Value: 0x00c0  End: 0x00c2
[Pico-ASHA  INFO] Got VOL Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00c3  Value: 0x00c4  End: 0x00c5
[Pico-ASHA  INFO] Got PSM Characteristic
[Pico-ASHA  INFO] Characteristic handles: Start: 0x00c6  Value: 0x00c7  End: 0x00c8
[Pico-ASHA  INFO] ASHA characteristic discovery complete
[Pico-ASHA  INFO] Getting ReadOnlyProperties value
[Pico-ASHA  INFO] Completed value read of ReadOnlyProperties
[Pico-ASHA  INFO] Getting PSM value
[Pico-ASHA  INFO] PSM: 161
[Pico-ASHA  INFO] Completed value read of PSM
[Pico-ASHA  INFO] Read Only Properties
  Version:        1
  Side:           Left
  Mode:           Binaural
  CSIS:           No
  Manufacture ID: 00ba
  LE CoC audio:   Yes
  Render delay:   160
  Supports 16KHz: Yes
  Supports 24KHz: No
[Pico-ASHA  INFO] Connected to all aid(s) in set.
[Pico-ASHA  INFO] Right: Connecting to L2CAP
[Pico-ASHA  INFO] Left: Connecting to L2CAP
[Pico-ASHA ERROR] Right: L2CAP CoC failed with status code: 0x6a
[Pico-ASHA  INFO] Received disconnection event.
[Pico-ASHA ERROR] Disconnected with reason: 19
[Pico-ASHA  INFO] Right device disconnected.
[Pico-ASHA  INFO] MFI UUID discovered
[Pico-ASHA  INFO] Identity resolving succeeded
[Pico-ASHA  INFO] Connecting to address 9C:9C:1D:96:2F:5E
[Pico-ASHA  INFO] Device connected. Attempt pairing
[Pico-ASHA  INFO] Reencryption started
[Pico-ASHA ERROR] Reencryption failed with ERROR_CODE_PIN_OR_KEY_MISSING
[Pico-ASHA  INFO] Removing paired device with address 9C:9C:1D:96:2F:5E
[Pico-ASHA  INFO] Found. Removing
[Pico-ASHA ERROR] Left: L2CAP CoC failed with status code: 0x6a
[Pico-ASHA  INFO] Received disconnection event.
[Pico-ASHA ERROR] Disconnected with reason: 19
[Pico-ASHA  INFO] Left device disconnected.
[Pico-ASHA  INFO] MFI UUID discovered
[Pico-ASHA  INFO] Identity resolving succeeded
[Pico-ASHA  INFO] Connecting to address 9C:9C:1D:98:BE:82
[Pico-ASHA  INFO] Device connected. Attempt pairing
[Pico-ASHA  INFO] Reencryption started
[Pico-ASHA ERROR] Reencryption failed with ERROR_CODE_PIN_OR_KEY_MISSING
[Pico-ASHA  INFO] Removing paired device with address 9C:9C:1D:98:BE:82
[Pico-ASHA  INFO] Found. Removing

Thanks, so it seems it's fine up until attempting to create the l2cap channel, at which point it has a melt-down, and for the cherry on top, it refuses to pair after reconnecting.
The l2cap error is L2CAP_CONNECTION_BASEBAND_DISCONNECT. Looking at the btstack source I see the following:
#ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE
static void l2cap_handle_hci_le_disconnect_event(l2cap_channel_t * channel){
    if (l2cap_send_open_failed_on_hci_disconnect(channel)){
        l2cap_cbm_emit_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
    } else {
        l2cap_emit_channel_closed(channel);
    }
    l2cap_free_channel_entry(channel);
}
#endif

The error is based on what l2cap_send_open_failed_on_hci_disconnect(channel) returns, so lets look at that:
static int l2cap_send_open_failed_on_hci_disconnect(l2cap_channel_t * channel){
    // open cannot fail for for incoming connections
    if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) return 0;

    // check state
    switch (channel->state){
        case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
        case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
        case L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES:
        case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
        case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
        case L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES:
        case L2CAP_STATE_WAIT_CONNECT_RSP:
        case L2CAP_STATE_CONFIG:
        case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
        case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST:
        case L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE:
        case L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD:
            return 1;

        case L2CAP_STATE_OPEN:
        case L2CAP_STATE_CLOSED:
        case L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES:
        case L2CAP_STATE_WAIT_DISCONNECT:
        case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_INSUFFICIENT_SECURITY:
        case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
        case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
        case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
        case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
        case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE:
        case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT:
        case L2CAP_STATE_INVALID:
        case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
            return 0;

        default:
            // get a "warning" about new states
            btstack_assert(false);
            return 0;
    }
}

In other words, it could be any of the first 12 l2cap states. Very helpful btstack...

If you look at the raw hci traffic, you see this just prior to the logged disconnect:

@thewierdnut I've added a basic timestamp to logs, that should give more context, without majorly screwing up timings like a HCI dump does.

Apologies for the lack of updates. I started trying some stuff, and then my plans were all derailed early this week.

No worries. Life happens. I haven't had time to work on it either.

New Pico SDK is out. I think I'm just gonna merge this as-is, then start hopefully making stability improvements.


KDE should grab obs parameters from star instance

KDE.call() need the obs parameters as inputs.
These should be grabbed from the star class instance if it's available in the init of KDE.

This was apparently fixed some time ago.


Xzyaoi/feat/discovery

This change is

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

This pull request introduces 1 alert when merging 2a7dd6a3506f502b142271c477a5a60a1db9cb57 into 58ee59b8f24ee8d166f6c9919b16d66d6cb5507f - view on LGTM.com
new alerts:

1 for Unused variable, import, function or class

Comment posted by LGTM.com


Allow general backends in BlockSkylineMatrix

I have a need for non-Vector (in fact, infinite) backends in BlockSkylineMatrix so am planning  to template out the storage, just as BandedBlockBandedMatrix and BlockArray allow general backends.
While I'm at it, there's a question whether we want to make the type signature more resemble the new BlockArray:
BlockArray{T, N, R <: AbstractArray{<:AbstractArray{T,N},N}, BS<:AbstractBlockSizes{N}}
That is, we have two options:

BlockSkylineMatrix{T, R <: AbstractVector{T}, LL<:AbstractVector{Int}, UU<:AbstractVector{Int}}
BlockSkylineMatrix{T, R <: AbstractVector{T}, BS<:AbstractBlockSizes{2}}

Option 2 is closer to the new BlockArray. @jagot Any reason to prefer Option 1?

Not that I can think of.


Docker Mods (Plex) : What the purpose of TP_DOMAIN environment variable ?

Hello,
I'm using your theme to my Gitea installation, and I stat using it too on my plex Docker installation.
If I don't set the environment variable TP_DOMAIN, the theme is well applied on my Plex, when I access it with its LAN IP, or with its domaine-name.
(I just see that it doesn't work with the windows application...)
But when I put my domaine name in the TP_DOMAIN variable, the theme is no more applied whether it is with the IP LAN or the domaine name...
So my question is : what does the TP_DOMAIN variable ?
Here the PMS log I get after the reboot, and without anything in TP_DOMAIN variable :
[mod-init] Attempting to run Docker Modification Logic
[mod-init] Applying gilbn/theme.park:plex files to container
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing...
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing...

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/

Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1012
User gid:    100
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 40-chown-files: executing...
[cont-init.d] 40-chown-files: exited 0.
[cont-init.d] 45-plex-claim: executing...
[cont-init.d] 45-plex-claim: exited 0.
[cont-init.d] 50-gid-video: executing...
[cont-init.d] 50-gid-video: exited 0.
[cont-init.d] 60-plex-update: executing...
Docker is used for versioning skip update check
[cont-init.d] 60-plex-update: exited 0.
[cont-init.d] 98-themepark: executing...
-------------------------
|  Plex theme.park Mod  |
-------------------------
Variables set:
'TP_DOMAIN'=
'TP_THEME'=dark

No domain set, defaulting to gilbn.github.io
---------------------------
|  Adding the stylesheet  |
---------------------------
Stylesheet set to dark

[cont-init.d] 98-themepark: exited 0.
[cont-init.d] 99-custom-scripts: executing...
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-scripts: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
Starting Plex Media Server.

Thanks for your help, and for your work :D

TP_DOMAIN can be used if you selfhost theme.park or have forked it and setup your own github pages.

Haaaa, ok :D
I thought it was my domaine name for the app receiving the theme ;)
Thanks for the clarification.


Utils tidy

tiny tidies to utils, including deprecation making Maybe a bit easier to work with in a couple places

Build failure is real: missing import for Maybe in Asserts.java:
[ERROR] /home/jenkins/jenkins-slave/workspace/brooklyn-server-pull-requests/utils/common/src/main/java/org/apache/brooklyn/test/Asserts.java:[1388,42] cannot find symbol
[ERROR] symbol:   class Maybe
[ERROR] location: class org.apache.brooklyn.test.Asserts

LGTM. Build failure must be fixed before merging. Other two comments are extremely minor.
Happy for you to merge when you're ready.

good spots @aledsage, i've tidied both those points (give better asserts message, and improve identifiers code)

Thanks @ahgittin. Tests are passing locally, merging.


API backend: Create unit tests

What is the expected behavior?
Create unit test for the API.

At this point we don't have any mechanic made by ourself. It's only configuration for Django core.
We already have end to end tests.


How to use VoiceStateUpdate/VoiceServerUpdate ?

Hi, I've looked around at this repo and the Lavalink docs and apart from having to join a voice channel and sending the play command to Lavalink, you also have to send VoiceStateUpdate or VoiceServerUpdate op to Lavalink (I'm not sure which one).
Could you please explain/provide an example?
For context I'm using the non-specific implementation.
Thanks

Which discord library are you using?

When connecting to a voice channel you need to send a voice state update command over the gateway https://discord.com/developers/docs/topics/gateway#update-voice-state
This then fires a voice state update & voice server update
Both of them need to be forwarded to lavalink
This can be done via lavalink.OnVoiceStateUpdate and lavalink.OnVoiceServerUpdate

I'll update the docs to include that later

Thanks

I'd be open for a simple wrapper like
https://github.com/DisgoOrg/disgolink/tree/master/dgolink
or
https://github.com/DisgoOrg/disgolink/tree/master/disgolink
for arikawa
you can pr it or I'll do it how you like

I'm happy to do it but I'm about to start a new semester so it might take a while... :(

alright dw about it then


Documentation

Menu: contains the props for Seperator
Grid: "Whether the Form is enabled."

I'll fix this when I get time.


Destructuring an object literal has bogus excess property error and noImplicitAny error

TypeScript Version:
At least 1.8 onward (tested in 1.8.10 and playground and master)
Code
var { x } = { a: 1, x: 12 };

Expected behavior:
No error and 'x' is of type number.
Actual behavior:
var { x } = { a: 1, x: 12 };
              ~
Object literal may only specify known properties, and 'a' does not exist in '{ x: any }'.

If you add --noImplicitAny, you'll get another bogus error:
// @noImplicitAny: true
var { x } = { a: 1, x: 12 };
              ~
              (Same as above)
      ~
Binding element 'x' implicitly has 'any' type.
x./**/

But you can see that x is actually a number by looking at intellisense at the specified point.
It looks like contextual typing is messing with error reporting. Probably nobody actually writes no-op code like this, but our test suite has it in destructuringObjectBindingPatternAndAssignment3, with the above behaviour baselined as 'correct'.

i am inclined to say won't fix on this one.

Yeah, it's do-nothing code. My object rest-spread PR already removes the test case as a by-product.


Update stepped tracker component on Light/Dark Figma libraries

What to expect on Salt Light/Dark Figma libraries by the end of Frappe sprint (Sep 30):

Update horizontal stepped tracker with new structure
Update vertical stepped tracker with new structure
Add new vertical nested stepped tracker

Galao: updated to stretch goal due to scope change, increased sprint by 1

Pushed to Macchiato to align with component release

Move to backlog or close


Algorithm to find the Largest Sum Contiguous Subarray

Can you assign this issue to me?

#98 Added the solution. Can you up merge?


Setup vanity import paths

To reduce to dependencies to a specific git provider and to enhance the the current long and noisy import path, setup a vanity URL for the package and enforce the vanity URL everywhere. The vanity URL is either going to be "go.opencensus.io" or "opencensus.io/go".

I will document how to deploy the vanity URL server before closing this issue.

Thanks @rakyll.

Probably also to track the update of the documentation and examples to use the vanity import in this issue.


Can get the username from who send the msg to you?

Just like the title, or it just can get the uid?

You can use that ID in Client.fetchThreadInfo, and get the user information you need from that. You might want to cache this information, depending on you needs

Thanks!


fix: install ingress-nginx by dev-env.sh script

I install the ingress-controller in the kubernetes, the context of the script is from dev-env.sh
install.sh
kubectl create ns ingress-nginx

cat << EOF | helm template ingress-nginx ./src/charts/ingress-nginx --namespace=ingress-nginx --values - | kubectl apply -n ingress-nginx --validate=false -f -
controller:
  image:
    repository: registry-dev.indc.vnet.com
    image: system_containers/k8s-staging-ingress-nginx
    tag: v1.1.1
    digest:
  config:
    worker-processes: "1"
  podLabels:
    deploy-date: "$(date +%s)"
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
  hostPort:
    enabled: true
  terminationGracePeriodSeconds: 0
  service:
    type: NodePort
  admissionWebhooks:
    patch:
      image:
        registry: registry-dev.indc.vnet.com
        image: system_containers/kube-webhook-certgen
        tag: v1.1.1
        digest: sha256:78351fc9d9b5f835e0809921c029208faeb7fbb6dc2d3b0d1db0a6584195cfed
EOF

I got the error
NAME                                        READY   STATUS             RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES
ingress-nginx-admission-create-tmtk7        0/1     Completed          0          11m   <IP_ADDRESS>   k8s-node-6   <none>           <none>
ingress-nginx-admission-patch-s9rfh         0/1     Completed          0          11m   <IP_ADDRESS>   k8s-node-6   <none>           <none>
ingress-nginx-controller-75b989ddd7-2j949   0/1     ImagePullBackOff   0          11m   <IP_ADDRESS>    k8s-node-4   <none>           <none>

I check the log of ingress-nginx-controller-75b989ddd7-2j949  pod, the result is
  containerStatuses:
  - image: registry-dev.indc.vnet.com:v1.1.1
    imageID: ""
    lastState: {}
    name: controller
    ready: false
    restartCount: 0
    started: false
    state:
      waiting:
        message: Back-off pulling image "registry-dev.indc.vnet.com:v1.1.1"
        reason: ImagePullBackOff

so I think the dev-env.sh has problem
What this PR does / why we need it:

Types of changes

[x ] 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)
[ ] Documentation only

Which issue/s this PR fixes

How Has This Been Tested?

Checklist:

[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[ ] I've read the CONTRIBUTION guide
[ ] I have added tests to cover my changes.
[ ] All new and existing tests passed.

Hi @laihezhao Thanks a lot~
I will review it ASAP.
/assign

Hi @laihezhao The content of the current main branch is different from what you showed. The current content is:
https://github.com/karmada-io/multi-cluster-ingress-nginx/blob/1ae682129ac9bb8bba421903fc257940ef308555/build/dev-env.sh#L102-L104
The default value of REGISTRY is set in the Makefile: https://github.com/karmada-io/multi-cluster-ingress-nginx/blob/1ae682129ac9bb8bba421903fc257940ef308555/Makefile#L52
Have you modified the value in the environment variable?

@XiShanYongYe-Chang  Thank you 。I see. I misunderstood.


cannot use pandoc to render markdown file when this extension is active

The markdown file cannot be rendered by pandoc extension when this extension is active.
The error information is as follow：
Command 'Pandoc Render' resulted in an error (Running the contributed command: 'pandoc.render' failed.)
When this extension is disabled, pandoc render works fine.

Right click markdown, then:

Yes, it works. Thanks！


A few curious questions about this implementation

Hello,
I've been looking at a few of the pytorch implementations and the stylegan papers for references to create my own implementation (for learning purposes), and I was curious if you knew the difference between the pytorch bilinear sampling and your implementation here.
I also noticed your FusedLeakyReLU and ScaledLeakyReLU functions, and I was wondering where you got those from. Were those mentioned somewhere in the paper or in the official implementation? The ScaledLeakyReLU function definitely seemed to fix some issues I was having during training though I'm not entirely sure why other than that this architecture seems to be heavily dependent on getting the weight initializations and normalizations correct.
Thanks.

For upsampling the size of blur kernel is larger (4) than that will be used bilinear upsampling (3), and behavior is different on the boundary of feature map. As 0.5x downsampling for bilinear downsampling is same with average pooling, so it is also different.
Fused activations is mentioned in the paper and you can find implementation in the official implementation. As stylegan2 does not use feature map normalizations like instance norm, it will be important to use appropriate initializations, scaling and weight normalizations.

Awesome. Thanks for the reply.


[Draft]Create "ThresholdMetricWrapper"

🚀 Feature Request
Create metric, which counts the percent of times, when the entire metric was smaller that threshold.
Proposal

In file metrics/metric.py create class:

class ThresholdMetricWrapper(Metric)

Constructor should have the following interface:

def __init__(
    self,
    mode: str = MetricAggregationMode.per_segment,
    metric: Metric,
    threshold: float,
   **kwargs
):

Create method:

def __call__(self, y_true: TSDataset, y_pred: TSDataset) -> Union[float, Dict[str, float]]:

Test cases
No response
Additional context
No response

Will be done in the separate track


Error occurred while running the command

hi. the developer of DeepH-E3. When I run the preprocessing script, I encountered the following error. I have checked the relevant Python packages and they are the same as required. I would like to know what might be causing this issue and look forward to your reply.

python /share/home/liyuting/ytl/DeepH-E3/deephe3-preprocess.py preprocess.ini
cdTraceback (most recent call last):
File "/share/home/liyuting/ytl/DeepH-E3/deephe3-preprocess.py", line 28, in
from deephe3 import DeepHE3Kernel
File "/share/home/liyuting/ytl/DeepH-E3/deephe3/init.py", line 7, in
from .kernel import DeepHE3Kernel
File "/share/home/liyuting/ytl/DeepH-E3/deephe3/kernel.py", line 16, in
from torch.utils.tensorboard import SummaryWriter
File "/share/home/liyuting/anaconda3/envs/e3/lib/python3.9/site-packages/torch/utils/tensorboard/init.py", line 4, in
LooseVersion = distutils.version.LooseVersion
AttributeError: module 'distutils' has no attribute 'version'

Please run the command pip install setuptools==59.5.0 to install the latest version of distutils.

Thanks for you answer, the question has been resolved!


Update links videos

Requested on: https://neuropoly.slack.com/archives/CB0KLDR09/p1635106787007200
We will also have to remove the old videos from youtube:
https://youtu.be/qzWeG5vaVyo
https://youtu.be/dz2LqQ5LpIo

@alexfoias the RTD build passes, but the videos aren't being displayed. Syntax issue (e.g. closing divs? not using youtube shortened link?)?

Hum, despite with my changes our embedded videos matching exactly the same way we've did it in qMRLab (code, RTD), they're not displaying for us correctly here.
Hmm

No warnings in the build logs: https://readthedocs.org/projects/axondeepseg/builds/15166637/

I went another route and used SCT's format for these calls (no divs), it seems to work now.
https://github.com/spinalcordtoolbox/spinalcordtoolbox/blame/081078d85c852afede913064ef7f4d9e45623f46/documentation/source/user_section/fsleyes.rst#L37-L39

Ok, with the new syntax the videos display correctly.

@mathieuboudreau can I remove the old videos ?
https://youtu.be/qzWeG5vaVyo
https://youtu.be/dz2LqQ5LpIo

@alexfoias ask on the slack channel; I think so, but am not 100% sure.


Enhancement: Microsoft SQL Server (MSSQL) Data Connector

Goal-State/What/Result
I can use Spice to query and accelerate datasets stored on Microsoft SQL Server.
Why/Purpose
There is a large community of MS SQL users attempting to integrate with Spice, but the lack of a dedicated connector and no support in the ODBC connector creates a significant barrier.
By When
Issue/Spec written and reviewed: 09/19
Done-Done: 09/23
Done-Done

[x] First Principles Driven
[x] The Algorithm
[x] PM/Design Review
[x] UX Review
[x] Threat Model / Security Review
[x] Tests
[x] Documentation
[x] Samples/Quickstarts/Tutorials
[x] Release Notes

The Algorithm

[x] Every requirement questioned?
[x] Delete (Scope) any part you can.
[x] Simplify.
[x] Break down into smaller iterations/milestones.
[x] Opportunities for automation.

Spec
Definition
mssql: prefix is used to define MS SQL Server connector
datasets:
  - from: mssql:saleslt.customer
    name: customer
    params:
      mssql_connection_string: ${ secrets:MSSQL_CONNECTION_STRING }

Auth / Configuration
Only SQL Login is supported. Other authentication methods such as Windows Authentication and Microsoft Entra ID are out of scope.
mssql_connection_string -  a complete ADO connection string, which could be copied from the MSSQL Server configuration page or manually constructed. Windows Auth and Micrsooft Entra ID are out of scope.
mssql_host - the hostname or IP address of the Microsoft SQL Server instance. Required if there is no connection_string provided.
mssql_port - the host port of the Microsoft SQL Server instance. Optional. Default is 1433
mssql_username - the username for SQL authentication.
mssql_password - the password associated with the specified SQL user
mssql_database - the name of the specific database to connect.
mssql_encrypt -  whether encryption is required for the connection (true or false). Default is true. Connection string uses true/false
mssql_trust_server_certificate - determines whether the server certificate is trusted without validation when encryption is enabled. Default is false. Connection string uses true/false
Example connection string

Server=tcp:server-host.database.windows.net,1433;Initial Catalog=mssqlcatalog;Persist Security Info=False;User ID={Login};Password={Password};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

Example connection UI from Azure Data Studio

Other
No federation and federated push-downs support are on scope for alpha support (note: this will be fully supported out of the box with data acceleration enabled)
How/MAP
Use tiberius -  native Microsoft SQL Server (TDS) client for Rust.

[x] #2736
[x] #2737
[x] #2770
[x] #2771
[x] Support for binary for MSSQL
[x] Streaming support for MSSQL
[x] E2E test for MSSQL
[x] Documentation for MSSQL
[x] Sample/quickstart for MSSQL

Implementation (issues)

QA

Enhancement is done


Added support to build from cmake directly

This PR adds support to build raylib on switch using it directly with add_subdirectory o FetchContent

Added those changes to the v5.0 upstream merge and refactor.
Thanks!


Incorrect episode name

When grabbing an episode:
I get this in the console:

Download started: 08 - Custom Components 101                                                                New . . . . Saving on series/learning-vue-step-by-step folder.

The file is then named:
08-Custom Components 101                                                                New.mp4
Except that little problem, the downloader is working great with the new layout.
Thanks for your hard work.

Hi, fixed right now. Thanks!


added benchmark related modules

@shreyasXplain can you please update the PR?

@shreyasXplain can you please update the PR?

@krishnadurai I am currently not working on the SDK. We might pick it up next week(depending on the priorities)

@krishnadurai Could you also please take a look at the new changes. We have made major changes to the structure and design. Few small things to add before the final merge

Adding tests with @lucas-aixplain
Making the factories methods as all static(?)
Some User Doc to help them get started

Please resolve the conflicts as well

@shreyasXplain is this PR ready?

@krishnadurai Yes, the PR is ready. We will add and reorg the test in a new PR


RunOptions

I have been looking on the documentation, on stackoverflow and on the net but I cannot find a sample snippet about how to correctly set TFBuffer runOptions/runMetadata parameter in session.Run.
var normalized = session.Run(       inputs: new[] { input },    inputValues: new[] { tensor },    outputs: new[] { output },    runMetadata: ##WhatDoIPutHere?##,    runOptions: ##WhatDoIPutHere?## );
I saw that in Python API something like the following is possible:
options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
I was wondering if that is possible in TFSharp too
I am trying to profile my object detection application as I am far away from my target speed (running realtime), I am hoping to see how the graph perform at infere time. Any suggestions are welcome

You need to pass a protocol-buffer encoded data, for metadata this is the protocol buffer
https://github.com/tensorflow/tensorflow/blob/r1.9/tensorflow/core/protobuf/config.proto
For options, you use this protocll buffer:
https://github.com/tensorflow/tensorflow/blob/r1.9/tensorflow/core/protobuf/config.proto
I have updated the API docs with this information.

I'm having problems with this too... I too am trying to optimize for speed... I too am unable to find any C# examples of how to enable FULL_TRACE.  Has anyone had success with this?

@migueldeicaza what is the correct way to pass a RunMetadata to a TFSession.Runner? The following code:
var runner = session.GetRunner();

var runOptions = new RunOptions
{
    TraceLevel = RunOptions.Types.TraceLevel.FullTrace
};

using (var stream = new MemoryStream())
{
    runOptions.WriteTo(stream);
    runner.RunOptions = new TFBuffer(stream.ToArray());
}

var runMetadata = new RunMetadata();
using (var stream = new MemoryStream())
{
    runMetadata.WriteTo(stream);
    runner.RunMetadata = new TFBuffer(stream.ToArray(), 0, 0);  // exception
}

Throws an exception, because the empty RunMetadata generates a zero-length buffer, which seems illegal to TFBuffer.ctor. However if I make the RunMetadata non-empty:
var runMetadata = new RunMetadata
{
    StepStats = new StepStats()
};

It then complains about passing in a non-empty RunMetadata.
If I set RunOptions without providing a RunMetadata, tensorflow crashes.


Invalid plugin. src option is required

Describe the bug
in a Nuxt3 project. Tried adding Histoire and this error is showing up

 ERROR  Invalid plugin. src option is required: {"name":"@histoire/plugin-vue","supportPlugin":{"id":"vue3","moduleName":"@histoire/plugin-vue","setupFn":"setupVue3","importStoriesPrepend":"import { defineAsyncComponent as defineAsyncComponentVue3 } from 'vue'"}}

  at normalizePlugin (node_modules/@nuxt/kit/dist/index.mjs:429:11)
  at node_modules/@nuxt/kit/dist/index.mjs:444:61
  at Array.filter (<anonymous>)
  at addPlugin (node_modules/@nuxt/kit/dist/index.mjs:444:47)
  at initNuxt (node_modules/nuxt/dist/index.mjs:1597:5)
  at async loadNuxt (node_modules/nuxt/dist/index.mjs:1635:5)
  at async loadNuxt (node_modules/@nuxt/kit/dist/index.mjs:732:19)
  at async Object.invoke (node_modules/nuxi/dist/chunks/prepare.mjs:30:18)
  at async _main (node_modules/nuxi/dist/cli.mjs:50:20)

Reproduction
https://github.com/adhamfarrag/hello-histoire
System Info
System:
    OS: macOS 12.6
    CPU: (8) x64 Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
    Memory: 33.86 MB / 16.00 GB
    Shell: 5.8.1 - /bin/zsh
  Binaries:
    Node: 16.17.1 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 8.15.0 - /usr/local/bin/npm
  Browsers:
    Brave Browser: <IP_ADDRESS>
    Chrome: 105.0.5195.125
    Firefox: 105.0.1
    Safari: 16.0
  npmPackages:
    @histoire/plugin-nuxt: ^0.11.0 => 0.11.0
    @histoire/plugin-vue: ^0.11.0 => 0.11.0
    histoire: ^0.11.0 => 0.11.0

Used Package Manager
yarn
Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion.
[X] The provided reproduction is a minimal reproducible example of the bug.

You are putting histoire plugins into Nuxt plugins :sweat_smile:


show menu when paused

So that you can exit current game

Also show idle time! Disconnect after 10min is good but paused users should be aware of it

Fixed in #191


Update continuous-backup-restore-permissions.md

Removed the "Assign capability to restore from a specific account" based on @vinh's comment.

Microsoft authors of articles need to make updates through the private repository, so the updates can be staged and validated by current validation rules. After you review staging and fix all validation issues, you can add the sign-off comment to let the PR reviewers know the updates are ready to be merged.
It's easy to access the private repo version of your articles in GitHub. Just add -pr to the URL, as follows:
 Public repo URL: https://github.com/MicrosoftDocs/{docs-repo}
 Private repo URL: https://github.com/MicrosoftDocs/{docs-repo-pr}
We have closed this pull request. Please resubmit the updates through the private repo. For more information, see the contributor guide.


Add partial metadata generation in lang

Purpose

Move the information in the dependencies.txt generated by lang to a partial metadata.json file generated by lang. Also add labels and ingresses to the metadata.json file.

Goals

Add labels and ingresses to the metadata.json

Approach

Move the dependencies information stored in the dependencies.txt file by Lang to the partial metadata.json file generated by Lang. Also add labels and ingresses to the partial metadata.json file generated by Lang.

User stories

N/A

Release note

N/A

Documentation

N/A

Training

N/A

Certification

N/A

Marketing

N/A

Automation tests

Unit tests

N/A

Integration tests

N/A

Security checks

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

Samples

N/A

Related PRs

N/A

Migrations (if applicable)

N/A

Test environment

go version go1.11 linux/amd64

Learning

N/A

Codecov Report

Merging #377 into master will increase coverage by 0.77%.
The diff coverage is 93.75%.

@@            Coverage Diff             @@
##           master     #377      +/-   ##
==========================================
+ Coverage   81.98%   82.75%   +0.77%
==========================================
  Files          28       28
  Lines         716      725       +9
  Branches       51       53       +2
==========================================
+ Hits          587      600      +13
+ Misses         90       86       -4
  Partials       39       39

Impacted Files
Coverage Δ

...ang/src/main/java/io/cellery/impl/CreateImage.java
87% <93.75%> (+1.77%)
:arrow_up:

Continue to review full report at Codecov.

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


Can you make it work for .net

Hello Jason,
As .net core developer, I like to use your solution.
But @todo or any other @ use won't work as in mvc and razorpage this is the start character for using the model in HTML or javascript code.
Can you make that configurable to a different sign?
Thank you

Hello 👋 You can configure a custom keyword, or you can omit the @. This should work just fine:
// TODO: Do some stuff.


Make GUI dialog?

Have you thought about making a GUI dialog for this? You can use something like
#!/bin/bash

HEIGHT=15
WIDTH=40
CHOICE_HEIGHT=4
BACKTITLE="Backtitle here"
TITLE="Title here"
MENU="Choose one of the following options:"

OPTIONS=(1 "Option 1"
         2 "Option 2"
         3 "Option 3")

CHOICE=$(dialog --clear \
                --backtitle "$BACKTITLE" \
                --title "$TITLE" \
                --menu "$MENU" \
                $HEIGHT $WIDTH $CHOICE_HEIGHT \
                "${OPTIONS[@]}" \
                2>&1 >/dev/tty)

clear
case $CHOICE in
        1)
            echo "You chose Option 1"
            ;;
        2)
            echo "You chose Option 2"
            ;;
        3)
            echo "You chose Option 3"
            ;;
esac

To make a GUI that looks like

yes, somtime in the future once I feel it has enough features and apps and is stable enough then I'll add a GUI

@mobilegmYT the script you erote doesn't run (at least for me)

Hmm. I think you can probably still google it.

@mobilegmYT of course, thanks for suggesting anyway, but a gui is in 2nd place right now

@mobilegmYT check the new branch I added a dialog main menu!

@mobilegmYT check the new branch I added a dialog main menu!

@mobilegmYT
ok, I merged the branch! :partying_face:
now the main menu and app installer menu have a dialog GUI, each option still uses the old style (if needed), and there are some YAD pop-up windows in some of the scripts!

@mobilegmYT
ok, I merged the branch! :partying_face:
now the main menu and app installer menu have a dialog GUI, each option still uses the old style (if needed), and there are some YAD pop-up windows in some of the scripts!

I'll close this issue a days once I'm sure the new dialog GUI isn't causing any errors.

I'll close this issue a days once I'm sure the new dialog GUI isn't causing any errors.

the dialog gui is working great so far, thanks for suggesting it @mobilegmYT!

the dialog gui is working great so far, thanks for suggesting it @mobilegmYT!


Connection refused

Environment

VerneMQ Version:1.3.0
OS： CentOS 7.4 64

Actual behaviour

first , i configured  ip:  listener.tcp.default = 47.97.xxx.xxx:1883

service vernemq start, it return Starting vernemq (via systemctl):  [  OK  ]

vernemq ping , it return pong

then , i use java to connect mqtt server , it runs on an other machine.

return :
Unable to connect to server (32103) - java.net.ConnectException: Connection refused

vmq-admin listener show
it return :

+----+-------+---------+-----+----------+---------+
|type|status |   ip    |port |mountpoint|max_conns|
+----+-------+---------+-----+----------+---------+
|http|running|<IP_ADDRESS>|8888 |          |  10000  |
|vmq |running| <IP_ADDRESS> |44053|          |  10000  |
+----+-------+---------+-----+----------+---------+

i am not found mqtt. but  i don't know why .

and i also use mosquitto
it works perfectly.

so, how i fix it

@cc19941109 Hi, thanks for asking!
Obviously, there is no listener started on port 1883 and you try to connect to that with the MQTT client.
Investigate the reason. The most probable is that the port is already taken when you start VerneMQ... is it taken by Mosquitto ;)?

Thank you for your reply  @ioolkos
i uninstall vernemq. And install it again .
then

 lsof -i:1883   ->  return nothing

vernemq start -> return : Node is already running!
this is the first i start vernemq. i don't know why

lsof -i:1883  -> return nothing

i  did not modify any configuration

vernemq config effective
allow_anonymous = off
 ......

listener.tcp.default = <IP_ADDRESS>:1883

listener.tcp.default.max_connections = -1
listener.tcp.default.mountpoint =
listener.tcp.default.nr_of_acceptors = -1
listener.tcp.max_connections = -1
listener.tcp.mountpoint =
listener.tcp.nr_of_acceptors = -1
listener.tcp.proxy_protocol = off
listener.tcp.proxy_protocol_use_cn_as_username = on
```

The error Node is already running! means VerneMQ was already running because it wasn't stopped before it was uninstalled. To kill the old instance find the beam.smp process and kill it. Then try to restart VerneMQ.
Watch the logs for warnings about the listener - it will log something if it is not possible to start the listener when starting VerneMQ.

i can't kill beam.smp with kill -9 pid  @larshesel
-> ps aux| grep beam.smp
root      1588  0.0  0.0 112676   996 pts/0    S+   23:39   0:00 grep --color=auto beam.smp

there are some error logs  when vernemq started
[error] <0.353.0> Failed to start Ranch listener {{47,97,xxx,xxx},1883} in ranch_tcp:listen([{ip,{47,97,xxx,xxx}},{port,1883},{nodelay,true},{linger,{true,0}},{send_timeout,30000},{send_timeout_close,true}]) for reason eaddrnotavail (can't assign requested address)

[error] <0.353.0> CRASH REPORT Process <0.353.0> with 0 neighbours exited with reason: {listen_error,{{47,97,xxx,xxx},1883},eaddrnotavail} in gen_server:init_it/6 line 352

[error] <0.351.0> Supervisor {<0.351.0>,ranch_listener_sup} had child ranch_acceptors_sup started with ranch_acceptors_sup:start_link({{47,97,xxx,xxx},1883}, 10, ranch_tcp, [{ip,{47,97,xxx,xxx}},{port,1883},{nodelay,true},{linger,{true,0}},{send_timeout,30000},{send_timeout_close,...}]) at undefined exit with reason {listen_error,{{47,97,xxx,xxx},1883},eaddrnotavail} in context start_error

[error] <0.237.0>@vmq_ranch_config:reconfigure_listeners_for_type:187 can't reconfigure mqtt listener({47,97,xxx,xxx}, 1883) with Options [{max_connections,10000},{nr_of_acceptors,10},{mountpoint,[]},{proxy_protocol,false}] due to {{shutdown,{failed_to_start_child,ranch_acceptors_sup,{listen_error,{{47,97,xxx,xxx},1883},eaddrnotavail}}},{child,undefined,{ranch_listener_sup,{{47,97,xxx,xxx},1883}},{ranch_listener_sup,start_link,[{{47,97,xxx,xxx},1883},10,ranch_tcp,[{ip,{47,97,xxx,xxx}},{port,1883},{nodelay,true},{linger,{true,0}},{send_timeout,30000},{send_timeout_close,true}],vmq_ranch,[{mountpoint,[]}]]},permanent,infinity,supervisor,[ranch_listener_sup]}}

eaddrnotavail is a POSIX error meaning that the machine doesn't have that IP address (the one you specify beginning with the prefix 47.97.) or the interface is not available.

i want to connect mqtt-server on another machine , How should I configure
there are some ip information
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet <IP_ADDRESS>  netmask <IP_ADDRESS>  broadcast <IP_ADDRESS>
        ether 02:42:d0:a5:f4:33  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet <IP_ADDRESS>  netmask <IP_ADDRESS>  broadcast <IP_ADDRESS>
        ether 00:16:3e:0c:b5:35  txqueuelen 1000  (Ethernet)
        RX packets 7068  bytes 626580 (611.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4747  bytes 1050035 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet <IP_ADDRESS>  netmask <IP_ADDRESS>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 5254  bytes 478269 (467.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5254  bytes 478269 (467.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@iZbp193yy46icaga1srlt6Z ~]# curl ifconfig.me
47.97.xxx.xxx

It's not clear what you're trying to achieve.
If you're trying to set up a cluster please consult the documentation over here : http://vernemq.com/docs/clustering/
If you want to bridge to another MQTT broker you can take a look at http://vernemq.com/docs/configuration/bridge.html
I hope that helps. I'm closing this as this is not a bug report or feature request. Feel free to join our community on slack: https://slack-invite.vernemq.com/

Thank you for your quick reply
can you show me how to see if there is another process owning the port ? please
ps : i've installed the broker in a new machine (only vernemq is intalled on it no other broker is installed)

@ioolkos


linkedlist.c

this is amazing @ThisisGenuine
thanks for the cintribution in my repo and please share this in social media and tag me on twitter


URL Cleanup

This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).
Fixed URLs
Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

[ ] http://www.apache.org/licenses/ with 1 occurrences migrated to:
https://www.apache.org/licenses/ (https result 200).
[ ] http://www.apache.org/licenses/LICENSE-2.0 with 90 occurrences migrated to:
https://www.apache.org/licenses/LICENSE-2.0 (https result 200).

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: spring-operator sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


Update introduction.md

🚀 Deployed on https://645d525481499600838f6dd8--cozy-fox-0defec.netlify.app


Integrate Circom, direct JS/TS note generation + proving in the sdk-core

Overview
We currently support generating notes using the WASM functions that call into Arkworks. We do not however have the note work for the Circom backend integrated in a separate flow. Last I checked this is being done on the fly in the dApp or in the api providers.
Task
We should add this flow into sdk-core. That is, when someone specifies a note generation input with Circom as the proving backend, we will call the functionality to generate the note using the dedicated JS/TS functions rather than the WASM work.

Please comment if there's questions/inconsistencies @nepoche @AhmedKorim ?

Closed in https://github.com/webb-tools/webb.js/pull/239


affected/package:

What version of Go are you using (go version)?

$ go version
go1.18.1 darwin/arm64

Does this issue reproduce with the latest release?
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE="on"
GOARCH="arm64"
GOBIN="/Users/biwentao/Desktop/go/bin"
GOCACHE="/Users/biwentao/Library/Caches/go-build"
GOENV="/Users/biwentao/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/biwentao/Desktop/go/pkg/mod"
GONOPROXY=""
GONOSUMDB="gitlab.ustock.cc/*"
GOOS="darwin"
GOPATH="/Users/biwentao/Desktop/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="off"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.18.1"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="0"
GOMOD="/Users/biwentao/Desktop/go/src/demo/go.mod"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch arm64 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/k5/l5y3fv9n27zfjrd9jwmp4p8c0000gn/T/go-build1830639654=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?
func main() {
a := "222"
fmt.Println(json.Valid([]byte(a)))
}

What did you expect to see?
false
What did you see instead?
true

Unlike many projects, the Go project does not use GitHub Issues for general discussion or asking questions. GitHub Issues are used for tracking bugs and proposals only.
For questions please refer to https://github.com/golang/go/wiki/Questions

FYI: JSON spec https://www.json.org/json-en.html

Thank you for your answer


onViewableItemsChanged is bound in constructor and do not get updated when those props change

Current behavior
A function passed to the onViewableItemsChanged really needs to work like a regular prop does, and not be bound in the constructor never to be updated again.  I see the warning "Changing viewabilityConfig on the fly is not supported" which I interpreted as just that prop, not that it also affects onViewableItemsChanged.
Seems like it's simple to call the updated function after a prop-change, no?  Lots and lots of components do that.  (Fine if you can't support changing the viewabilityConfig settings because of some optimizations, that seems less critical.)
Expected behavior
Callback function props should work like every react component. Copying props into a class component state in the constructor is called out as a bad practice in the official docs: https://reactjs.org/docs/react-component.html#constructor
To Reproduce
Just try it, you'll see :-).
Platform:

[X] iOS
[X] Android

Environment

1.3.1 (the latest)
Maybe related to https://github.com/Shopify/flash-list/issues/610 (but that explanation is not particularly clear so I'm not sure).

If you require an immediate solution, here's a potentially helpful but straightforward approach.
const myFunction = useRef<any>();
myFunction.current = useCallback(()=> {
      //some code
},[...])

<FlashList
   onViewableItemsChanged={info => {
    // Execute the ref of the function
          myFunction.current(info);
     }}
/>


Boilerplate Not Showing Up After Download

Hello!
My boilerplate is now not showing up. All that it shows is...

Did you figure the issue?

Hi! The html boilerplate is not responding on my vscode environment whereas its snippet i.e the extension is already downloaded. pls help me out

HI, I have the same issues now with HTML boilerplate , when I press  ! ,does not apper any more , do you know how fix this problem ?

On Fri, 8 Jul 2022 at 20:17, YuliashkaMJ @.***> wrote:

HI, I have the same issues now with HTML boilerplate , when I press !
,does not apper any more , do you know how fix this problem ?
—
Reply to this email directly, view it on GitHub
https://github.com/sidthesloth92/vsc_html5_boilerplate/issues/33#issuecomment-1179292345,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AUFJJFF4YRUR56QZ4B4VTZTVTB5GLANCNFSM4VDWF22A
.
You are receiving this because you commented.Message ID:
@.***>

Hi YuliashkasMJ
Open your VScode then go to the down part of your it. On the bar, look for
where a particular language shows click on it and other languages will pop
up then search for html, click on it and the working environment will
change to HTML

I believe the VS code was upgraded and now it works. Try to restart and
upgrade your VS code , after several months of this issue     HTML
boilerplate  after press !   started to appear again. If not , my teacher
helped us and we were using      instead   !  , you should type     html:5
On Tue, Oct 11, 2022 at 4:46 AM Ebenezeraluko @.***>
wrote:

On Fri, 8 Jul 2022 at 20:17, YuliashkaMJ @.***> wrote:

HI, I have the same issues now with HTML boilerplate , when I press !
,does not apper any more , do you know how fix this problem ?
—
Reply to this email directly, view it on GitHub
<
https://github.com/sidthesloth92/vsc_html5_boilerplate/issues/33#issuecomment-1179292345
,
or unsubscribe
<
https://github.com/notifications/unsubscribe-auth/AUFJJFF4YRUR56QZ4B4VTZTVTB5GLANCNFSM4VDWF22A
.
You are receiving this because you commented.Message ID:
@.***>

Hi YuliashkasMJ
Open your VScode then go to the down part of your it. On the bar, look for
where a particular language shows click on it and other languages will pop
up then search for html, click on it and the working environment will
change to HTML
—
Reply to this email directly, view it on GitHub
https://github.com/sidthesloth92/vsc_html5_boilerplate/issues/33#issuecomment-1274329940,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZ7ICRUO52W3TWKSTBCOBCDWCUSP7ANCNFSM4VDWF22A
.
You are receiving this because you commented.Message ID:
@.***>

But anyway thank you for answer
On Thu, Oct 13, 2022 at 5:09 PM yulia mayari @.***> wrote:

I believe the VS code was upgraded and now it works. Try to restart and
upgrade your VS code , after several months of this issue     HTML
boilerplate  after press !   started to appear again. If not , my teacher
helped us and we were using      instead   !  , you should type     html:5
On Tue, Oct 11, 2022 at 4:46 AM Ebenezeraluko @.***>
wrote:

On Fri, 8 Jul 2022 at 20:17, YuliashkaMJ @.***> wrote:

HI, I have the same issues now with HTML boilerplate , when I press !
,does not apper any more , do you know how fix this problem ?
—
Reply to this email directly, view it on GitHub
<
https://github.com/sidthesloth92/vsc_html5_boilerplate/issues/33#issuecomment-1179292345
,
or unsubscribe
<
https://github.com/notifications/unsubscribe-auth/AUFJJFF4YRUR56QZ4B4VTZTVTB5GLANCNFSM4VDWF22A
.
You are receiving this because you commented.Message ID:
@.***>

Hi YuliashkasMJ
Open your VScode then go to the down part of your it. On the bar, look for
where a particular language shows click on it and other languages will pop
up then search for html, click on it and the working environment will
change to HTML
—
Reply to this email directly, view it on GitHub
https://github.com/sidthesloth92/vsc_html5_boilerplate/issues/33#issuecomment-1274329940,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZ7ICRUO52W3TWKSTBCOBCDWCUSP7ANCNFSM4VDWF22A
.
You are receiving this because you commented.Message ID:
@.***>


HHH-11764 - JTS geometry being bound to byte array instead of PGgeometry

https://hibernate.atlassian.net/browse/HHH-11764

HI Vlad,
I'm going to review this in more detail, but I have some preliminary questions.

Do you have any idea why the error "org.postgresql.util.PSQLException: ERROR: function st_buffer(bytea, integer) is not unique" occurs for the issue reporter? I have integration test cases that also run these functions, and I have never experienced this problem (see the integration test code).
Why did you put the fix in a a new dialect?
Isn't this an issue for other functions? In other words, don't we need the cast to Geometry in all functions that take an argument?
Would this fix also address the JDBCDSLOG issue?

Hi,

I think something might have changed in Postgres 9.5. Are you running an older version of Postgres on your tests?
The fix is not in a new Dialect. The databases.gradle is where we define the test environments for integration testing.
It could be, but for the moment, we don't have other tests failing to know which other methods we need to cast arguments as well.
I'm not sure what we can do about jdbcdslog since it's beyond our scope. It could be that the Postgres Driver has changed the way it passes through he Geometry object types.

See my latest comment on https://hibernate.atlassian.net/browse/HHH-11764
If you don't mind, I would rather manually merge your changes. And work from there to find a more general solution.

Sure. You can close this PR and send a new one with a more generic fix. I'm glad you found a better way to address it.

work integrated in a7fc440e4c533a32b956044c9c421727d70afa79


Use existing PGP (or other) public keys to generate DHE shared key?

I'm a newbie in all this so...
Is it a function of DH (conceptual) or implementation option to generate the resulting shared key from two (or more) existing public keys?
I can work with pyDHE if not but wanted to test the waters first.

you absolutely could generate a shared key using existing keypairs, but there are two problems with that:

this is possibly not Diffie Hellman. You are simply generating a secret, symmetrical key and using RSA to transfer it. While this is not uncommon, it does not involve DHE and will not be supported by this library; or

Using two static private keys (Diffie Hellman specific - not PGP, RSA, or other) would always result in the same shared secret. This is not Ephemeral (the E in DHE) and does not provide forward secrecy.

In summary, What you are referring to is likely the first case, does not involve DHE, and thus you do not need this library. The second could be supported, but likely wont due to limited use case and reduced forward secrecy.

Thanks for the quick reply!


get_player_world_pos() instead of get_player_grid_pos()

Godot-30-days-tutorial-challenge-2017/start/04-Custom camera with instant room transitions/Camera.gd
The function is called get_player_grid_pos() in the video tutorial. In line 5 and 14 of the template it is called "get_player_world_pos()", which could be confusing.

The Godot 2 demos are all +/- outdated now. Closing this. If it's still a problem for someone, please reopen the issue - or submitting a PR would help a lot!


Make it simple to build the project on a fresh clone = higher chance of contributions

I want to contribute to the project and as I'm not previously familiar with typescript, installing the correct tools and type definitions was the initial hurdle. Just being able to do an npm install and then something like npm run build would be awesome.
I figured tsc index.ts --jsx react --experimentalDecorators seems to do the trick when building, provided you have typescript installed?
I guess something like
 "devDependencies": {
    "@types/react": "^0.14.37",
    "@types/react-native": "^0.29.35"
  }

should be in package.json ?
Then I got stuck on the following:
======== Module name 'global' was not resolved. ========
image-viewer/image-viewer.component.tsx(7,29): error TS2307: Cannot find module '../../auto-bind/index'.
image-viewer/image-viewer.component.tsx(8,37): error TS2307: Cannot find module '../../transmit-transparently/index'.
image-viewer/image-viewer.component.tsx(9,23): error TS2307: Cannot find module '../../image-zoom/index'.
image-viewer/image-viewer.component.tsx(81,36): error TS2339: Property 'assign' does not exist on type 'ObjectConstructor'.

are the modules auto-bind, transmit-transparently and image-zoom something you have on your local file system ? Could these use npm packages instead ? And the ObjectConstructor error I have no idea what to do about.
Thanks!

Hello, this project is not a separate management, we have a lot of similar projects are included in a large project. The final output to the web site, you can see the above components's documents, dependences, and demos. http://next.baidu.com/components/common/image-viewer
You can see this component support for Android and IOS, but there is no web version.
In root projects, we will clone all of our own components, and if a component depends on our own components, we will refer to the relative path, such as '../../image-zoom/index' and '../../auto-bind/index'.
When the project is published, all the dependent components will have a corresponding release version, the relative path of the code will be replaced, for example, will replace 'nt-image-zoom' with '../../image-zoom/index'.
There is no way to run alone, now I first think of a way to configure ts to join package.json, the file name and a replacement script, I will think of a way, and now see Object.assign error, also because I didn't have to write clearly the configuration of the TS lead, please give me a little time~

I see. Thanks for the clarification. Is there a way for me to do a similar clone of the root project to get the same setup ?

Project in the private repository, but because there is no important information, I first open source out.

https://github.com/nt-team/design

Thanks! I'll have a look.


Remove the useless namespace

What this PR does / why we need it:
PriorityClasses are not namespaced.
Release note:
NONE

/ok-to-test
/lgtm

/approve
Thanks!


Gap between header and content if lazy === true

Current behavior
<CollapsibleTabView  lazy ...> do not sync scroll position of unmounted routes, as expected, because the routes are unmounted! But, when the routes are mounted, may start with a gap between the header and the content.
Expected behaviour
When mounting the lazy routes, they should know the header position and start with the correct scroll position.
Workaround
The current workaround is to handle the laziness by yourself. What actually can be a good thing, since the lazy prop of react-native-tab-view is pseudo-lazy. It loads all routes if you click on the last tab!

@PedroBern Is there any solution to fix this issue, using lazy={true} is necessary if we don't want to load all the data until user really visits that tab.

@PedroBern Is there any solution to fix this issue, using lazy={true} is necessary if we don't want to load all the data until user really visits that tab.

@PedroBern Is there any solution to fix this issue, using lazy={true} is necessary if we don't want to load all the data until user really visits that tab.

@Janak-Nirmal  as I wrote above:

The current workaround is to handle the laziness by yourself. What actually can be a good thing, since the lazy prop of react-native-tab-view is pseudo-lazy. It loads all routes if you click on the last tab!

@PedroBern Is there any solution to fix this issue, using lazy={true} is necessary if we don't want to load all the data until user really visits that tab.

@Janak-Nirmal  as I wrote above:

The current workaround is to handle the laziness by yourself. What actually can be a good thing, since the lazy prop of react-native-tab-view is pseudo-lazy. It loads all routes if you click on the last tab!


Level 6 reduce() method

Hi, I've encountered this issue in level 6 of PA2 in the reduce method.  It says that there is an incompatible types due to the inference variable having incompatible bounds. I'm not sure what exactly is causing this as i adopted the reduce method that was discussed in recitation.

Oops ignore the first error I spelt gcd wrong ahah