add BME680 I2C component

This pull request adds the Adafruit BME680 I2C Temperature, Humidity, Pressure and Gas Sensor Breakout to WipperSnapper_Components

Hi @jamorris  - are you also going to add an I2C Component Driver (https://learn.adafruit.com/how-to-add-a-new-component-to-adafruit-io-wippersnapper/adding-an-i2c-component-driver) to WipperSnapper Arduino?

Hi @jamorris - are you also going to add the matching I2C Component Driver for the BME680 (https://learn.adafruit.com/how-to-add-a-new-component-to-adafruit-io-wippersnapper/adding-an-i2c-component-driver) to WipperSnapper Arduino?
We have a BME280 implementation already in WipperSnapper Arduino (https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/blob/main/src/components/i2c/drivers/WipperSnapper_I2C_Driver_BME280.h), the BME680 should be similar!

@brentru I used the BME280 driver as a template and have it working (compiles w/o error and serial monitor shows "Hardware configured successfully") but I still need to add the VOC sensor to the driver.

@jamorris  I'll merge this in so you can test out the sensor on Adafruit IO.
When it's complete (VOC sensor added), please make a pull request over on https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/pulls/new

@brentru I though I'd start simple and only enable the temperature sensor but get this error in the Serial Monitor: "ERROR: Failed to get ambient temperature sensor reading!" There's no error in verifying and uploading the code to the HUZZAH ESP32. Can you please point me to some resources that will help me find out where this is failing? The BME680 works when I upload the BME680 example code from the Adafruit BMD680 Library.

@jamorris  Sure - would you mind opening a new pull request with your code on https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/pulls/ so I can review it and test locally (I have a BME680)?

@brentru I opened the pull request.


Django >1.6 Support

This requires Django<1.6, for which has passed end-of-life (see: https://www.djangoproject.com/download/)
It would be good to upgrade this to support Django 1.7 or ideally 1.8 since that is an LTS version.  I'd be happy to help with this upgrade.

Thank you for your interest in this project. I haven't had much time to work with Django lately, so I would be happy to get any help. I'm not sure when I will have time to look at this, so if you send any PRs, that would speed things up (as I would need to look at the details).
The goal should be to support 1.8
Oh, now I see from the forks page that there are several attempts already.

probably can close this issue. looking at https://github.com/sigurdga/django-jquery-file-upload/commit/9957fcc02907d81aea1aaa4f6a043278b1c9411d I understand project now support 1.8.
can you confirm?

Yes. Pull request #59 closes the issue.


Add /vendor to .gitignore

If this isn't meant to be committed it would be nice to not see it
in git status.

Why do we have vendor directory at all?
We are not using vendoring

When I'm working on a go module I usually pull in the dependencies so I can jump to the definition of functions in dependencies.
This would explicitly prevent folks from committing the vendor directory.

Closing in favor of https://github.com/filanov/bm-inventory/pull/516


Add missing arguments for memcache procedural style functions

See source code https://github.com/php/pecl-caching-memcache/blob/master/memcache.c
and documentation examples on php.net. E.g. http://php.net/memcache_decrement

Thank you for finding issues and investigating it. Looks like some signatures can be improved. Please double-check and fix it.

This is not nice.
Please improve the patch as you wish and merge it. I dont have time to work on this right now.
The problem is that currently when you follow the advices from phpstorm inspection you will end up with broken code.


Gallery option for subset of a collection

Now possible with {% include collection_gallery.html %} include block if using both facet_by and only variables, where facet_by receives the column name and only is the value within that category to display


[MRG+1] Renderer class as visualization backend abstraction

What does this implement/fix?
This goal of this PR is to isolate actual implementation of visualization features as backend file stored in the new backend directory so that it's easier to maintain this part of the code and manage potentially new backends.
Additional information
I started the code refactoring of the function plot_alignment(), it's still a WIP. I'm currently working on the mayavi.mlab.quiver3d() function.

what do you think? @massich @larsoner @agramfort

That’s it for me
@larsoner can you do a pass?

I'm trying to depreciate this backend-specific variable fig of type mayavi.figure in mne.viz._3d.py. This variable is used as parameter or is returned by mutliple functions of the module. It is a mandatory argument of the function mne.viz._3d.snapshot_brain_montage() for example.
So I chose to add a parameter return_mayavi_figure always True for now for compatibilty reasons to continue returning this fig but the goal of this PR is to isolate the backend implementation and be backend-agnostic: I suggest for the future to take a mne.viz.backends.Renderer as parameter and return it as a plot_ result, what do you think @agramfort @larsoner?

as discussed snapshot_brain_montage should accept as input any object
that gets returned by a mne.viz._3d.plot_xxx function. To make the
snapshot_brain_montage backend agnostic it means this object should
know how to do do what is necessary for a snapshot. In other words I
think the we should aim to return a renderer objection in all
mne.viz.3d.plot functions and if you have mayavi backend you can get
the fig with renderer._fig if you know what you are doing.

as discussed snapshot_brain_montage should accept as input any object that gets returned by a mne.viz._3d.plot_xxx function.

This would always be a mne.viz.Renderer class, then? Just different subclasses, like MayaviRenderer or VisPyRenderer?
I'm not sure what the advantage to this is over always returning (and passing in) the root object (figure-like object) for each rendering method object to our plot_ functions. I guess you'd get to do my_rend.plot(...) or something maybe, but I'm not sure that's worth introducing a new class and breaking backward compatibility with our output and input types.
Basically I propose that we return the figure/Brain-like object, and take a figure/Brain-like object from each backend, rather than adding a mne.viz.XYZRenderer class whose only job it seems to be is to make our abstracting easier. (This can still be done/used internally, I'm just not sure what the advantage is to making this a user-facing change.)

Sorry to come late to the conversation here, it's possible I'm missing some essential cool feature about the class-based scheme...

how do you make it work with the snapshot_brain_montage function? do
you branch between backend types in snapshot_brain_montage ?
shall we talk about it on hangout with @GuillaumeFavellier?

Yes you'd branch within each function. I'm sure we can find some clever way to keep it one line, a dict-style-lookup based on the class name perhaps.

I compared the images generated by [circle full] on both master and this PR and I dont see any difference now. What do you think @agramfort @larsoner @massich ?

there is still hope to merge this before tomorrow morning :)

besides LGTM
@GuillaumeFavelier you'll need to rebase on master once the CIs are fixed. Hopefully really soon.

@GuillaumeFavelier you can rebase now that #5915 is in and things should work

FYI @GuillaumeFavelier you will also need to use the two updated hash values from this PR:
https://github.com/mne-tools/mne-python/pull/5904/files#diff-00583e36a75a694e071f9fc054a71c08
I updated the datasets on osf.io a couple of days ago. (This is also why master CircleCI build currently fails.)

This pull request introduces 1 alert when merging 00d978e48985176ff6997d97a8d27e8fb390779c into 63a8ce271eac9b2d488c353e04a3117aa1c5e772 - view on LGTM.com
new alerts:

1 for Unused import

Comment posted by LGTM.com

This pull request introduces 1 alert when merging d7bb6bf7288efee0175f7961e9076859e8a08314 into 63a8ce271eac9b2d488c353e04a3117aa1c5e772 - view on LGTM.com
new alerts:

1 for Unused import

Comment posted by LGTM.com

This pull request introduces 1 alert when merging 4658f05f8fff19c2e95139f3881536238af4bebf into 6fdfb41246a1ca1a5ae2c381c5f7d97137a63265 - view on LGTM.com
new alerts:

1 for Unused import

Comment posted by LGTM.com

Thanks @GuillaumeFavelier !


update triggers to invoke latest RunAction command

This will enable the output mapping, outside of "data" & "code" and also stops from using the deprecated "Run" command

This calls a new api, so maybe we should merge this in after the CLI update.  What do you guys think?

yeah, agree with @torresashjian lets just push it friday before the 0.5.0 release is tagged


fixed broken anchor links

Adding "You Do" to section headings changed the anchor links and I neglected to update their related links in the prior commit.

Reviewed in meatspace by @AWhitleyGA


Login via Azure CLI  check the credentials

Hi, so I had my pipeline working before then I canceled my GitHub Enterprise subscription and suddenly it stopped working and I get this error when I run my GitHub action
- name: 'Login via Azure CLI'
        uses: azure/login@v1
        with:
            creds: ${{ secrets.AZURE_CREDENTIALS_NEW }}

I have AZURE_CREDENTIALS_NEW stored in my organization secrets and it worked before but now it just would not work. I have tried another az ad sp create-for-rbac and tried with the new credentials but the issue remains the same.
Any help is appreciated

Run azure/login@v1
with:
creds: ***
enable-AzPSSession: false
environment: azurecloud
allow-no-subscriptions: false
audience: api://AzureADTokenExchange
env:
GITHUB_PAGES_REPO: xxx/helm-charts
GITHUB_PAGES_BRANCH: gh-pages
HELM_VERSION: 3.8.1
ACR_NAME: ***
/usr/bin/docker exec  xxx sh -c "cat /etc/*release | grep ^ID"
Error: Az CLI Login failed. Please check the credentials and make sure az is installed on the runner.  Running JavaScript Action with external tool: node16_alpine
Error: Az CLI Login failed. Please check the credentials and make sure az is installed on the runner. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows
##[debug]Node Action run completed with exit code 1
##[debug]AZURE_HTTP_USER_AGENT='GITHUBACTIONS/AzureLogin@v1_xxx/xxxxx-charts'
##[debug]AZUREPS_HOST_ENVIRONMENT='GITHUBACTIONS/AzureLogin@v1_xxx/xxxxx-charts'
##[debug]AZURE_HTTP_USER_AGENT=''
##[debug]AZUREPS_HOST_ENVIRONMENT=''
##[debug]Finishing: Login via Azure CLI

Hi @AdieOlami, sorry for the delay. Have you tried to run az login with your new credential locally? If it still doesn't work, please also include the local error message.

Closing the issue for now. If you have any further question, feel free to reopen it.


Relative links are triggering page reload

As an example:
[/history](/history)

This causes a page reload (you can tell because the TV widget needs to reload the streams).
I'm pretty sure this was working before, but I'll admit I'm not 100% sure.

Should be fixed. Please test.


Update blog-details-sidebar-left.html

changes in the commenter's name & date

This has conflicts and you did not resolve it when we asked you to change requests. These changes need to happen within 1-2 days to avoid stale code. Will close now & try again next time.


[Error 2] No such file or directory : 'node'

I am new to node.js or vs code. but I am trying debug my program. unfortunately, i did not understand what is going wrong. kindly help.
this is the error i am facing when push debugs batton.

this is conf file

It's saying that it can't find node which is required to run the gdb debug adapter. You probably just don't have it installed https://nodejs.org/en/ or its not in your path.
Also watch out for using vscode variables${workspaceRoot} is not going to get expanded you probably want ${project_path}.  https://www.sublimetext.com/docs/3/build_systems.html#variables

I already install node.js but not package manager. and I don't how and where to add a path. i am totally new node and this plugin.

Same problem here, dude. But I install the package manager in the command line first.
Sublime couldn't recognise my path variable although I've set export in the zsh profile and symlink in the /usr/local/bin...

Try exporting the path in .profile instead of .zshrc if you are on Linux.
You can read more here about this problem of node or npm not being found in the path:
https://github.com/sublimelsp/LSP-vue/issues/20#issuecomment-605623377

Thank you, predragnikolic. After doing what you've said, adding .profile to my home directory. I've met this kind of issue as well. By the way, my tech spec is macbook air 2017, macos catelina 10.15.4, zsh is my default shell.

That looks like the same issue as https://github.com/daveleroy/sublime_debugger/issues/55 which was resolved by downgrading the version of node for vscode-python

Thank you so much, daveleroy. It works as I installed the node-v12.15.0. #52 small font overlapping issue also appears. I could bear it at the moment. But this debugger is so great. Thanks again.


Change object store to allow sync user auth URL to be modified

With this PR, getting a user with a different auth URL than the one it was originally given updates the URL, instead of throwing an exception.
This fixes the issue (commonly encountered during development) when a user is opened with one URL, persisted, the server is moved or SSL is enabled, and an attempt to log in the user with the new address is made.
This does not fix the corner case where two different ROSes have users with the same user ID, and the user wishes to be logged into both simultaneously, but this case wasn't supported before, nor is it supported by any of the other subsystem code.

Did we get clarity on whether identity is expected to be unique across different servers? If that's not guaranteed, is this change safe?

It's complicated.
The default implementation of identity is a UUID. However, there's the possibility of plugging a module into ROS that allows you to specify arbitrary identities instead of using the built-in system, so a conflict is theoretically possible. Even if it is, though, using Realms across multiple servers concurrently is something we intentionally de-emphasized when designing v1 of ROS, so I don't think it's a supported use case anyways.

It's something that Realm Browser inherently needs to support.

Back to the drawing board, then.


Inconsistency between 'opacity' and 'transparency' in settings UI

There's inconsistent help text for opacity/transparency:
https://github.com/microsoft/terminal/blob/788d33ce94d28e2903bc49f841ce279211b7f557/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw#L530-L531
https://github.com/microsoft/terminal/blob/788d33ce94d28e2903bc49f841ce279211b7f557/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw#L650-L651
The setting controls opacity, but the help text that appears when dragging the slider says transparency. Can we change these occurences of 'transparency' to 'opacity'? I can make a PR if needed 👍🏼

I think in these two cases "opacity" would be a good choice.


Using mimalloc (experimental, optionally)

My results with tbp.
Without mimalloc:
      many_lines:   3.0420 seconds,   9.357 MB/s (normalized:   2.457 KB/s)
      long_lines:   1.0080 seconds,  29.630 MB/s (normalized:   7.780 KB/s)
    sgr_fg_lines:   0.0585 seconds,  54.701 MB/s (normalized:  14.362 KB/s)
 sgr_fg_bg_lines:   0.0724 seconds,  44.199 MB/s (normalized:  11.605 KB/s)
       all tests:   5.0809 seconds,  22.035 MB/s (normalized:   5.786 KB/s)

With mimalloc:
      many_lines:   3.0456 seconds,   9.259 MB/s (normalized:   2.431 KB/s)
      long_lines:   1.0202 seconds,  26.622 MB/s (normalized:   6.990 KB/s)
    sgr_fg_lines:   0.0526 seconds,  60.837 MB/s (normalized:  15.973 KB/s)
 sgr_fg_bg_lines:   0.0523 seconds,  61.185 MB/s (normalized:  16.065 KB/s)
       all tests:   5.0707 seconds,  22.429 MB/s (normalized:   5.889 KB/s)

I am glad you like tbp, did you also try bench-headless from the src/terminal/ directory? It's running the same tests but headless, which is also nice for debugging and is best used together with valgrind --tool=callgrind ./bench-headless && kcachegrind.
How often did you execute tbp and where the results on each side stable?
I am surprised long_lines and many_lines went down in performance with mimalloc enabled but the other 3 went up.
Did you also try tcmalloc (Google's implementation of a besser malloc) or jemalloc? I do not know how they differ in detail but all i know is that at least tcmalloc was designed to be at better performance when used in multi threaded application (which we are).

did you also try bench-headless from the src/terminal/ directory?

No. :)

How often did you execute tbp and where the results on each side stable?

5-6 times, results are stable.

Did you also try tcmalloc (Google's implementation of a besser malloc) or jemalloc?

I'm using https://github.com/mjansson/rpmalloc-benchmark. And rpmalloc is fastest on my PC.
But I'm not sure that all allocators are up to date in this repository.
Also mimalloc is very actively in development.


Add bir optimization on top of trap refactor

Purpose

Describe the problems, issues, or needs driving this feature/fix and include links to related issues.

Fixes #19709
Fixes #20219
Approach

Describe how you are implementing the solutions along with the design details.

Samples

Provide high-level details about the samples related to this feature.

Remarks

List any other known issues, related PRs, TODO items, or any other notes related to the PR.

Check List

[ ] Read the Contributing Guide
[ ] Updated Change Log
[ ] Checked Tooling Support (#)
[ ] Added necessary tests

[ ] Unit Tests
[ ] Spec Conformance Tests
[ ] Integration Tests
[ ] Ballerina By Example Tests

[ ] Increased Test Coverage
[ ] Added necessary documentation

[ ] API documentation
[ ] Module documentation in Module.md files
[ ] Ballerina By Examples

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@9d38e22). Click here to learn what that means.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master   #20243   +/-   ##
=========================================
  Coverage          ?   15.21%
=========================================
  Files             ?       50
  Lines             ?     1341
  Branches          ?      208
=========================================
  Hits              ?      204
  Misses            ?     1121
  Partials          ?       16

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 9d38e22...8c178f2. Read the comment docs.

created an issue to fix the temp error properly https://github.com/ballerina-platform/ballerina-lang/issues/20262
temporary fix - https://github.com/ballerina-platform/ballerina-lang/pull/20243/commits/0500e4b915608090bb99760489859db8d80fd602


not working anymore for SB 3.x

i tried this with the SB petclinic project.
SB 2.7.0 still works
SB 3.1 is not

If anyone is still interested in this, I've created a fork with the support for Spring Boot 3+ : https://github.com/andrey-vasilyev/spring-boot-starter-log4jdbc
I plan to maintain it for a while as I use it in my own projects.


spurious characters from previous view in preview window

$ fzf --version
0.56.0 (ff16877)

Using Bash on Linux. Reproducer:
echo -e "aaaaaaaaaa \nbbbbbbbbb" | fzf --preview-window=10 --preview="echo {}"

First item preview is correct:

The second isn't (note the a at the end):

The last column of the preview window hasn't been cleaned, and it shows the a that was in that position for the previous item.

Thanks, bacc860 should fix it, but please let me know if you see any regression from the change.


Nightly Features can be replaced ?

Hi, might I ask what nightly features are required in krnl?
Generally, nightly builds are quite unstable (some features available in nightly might never make it to stable and could be removed entirely). Relying on stable versions would be more robust, especially if the necessary features can be replaced by macros or crates compatible with stable versions.

Hello! This is somewhat covered in the docs.
krnlc uses nightly to get the crate source in token form, parsed by syn. This is how it locates modules. See https://github.com/rust-lang/rust/issues/43364.
rust-gpu is used to compile kernels to SPIR-V. It replaces Rust's LLVM backend with its own, which requires nightly features and only works (more or less) with that exact nightly. Many other projects, like Rust-CUDA, work in a similar way, with the same limitation. While there is plenty of interest in stabilizing this, I don't see that being realistic anytime soon. See  https://github.com/rust-lang/rust/issues/77933.


NIFI-11598 Upgrade gremlin.version from 3.6.2 to 3.6.4

Summary
NIFI-11598
Tracking
Please complete the following tracking steps prior to pull request creation.
Issue Tracking

[ ] Apache NiFi Jira issue created

Pull Request Tracking

[ ] Pull Request title starts with Apache NiFi Jira issue number, such as NIFI-00000
[ ] Pull Request commit message starts with Apache NiFi Jira issue number, as such NIFI-00000

Pull Request Formatting

[ ] Pull Request based on current revision of the main branch
[ ] Pull Request refers to a feature branch with one commit containing changes

Verification
Please indicate the verification steps performed prior to pull request creation.
Build

[ ] Build completed using mvn clean install -P contrib-check

[ ] JDK 11
[ ] JDK 17

Licensing

[ ] New dependencies are compatible with the Apache License 2.0 according to the License Policy
[ ] New dependencies are documented in applicable LICENSE and NOTICE files

Documentation

[ ] Documentation formatting appears as expected in rendered files

Will merge once the build is done, assuming there are no surprises.

Will merge once the build is done, assuming there are no surprises.

Okay cool, thanks :)


Change az bash entry script file to use python shebang

For #7469
//CC @lmazuel who proposed this

@fengzhou-msft  add to S162.

fixed with https://github.com/Azure/azure-cli/pull/10516


Sample Temperature

Hi，thanks for the great work!
I want to ask what sample temperature is codet5_finetuned_codeRL used.
Thanks for your reply

@MrBlack0220 We used a sampling temperature of 0.6, except for the MBPP experiments (in which we used a high temperature of 1.2 instead).


Use latest CSI sidecar container images from registry.k8s.io

k8s.gcr.io registry is deprecated and to be shut down https://groups.google.com/a/kubernetes.io/g/dev/c/DYZYNQ_A6_c
This PR changes the registry of upstream CSI driver sidecar images to the new registry.k8s.io and also bumps to the latest minor versions of those images. I've tested that CSI driver with these images work as expected.

/lgtm
/approve

/approve

@irbekrm we are not in the OWNERS file
@SgtCoDFish

I've done a report of all the repos in the org so I know which ones are out of date.
Given that this is approved by an active cert-manager maintainer, I'll add the approved label manually here!


Fix macos job name in release script

macos job name is incorrect (missing 'intel' path), adds the intel path.

Note actual name of job here: https://hydra.iohk.io/job/Cardano/cardano-wallet/macos.intel.cardano-wallet-macos-intel


Apply Trademarks' recent adjustments

Description
The PR aims to address the most recent Trademarks' modifications in the codebase.
Changes proposed in this pull request:

Only comments sections have been adjusted

@mergify backport rls/2024.0.0-rls


upgrade to mranderson 0.5.0

hi folks,
just released mranderson 0.5.0. quite a few exciting fixes and new features and a big, long overdue code clean up.
There is a breaking change: the leiningen task got renamed to inline-deps. That said I looked at re-frame-10x when I started working on the new branch but did not see an easy/quick way to test if my changes break anything on the project. So give it a spin sooner than later if possible (refactor-nrepl and cider-nrepl is just got migrated), also I am available for a few more weeks to quickly fix issues if any occurs.

Thanks for the heads up! I'll take a look now.

cheers. the issues you filed are not blocking or you just manually fixed them?

Just manually fixed them. Thanks!


thuang-update-localStorage-boolean-values

Reviewers
Functional:
Readability:

Changes

add
remove
modify
localStorage values are changed from "true" and "false" to "yes" and "no" to match Explorer's convention

Note that feature flags will use "yes" and "no" from now on too, so please add the relevant feature flags in the URL params to overwrite the values again! E.g., ?auth=true&cc=true (this part stays the same)
Definition of Done (from ticket)

QA steps (optional)

Clear your localStorage for the site and try setting feature flags and cookie banner again!

Thanks for the quick review too 🎉 ⚡ Mergingg


Windows:  FFMPEG Buffering:  "No client is using this channel anymore. Streaming Server connection has ended"

Issue
When tuning into an IPTV channel from Plex Android client, intermittently/sometimes I will get the below Plex error.  If I try again, sometimes it works without the error.

Threadfin log:
2023-04-06 11:32:17 [Threadfin] Buffer:                 true [ffmpeg]
2023-04-06 11:32:17 [Threadfin] Buffer Size:            512 KB
2023-04-06 11:32:17 [Threadfin] Channel Name:           USATV
2023-04-06 11:32:17 [Threadfin] Client User-Agent:      Lavf/LIBAVFORMAT_VERSION
2023-04-06 11:32:19 [Threadfin] Streaming Status:       Playlist: LiveTV - Tuner: 1 / 3
2023-04-06 11:32:19 [Threadfin] FFMPEG path:            C:\Program Files (x86)\IPTV\ffmpeg.exe
2023-04-06 11:32:19 [Threadfin] Streaming URL:          http://xc-url:80/live/mkanet/blc526wK3W/2503.ts
2023-04-06 11:32:19 [Threadfin] FFMPEG:                 Processing data
2023-04-06 11:32:19 [Threadfin] Streaming Status:       Receive data from FFMPEG
2023-04-06 11:32:21 [Threadfin] Streaming Status:       Buffering data from FFMPEG
2023-04-06 11:32:28 [Threadfin] Streaming Status:       Client has terminated the connection
2023-04-06 11:32:28 [Threadfin] Streaming Status:       Channel: USATV (Clients: 0)
2023-04-06 11:32:29 [Threadfin] Streaming Status:       Channel: USATV - No client is using this channel anymore. Streaming Server connection has ended
2023-04-06 11:32:29 [Threadfin] Streaming Status:       Playlist: LiveTV - Tuner: 0 / 3

PS: Sometimes, I will see the below message in the logs when FFMpeg is enabled.  However, I'm not sure if it's related to this issue or not:
[h264 @ 000002027c493e80] non-existing SPS 0 referenced in buffering period

Things I've tried:

If I increase the buffer size (even up to 3MBs), it doesn't prevent this issue.
If I increase the timeout period to even 2500ms, it doesn't prevent this issue.
Using to different versions of FFmpeg.exe for Windows doesn't prevent this issue.
RAM buffering is always enabled.
FFMpeg flags (Threadfin defaults).
If I select No Buffering (Client connects directly to the streaming server), streams connect noticeably faster; avoiding this issue in most cases.

Plex Android Client settings:
Quality:                                   [Original bitrate/DirectStream]
Automatically adjust quality:  [Disabled]

OS:  Win11 (64bit)
Arch: Intel 64 Bit
Threadfin Version:  1.0 (7)

This issue appears to be related to FFMpeg buffering.  However, I'm not sure what to change to prevent this issue from happening.  NOTE:  I also had this issue with xteve, if I remember correctly.

Are there any ffmpeg errors int he log?

Are there any ffmpeg errors int he log?

HI.  Thank you for the quick response.  No there wasn't.  I posted everything in the log related to this stream.  It seems to think the client is disconnecting it.  This issue doesn't happen from a PC with an internet connection.
Any suggestions?

@Fyb3roptik is there any way to display more detailed information on what's causing this issue?  The current threadfin log doesn't show anything useful to debug this issue.  I really don't know enough about threadfin to figure this out on my own.

It should show the ffmpeg error

Unfortunately. there is no ffmpeg error.  At least not in threadfin log.  Anyway, I think the problem is not related to ffmpeg.  When I disabled ffmpeg, the log shows that threadfin passes the stream to the plex client.  Then, same thing happens:   Client has terminated the connection
Very interesting clue:  This issue does NOT happen to Roku Plex client (connected via ethernet).  It also does not happen to Plex (inweb browser).
Any ideas why the Plex client would sometimes disconnect after threadfin passes the stream?  And, never has issues with Roku/Web browser clients?

@Fyb3roptik I figured out why this issue is happening.  The issue appears to be specific to Plex Android app when handling audio stream/codec (see below log).  The below errors happen every time the issue happens.  Maybe you might know how to prevent this issue?
04-08 16:13:04.098  i: [FFmpeg] [WARN] [mpegts @ 0xb400006f2b833400] Could not find codec parameters for stream 1 (Audio: aac (LC) ([15][0][0][0] / 0x000F), 24000 Hz, 0 channels, 96 kb/s): unspecified number of channels
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options

04-08 16:13:04.098  i: [FFmpeg] [INFO] Input #0, mpegts, from '':

04-08 16:13:04.099  i: [FFmpeg] [INFO]   Duration:
04-08 16:13:04.099  i: [FFmpeg] [INFO] N/A
04-08 16:13:04.099  i: [FFmpeg] [INFO] , start:
04-08 16:13:04.099  i: [FFmpeg] [INFO] 24.726622
04-08 16:13:04.099  i: [FFmpeg] [INFO] , bitrate:
04-08 16:13:04.099  i: [FFmpeg] [INFO] N/A
04-08 16:13:04.100  i: [FFmpeg] [INFO]

04-08 16:13:04.100  i: [FFmpeg] [INFO]   Program 1

04-08 16:13:04.100  i: [FFmpeg] [INFO]     Metadata:

04-08 16:13:04.100  i: [FFmpeg] [INFO]       service_name    :
04-08 16:13:04.100  i: [FFmpeg] [INFO] Service01
04-08 16:13:04.101  i: [FFmpeg] [INFO]

04-08 16:13:04.101  i: [FFmpeg] [INFO]       service_provider:
04-08 16:13:04.101  i: [FFmpeg] [INFO] FFmpeg
04-08 16:13:04.101  i: [FFmpeg] [INFO]

04-08 16:13:04.101  i: [FFmpeg] [INFO]   Stream #0:0
04-08 16:13:04.101  i: [FFmpeg] [INFO] [0x100]
04-08 16:13:04.102  i: [FFmpeg] [INFO] : Video: h264 (Main) ([27][0][0][0] / 0x001B), none(progressive), 1280x720 [SAR 1:1 DAR 16:9], Closed Captions
04-08 16:13:04.102  i: [FFmpeg] [INFO] ,
04-08 16:13:04.102  i: [FFmpeg] [INFO] 59.94 fps,
04-08 16:13:04.102  i: [FFmpeg] [INFO] 59.94 tbr,
04-08 16:13:04.102  i: [FFmpeg] [INFO] 90k tbn
04-08 16:13:04.103  i: [FFmpeg] [INFO]

04-08 16:13:04.106  i: [FFmpeg] [INFO]   Stream #0:1
04-08 16:13:04.107  i: [FFmpeg] [INFO] [0x101]
04-08 16:13:04.107  i: [FFmpeg] [INFO] : Audio: aac (LC) ([15][0][0][0] / 0x000F), 24000 Hz, 0 channels, 96 kb/s
04-08 16:13:04.107  i: [FFmpeg] [INFO]

04-08 16:13:04.107  i: [FFmpeg] [INFO] [FFmpegExtractor] Created filter for h264.
04-08 16:13:04.108  i: [FFmpeg] [INFO] [FFmpegExtractor] Created filter for aac.
04-08 16:13:04.108  i: [FFmpeg] [INFO] [FFmpegExtractor] Requesting IO seek to 0 bytes.
04-08 16:13:04.108  i: [FFmpeg] [INFO] [FFmpegExtractor] IO seek completed to -38 Interrupted: No Closed: No
04-08 16:13:04.108  i: [FFmpeg] [INFO] [FFmpegExtractor] Requesting IO seek to -1 bytes.
04-08 16:13:04.108  i: [FFmpegExtractor] IO-seek has been requested, target of -1 bytes (whence 2).
04-08 16:13:04.109  i: [FFmpegExtractor] IO-seek not resolvable, returning -38 instead.
04-08 16:13:04.109  w: [FF] AVC configuration parser failed, falling back to using the original initialisation data.
04-08 16:13:04.109  i: [VideoStream] Dolby Vision is unsupported on this display or device.
04-08 16:13:04.109  i: [FFmpegExtractor] Container: Container[mpegts] No Title - 0 kbps, -54 seconds [CT: 0us, ST: 24726622us, SRT: -9223372036854775808us]..
04-08 16:13:04.110  i: [FFmpegExtractor] Track found: VideoStream[0-h264] 1280x720 [SAR 1:1, DAR 16:9]. H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 - Unknown Profile (video/avc), ~-96 kbps -54 seconds 59.94fps, No Title / Unknown (null), 1 / 49 bytes, ..
04-08 16:13:04.114  i: [FFmpeg] [INFO] [FFmpegExtractor] IO seek completed to -38 Interrupted: No Closed: No
04-08 16:13:04.115  i: [FFmpegExtractor] Track found: AudioStream[1-aac] 0 channels over 0 (null), 24000 Hz, 0,0 padding. AAC (Advanced Audio Coding) - Unknown Profile (audio/mp4a-latm), 96 kbps -54 seconds 0.00fps, No Title / Unknown (null), 1 / 2 bytes, ..
04-08 16:13:04.116  i: [ExoPlayer][EventLogger] videoInputFormat [eventTime=9.07, mediaPos=14.78, window=0, period=0, id=0, mimeType=video/avc, codecs=h264, res=1280x720, fps=59.94006]
04-08 16:13:04.139  i: [ExoPlayer][EventLogger] audioDecoderInitialized [eventTime=9.09, mediaPos=14.78, window=0, period=0, c2.android.aac.decoder]
04-08 16:13:04.140  i: [ExoPlayer][EventLogger] audioInputFormat [eventTime=9.09, mediaPos=14.78, window=0, period=0, id=1, mimeType=audio/mp4a-latm, bitrate=96082, codecs=aac, channels=0, sample_rate=24000, language=unknown, selectionFlags=[default,forced]]
04-08 16:13:04.140  i: [TranscodeSession] Updating session status
04-08 16:13:04.141  i: [TranscodeSession] Direct Play
04-08 16:13:04.159  i: [ExoPlayer][EventLogger] videoDisabled [eventTime=9.11, mediaPos=14.78, window=0, period=0]
04-08 16:13:04.161  i: [ExoPlayer][EventLogger] audioDisabled [eventTime=9.11, mediaPos=14.78, window=0, period=0]
04-08 16:13:04.168  i: [FFmpegExtractor] Interrupting extractor for release.
04-08 16:13:04.170  i: [FFmpeg] [INFO] [FFmpegExtractor] Closing demuxer context.
04-08 16:13:04.170  i: [FFmpeg] [INFO] [FFmpegExtractor] Source has been closed successfully.
04-08 16:13:04.170  i: [FFmpegExtractor] Extractor has been released.
04-08 16:13:04.171  i: [LoadControl] Setting buffer size to 73.19 MB / 0 seconds.
04-08 16:13:04.172  e: [ExoPlayer][EventLogger] playerFailed [eventTime=9.12, mediaPos=14.78, window=0, period=0, errorCode=ERROR_CODE_DECODING_FAILED
  com.google.android.exoplayer2.r: MediaCodecAudioRenderer error, index=3, format=Format(1, null, null, audio/mp4a-latm, aac, 96082, unknown, [-1, -1, -1.0], [0, 24000]), format_supported=YES
      at com.google.android.exoplayer2.x1.handleMessage(SourceFile:357)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loopOnce(Looper.java:226)
      at android.os.Looper.loop(Looper.java:313)
      at android.os.HandlerThread.run(HandlerThread.java:67)
  Caused by: y3.m: Decoder failed: c2.android.aac.decoder
      at y3.o.m(Unknown Source:2)
      at y3.o.render(SourceFile:154)
      at com.google.android.exoplayer2.x1.p(SourceFile:97)
      at com.google.android.exoplayer2.x1.handleMessage(SourceFile:221)
      ... 4 more
  Caused by: android.media.MediaCodec$CodecException: Error 0xe
]
04-08 16:13:04.173  e: [Player][ExoPlayer] Playback error detected
04-08 16:13:04.174  i: [Player][Timeline] Handling player error
04-08 16:13:04.174  i: [Player][Timeline] Playback stopped (error: true)
04-08 16:13:04.175  e: An exception occurred: com.google.android.exoplayer2.r: MediaCodecAudioRenderer error, index=3, format=Format(1, null, null, audio/mp4a-latm, aac, 96082, unknown, [-1, -1, -1.0], [0, 24000]), format_supported=YES
04-08 16:13:04.175  e: Stacktrace: com.google.android.exoplayer2.r: MediaCodecAudioRenderer error, index=3, format=Format(1, null, null, audio/mp4a-latm, aac, 96082, unknown, [-1, -1, -1.0], [0, 24000]), format_supported=YES
	at com.google.android.exoplayer2.x1.handleMessage(SourceFile:357)
	at android.os.Handler.dispatchMessage(Handler.java:102)
	at android.os.Looper.loopOnce(Looper.java:226)
	at android.os.Looper.loop(Looper.java:313)
	at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: y3.m: Decoder failed: c2.android.aac.decoder
	at y3.o.m(Unknown Source:2)
	at y3.o.render(SourceFile:154)
	at com.google.android.exoplayer2.x1.p(SourceFile:97)
	at com.google.android.exoplayer2.x1.handleMessage(SourceFile:221)
	... 4 more
Caused by: android.media.MediaCodec$CodecException: Error 0xe

What is set in ffmpeg settings on threadfin? That's odd that it's not finding audio channels.

FFMpeg flags:                      -hide_banner -loglevel error -i [URL] -c copy -f mpegts pipe:1
Buffer Size:                          .5MB
Timeout for new client:       500ms
FFmpeg Binary Path:           C:\Program Files (x86)\IPTV\ffmpeg.exe
ffmpeg version:                   2023-04-06-git-b564ad8eac-full_build-www.gyan.dev
Is this something that can be prevented with appropriate ffmpeg flags?

@Fyb3roptik I am happy to say I finally figured out the issue!
All the weird audio decoding errors I found in the Plex mobile client debug log is because the aac streams provided by my provider are not fully compatible with Plex.  Provider's native aac format isn't encoded very well.  I had to use ffmpeg in threadfin to reencode the aac to a more standard format:   Below are the flags I'm using to fix this issue:
-hide_banner -loglevel error -i [URL] -c:a aac -c:v copy -f mpegts pipe:1

I can also re-encode to mp3 as suggested by xteve FAQ's:

AAC is standard so stick with that. Yeah that's a good snag! Have you tried using cuda? Do you have an Nvidia card?

AAC is standard so stick with that. Yeah that's a good snag! Have you tried using cuda? Do you have an Nvidia card?

The provider already has AAC, however the AAC encoder they used isn't very compatible with some plex clients.  If I use MP3, Plex will tune into the channel even faster on Plex.
I don't have nvidia  GPU.  I have a very powerful Intel i7 137000k UHD770 IGPU for video encoding (QuickSync) which has much more processing power.


Values like jsHeapSize change over time, whereas useMemoryStatus hook will give a constant value

memory info totalJSHeapSize  and usedJSHeapSize  change over time, whereas useMemoryStatus hook return value which was captured during the module load time.
useInitialMemoryStatus would have been a better name since this hook returns initial memory status.

Thanks for the feedback, @bharathnayak03. We recently switched over to a model where many of the original 'hooks' were changed to offer constant values, with the exception of the Network status hook. I see two options here:

We could change the name for the hook or at minimum update the docs to capture that it only returns the initial memory status
We can revert memory status back to using useState and provide a way to be updated when heap sizes change

Interested in @wmertens opinions here too... :)

@addyosmani
As we were using the approach from this article, I think we could revert memory status back to React.js hook and add some listener like network hook.
According to my experiment, with a lot of tabs open for a long time on Chrome browser (when memory usage is quite high enough to notice), the previous memory hook based on this article used to work well.
I think it could be better off evaluating memory status than just based on navigator.deviceMemory.

@addyosmani
I'm just wondering if we could explore some approach with which we can evaluate the CPU usage not just the constant value.

As we were using the approach from this article, I think we could revert memory status back to React.js hook and add some listener like network hook.

I would be supportive of this. I think it's worth keeping this issue open a little longer just to give more users a chance to provide more feedback before we make a decision on how to proceed.
Another option would be focusing the memory utility entirely on the constant navigator.deviceMemory value (dropping performance.memory data), however given the original post mentions totalJSHeapSize, I'm inclined to say users probably want this information exposed too.


Guard spawning issue.

I keep getting this error related to when the guards should spawn.
Reference from line 243 client.lua
SetPedArmour(Config.Guards[k], V['armor'])           attempt to index a nil value Global V

GameBuild 2372

should be fixed now


Your blog is broken

Wasn't able to find an email address, lets try it this way.
Your blog gives an error:
Fatal error: __autoload() is no longer supported, use spl_autoload_register() instead in /home/public/blog/wp-includes/compat.php on line 502

https://boredzo.org/blog/

Thanks. Will take a look today.

Well, that took basically all day. Web host dropped PHP 7, so my long-put-off upgrade to a less-ancient WordPress could wait no longer. Then I had 404s most of the day because of a merge screw-up that caused wp_query to be unable to look up any posts.
It's fixed now. Thanks again for letting me now.

Well, that took basically all day. Web host dropped PHP 7, so my long-put-off upgrade to a less-ancient WordPress could wait no longer. Then I had 404s most of the day because of a merge screw-up that caused wp_query to be unable to look up any posts.
It's fixed now. Thanks again for letting me now.

Thank you for taking a look and fixing it!


civo: init at 1.0.28

Description of changes

Things done

Built on platform(s)

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

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

The commit adding the maintainer should be a separate one: maintainers: add berryp

The commit adding the maintainer should be a separate one: maintainers: add berryp

Moved that change to https://github.com/NixOS/nixpkgs/pull/172979


notifications called on app start conflicting

Hello!
Perhaps I'm not understanding the documentation, or how to use the plugin correctly - if that's the case some extra clarity would be great.
I'm trying to send notifications on a user selectable schedule (either 'hour' or 'day' interval). I've done some testing and found that the only way notifications continue to fire is if I place the notification function in the on-loaded portion of my app-root.js file (the first notification fires regardless of where I put the functions).
Unfortunately, with the function restricted to the app-root, the notifications to fire every time I re-open the app (even if just task switching) which creates a less than desirable user experience.
Is there a way to figure out what schedule the current notification is on (with ID)? or some way to prevent it from firing until the next interval has passed if a user task switches?
I was expecting this to be possible with the getScheduledIds function - but that only seems to give me the ID of what's currently scheduled, but does not provide verbose details such as when the next run is. I don't really see any options to make that useful.
sorry for the n00b question on this one. I've done my best to look through the documentation and code in your repo, as well as the issues here, but I'm still not able to find a solution.
My code for this is (I think anyways) pretty simple:
 if (rootProperties.notificationTimer == "cancel"){
    notifications.cancelAll();
  }
  else{
  notifications.schedule([{
    id:1,
    title:"Sample Notification!",
    interval:rootProperties.notificationTimer, //allows the user to select how frequently they want updates - either hourly or daily.
    body: "This is some long sample notification text that should appear once per interval period...",
    bigTextStyle: true,
    //at: new Date(new Date().getTime() + 10 * 1000)
  }]).then(
      function(scheduledIds) {
        console.log("Notification id(s) scheduled: " + JSON.stringify(scheduledIds));
      },
      function(error) {
        console.log("scheduling error: " + error);
      }
  )
  }

I tried testing with getScheduledIds to see if a notification had already been setup, and if there was one, I simply returned the function. This did stop the notifications from spawning whenever I opened up the app again. Unfortunately it also stopped the recurring scheduled notifications from spawning as well.
Thanks for the help!

So I eventually found that I could simply use the date object to assign each scheduled run to fire at a specific time that would work for me, but this really feels more like a workaround than a solution as it still technically overwrites the previous schedule with a new one each time the app opens, I've just made that invisible to the end user by carefully crafting a date object. it would still be nice if there was some kind of way to modify existing schedules...


compose: Show a first-time banner for jump to sent message conversation.

The first commit is from #29211 pulled here for testing the flow.
Show a one-time banner when jump to sent message conversation takes place for the first time.
Fixes: #29575

Screenshots and screen captures:

Self-review checklist

[x] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[x] Explains differences from previous plans (e.g., issue description).
[ ] Highlights technical choices and bugs encountered.
[ ] Calls out remaining decisions and concerns.
[x] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[x] Each commit is a coherent idea.
[x] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[x] Visual appearance of the changes.
[ ] Responsiveness and internationalization.
[x] Strings and tooltips.
[x] End-to-end functionality of buttons, interactions and flows.
[ ] Corner cases, error conditions, and easily imagined bugs.

Hm, when I try this from Inbox, it looks like another banner flashes by first:

Hm, when I try this from Inbox, it looks like another banner flashes by first. I'm having a hard time capturing it in a screen recording (it's super quick), but maybe you can check in the code whether or not I'm imagining it?

@alya Attaching a video for quick reference of the issue and screenshots to show final behavior:
banner-follow.webm
These message_sent_banners were causing issue:

This is no longer needed as sender will be narrowed to that conversation. Removed it.

"Now Following" - one time banner (When a user automatically follows the topic). The banner will be visible along with the banner we're adding in this PR.
Banners

I left a comment in #design.

Works for me otherwise!
When there are two banners, they don't appear simultaneously, but I think that's OK.

Updates in the recent push:

First two commits are from #29910 (Added it here to test collectively)-- Addresses CZO discussion

For @timabbott :
The order in which PRs should be integrated ideally:

#29910
#29211
This PR

Merged, thanks @prakhar1144!


Issue with ui-select when using Angular 1.4.5 and ngAnimate 1.4.5

UI-Select not working well when upgraded to Angular 1.4.5 and angular-animate 1.4.5.
I am having an issue when searching an item in the input box from the list of items.
Please open the below attached plunker for Issue.
http://plnkr.co/edit/0gm8cxi10eVVbdiohJ3g?p=preview
Steps to find the issue.

Select an item from the dropdown (or) type/search an item from the dropdown.
This works good for the first time
Try to Type/Search an item again.
Now we are not able to type/search it again from the input box.

This is issue appears only when using angular 1.4.5 and angular-animate 1.4.5 and above.
Here is the another plunker works well with angular 1.4.5 and angular-animate 1.4.4
http://plnkr.co/edit/KgkotM5ckNyeLmxEqPOc?p=preview
Thanks

+1
Same problem with angular 1.4.6 and angular-animate 1.4.6

I too face the same focus issue with 1.4.6 & 1.4.5 angular-animate, but downgrading to angular-animate to 1.4.4 works fine.

Yeah I just ran into this as well in a bug that was reported. when you select the select it is putting focus into the body element. So you are scrolling the body. Not sure why this is happening but the focus would seem to be the issue but how that is happening I'm not sure yet. This needs to be a priority as it's a compatibility issue with future 1.x angular.... Or this is an angular bug. Either way it would be nice to know.

We've experienced something simular for some time; i was able to 'fix it' with an additional directive that waits for a little longer before setting the focus.
utilDirectives.directive('uiSelectFocusInput', function($timeout){
    return {
        require: 'ui-select',
        link: function (scope, $element, $attributes, selectController) {

            scope.$on('uis:activate',function(){
                // Give it time to appear before focus
                $timeout(function(){
                    scope.$select.searchInput[0].focus();
                },500);
            });
        }
    }
});

<ui-select search-enabled ui-select-focus-input ng-model="resource" ng-disabled="loader">
    <ui-select-match placeholder="Search resource...">{{$select.selected.label}}</ui-select-match>
        <ui-select-choices repeat="item in preload.resource|filter:{label:$select.search}">

    </ui-select-choices>
</ui-select>

Thank you @Flightfreak.
Worked for angularjs / animate 1.4.6

Experiencing the same issue (angular  >= 1.4.5 )

@Flightfreak  thanks for the workaround
I have improved it a bit, because the 500 is way to long for typing. You will probably loose 1-3 keys when the select is in autofocus mode and ready for typing. Its only a workaround.
scope.$on('uis:activate', function () {
    $timeout(focusSearchInput, 0);
    $timeout(focusSearchInput, 100);
    $timeout(focusSearchInput, 200);
});

function focusSearchInput() {
    scope.$select.searchInput[0].focus();
}

thx!
I've noticed the whole issue is very dependent on the processing power of the client machine. Only slower clients seem to experience the focus issues. Seems to depend on the speed the animations library is loaded and processed.

same problem, solved by disabling ng-animate on the widget.
$animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/)

then used ng-animate-disabled class on the ui-select directive

Same problem here on angular and angular-animate 1.4.7.
Downgraded to 1.4.4 until this gets fixed.

I confirm this isn't resolved in version 1.4.8

@spooky your solution doesn't work work for me. I'm using the ui-select inside a directive template, used by another directive template. Would it have something to do?

@nicooga, have you added a ng-animate-disabled class to the element as well?

This appears to be resolved in v0.16.0 http://plnkr.co/edit/S0guRiTa5vCGT3gGenbu?p=preview
Closing. Please create a new issue with a relevant plunkr against the latest version of library if there are any further problems.

This is still an issue with the bootstrap theme when there are no items in the select list. http://plnkr.co/edit/jqXDJLN33U75EO9imGER?p=preview


Added getSolarIlluminationCycle endpoint

Added satellite/getSolarIlluminationCycle endpoint to track solar illumination cycles of a satellite, for which it is lit for more than 10 minutes (to eliminate noise)
Relevant: #62, #68

adding the ui is pretty simple, will just do that in a future pr (not needed right now)


Instable conection via kubectl port-forward

What happened:
After some minutes of forwarding a port from my Pod to both my local machine OR a GitHub Actions Runner, the connection fails with a Timeout occurred for both the error and forwarding stream.
Some more context:
I have a set of Python based simulations inside a Pod publishing their state to a Pod-internal MQTT broker.
From my local machine I connect to the MQTT broker and run test-cases validating the published states of the simulations as well as forcing the states to change via inputs to the MQTT broker.
The connection to the Pod deployed in AKS is currently established via kubectl port-forward.
In the beginning, it worked without any issues, but as the time goes on more and more test-cases have been added leading to me discovering said timeout problem. The first test-cases always run, but towards the end the test cannot connect to the MQTT broker anymore and the timeout error is printed to the log.
The same behaviour can be observed running the test-cases inside a GitHub Action.
The packages somehow still (incompletely) reach the MQTT broker, since the following messages can be found inside the log:
New connection from <IP_ADDRESS>:54128 on port 8883.
Client <unknown> closed its connection.
New connection from <IP_ADDRESS>:57310 on port 8883.
Client <unknown> has exceeded timeout, disconnecting.

A successful connection looks like this:
New client connected from <IP_ADDRESS>:55312 as {clientName} (p2, c1, k600, u'{userName}').
Client {clientName} disconnected.

What you expected to happen:
Connection should be stable enough for this use-case or reconnect on error.
How to reproduce it (as minimally and precisely as possible):

Pod with MQTT broker (eclipse-mosquitto, port 8883 exposed) and container(s) populating the MQTT broker with messages
kubectl port-forward --namespace {namespace} deployment/{deployment} --address <IP_ADDRESS> 8883
Run local (Python) script:

Connect to MQTT broker via localhost:8883
Send and receive messages for a couple of seconds
Disconnect
Loop to 1

Anything else we need to know?:
kubectl port-forward log:
Forwarding from <IP_ADDRESS>:8883 -> 8883
Handling connection for 8883
Handling connection for 8883
E1127 08:17:00.478647   31961 portforward.go:379] error copying from remote stream to local connection: readfrom tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52899: write tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52899: write: broken pipe
Handling connection for 8883
Handling connection for 8883
Handling connection for 8883
E1127 08:19:10.829113   31961 portforward.go:379] error copying from remote stream to local connection: readfrom tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52950: write tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52950: write: broken pipe
E1127 08:20:11.630955   31961 portforward.go:379] error copying from remote stream to local connection: readfrom tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52955: write tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52955: write: broken pipe
Handling connection for 8883
E1127 08:21:17.450436   31961 portforward.go:379] error copying from remote stream to local connection: readfrom tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52971: write tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52971: write: broken pipe
Handling connection for 8883
E1127 08:22:42.655627   31961 portforward.go:379] error copying from remote stream to local connection: readfrom tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52980: write tcp4 <IP_ADDRESS>:8883-><IP_ADDRESS>:52980: write: broken pipe
Handling connection for 8883
Handling connection for 8883
Handling connection for 8883
E1127 08:23:17.672735   31961 portforward.go:345] error creating error stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:23:27.766222   31961 portforward.go:368] error creating forwarding stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:23:37.835683   31961 portforward.go:368] error creating forwarding stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:23:47.832082   31961 portforward.go:345] error creating error stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:23:57.921897   31961 portforward.go:368] error creating forwarding stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:24:07.966391   31961 portforward.go:368] error creating forwarding stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:24:17.992264   31961 portforward.go:345] error creating error stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:24:28.080960   31961 portforward.go:368] error creating forwarding stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:24:38.128261   31961 portforward.go:368] error creating forwarding stream for port 8883 -> 8883: Timeout occurred
Handling connection for 8883
E1127 08:24:48.132906   31961 portforward.go:345] error creating error stream for port 8883 -> 8883: Timeout occurred
E1127 08:24:58.240984   31961 portforward.go:368] error creating forwarding stream for port 8883 -> 8883: Timeout occurred
E1127 08:25:08.304346   31961 portforward.go:368] error creating forwarding stream for port 8883 -> 8883: Timeout occurred
E1127 08:31:14.955040   31961 portforward.go:233] lost connection to pod
I1127 08:31:14.955663   31961 connection.go:198] SPDY Ping failed: connection closed

Environment:

Kubernetes client and server versions (use kubectl version):

Client Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.3", GitCommit:"9e644106593f3f4aa98f8a84b23db5fa378900bd", GitTreeState:"clean", BuildDate:"2023-03-15T13:40:17Z", GoVersion:"go1.19.7", Compiler:"gc", Platform:"darwin/arm64"}
Server Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.6", GitCommit:"7ffcdf755d47c73903854cc5955afcdcd8c95225", GitTreeState:"clean", BuildDate:"2023-10-09T14:43:34Z", GoVersion:"go1.19.10", Compiler:"gc", Platform:"linux/amd64"}

Cloud provider or hardware configuration: AKS
OS (e.g: cat /etc/os-release): MacOS / Ubuntu 22.04 (GitHub Actions Runner)

The issues happens both from AKS to my local computer as well as from AKS to a GitHub Actions runner.
I've tried executing while true; do nc -vz <IP_ADDRESS> 8883; sleep 1; done simultaneously to the port-forward, basically connecting to the forwarded port every second. It also does show up as connection attempts in the logs of the MQTT broker.
If I run netcat without actually opening the MQTT connection, it works for >20 minutes without a timeout. Once I start opening the MQTT connection and transferring actual data, both fail after a couple of minutes and every netcat connection attempt will result in a timeout (according to port-forward, netcat reports success). Will get working on a script just handling the MQTT connect / disconnect and see if that runs into the same problem.
Will report back

As it turns out, just connecting and disconnecting via MQTT works fine for longer durations as well, but once I start transferring actual data (e.g. subscribing to topics) the connection seems to drop. I'll see how (if) I can get the networking logs.
In the meantime, it would be nice to know if this can be reproduced on your side. I'm happy to assist

I've tried to reinforce the MQTT connection as much as possible (ensuring there is no data being transferred upon disconnecting, ensure the connection was closed successfully, retrying up to five times if it doesn't work) and it did improve a little bit, however I'm still met with occasional broken pipes, connection reset by peer and ultimately timeouts. Once the connection starts to timeout, there is no way to get it back except for restarting the port-forward.
Furthermore, a continuous ping reports a packet loss of just 0.2% out of over 1200 packets.
Networking logs of the node:
12:55:02 containerd[2132]: time="2023-12-08T12:55:02.975417929Z" level=info msg="Executing port forwarding in network namespace \"/var/run/netns/cni-3872189f-e4ce-6f3a-e224-516016054b33\""
12:55:06 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.zwYTA3.mount: Deactivated successfully.
12:55:17 systemd[1]: run-containerd-runc-k8s.io-9a91aef73c2b915ee5b87c5ca54f3f13a157efcbd5d8a15db82d27a6dc5f5b8e-runc.wyJ5nM.mount: Deactivated successfully.
12:55:56 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.vhfIbC.mount: Deactivated successfully.
12:56:23 containerd[2132]: time="2023-12-08T12:56:23.572237559Z" level=info msg="Finish port forwarding for \"6df665e344c81acf24f2ca2dc72030ba398fd8c561ee417ce392dbac02110832\" port 8883"
12:56:28 containerd[2132]: time="2023-12-08T12:56:28.674154595Z" level=info msg="Executing port forwarding in network namespace \"/var/run/netns/cni-3872189f-e4ce-6f3a-e224-516016054b33\""
12:56:36 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.sf2lg7.mount: Deactivated successfully.
12:57:37 systemd[1]: run-containerd-runc-k8s.io-9a91aef73c2b915ee5b87c5ca54f3f13a157efcbd5d8a15db82d27a6dc5f5b8e-runc.fH5ZlV.mount: Deactivated successfully.
12:57:46 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.DBIraN.mount: Deactivated successfully.
12:57:49 containerd[2132]: time="2023-12-08T12:57:49.258633934Z" level=info msg="Finish port forwarding for \"6df665e344c81acf24f2ca2dc72030ba398fd8c561ee417ce392dbac02110832\" port 8883"
12:58:24 containerd[2132]: E1208 12:58:24.332310    2132 httpstream.go:160] (conn=0xc000c546c0, request=5) timed out waiting for streams
12:58:34 containerd[2132]: E1208 12:58:34.332063    2132 httpstream.go:160] (conn=0xc000c546c0, request=6) timed out waiting for streams
12:58:44 containerd[2132]: E1208 12:58:44.353898    2132 httpstream.go:160] (conn=0xc000c546c0, request=7) timed out waiting for streams
12:58:49 python3[1706]: 2023-12-08T12:58:49.342614Z INFO TelemetryEventsCollector ExtHandler Collected 2 events for extension: Microsoft.Azure.Extensions.CustomScript
12:58:54 containerd[2132]: E1208 12:58:54.368464    2132 httpstream.go:160] (conn=0xc000c546c0, request=8) timed out waiting for streams
12:58:56 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.E0PILB.mount: Deactivated successfully.
12:59:04 containerd[2132]: E1208 12:59:04.389702    2132 httpstream.go:160] (conn=0xc000c546c0, request=9) timed out waiting for streams
12:59:14 containerd[2132]: E1208 12:59:14.467623    2132 httpstream.go:160] (conn=0xc000c546c0, request=10) timed out waiting for streams
12:59:24 containerd[2132]: E1208 12:59:24.532220    2132 httpstream.go:160] (conn=0xc000c546c0, request=11) timed out waiting for streams

Please note that a new connection attempt was made directly after the "Finish port forwarding..." message (12:56:49), which times out as seen in the next message at 12:58:24

I've tried to reinforce the MQTT connection as much as possible (ensuring there is no data being transferred upon disconnecting, ensure the connection was closed successfully, retrying up to five times if it doesn't work) and it did improve a little bit, however I'm still met with occasional broken pipes, connection reset by peer and ultimately timeouts. Once the connection starts to timeout, there is no way to get it back except for restarting the port-forward. Furthermore, a continuous ping reports a packet loss of just 0.2% out of over 1200 packets.
Networking logs of the node:
12:55:02 containerd[2132]: time="2023-12-08T12:55:02.975417929Z" level=info msg="Executing port forwarding in network namespace \"/var/run/netns/cni-3872189f-e4ce-6f3a-e224-516016054b33\""
12:55:06 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.zwYTA3.mount: Deactivated successfully.
12:55:17 systemd[1]: run-containerd-runc-k8s.io-9a91aef73c2b915ee5b87c5ca54f3f13a157efcbd5d8a15db82d27a6dc5f5b8e-runc.wyJ5nM.mount: Deactivated successfully.
12:55:56 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.vhfIbC.mount: Deactivated successfully.
12:56:23 containerd[2132]: time="2023-12-08T12:56:23.572237559Z" level=info msg="Finish port forwarding for \"6df665e344c81acf24f2ca2dc72030ba398fd8c561ee417ce392dbac02110832\" port 8883"
12:56:28 containerd[2132]: time="2023-12-08T12:56:28.674154595Z" level=info msg="Executing port forwarding in network namespace \"/var/run/netns/cni-3872189f-e4ce-6f3a-e224-516016054b33\""
12:56:36 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.sf2lg7.mount: Deactivated successfully.
12:57:37 systemd[1]: run-containerd-runc-k8s.io-9a91aef73c2b915ee5b87c5ca54f3f13a157efcbd5d8a15db82d27a6dc5f5b8e-runc.fH5ZlV.mount: Deactivated successfully.
12:57:46 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.DBIraN.mount: Deactivated successfully.
12:57:49 containerd[2132]: time="2023-12-08T12:57:49.258633934Z" level=info msg="Finish port forwarding for \"6df665e344c81acf24f2ca2dc72030ba398fd8c561ee417ce392dbac02110832\" port 8883"
12:58:24 containerd[2132]: E1208 12:58:24.332310    2132 httpstream.go:160] (conn=0xc000c546c0, request=5) timed out waiting for streams
12:58:34 containerd[2132]: E1208 12:58:34.332063    2132 httpstream.go:160] (conn=0xc000c546c0, request=6) timed out waiting for streams
12:58:44 containerd[2132]: E1208 12:58:44.353898    2132 httpstream.go:160] (conn=0xc000c546c0, request=7) timed out waiting for streams
12:58:49 python3[1706]: 2023-12-08T12:58:49.342614Z INFO TelemetryEventsCollector ExtHandler Collected 2 events for extension: Microsoft.Azure.Extensions.CustomScript
12:58:54 containerd[2132]: E1208 12:58:54.368464    2132 httpstream.go:160] (conn=0xc000c546c0, request=8) timed out waiting for streams
12:58:56 systemd[1]: run-containerd-runc-k8s.io-2409317817522182fc68094f2fd2fd1a1efd0f016c79fa3772febd1fb7e8d265-runc.E0PILB.mount: Deactivated successfully.
12:59:04 containerd[2132]: E1208 12:59:04.389702    2132 httpstream.go:160] (conn=0xc000c546c0, request=9) timed out waiting for streams
12:59:14 containerd[2132]: E1208 12:59:14.467623    2132 httpstream.go:160] (conn=0xc000c546c0, request=10) timed out waiting for streams
12:59:24 containerd[2132]: E1208 12:59:24.532220    2132 httpstream.go:160] (conn=0xc000c546c0, request=11) timed out waiting for streams

Please note that a new connection attempt was made directly after the "Finish port forwarding..." message (12:57:49), which times out as seen in the next message at 12:58:24

Simon, I may have similar issue while deploying Mosquitto 2.0.18.openssl on minikube and trying to forward
kubectl port-forward svc/mosquitto-service -n edge 1883:1883 8883:8883 --address='<IP_ADDRESS>'
Can you share manifests used for Mosquitto deployment (configmap, sts, etc) so i can try to reproduce it as well? Thanks.

My mosquitto deployment is quite basic:
- name: mqtt
  image: 'my-custom-eclipse-mosquitto:latest'
  ports:
    - containerPort: 8883
      hostPort: 8883
      protocol: TCP

my-custom-eclise-mosquitto has the mosquitto.conf and already baked into it.
I mainly use the default settings for mosquitto.conf except:

listener is set to 8883 with the socket_domain restricted to IPv4 only
persistence is turned off
allow_anonymous is false and using a password file baked into the image

I'm having similar issues, in my case the connection drops at almost exactly 60s.  I noted that it only happens when I'm running it through my ingress from a remote machine.  If I run on the node itself it does not timeout so I suspect something with ingress-nginx is the culprit, but I've been unable to track it down, set basically every timeout annotation without success.  I also switched over to v 1.30 and enabled port forwarding over websockets and can see it works, but I still get the timeouts.  Anyone have any thoughts or suggestions?

This seems to be a duplicate of https://github.com/kubernetes/kubectl/issues/1606 and please see this comment https://github.com/kubernetes/kubectl/issues/1606#issuecomment-2149219184. I'm closing this issue and feel free to reopen it, if I'm missing something. Thank you.
/close

Thanks for the update! I've subscribed to kubernetes/enhancements#4006 and will update this ticket once I get to testing


LG AC and Heat Pump Support

Hi, I plan to buy LG AC UM36F + UUC1 Comfort and LG Heat Pump HN0913T.NK0 + HU051MR.U44. Can I ask of they are supported?

Hi, I plan to buy LG AC UM36F + UUC1 Comfort and LG Heat Pump HN0913T.NK0 + HU051MR.U44. Can I ask of they are supported?

I expect the AC units to be compatible, but I haven't seen these models before so I can't guarantee it will work. The air/water heat pump will likely need a different solution. I think it's possible to connect via modbus but I don't know more about this.

If you're able to test the controller with these units please let me know so I can add them to the README.

Ok as I will receive them I will test that.

It might work. The protocol implemented here seems AC specific, but maybe the heat pump one is similar enough? There was a similar question in #14.


Docs is not clear on how to save calendar data to db

trying to use axios to save dates but the docs do not have any examples

https://github.com/ClickerMonkey/dayspan-vuetify/issues?utf8=✓&q=is%3Aissue+database


pkgin: Could not fetch http...

I keep getting this message on update

pkgin: Could not fetch http://pkgsrc.saveosx.org/Darwin/2014Q4/x86_64/All//pkg_summary.gz

We no longer host packages on the saveox.org domain.
These are now hosted by Joyent.
I recommend you remove your pkgsrc environment and re-run my bootstrap, as there have been some big changes.
To remove the stuff in place, delete the following files/directories:
/usr/pkg
/var/db/pkg*
/etc/paths.d/saveosx
Once you've removed these, run the latest bootstrap script, and you should be good to go :)


Swapper - flaky max button behavior

Overview
Currently, users are unable to hit max when trying to trade WETH on Polygon w/ MetaMask. Seems to be the only coin affected for some reason.
Recreation Steps:

Have WETH on Polygon on a MetaMask wallet
Attempt to hit max when trading WETH on Polygon
Notice it dead clicks and never loads anything

References and additional details
N/A
Acceptance Criteria
Users should be able to hit max when trading WETH on Polygon w/ MetaMask
Need By Date
No response
Screenshots/Mockups
No response
Estimated effort
No response

On a second look, this happens with native wallet as well

This issue was unlinked to #4567 because polygon was unavailable during testing. Needs retest to close

closing due to removal of max button


build error

Hello,
I run the command
 go get -u github.com/kenshaw/emoji

The import github.com/kenshaw/emoji in my source code. When I run the code there is error:
found packages emoji (emoji.go) and main (gen.go) in<EMAIL_ADDRESS>I have to remove the<EMAIL_ADDRESS>then my application can run.
Any suggestions?
Thanks,
james

Hello James,
If you look at beginning of file:
gen.go
You will see the first line is
//go:build ignore

This means this file should be ignored at compilation, cf :
https://pkg.go.dev/cmd/go#hdr-Build_constraints
You are using an old version of go that does not support this syntax, please upgrade to at least 1.16

@nbossard , Bonjour Professor Nico, merci beaucoup. :smile_face:

@gzhhong please upgrade to latest Go version.


Password Length Bug

When attempting to make a password possibly larger than 33, undefined values are returned.

Works up to 99 characters - 100 logs undefined


HTML5 video tag not recognized

Brackets doesn't seem to recognize the video tag used to create the HTML5 videos.
All code after this video tag, will be completely messed up in terms of theme color!

@zppinto Please paste in some markup or a link to markup that causes this problem. You may have some invalid syntax.

This may also be related to https://github.com/adobe/brackets/issues/6774#issuecomment-34303695.
I don't know if our build of CEF 2171 supports video tags.

I have a mix of html with some php echos! And I'm missing a quotation mark, that was the problem!
Sorry for this misunderstood...
Please remove this topic.


May not be an issue: Connection requesting PIN

When connecting 2 android phones (not tested on iOS yet), the devices show a system pair and connect dialog. When I click the pair option and confirm on the other device, it shows and error that the PIN is invalid.
Is it possible to connect devices, discover characteristics and read/write between them without pairing or having the system dialog pop up? I want to achieve this with zero user involvement, the devices silently connect to each other and exchange data.

BLE doesn't need to pair when connect to other devices, and this plugin doesn't provide pair method, If you see the pair dialog when connect, you should check your peripheral side to change the connection mode to  Just works

BLE can communicate with other devices without bonding, and this plugin doesn't provide bind method, If you see the pair dialog when connect, you should check your peripheral side to change the connection mode to Just works

Thanks for the reply. How do I set the peripheral android device side to the Just works connection mode using your plugin?

Thanks for the reply. How do I set the peripheral android device side to the Just works connection mode using your plugin?

There is nothing to do with this plugin，I'm sure I can communicate between central and peripheral use the example without pair dialog.


monitors

will thhere ever be module for monitors in TOP? cause it seems like it doesnt show anything there

TOP is now done.


Add Feature

Add

Move Good to Other Category
Remove Good

Coverage decreased (-0.07%) to 78.156% when pulling 1431c66bbcd884637524f420328bd17dd179c6b7 on issues/gitlab_1 into 2b0fc7e2f94a8545434575595c911062df88508a on develop.


"Show Original" to switch between original and translated page

For a quick comparison original/translated version it would be useful to have "Show Original" option to switch between both versions once translated. Current way to achieve that is to "refresh" the page, which in some scenarios loses previously provided data and is slower.

IIRC Google translate extension shows a tooltip when you hover over a paragraph. Do we want to do something similar or simply revert the whole page as in #30 ?


Sprint4

Our presentation went well and we were able to answer most of the questions  we got.  Midterms made it difficult to get a lot of work done on the project this sprint.

This sprint I tried to be more thourough in the description tasks I assigned. There wasn't any confusion regarding the details of tasks I assigned this week, so this seems like a positive change. The group did a really good job coordinating on our presentation this week. I think effective communication has been a strength of our gorup so far.

This week was fine mainly working on the presentation and getting it good to go. Did not have trouble looking up the credit usage for the api.


Go to Definition in Notebook Editor

Feature: Notebook Editor

Description
Would it be possible to use the python language server to create links to definitons of classes/methods in notebooks? This would make it a powerful environment.

This would indeed be very useful. Thank you

Any updates on this please?

Would be great!

This is available today with Native Notebooks in VS Code Insiders!
Download to try it out today :)

This is available today with Native Notebooks in VS Code Insiders!
Download to try it out today :)

I don't think this is the same feature requested. Jupyter already has ? or ?? to display the signature and definition. What we want is to be able to Go To Definition similar to .py files :D

I was shocked that is not default functionality. Makes code inspection literally impossible compared to regular python files or working from IntelliJ IDEs.

@vmvorona We offer clicking to go to definitions of classes and functions (including library code) in the preview native notebooks editor that @claudiaregio described. We plan to roll out the new native notebooks editor as the default soon, but in the meantime, please feel free to try it out in VS Code Insiders.

Based on this issue thread, goto definition used to work in a notebook. It doesn't appear to in v1.59. So marking as regression for now.

After reading through and trying these scenarios with the latest builds of VS Code and Jupyter, I believe all of this works. If there's still something you think we're missing, please open a new bug with further details.
Thank you for the feedback!

I can confirm Go To Definition works in the latest build using F12. Thank you!


Further reduce ByteBuf checkAccessible() overhead

Motivation:
Some profiles of grpc-java indicate that overhead from AbstractByteBuf.checkAccessible() is quite significant due the relatively fine-grained way that ByteBufs are accessed by the http2 hpack logic (5-10% of an entire end-to-end roundtrip benchmark!)
This PR takes the great improvement done in #8266 a bit further, simpliyfing the non-volatile/best-effort check. I did not dig deep enough to see why the existing internalRefCnt() logic was relatively slower
given that it does appear to get inlined. One observation though is that the prior optimization wasn't applied to derived buffers (slices etc.) which presumably was an oversight - this would be fairly simple to fix without the rest of this change (by overriding/delegating internalRefCnt) but that wouldn't help with the non-derived case.
Modifications:

Replace AbstractByteBuf.internalRefCnt() with an internal (package-private) ByteBuf.isAccessible() method; the default impl still checks for nonzero refCnt()
Set maxCapacity to -1 upon deallocation in AbstractRefCountedByteBuf, and add a final override of isAccessible() which checks this
Appropriately forward isAccessible() invocations in AbstractDerivedByteBuf/WrappedByteBuf/SwappedByteBuf (also final overrides)
Have CompositeByteBuf set numComponents to -1 upon deallocation so that the existing component index checks done on most methods also serve to check accessibility
Add ByteBufAccessBenchmark which is an extension of UnsafeByteBufBenchmark (maybe latter could now be removed)

This change is similar to @ejona86's suggestion in #8266 (making use of maxCapacity), and I'd also thought of "invalidating" the reader/writer indices upon deallocation and having existing bounds checks do double-duty where possible. That could be a worthwhile addition irrespective of whether checkAccessible is otherwise changed to be false by default, but decided to keep this iteration minimally invasive. A complication is that bounds checking logic is in AbstractByteBuf but the index-invalidation-upon-deallocate logic must live in AbstractReferenceCountedByteBuf meaning that some further rework would be needed to avoid breaking the checks for any third-party impls that extend AbstractByteBuf directly. It's also the case that not all of the bounds checks involve these fields (absolute ones currently only use capacity() which is impl-specific),
Results:
Non-negligible speedups, especially for CompositeByteBuf which is twice as fast in some cases.
Before:
Benchmark                              (bufferType)   Mode  Cnt
Score         Error  Units
ByteBufAccessBenchmark.setGetLong            UNSAFE  thrpt   30 242844273.620 ± 1778416.963  ops/s
ByteBufAccessBenchmark.setGetLong      UNSAFE_SLICE  thrpt   30 184970819.249 ± 1990964.278  ops/s
ByteBufAccessBenchmark.setGetLong              HEAP  thrpt   30 242099517.501 ± 2661438.140  ops/s
ByteBufAccessBenchmark.setGetLong         COMPOSITE  thrpt   30  76961466.906 ± 1318414.178  ops/s
ByteBufAccessBenchmark.setGetLong               NIO  thrpt   30 279181674.131 ± 2162611.704  ops/s

After:
Benchmark                              (bufferType)   Mode  Cnt
Score          Error  Units
ByteBufAccessBenchmark.setGetLong            UNSAFE  thrpt   30 285754526.496 ±  3292540.505  ops/s
ByteBufAccessBenchmark.setGetLong      UNSAFE_SLICE  thrpt   30 209794441.861 ±  1646039.479  ops/s
ByteBufAccessBenchmark.setGetLong              HEAP  thrpt   30 283203453.736 ±  1987854.916  ops/s
ByteBufAccessBenchmark.setGetLong         COMPOSITE  thrpt   30 155437066.991 ±  1492219.965  ops/s
ByteBufAccessBenchmark.setGetLong               NIO  thrpt   30 277362327.090 ±  3070532.642  ops/s

The knock-on improvement to HPACK benchmarks is also evident:
Before:
Benchmark                     (limitToAscii)  (sensitive)  (size)   Mode  Cnt        Score       Error  Units
HpackDecoderBenchmark.decode            true         true   SMALL  thrpt   30   370410.796 ±  4110.021  ops/s
HpackDecoderBenchmark.decode            true         true  MEDIUM  thrpt   30    49068.535 ±   406.485  ops/s
HpackDecoderBenchmark.decode            true        false   SMALL  thrpt   30   350153.682 ±  5251.114  ops/s
HpackDecoderBenchmark.decode            true        false  MEDIUM  thrpt   30    48853.463 ±   496.576  ops/s
HpackDecoderBenchmark.decode           false         true   SMALL  thrpt   30  1731930.970 ± 13894.478  ops/s
HpackDecoderBenchmark.decode           false         true  MEDIUM  thrpt   30   493797.242 ±  6731.768  ops/s
HpackDecoderBenchmark.decode           false        false   SMALL  thrpt   30  1573771.081 ± 13874.584  ops/s
HpackDecoderBenchmark.decode           false        false  MEDIUM  thrpt   30   428455.157 ±  6313.333  ops/s

After:
Benchmark                     (limitToAscii)  (sensitive)  (size)   Mode  Cnt        Score       Error  Units
HpackDecoderBenchmark.decode            true         true   SMALL  thrpt   30   378633.144 ± 10188.415  ops/s
HpackDecoderBenchmark.decode            true         true  MEDIUM  thrpt   30    58525.564 ±   329.438  ops/s
HpackDecoderBenchmark.decode            true        false   SMALL  thrpt   30   371989.033 ±  3195.292  ops/s
HpackDecoderBenchmark.decode            true        false  MEDIUM  thrpt   30    59141.990 ±   438.444  ops/s
HpackDecoderBenchmark.decode           false         true   SMALL  thrpt   30  1963143.732 ± 16181.923  ops/s
HpackDecoderBenchmark.decode           false         true  MEDIUM  thrpt   30   571016.787 ±  5614.790  ops/s
HpackDecoderBenchmark.decode           false        false   SMALL  thrpt   30  1891541.810 ± 19540.314  ops/s
HpackDecoderBenchmark.decode           false        false  MEDIUM  thrpt   30   533891.353 ±  4803.908  ops/s

@njhill imho this change can not go into 4.1 as it would change semantics of maxCapacity() to not return the correct value anymore when deallocated.

@njhill as stated by you we should try to understand why this change is faster then what we had before as it should be the same speed imho... That said please provide a PR to fix the derived buffers :)

@normanmaurer I thought that maxCapacity() would not really be meaningful for a deallocated buffer (in fact I thought all bets are off generally in this situation). For example, PooledByteBufs reset this and the indicies when they are reused.
However I also can think of a trick to work around this, will push an update to see what you think. Worst case like you say I think there's some (possibly smaller) improvement here possible without relying on that field.

@njhill that's a good point that said I am still a bit afraid of the change here. I guess what you could do here is to make the value negative on release and then use abs when the user queries it. That said I still would love to understand why this is even needed as it theory the old behaviour should be good enough.

@normanmaurer yep I already made the abs change, just want to benchmark before pushing it here. But I will open another PR regardless with related improvements that don't involve use of a different field. When I briefly tried this out before it appeared to give roughly half the gains.

@njhill any changes in the benchmark results after the abs change ? Also before pulling this in I would like to understand why this is needed and the current approach is slower. In theory I think it should not

/cc @franz1981

@normanmaurer benchmark with the Math.abs commit shows very little difference (possibly slightly slower). I agree this PR should still be considered tentative pending investigation/understanding of why it's necessary.
I've created a separate branch with some similar improvements to this one but avoiding use of maxCapacity - see cd26d4f394978da0ba58e04e3932ebb9e693cfc9. First benchmarks are similar to what I observed before: the gains are much smaller than those shown above for this PR. Some deeper analysis is needed I guess...

I've some numbers to share, 4.1:
Benchmark                              (bufferType)  (checkAccessible)  (checkBounds)   Mode  Cnt          Score         Error  Units
ByteBufAccessBenchmark.readEightBytes     COMPOSITE               true           true  thrpt   20   14655020.539 ±  425320.817  ops/s
ByteBufAccessBenchmark.readEightBytes     COMPOSITE               true          false  thrpt   20   17807254.275 ±  193070.149  ops/s
ByteBufAccessBenchmark.readEightBytes     COMPOSITE              false           true  thrpt   20   24776669.955 ±  269819.385  ops/s
ByteBufAccessBenchmark.readEightBytes     COMPOSITE              false          false  thrpt   20   28118611.519 ±  938274.799  ops/s
ByteBufAccessBenchmark.setGetLong         COMPOSITE               true           true  thrpt   20   72695175.133 ± 1029659.304  ops/s
ByteBufAccessBenchmark.setGetLong         COMPOSITE               true          false  thrpt   20   85866095.841 ±  955278.291  ops/s
ByteBufAccessBenchmark.setGetLong         COMPOSITE              false           true  thrpt   20   95962385.554 ±  356967.006  ops/s
ByteBufAccessBenchmark.setGetLong         COMPOSITE              false          false  thrpt   20  118367539.734 ± 7501704.810  ops/s
ByteBufAccessBenchmark.setLong            COMPOSITE               true           true  thrpt   20   74363920.616 ± 6862737.577  ops/s
ByteBufAccessBenchmark.setLong            COMPOSITE               true          false  thrpt   20   76531968.295 ± 1184693.315  ops/s
ByteBufAccessBenchmark.setLong            COMPOSITE              false           true  thrpt   20   80340118.090 ±  321379.275  ops/s
ByteBufAccessBenchmark.setLong            COMPOSITE              false          false  thrpt   20   90684143.719 ±  935820.121  ops/s

@franz1981 I like the of including the checks-disabled cases in the benchmark as a point of comparison, but for now maybe it simplifies things to exclude them.
What's of most interest imho is improvement we can get in the default setting case, and in particular understanding why checking a separate plain field is faster than the existing approach... i.e. some perfasm comparison between this PR and the other branch referenced above (which narrows the deltas).
I will have a go at this when I get a chance (have some other weekend commitments), but feel free to do so too in the meantime! Thanks again!

@njhill
I've a strong feeling it is dependent by something related to CHA of the JIT instead: if you change AbstractByteBuf like this:
    protected int nonVolatileRawCnt() {
        throw new UnsupportedOperationException();
    }

    /**
     * Should be called by every method that tries to access the buffers content to check
     * if the buffer was released before.
     */
    protected final void ensureAccessible() {
        if (checkAccessible && AbstractReferenceCountedByteBuf.realRefCnt(nonVolatileRawCnt()) == 0) {
            throw new IllegalReferenceCountException(0);
        }
    }

making AbstractReferenceCountedByteBuf.realRefCnt public, you will see that the performance are similar to this PR. I hope soon to get some ASM to check :+1:

@franz1981 CHA ?

@normanmaurer class hierarchy analysis ... I had to look it up too :)

@normanmaurer Nick has preceded me re CHA :P
I've tried to get an ASM log to be used with JitWatch with no success...seems that I cannot print assembly on the JMH bench...

@normanmaurer @franz1981 after some further experimentation I think I have got to the bottom of most (possibly all) of the discrepancy.
Focusing on the UNSAFE case first: the first thing which closed the gap quite a bit was avoiding "full" decoding of the non-volatile loaded ref count - this was unnecessary (my oversight from before) since we only care about the parity for this purpose. So the accessibility check becomes
return (nonVolatileRawCount() & 1) == 0;

However, it seems the combination of a bitwise & operation and an int comparison is still noticeably more expensive than an isolated int comparison (maxCapacity > 0). This is unfortunate but I've mitigated for now by changing it to
int rawCnt = nonVolatileRawCnt();
return rawCnt == 2 || rawCnt == 4 || rawCnt == 6 || rawCnt == 8 ||  (rawCnt & 1) == 0;

which gives a faster path to the assumed most common cases (refcounts 1-4) at expense of greater cost to larger refcount cases. This gets very close to the perf of this PR.
But while the CompositeByteBuf numbers improved slightly, there was still a stark difference to this PR (almost twice as slow). This turns out to be due to the stack growing too deep between adjacent external method invocations. It's more than 9 methods deep in the setLong(...) case so the crucial refCnt load at the bottom isn't getting inlined:
@ 10   io.netty.buffer.CompositeByteBuf::_setLong (90 bytes)   inline (hot)
  @ 2   io.netty.buffer.CompositeByteBuf::findComponent0 (33 bytes)   inline (hot)
  @ 27   io.netty.buffer.CompositeByteBuf$Component::idx (7 bytes)   inline (hot)
  @ 31   io.netty.buffer.AbstractByteBuf::setLong (15 bytes)   inline (hot)
   \-> TypeProfile (13959/13959 counts) = io/netty/buffer/UnpooledUnsafeDirectByteBuf
    @ 4   io.netty.buffer.AbstractByteBuf::checkIndex (11 bytes)   inline (hot)
      @ 1   io.netty.buffer.AbstractByteBuf::ensureAccessible (23 bytes)   inline (hot)
        @ 7   io.netty.buffer.AbstractReferenceCountedByteBuf::isAccessible (37 bytes)   inline (hot)
          @ 1   io.netty.buffer.AbstractReferenceCountedByteBuf::nonVolatileRawCnt (28 bytes)   inline (hot)
            @ 14   io.netty.util.internal.PlatformDependent::getInt (6 bytes)   inline (hot)
              @ 2   io.netty.util.internal.PlatformDependent0::getInt (9 bytes)   inlining too deep

I verified this by increasing -XX:MaxInlineLevel. So I guess we need to try and compress it a bit. There's a couple of obvious candidates, one being to manually inline the current AbstractRefCountedByteBuf.nonVolatileRawCnt() contents (it's only called from one place).
I've left this PR branch as-is for now and pushed the other changes described above to the separate branch mentioned before, but haven't included any to reduce the stack depth for the composite buf case yet. I'm re-running the benchmarks and will post the results but probably won't be until tomorrow west coast time.
Also WDYT about the use of negative componentCount in CompositeByteBuf (similar to the maxCapacity idea)? I felt this should be even less of an issue since once a comp buf is deallocated it effectively gives up ownership of all its components so the count would kind of be zero at that point anyhow.

@njhill I like the idea of using:
int rawCnt = nonVolatileRawCnt();
return rawCnt == 2 || rawCnt == 4 || rawCnt == 6 || rawCnt == 8 ||  (rawCnt & 1) == 0;

Just ensure to add a comment to explain why the hell we are doing this 🤣
That said I am quite surprised that it makes such a big difference.

@njhill So It was due a mix of inlining + pure more ops?
+100 for @normanmaurer advice re comments: next time someone will tell me that "the most performant code is just more readable" I will probably smile thinking about this eheh
There is an hidden (just received on the email) comment of @nitsanw about making a flexible readBatch method that deserve attention IMO

Just ensure to add a comment to explain why the hell we are doing this

@normanmaurer  Done! I wouldn't have left it without comments, it was just for feedback initially while iterating with the experiments. And I'm also surprised it makes such a big difference. I plan to do some other benchmarks around this, there's still more to understand here (see latest results i'll paste below).

So It was due a mix of inlining depth + too many ops?

@franz1981 the inlining depth yes for sure in composite buffer case, "too many ops" yes at least partially, but I'm not sure if it's the ops themselves and/or jit simplification that they may be interfering with... and the mitigation done may not be sufficient for some cases, or possibly there's still something else going on in addition (see below).

I have pushed commits to both this PR branch and the other branch (which avoids using maxCapacity) based on the latest suggestions here. The changes in the other branch also include some minor manual inlining to flatten things sufficiently that the default max inline depth is no longer hit.
The results are quite interesting - on two of the benchmarks the non-maxCapacity branch is roughly the same speed, but this PR is still ~15-20% faster on the readBatch one. My suspicion is that the compiler is able to do some more aggressive simplification in the faster case that the more complex refCnt checks preclude in the other one. Will continue to analyse as I have time, and will re-run the HPACK bench too on these latest versions - would be interesting to see if the difference shows up in that closer-to-real-life case, which the "batch" benchmark was actually intended to mimic.
4.1 branch:
Benchmark   (bufferType)  (checkAccessible)  (checkBounds)   Mode  Cnt          Score          Error  Units
readBatch         UNSAFE               true           true  thrpt   30   84524972.863 ±   518338.811  ops/s
readBatch   UNSAFE_SLICE               true           true  thrpt   30   38608795.037 ±   298176.974  ops/s
readBatch           HEAP               true           true  thrpt   30   80003697.649 ±   974674.119  ops/s
readBatch      COMPOSITE               true           true  thrpt   30   18495554.788 ±   108075.023  ops/s
setGetLong        UNSAFE               true           true  thrpt   30  247069881.578 ± 10839162.593  ops/s
setGetLong  UNSAFE_SLICE               true           true  thrpt   30  196355905.206 ±  1802420.990  ops/s
setGetLong          HEAP               true           true  thrpt   30  245686644.713 ± 11769311.527  ops/s
setGetLong     COMPOSITE               true           true  thrpt   30   83170940.687 ±   657524.123  ops/s
setLong           UNSAFE               true           true  thrpt   30  278940253.918 ±  1807265.259  ops/s
setLong     UNSAFE_SLICE               true           true  thrpt   30  202556738.764 ± 11887973.563  ops/s
setLong             HEAP               true           true  thrpt   30  280045958.053 ±  2719583.400  ops/s
setLong        COMPOSITE               true           true  thrpt   30  121299806.002 ±  2155084.707  ops/s

This PR branch (using -ve maxCapacity):
Benchmark   (bufferType)  (checkAccessible)  (checkBounds)   Mode  Cnt          Score         Error  Units
readBatch         UNSAFE               true           true  thrpt   30  119541259.314 ± 1315960.350  ops/s
readBatch   UNSAFE_SLICE               true           true  thrpt   30   97742742.887 ±  593711.092  ops/s
readBatch           HEAP               true           true  thrpt   30  116364379.144 ± 2930052.587  ops/s
readBatch      COMPOSITE               true           true  thrpt   30   45086815.645 ±  928196.550  ops/s
setGetLong        UNSAFE               true           true  thrpt   30  297774971.597 ± 6596038.854  ops/s
setGetLong  UNSAFE_SLICE               true           true  thrpt   30  223155604.005 ± 2386659.044  ops/s
setGetLong          HEAP               true           true  thrpt   30  307324023.764 ± 1454568.509  ops/s
setGetLong     COMPOSITE               true           true  thrpt   30  162657739.658 ± 4006358.738  ops/s
setLong           UNSAFE               true           true  thrpt   30  298573314.566 ± 5078438.792  ops/s
setLong     UNSAFE_SLICE               true           true  thrpt   30  214502404.440 ± 4713830.912  ops/s
setLong             HEAP               true           true  thrpt   30  300545528.351 ± 2509813.277  ops/s
setLong        COMPOSITE               true           true  thrpt   30  157792835.151 ± 1398822.596  ops/s

fast-ensure2 branch (similar changes but avoiding use of maxCapacity):
Benchmark   (bufferType)  (checkAccessible)  (checkBounds)   Mode  Cnt          Score          Error  Units
readBatch         UNSAFE               true           true  thrpt   30  101641801.035 ±  3950050.059  ops/s
readBatch   UNSAFE_SLICE               true           true  thrpt   30   84395902.846 ±  4339579.057  ops/s
readBatch           HEAP               true           true  thrpt   30  100179060.207 ±  3222487.287  ops/s
readBatch      COMPOSITE               true           true  thrpt   30   42288494.472 ±   294919.633  ops/s
setGetLong        UNSAFE               true           true  thrpt   30  304530755.027 ±  6574163.899  ops/s
setGetLong  UNSAFE_SLICE               true           true  thrpt   30  212028547.645 ± 14277828.768  ops/s
setGetLong          HEAP               true           true  thrpt   30  309335422.609 ±  2272150.415  ops/s
setGetLong     COMPOSITE               true           true  thrpt   30  160383609.236 ±   966484.033  ops/s
setLong           UNSAFE               true           true  thrpt   30  298055969.747 ±  7437449.627  ops/s
setLong     UNSAFE_SLICE               true           true  thrpt   30  223784178.650 ±  9869750.095  ops/s
setLong             HEAP               true           true  thrpt   30  302543263.328 ±  8140104.706  ops/s
setLong        COMPOSITE               true           true  thrpt   30  157083673.285 ±  3528779.522  ops/s

@njhill interesting, I hope to have back my box able to profile with perf to go deeper into this :)
Just a suggestion, with so many results sometime is useful to add a simplified picture with the gains: I often use https://jmh.morethan.io with the JSON output from the netty benchs, that allow comparisons very easily!

@njhill thanks a lot... I think I would prefer to first apply the change which does NOT use the maxCapacity change and then revisit if we still need it or if we can do another change which makes it obsolete. WDYT ?

@normanmaurer SGTM, I will probably do that in a new PR and close this one.

Sounds good

Am 27.02.2019 um 07:17 schrieb Nick Hill<EMAIL_ADDRESS>@normanmaurer SGTM, I will probably do that in a new PR and close this one.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

Closing in favour of #8895.
By the way, the HPACK benchmarks for the new PR also look good (same faster speed as this one).