Add an option to proxy images via Jellyseerr itself

Description
First of all, worth to mention that there is already "Cache images" option in configuration, that is a workaround for my issue. Thank you for introducing such option!
Problem
In countries with applied restriction to access the IMDB it's impossible to load images directly from IMDB. Therefore I have to enable image caching, because my installation is deployed through Docker and uses VPN to load images
But as mentioned in the description of the Cache images option, it requires an extra disk space
Desired Behavior
It'll be great to have an option to proxy image loading through Jellyseerr server, so images are loaded via VPN within Docker (or whatever is configured)
Additional Context
No response
Code of Conduct

[X] I agree to follow Jellyseerr's Code of Conduct

Image caching is for this process. Its not a workaround as it was developed to achieve exactly this 😅
Image caching should clean the expired images using the job and cache wouldnt get that relatively big from my experience. This feature was specifically implemented for this exact same issue.
Http proxy settings also exist where you can just pass in your vpn as an http proxy to proxy the tmdb connection
we don't support imdb

we don't support imdb

My fault. Just started to use Jellyseerr/Jellyfin/Radarr and a got little bit confused

Image caching is for this process. Its not a workaround as it was developed to achieve exactly this 😅

But why we need a cache, if we only need to proxy requests to the images? Or there are any plans to allow some configuration over cache/only proxy?

Http proxy settings also exist

I didn't find any documentation about this option and decided to leave it alone so that I wouldn't accidentally broke something 😅
If I understand you right, I can configure a proxy (could you suggest one?) and all image URLs will contain that proxy's host instead of tmdb API?

But why we need a cache, if we only need to proxy requests to the images? Or there are any plans to allow some configuration over cache/only proxy?

Cache is cache. Its goal is not to proxy things, but to cache images on the server for better efficiency in some cases. "Proxy" is just a side effect, because it's the server that retrieves the images and not the client.

If I understand you right, I can configure a proxy (could you suggest one?) and all image URLs will contain that proxy's host instead of tmdb API?

HTTP Proxy will have a behavior similar to your VPN configuration. With HTTP proxy, your requests will pass through that proxy, a bit like a VPN (but that only works for HTTP requests). A popular HTTP proxy is Squid.

But as mentioned in the description of the Cache images option, it requires an extra disk space

The amount of storage this will take is not that huge. The image cache is cleaned everyday. Keep your cache enabled so users in your country can see the images.

Cache is cache. Its goal is not to proxy things

When a wrote "why we need a cache", I mean that within the context of my original request we discussing about a proxying images through Jellyseerr but not a caching

HTTP Proxy will have a behavior similar to your VPN configuration. With HTTP proxy, your requests will pass through that proxy, a bit like a VPN (but that only works for HTTP requests)

I understand how forward proxies works. My question was about the mechanism implemented within Jellyseerr. I tried to start Squid and configure Jellyseerr to use it as an HTTP Proxy, but this way Jellyseerr still use image.tmdb.org host. I don't get how proxy settings within Jellyseerr could help me with proxying images. Seems like Jellyseerr internally uses that proxy to make all outgoing requests, but images continue to be served directly from tmdb. And to use my Squid I need to configure end users' browser/OS

The amount of storage this will take is not that huge. The image cache is cleaned everyday. Keep your cache enabled so users in your country can see the images

Well, this option is enough for me. You guys also clarified to me that the disk space is not a real problem. So I think it's time to close the issue. Thank y'all for your replies!

Let me clarify things if someone reads this later:

I tried to start Squid and configure Jellyseerr to use it as an HTTP Proxy, but this way Jellyseerr still use image.tmdb.org host.

This is because of a configuration issue on your side. The goal of the HTTP Proxy is to proxy all requests, and the requests for images are included.

Seems like Jellyseerr internally uses that proxy to make all outgoing requests, but images continue to be served directly from tmdb.

No. Images are served from TMDB when cache is disabled. When cache is enabled, images are served from the Jellyseerr server, which will use the configured proxy settings.

And to use my Squid I need to configure end users' browser/OS

You don't if you configure Jellyseerr to use the HTTP Proxy from Squid, and have Image Caching enabled.

And to use my Squid I need to configure end users' browser/OS

Thats not how Http proxy works. It's works to proxy all requests that jellyseerr make to tmdb to go through the proxy. This means when the server makes a request to the tmdb api. It does not concern the end users.

configure Jellyseerr to use the HTTP Proxy from Squid, and have Image Caching enabled

Exactly! But I do not want (does not want previously 😄) to enable caching. I just wanted to proxy images through Jellyseerr itself, so all requests are made within Jellyseerr's network within docker (which is routed through VPN automatically)
In such configuration there is no need for a proxy. And enabling the proxy without caching does not solve the task

proxy all requests that jellyseerr make to tmdb

Only those requests, that are made by Jellyseerr server, but not that are made at a client side (browser). Jellyseerr makes requests to the TMDB only when caching is enabled
So proxy settings are useless for images, when caching is disabled

To be clear, my original intent was to proxy images through Jellyseerr server, but not to cache them. Jellyseerr server already configured in a way to use VPN connection. Therefore, no proxy is needed
Something like:
Settings
  - Proxy images through Jellyseerr (enabled)
  - Cache images (disabled)

But for now those two options are merged into one Cache images option

Something like

Cache images options, ofc, disabled, if Proxy images is unchecked

To be clear, my original intent was to proxy images through Jellyseerr server, but not to cache them. Jellyseerr server already configured in a way to use VPN connection. Therefore, no proxy is needed\n\nSomething like:\n\nSettings\n  - Proxy images through Jellyseerr (checked)\n  - Cache images (unchecked)\nBut for now those two options are merged into one Cache images option

Ah I see

But when it's just proxying images without cachings, it's gonna be 5× api hits for the same pic by the same server

Good point! From a TMDB perspective, I think there isn't much difference (either way, it will have to serve images 5 times), but perhaps they have a rate limiter for the same IP address and this could affect Jellyseer users
Anyway, I think caching is the desired solution in my case

Good point! From a TMDB perspective, I think there isn't much difference (either way, it will have to serve images 5 times), but perhaps they have a rate limiter for the same IP address and this could affect Jellyseer users

Yes. You will get rate limited by ip if you hammer the tmdb api too much. Proxying without caching would do that as it'd be same server ip hitting 5 times instead of 5 different

Anyway, I think caching is the desired solution in my case

Glad it works for you though 😊


Surface::set_mime_data() shouldn't require a static lifetime on the data

The prototype right now is
    pub fn set_mime_data<T: AsRef<[u8]> + Send + 'static>(
        &self,
        mime_type: &str,
        slice: T) -> Result<(), Status> {
        let b = Box::new(slice);
        // note the immediate boxing here, to pass to cairo_surface_set_mime_data()

I think it's enough to pass a regular reference?

I think what happens is this:
pub fn set_mime_data<T: AsRef<[u8]> + 'static>(&self, mime_type: &str, slice: T) -> Result<(), Status> {
        let b = Box::new(slice);

The Box::new(slice) creates a heap allocation big enough for the slice (ptr, usize) and moves the slice there.  Below, there is this:
        let user_data = Box::into_raw(b);

        let status = unsafe {
            let mime_type = CString::new(mime_type).unwrap();
            ffi::cairo_surface_set_mime_data(self.to_raw_none(),
                mime_type.as_ptr(),
                data,
                size as c_ulong,
                Some(unbox::<T>),
                user_data as *mut _,
            )
        };

The destroy func is unbox, which will free the tiny allocation for (ptr, usize)... but the original buffer has a static lifetime.
I think the semantics of cairo_surface_set_mime_data is to take ownership of the buffer passed to it, and the C-ism there is to provide the destroy func.  If this is correct, I think this wrapper should instead take ownership of a buf: Vec<u8>.  This avoids copies; the wrapper can then manage that Vec as it wants. (Maybe just box it and pass the into_raw to the Cairo function?).
Alternatively, we can keep it taking a slice (or an AsRef<[u8]> like right now) but really do a copy internally.  I think the static lifetime requirement makes the wrapper as it is rather useless.  For example, librsvg will read JPG referenced from the SVG, and then surface_set_mime_data with that JPG buffer.  But it can't be done with a static lifetime.

Cooking a patch right now.

You apparently didn't see my comments on IRC :)
federico: for your cairo issue, your analysis about passing arrays is correct. you don't really want to do that
federico: but if you look around what else implements AsRef<[u8]> you'll see that e.g. Vec<u8> also implements that. or a gst::MappedBuffer. or a hyper::Chunk. or ... :)
federico: you can pass any of these in there and e.g. in the case of a Vec the only thing copied to the Box is the metadata of the Vec (pointer, capacity, length)
federico: the 'static on the data only means that it must have no references itself to any non-static things. i.e. you can't pass anything in there that has references to a stack frame for example. fully heap allocated data is fine, for example. and the function takes ownership of the thing you pass there
federico: oh, Arc<Vec<u8>> also implements AsRef<[u8]> btw if you want to prevent some copies ;)

E.g., try surface.set_mime_data("foo/bar", vec![1, 2, 3, 4u8])

We use the same pattern for gio::OutputStream::write_async() etc btw, and also in GStreamer for wrapping arbitrary things that are like byte arrays in buffers. So that's a well-established pattern that works fine elsewhere.

OMG, then I think my problem may have been that I was passing &myvec instead of transferring ownership of myvec.  I'll try that again in librsvg.  Thanks!

Ok, let's close this then?

@GuillaumeGomez can you close this for now? :)

Sure.


Fix batch handling of empty partition key and empty row key

Resolve https://github.com/Azure/Azurite/issues/1234.

@edwin-huber, I took a stab at https://github.com/Azure/Azurite/issues/1234. I saw you were assigned so I hope you haven't started working on it. If so, feel free to repurpose/toss out this PR 😃.

Thanks for the submission!
I like the changes; I have one small suggestion and would like @XiaoningLiu to weigh in on the Handler Method signature.

@edwin-huber Do you have other comments before merging this PR?

Are there any other things I should address before the merge? Happy to fix whatever 😃


Run npm start in a supervisor.

Either nodemon or node-supervisor

I <3 nodemon. Check this out for module-usage: https://github.com/remy/nodemon/blob/master/doc/requireable.md

Killer, nodemon it will be. Probably going to be in rupert-grunt's examples, though.


Memory leak when adding and removing elements

I have the following:
use zoon::*;

fn root() -> impl Element {
    let element = RawSvgEl::new("svg");

    let dom_element = element.dom_element();
    Task::start(async move {
        let svg_element = RawSvgEl::new("circle");
        loop {
            dom_element
                .append_child(&svg_element.dom_element())
                .unwrap();
            dom_element
                .remove_child(&svg_element.dom_element())
                .unwrap();
        }
    });

    Row::new().s(Align::center()).item(element)
}

fn main() {
    start_app("app", root);
}

When ran on the latest version of firefox, it will quickly run out of RAM. Is there something I am missing? My understanding is that append_child and remove_child should correctly handle the memory but this does not seem to be happening.

.append_child and .remove_child are from web_sys not Zoon so this actually might be an issue on their end, also this isn't the Zoonic way to add and remove children, try doing the test with a signal instead, the Zoonic way e.g.

use zoon::*;

fn root() -> impl Element {
    let show = Mutable::new(false);
    let element = RawSvgEl::new("svg").child_signal(show.signal().map_true(|| RawSvgEl::new("circle")));

    let dom_element = element.dom_element();
    let wait = 100;
    Task::start(async move {
        loop {
            show.set(!show.get());
            Timer::sleep(wait).await;
        }
    });

    Row::new().s(Align::center()).item(element)
}

fn main() {
    start_app("app", root);
}

I've just tested @ChemicalXandco's example on my machine with Kubuntu:

Firefox - memory leak
Chrome - no leak, a dialog box like "the page is unresponsive, kill it?"

The loop is executed on the main thread so it blocks the GUI => it means unresponsiveness is expected behavior in this case.

My super wild guess is Firefox's garbage collector doesn't work properly when the thread is blocked but I didn't try to actually debug the problem.
So I think the problem isn't directly related to MZ and I don't think I'll be able to resolve it somehow and such loop on the main thread blocks everything so it's anti-pattern. Closing the issue, feel free to add more comments when you find more info about the problem in the future or when the problem is fixed thanks to a Firefox update.


adapt 1gram to &spelllang

Since adding some 1grams in https://github.com/girishji/ngram-complete.vim/pull/3#issuecomment-2522432085 was easy, how about adding the 1grams and spelllang autocmd's from https://github.com/Konfekt/complete-common-words.vim/blob/master/plugin/complete-common-words.vim to improve completion for a few other common tongues?

You are welcome to add it, and send PR.


Consider switching from source generator to generated-and-committed code

imo the source generator is quite hard to debug and use, especially if you'd like to view what their output looks like on GitHub.
I think it would be better to convert it to a standalone application that produces files that can be committed into the repository.
Open to arguments otherwise, though.

I'm just unconvinced committing these files is worthwhile. IDEs are aware of them so debugging should also be aware of them.


How about @RecordBuilder -> @Builder ?

I think I like @Builder, hmm.

feels a little too lombokky for me


Footer - Change "oversite" to "oversight".

This new site is great and hugely informative - well done!
I came across a trivial change - on the footer, I think you meant to use "oversight" rather than "oversite".  I looked through the repo but couldn't find the file where this code lives.
Good luck with this initiative!

Looks like someone got in and fixed it already. Footer reads :
Platform Services is a dedicated team providing high level administration and oversight to the BC Gov's DevOps Platform.

Nice!  You guys are quick.


Instances > Remove instance

This PR is closing:
AAP-19874 	Instances > Remove instance
AAP-19884 	Instances > test Remove instance

LGTM tested locally


Reviewdog should run whenever a PR is modified after opening

This line only allows PRs to run Reviewdog when opened, I think this should be run every time the PR is modified.
https://github.com/nih-sparc/sparc.client/blob/e76a75ede22eb924a8df9657f0be832dc66908ff/.github/workflows/reviewdog.yml#LL11C44-L11C91

Do you suggest removing this line, or modifying it @hsorby ?

My suggestion is to run Reviewdog whenever the PR is modified.

Closed with PR #16


Heart rate zones not saving

Bug description:
When I try to save 5 heart rate zones, they just return to the default 14 afterwards.
Actual Behavior:
Expected Behavior:
Steps to Reproduce:

...
...
...

Chrome version
Plugin version:
Activities links?:
Console errors? (press F12 to see developer console, and copy paste here):
put console errors here if exist

Link screenshots or youtube video link if necessary:

Can you try to reset them before?
... Or re-import zones to default with (equals to reset value):

[{"from":120,"to":140},{"from":140,"to":150},{"from":150,"to":160},{"from":160,"to":170},{"from":170,"to":180},{"from":180,"to":185},{"from":185,"to":190},{"from":190,"to":195},{"from":195,"to":210}]

Then edit as you wish.
And click save icon.

If your problem is fixed you can close the ticket :)


Action<EMAIL_ADDRESS>is broken on ubuntu-latest

It seems the action is broken on ubuntu-latest:
# output of cda-tum/setup-z3@v1
/usr/bin/unzip -o -q /home/runner/work/_temp/4165730e-84ca-4d14-ae38-4aca23556260

# ...

# output of ls -al ${{ steps.setup-z3.outputs.z3-root }}/z3
ls:
  cannot access '/opt/hostedtoolcache/z3/latest/x64/z3-4.12.1-x64-glibc-2.35/z3':
  No such file or directory

See, for instance, this workflow run:
https://github.com/wenkokke/setup-agda/actions/runs/4105314331/jobs/7081992236#step:5:9

Hey,
Thanks for bringing this up. I'll look into it asap and will get back to you!
Could be that Z3 changed the naming scheme of the release artifacts again.

It seems the issue is simply that the path to z3 moved from ${{ steps.setup-z3.outputs.z3-root }}/z3 to ${{ steps.setup-z3.outputs.z3-root }}/bin/z3, see #101.

That has actually always been the case. $Z3_ROOT merely points to the root of the directory.
This contains:

the z3 binary in the bin folder
the header files in the include directory
the library files in the lib directory (or in the bin directory on some OSes)

So, to me, it seems like everything is still working as intended. Please let me know if I missed something.

Closing this for now, and thanks for the PR. Seems like a good sanity check.
Feel free to re-open or create another issue if you should stumble upon further problems.


Adds local GPU dask client override for local dask mode in small-scale docking

Description
Provide a brief description of the PR's purpose here.
Todos
Notable points that this PR has either accomplished or will accomplish.

[ ] Point 1 ...

Questions

[ ] Question 1 ..

Status

[ ] Ready to go

Developers certificate of origin

[x] I certify that this contribution is covered by the MIT license as defined in our LICENSE and adheres to the Developer Certificate of Origin.

Codecov Report

Merging #670 (db4dfa3) into main (ec49f0b) will increase coverage by 29.03%.
The diff coverage is n/a.

Additional details and impacted files


Major refactor.

For the sake of my project I significantly rewrote the calendar component. Please inspect the code and consider whether you'd like to accept the changes.
Also, I'm sorry for the monolithic PR, but I make the calendar internal part of my project, so I had to 'cut it out' somehow.
Finally, the PR is not 100% ready yet; for example the CalendarExample should be adjusted a little - if you consider my PR worth merging, I'll prepare it to the final state then.
List of changes:

Cleaning & documenting various part of the project
Significant increase in rendering month view speed (from ~450ms to ~2ms)
Day component and styles factored out to separate files
Ability to provide custom (localized) month-names
Ability to specify, whether week starts on Sunday, Monday, ...
Using more ES6 features (especially, let and const)
Eslint

@tomaskulich Thank you submitting this PR!
I look forward to a lot of the changes presented. I should have some time next weekend to give this a look.

Perfect! Please let me know, If you'll need any explanation from my side.

Hi there, i was looking at your code, i hade a question though:
require('ReactPropTypes') what exactly are u requiring, i thought perhaps u ment
const {
PropTypes,
} = React; ?

uh oh, that looks like a stupid mistake :) It's interesting that the component works at all :) I'll correct it.

@christopherdro are you interested in merging the PR?

@christopherdro I fixed the pull request, should be ok now. Please take a look at it if you are interested in merging. Thank you

@christopherdro @coderdave Any chance we can get this merged ?
The rendering performance is really really slow on my side without this, and is much improved with this PR.
I'm happy to rebase this PR on the current master if necessary or submit a new PR that has these performance improvements and few code improvements

Ok, if someone would like to rebase this PR with the current master, I can try to take a look. The only thing I'm not too crazy about is the linter file.

We will do the rebasing and also we'll adjust docs and exmaple. We'll do this during the weekend so you can expect this being done on Monday 23.5.
As for the eslint, @coderdave you generally don't like eslint, or you're just not happy with our config? If this is the case, how should the config look like?

Hey guys. Sorry for being MIA. Just been deep in a project for the last months.
I like the idea of adding a eslintrc lets just simplify by maybe just extended react for now.
@tomaskulich Than you so much sticking through with this!

This component was made before React Native Android was every announced, hence the file names using .ios. I think we can get rid of all that and just Calender.js and Day.js.
Thoughts?

@christopherdro:

simplify by maybe just extended react for now.
Do you have in mind some standardized config, we could extend? Which one?

ad .ios.js -> .js : I'll be more than happy to do that. We'll cover also that during the weekend.

👍 Yes. Calendar.js, Day.js

I've been thinking lately about adding some native features
like pulling/adding to native calendars. I think that could be useful.

If we're going to use eslintrc, I like the one that Abramov has come up with:
https://github.com/gaearon/library-boilerplate/blob/master/.eslintrc
Maybe that can be the starting point for now?

Sounds great!

ok, so Dan Abramov's (well, it basically inherits everything from airbnb) .eslintrc it is.

Hi guys, i edited the eslint and fixed errors and warning it caused. I got rid of some deprecated methods and set minimum RN version to 0.13.0 which is quite reasonable these days. I updated the README.md and CalendarExample, please check those too and let me know if there is something more to fix. My CalendarExample is importing calendar sources from ./src directory in the project, not installing through npm, bacause of the slightly changed API, and i needed to test it. I am aware that this will have to be fixed.

Github is saying that there's conflicts that must be resolved? Can you merge in master and fix them?
Also, can we change const React = require('react-native'); to const ReactNative = require('react-native'); (or something similar) so the destructuring assignment is pointing to react native and not react so as to not be confusing?
Or, we can be cool and start using imports:
import { PropTypes } from 'react';
import { Dimensions, ScrollView, Text, TouchableOpacity, View } from 'react-native';

I would suggest updating the import since that is now a requirement with the current version of react native.

Some of the "internal" function names are prefixed with underscore and some aren't. I suggest we change them all to use underscores or not use underscores at all. (Or maybe I'm missing something here)
Also, what happened to onSwipeNext and onSwipePrev? They're not being called.
Another thing I just noticed - onTouchPrev is being called on BOTH _onPrev() and _onNext()

Updated and rebased.


tolgee sync fails with warnings: Dynamic default value

The tolgee sync command fails with the following warning:
line 123: Dynamic default value

It corresponds to that translation code:
<T
  keyName="account.apiTokens.deleteConfirmationMessage"
  params={{
    strong: <strong>{apiTokens?.find(byId(deletingId))?.name}</strong>,
  }}
/>;

Is there anything I do wrong here?

It seems you're not doing anything wrong here; the extractor parser is probably getting confused by this expression and fails to properly understand the expression.
You can silence this warning using the @tolgee-ignore magic comment if you wish, though it'll emit a warning again once the issue is fixed reminding you to remove it as it'll no longer be necessary.


Update packer to 0.12.1

Install packer from the hashicorp releases and validate the checksum. Fixes https://github.com/nabeken/circleci-packer-example/issues/4

Thanks! LGTM so merging...


$(()=>{}) flags no-jquery-raw-elements

Bug Report

tslint-microsoft-contrib version: 6.2.0
TSLint version: 5.16.0
TypeScript version: 3.4.5
Running TSLint via: CLI

TypeScript code being linted
$(async () => {

})

with tslint.json configuration:
{
    "defaultSeverity": "error",
    "extends": [],
    "jsRules": {},
    "rules": {
        "no-jquery-raw-elements": true
    },
    "rulesDirectory": [
        "node_modules/tslint-microsoft-contrib"
    ]
}

Actual behavior
(Error:no-jquery-raw-elements) Replace HTML string manipulation with jQuery API: $(async () => {

})

Expected behavior
No errors.
FYI<EMAIL_ADDRESS>is working properly.

Oops, that is not a minimum code ("async" is not needed.)
$(() => {

});

// Replace HTML string manipulation with jQuery API: $(() => {
//
// })

Looks like regression after migration to the new format.
Previously if first arguments wasn't a string - new walker was created and recursively checked strings for < or > characters in string literals, however new one looks for same characters in any expression text.
Good solution will be to check if first argument is a function expression or an arrow function, and only then check recursively as it was in old implementation.
Accepting PRs

💀 It's time! 💀
TSLint is deprecated and no longer accepting pull requests other than security fixes. See #876. ☠
We recommend you instead use typescript-eslint to lint your TypeScript code with ESLint. ✅
👋 It was a pleasure open sourcing with you!


Bad Error Message: 'NoneType' object has no attribute when --resource-group or --name is misspelled

Describe the bug
az webapp identity show --resource-group "mispelledgroup" --name "somename" with a bad resource group or name field and returns a 'NoneType' object has no attribute 'identity' error. In general it seems that when using az webapp if there is anything wrong with the --resource-group or --name flags it will return a 'NoneType' object has no attribute error message.
To Reproduce
Run az webapp identity show with bad --resource-group or --name fields.
Expected behavior
A clear and actionable error message.
Environment summary
MSI, azure-cli (2.0.54), windows 10

@Nking92 please sync up with API team on this one, sounds like we need better error messages form control plane


Feature/sg 686 torch compile

Depends on https://github.com/Deci-AI/super-gradients/pull/1181/files

@Louis-Dupont I've updated the warning message to include version requirement. Unfortunately it dismissed approval state. Can you please re-approve?


Scheduled delivery

Is it possible to add support for scheduled delivery please? https://archive.clickatell.com/developers/api-docs/scheduled-delivery-advanced-message-send/
Thanks

All parameters are supported, you can just add the correct parameter as seen here: https://archive.clickatell.com/developers/api-docs/http-overview/
Add it to your 2D array when doing the sendMessage request.
If you are using the newer version, these values will be different. Please reference the Clickatell documentation for those.


Fixes after upgrading to IP BOM 6.0.0.Final

+1 to merge.

master: daecca189627b119f6c0cf73438ea3f720b83465


[Wait for #2217][Application] Load official pre-trained weights of darknet53

Now it can load official pre-trained weights of
DarkNet53 (backbone of YOLO v3) on PyTorch example.
(Also we can generate pre-trained bin file for nntrainer using this example)
We can download the official pre-trained binary
file of darknet53 from below link.
"""
https://pjreddie.com/media/files/darknet53.conv.74
"""
I've checked all weights are loaded well.
Signed-off-by: Seungbaek Hong<EMAIL_ADDRESS>

We generate a report if there are dangerous coding constructs in your code. Please read http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202306071727140.17842793464661-f8ea52b50e4d6c908d79c1b114b67a4a34744a86/report/pylint_result.txt.

:octocat: cibot: @baek2sm, A builder checker could not be completed because one of the checkers is not completed. In order to find out a reason, please go to http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202306071727140.17842793464661-f8ea52b50e4d6c908d79c1b114b67a4a34744a86/.

We generate a report if there are dangerous coding constructs in your code. Please read http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202306131449310.012501001358032-f8ea52b50e4d6c908d79c1b114b67a4a34744a86/report/pylint_result.txt.

:octocat: cibot: @baek2sm, A builder checker could not be completed because one of the checkers is not completed. In order to find out a reason, please go to http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202306131449310.012501001358032-f8ea52b50e4d6c908d79c1b114b67a4a34744a86/.

please git rebase yolov3_dknet53_torch https://github.com/nnstreamer/nntrainer/pull/2217 , thank you.

We generate a report if there are dangerous coding constructs in your code. Please read http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202306161816240.39637494087219-c8539ec120366c2a64cf53a81c6bb2153f1171ca/report/pylint_result.txt.

We generate a report if there are dangerous coding constructs in your code. Please read http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202309131052320.85103893280029-2ef756c2a8cca7be7c47ddeda21910b1036788d5/report/pylint_result.txt.

:octocat: cibot: @baek2sm, A builder checker could not be completed because one of the checkers is not completed. In order to find out a reason, please go to http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202309131052320.85103893280029-2ef756c2a8cca7be7c47ddeda21910b1036788d5/.

We generate a report if there are dangerous coding constructs in your code. Please read http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202309131908070.9711709022522-2ef756c2a8cca7be7c47ddeda21910b1036788d5/report/pylint_result.txt.

:octocat: cibot: @baek2sm, A builder checker could not be completed because one of the checkers is not completed. In order to find out a reason, please go to http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202309131908070.9711709022522-2ef756c2a8cca7be7c47ddeda21910b1036788d5/.

We generate a report if there are dangerous coding constructs in your code. Please read http://ci.nnstreamer.ai/nntrainer/ci/repo-workers/pr-checker/2221-202309141359270.26659107208252-2ef756c2a8cca7be7c47ddeda21910b1036788d5/report/pylint_result.txt.

It is already merged by #2229


Avoid TestExecWindowsOpenHandles timing out

Signed-off-by: John Howard<EMAIL_ADDRESS>Found while running Windows CI against nanoserver with a 64-bit busybox image that is build slightly differently. This test currently has an incorrect assumption and can end up stuck in the for loop forever before CI times out. 30 seconds is a reasonable duration to loop for waiting. I'll probably need to modify this test in the future too, but at least this avoids the possible infinite loop.
@darrenstahlmsft FYI.

ping @johnstep


.env file support

How to load variables from .env file?

Not implemented [yet].

it will be made in the future?

Yes, probably.

You can ty it out in 0.3.0.

Considered closed.
Feel free to reopen if required.


WIP

For #

[ ] Pull request represents a single change (i.e. not fixing disparate/unrelated things in a single PR).
[ ] Title summarizes what is changing.
[ ] Has a news entry file (remember to thank yourself!).
[ ] Appropriate comments and documentation strings in the code.
[ ] Has sufficient logging.
[ ] Has telemetry for enhancements.
[ ] Unit tests & system/integration tests are added/updated.
[ ] Test plan is updated as appropriate.
[ ] package-lock.json has been regenerated by running npm install (if dependencies have changed).

Codecov Report

Merging #8714 (46e7cc2) into main (071106f) will decrease coverage by 0%.
The diff coverage is 40%.

@@          Coverage Diff          @@
##            main   #8714   +/-   ##
=====================================
- Coverage     71%     71%   -1%
=====================================
  Files        385     385
  Lines      24781   24784    +3
  Branches    3815    3815
=====================================
- Hits       17740   17727   -13
- Misses      5498    5504    +6
- Partials    1543    1553   +10

Impacted Files
Coverage Δ

...lient/datascience/jupyter/kernels/cellExecution.ts
73% <37%> (-1%)
:arrow_down:

...atascience/jupyter/kernels/cellDisplayIdTracker.ts
74% <50%> (ø)

.../client/datascience/debugLocationTrackerFactory.ts
92% <0%> (-4%)
:arrow_down:

...ook/intellisense/pythonKernelCompletionProvider.ts
73% <0%> (-4%)
:arrow_down:

...lient/datascience/variablesView/notebookWatcher.ts
90% <0%> (-3%)
:arrow_down:

...c/client/datascience/variablesView/variableView.ts
88% <0%> (-3%)
:arrow_down:

...atascience/interactive-window/interactiveWindow.ts
67% <0%> (-2%)
:arrow_down:

src/client/datascience/jupyter/kernelVariables.ts
57% <0%> (-2%)
:arrow_down:

...t/datascience/notebook/vscodeNotebookController.ts
79% <0%> (-1%)
:arrow_down:

src/client/datascience/webviews/webviewHost.ts
80% <0%> (-1%)
:arrow_down:

... and 3 more


Getting renderdoc to work

Describe the bug
I'm trying to get a capture from the engine to learn a little bit how it works
To Reproduce
I have compiled it on VS2019 and tried to hook renderdoc 1.11 up to it. I have also tried defining LUMOS_DEBUG and m_RenderDocLayer = true, but they all fail in some way or another. Launching through renderdoc fails creating the device, setting the renderdoc extension fails creating the instance.
Expected behavior
To be able to launch renderdoc and get a capture.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

Windows 10, Vulkan backend (OpenGL fails but loading some file, I haven't investigated much deeper)

Additional context
It will crash creating the swapchain but that's because the device is null.
Thanks!

Not sure about this one sorry. It was working not long ago. I’ll try and have a look

Latest dev commit worked with renderdoc 1.11 with both OpenGL and Vulkan on windows. No need to define LUMOS_DEBUG or m_RenderDocLayer = true

Latest dev commit worked with renderdoc 1.11 with both OpenGL and Vulkan on windows. No need to define LUMOS_DEBUG or m_RenderDocLayer = true

Now in master - Let me know if its still not working

Now in master - Let me know if its still not working

Works now, thank you :)

Works now, thank you :)


How to refer the color specified by current color theme?

For example, I want to use the comment's color in the file settings.json for other extension's settings, and hope it will change accordingly as the color theme changes—thus a reference to the color is wanted.

@gaochenyi This page might be helpful to you. https://code.visualstudio.com/api/references/vscode-api#ThemeColor However, this is a question which should be asked in another place such as Stack Overflow in the future. Thanks


How to display y axis as integer?

I can't seem to find a parameter to be able to change the y-axis to an integer value.
Expected Behavior

Current Behavior

Possible Solution

Steps to Reproduce (for bugs)

searchType: text
searchTarget: 🍅
startDate: 2023-11-23
folder: /Daily Notes
line:
    title: "Pomodoro Tracker"
    lineColor: red
    xAxisLabel: Date
    yAxisLabel: Amount
		yAxisTickInterval: 1
		yMin: 0

Context

Hi @aaronjylee92, I've edited your original message to re-insert the issue template. Could you please fill in the missing details?


Android: lost connection after a server restart

When restarting the server, my Android phone is silently loosing the connection.
Logs from the android app says the conn is alive but it's not. No subscribers in server logs and no messages is going down. Restarting the service by toggling the wakelock pref fixed it.
I haven't wait the 5mn timeout that would probably solve it, but it's longggg anyway :)
I can reproduce it all the time.

Let's see if it's solved by some websocket magic :crossed_fingers: .

It was still not working after the 5mn timeout.
However websocket recovered pretty quickly (less than 10s) \o/

Yeah sort of the reason why I want to switch to the websockets way is because I am incredibly unhappy with how I implemented the HTTP JSON stream. It should eventually recover, but it can take a little time. If the connection breaks it should be only a few seconds though.
If the connection is just silently taken away (like apparently the Huawei phone from Jakob did), it has to wait up to 30s+5min, so quite the long time.
If the 5min timeout is not working for you that's odd. I am not sure how much time I want to spend debugging it, since I want to switch to websockets anyway...

Yeah let's not bother and harden the ws one I would say.


[Firewall]az network firewall create: Add new parameter --tier

RE: Firewall Premium changes - Azure CLI
This checklist is used to make sure that common guidelines for a pull request are followed.

For new extensions:

[ ] My extension description/summary conforms to the Extension Summary Guidelines.

About Extension Publish
There is a pipeline to automatically build, upload and publish extension wheels.
Once your PR is merged into master branch, a new PR will be created to update src/index.json automatically.
The precondition is to put your code inside this repo and upgrade the version in the PR but do not modify src/index.json.

Firewall


EXC_BAD_ACCESS in in MPApplicationStateSerializer.m

line 41: screenshotImageForWindowAtIndex: I often get a EXC_BAD_ACCESS  soon after initialization on
[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:NO]
The log says

: CGContextSaveGState: invalid context 0x0. This is a serious error. This application, or a
library it uses, is using an invalid context  and is thereby contributing to an overall degradation of
system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal
error in an upcoming update.

Any ideas?

I think I got the error. The details of the window at the time of the crash are
<UIWindow: 0x156f98c20; frame = (0 0; 0 0); clipsToBounds = YES; hidden = YES;
userInteractionEnabled = NO; gestureRecognizers = <NSArray: 0x171649d80>;
layer = <UIWindowLayer: 0x171229660>>

It's odd the frame is CGRectZero.

#271 should resolve this

Closing as resolved.


The x88 menu font

the x88 menu font is not the same as the one in the picture which is the original x88 font and the text is not outlined for me either, i couldn't find anywhere to change this in the menu

the pic above only has outlined text bc I added it in the code myself after but could not find what font he used

The picture was taken months ago, and it was drawn with surface.
I dropped it because I was lazy to fix issues with making surface render to be streamproof.
In short, if you unlock surface rendering you can go back to pretty old commits and see how was it drawn.

@Glokk23 I pushed version for macro choice

funnily enough i didn't see this and made my own solution,
// Replace the existing drawText function in x88menu.cpp
#if ORIGINAL_DRAW == true
static void drawText(float x, float y, unsigned long font, const std::string& text, const Color& color)
{
SurfaceRender::text(static_cast(x), static_cast(y), font, text, false, color);
}
#else
static void drawText(float x, float y, ImFont* font, const std::string& text, const Color& color)
{
surfaceRender.text(static_cast(x), static_cast(y), font, text, false, color);
}
#endif


Add prettier to the project

Describe the bug/feature
As of now their is a lot of code and if we need to fix the formatting to the code we need to add this

Please assign this issue to me

Please assign this issue to me

You can start working on this. You are given 4 days to complete this.


status: show signal name

This makes signal exit status easy to understand.  Instead of just
showing exit code "137", you now see "KILL(-9)".
Based on #580 by @sei40kr (thanks!)

I can add a flag if you want, but this is so sexy, I don't think it needs it. 😎

@docwhat - Fantastic!
I would like for this new mode to be the default, but I'd still like to have the old mode available for those that want it. Would you mind adding a flag to show the true error code, but defaulting it to false?

Done, @bhilburn

Nicely implemented, @docwhat, and this is a really fantastic idea, @sei40kr! This is a really neat feature =)


♻ Use the browser namespace

Fallback to the chrome namespace if the browser namespace is not available.
Rename the asciidoctor.chrome namespace to asciidoctor.browser namespace

Ref: https://github.com/asciidoctor/asciidoctor-chrome-extension/issues/184

What about asciidoctor.webExtension instead of asciidoctor.browser? That seems to fit better.

What about asciidoctor.webExtension instead of asciidoctor.browser? That seems to fit better.

Why not, I picked asciidoctor.brower because browser namespace is used by the WebExtension API but I agree webExtension is more explicit.


Added progress reporting in simulator

This PR does a few things:

Adds missing progress reporting functionality.
Bumps version number of samples to 2.1.latest.js.
Fixes broken StandardConnection sample by removing unnecessary CORS proxy that had become a blocked domain.

All tests passed locally.
Notes:  Progress reporting in the simulator will differ from Tableau behavior in two ways.  1) The progress messages will not be truncated the same way they are in Tableau.   2) In Tableau, reportProgress can only be used during the getData call; the simulator does not enforce this.

Coverage remained the same at 100.0% when pulling d87b9552c43fdb2778a1323c6cab91c16f2e1c0e on progress_reporting_fix into 53a1358f26f96d76862d18f3e3783613cd359cae on master.


Regression: simplify not removing dead import after replacing global

Describe the bug
This appears to be a regression in 1.3.19. Change the version to 1.3.18 and it works as expected.
Input code
import thing from 'stuff';
if (__DEV__) {
    thing();
}

Config
{
  "jsc": {
    "parser": {
      "syntax": "ecmascript",
      "jsx": false
    },
    "target": "es5",
    "transform": {
      "optimizer": {
        "globals": {
          "vars": {
            "__DEV__": "false"
          }
        },
        "simplify": true
      }
    },
    "loose": false,
    "minify": {
      "compress": false,
      "mangle": false
    }
  },
  "module": {
    "type": "es6"
  },
  "minify": false,
  "isModule": true
}

Playground link
https://play.swc.rs/?version=1.3.19&code=H4sIAAAAAAAAA8vMLcgvKlEoycjMS1dIK8rPVVAvLilNS1O35spMU9CIj3dxDYuP11So5lIAArAyDU1rrloAQQELJzgAAAA%3D&config=H4sIAAAAAAAAA0WOvQ7CMAyE38VzVxg6w8jKGoWQVkH5k%2B0iStV3x06LOsW6u%2B8uC7zIQb9AtUge9aI5s%2F1AD94lSw5DZegkJtJgI%2Fm1A7Y4etYIncRjtJmGgknxUjmk8N26xlgewuj5lgF9jblc78YI3NpglT4KqcYwzNAzTl6VWIp422AHKeTmLuBKquiJDsvmMf6TSqbynFRYgOfq2x%2FPsB4dOxfotgfb5A%2FoTJ1lCAEAAA%3D%3D
Expected behavior
Output should be empty.
Actual behavior
This code remains:
import thing from "stuff";

Version
1.3.19
Additional context
No response

Oh, interesting! Can you say more and/or link to the commit? Do we leave the imports in now because we presume they might produce side-effects?

https://github.com/swc-project/swc/commit/dabea71c4461a96836e4456bd2c6bbcf07f238a4

We can't know if an import has a side-effect

That’s what I thought. Can we, instead, respect the sideEffects property of package.json?

If the import is from the current project, check for "sideEffects": false in the current module’s package.json
If the import is external, check for "sideEffects": false in the external module’s package.json


When WIT of WI changes: what shall happen to existing WI links?

When somebody updates the WIT of a WI,

shall an existing link be deleted?
shall the operation in total be blocked?

Depending on the solution, the question can be whether or not we want to handle this on the database level (through the use of BEFORE triggers on the work_items table) or on the application level by manually checking all existing links for the WI to be updated.
See also: https://github.com/almighty/almighty-ui/issues/433
@almighty/core please comment.

I think that if we enforce limits on the types of links that a user can define by creating new links, we should enforce the same limits when a user edits a workitem, and block the user from creating unsupported types of links.

I think that if we enforce limits on the types of links that a user can define by creating new links, we should enforce the same limits when a user edits a workitem, and block the user from creating unsupported types of links.

agreed

We agreed to now allow changing a WI's type; hence this can be closed.


PERL-780 added documentation for TCP keepalive

Added documentatin to socket_timeout_ms as the closest related option, with link to the FAQ for TCP keepalive issues. The actual implementation is in MongoDB::_Link, however as that is a private class no public documentation exists in there. If this would be better suited elsewhere, or at least linked from other places in the module, then that can be added.

Coverage remained the same at 74.516% when pulling 94cb8153b194b4bd0abf0f33956af8ba484582d1 on shadow-dot-cat:TBSliver/PERL-780 into fdb215bf3b7b22d881fd4d9d587eeb1603a85534 on mongodb:master.


[FEATURE] Support external for authentication_backend where user list is defined in another cluster

Is your feature request related to a problem?
When configuring basic authentication, the cluster admin must specify an authentication_backend for where to look for the list of users.
authentication_backend:
  type: internal

Internal in this case refers to the users living internally in the security index of corresponding cluster.
This feature request is to support external for this setting where the user list is defined in another trusted cluster.
If external is defined then this cluster could operate in a sort of primary/replica mode where the each node could populate its cache from the external list of users and would need the primary to notify it about changes to internal users.
What solution would you like?
With Multiple Datasources it may be useful to have one cluster be the primary source for internal users.
What alternatives have you considered?
Keep a mirror of all connected data sources
Do you have any additional context?

https://github.com/opensearch-project/OpenSearch-Dashboards/issues/1388

I don't think we should add another authentication backend for this scenario.
We support JWT Web Tokens, if this was of great importance adding functionality so that the internal user list can communicate externally via JWT Web Tokens, or another authentication standard (SAML/OIDC).  Making a special AuthN provider seems like more trouble than its worth for a strange use case.

[Triage] Hi @cwperks thanks for filing this issue. Based on the comment above and your thumbs up, it seems like there is agreement that using JWTs or something like SAML is an appropriate alternative. Going to close this issue as a result. Thank you!


Use latest forge version in info sections

Which component is your feature related to?
Foundry book
Feature Request
In some places in foundry book we have info sections which show snforge_sdt  dependency in Scarb.toml. Listed versions are sometimes old (examples below). It would be good to show one (latest) version of snforge_std in info sections across foundry book, excluding the cases when specific version is listed on purpose.
example 1

example 2

Duplicated of https://github.com/foundry-rs/starknet-foundry/issues/2329


push/import: reconsider benchmarks using real data

Currently in cases where we want to use "real" data we use cats_dogs dataset which is 25k images, altogether ~800mb.
Benchmarks using them, tend to take a lot of time. I think its worth considering providing few smaller real use case datasets and run the benchmarks few times, instead of running single enormous benchmark once.
Also, that way we could test some edge cases. For example, MNIST can be downloaded as 4 files (the original format from its website), but we can convert it into images folder. ( In case of image folder its probably best to use only validation dataset (10k files), as altogether there is 60k files, which will result in prolonged benchmarks, even though there is not too much data byte-wise).
Why? If we get the regression it takes some time to verify it on personal computer. Smaller benchmarks  and their regressions could be inspected faster.
If we decide to go this way, we should probably consider refactoring push/import benchmarks to run locally, to avoid bandwidth variability influencing our benchmarks.

Idea: maybe we should implement local s3 storage using MinIO, to cut the time of data transfer.


Improve typehints for exceptions.py

This pull request intends to fix the strict mypy errors in the exceptions.py file as part of #251. Not sure if the types within the dictionary (str, str) are consistent with how this is used as couldn't see any instances in the codebase where this error is raised with the kwargs filled in.

/packit copr-build

Thanks!


kpt fn render|eval should always printing truncated stderr output from functions

Currently kpt fn render|eval prints stderr from the functions in the following 2 scenarios:

functions result a failure.
flag --results-dirs is specified, stderr will be captured in the structured results.

kpt fn render|eval should always printing truncated stderr output from functions.
Alternatively, we can add a flag (e.g. --always-print-stderr) to allow users to see stderr from functions. I will be helpful for debugging functions.

@sdowell Maybe this is something you can work on.

@mengqiy Sounds good, I'll take a look


First class support for creating production bundles

A good point was brought up in the announcement post on Lobsters - that while Hermit solves consistent tooling across workstation and CI, it doesn't for deploys. I suggested a couple of workarounds in that thread, but it would be nice for Hermit to provide direct support.
I'm not sure what that would look like in practice? Maybe:
hermit bundle --os=<os> --arch=<arch> <dest> <pkg> [<pkg> ...]

This could create a self-contained tgz or directory with the specified packages and dependencies, bin symlinks, and an activate.sh with all the uninterpolated envars, that does not rely on Hermit at all for runtime.

This would be great for scenarios where you don't have open access to the internet to pull in packages at run time.

this is an awesome feature for lean architectures.
offline install like @damienrj mentioned is very cool.

I raised an Issue for doing all this with NATS.


permissioned-nodes.json inside k8s

Good day! How does handle with permissioned-nodes.json over k8s? I am trying to connect external node to my k8s cluster by lbs and I faced with issues, that ip-address inside permissioned-nodes.json is the different from the ip-address, which is received by external node. k8s replaces this source ip-address to address K8s cluster node (this is not blockchain address).

The same inside cluster. I notice this.
DEBUG[09-02|19:35:36.530] isNodePermissionedV2 V2                  allowed=true  url="enode://9ff3f044040c1325008896a755ae03ff401010c4c45d13e2418734b4cc9c24dc672a604f2af1d6b7706d98a71590ded30e57a018a6286932299927b6f636c9f6@<IP_ADDRESS>:30303?discport=0"
DEBUG[09-02|19:35:36.990] isNodePermissionedV2 V2                  allowed=false url=enode://9ff3f044040c1325008896a755ae03ff401010c4c45d13e2418734b4cc9c24dc672a604f2af1d6b7706d98a71590ded30e57a018a6286932299927b6f636c9f6@<IP_ADDRESS>:38004

Why we see 2 different ip-addresses fro the same nodes?

Hello @kalitamih essentially what you need to do is find what IP your external node is running on and add that entry to the permissioned-nodes.json by hand. Restart every node in the cluster to allow this to take effect and the external node should join in if the networking is sorted (ie the nodes on the cluster can contact the external node and vice versa)
However without a diagram or environment of your setup this is near impossible to debug - can you put a diagram or something that explains your setup please?
Cheers

Hi @kalitamih the threads in #163 have a similar process to get things going cross cluster and might answer your question?

Hi, @joshuafernandes.
This is my setup.
`kalitamih@VivoBook-ASUSLaptop-X513EAN-K513EA:~/ptoynetwork-node$ kubectl get all
NAME                              READY   STATUS      RESTARTS      AGE
pod/blockscout-0                  1/1     Running     2 (8h ago)    33h
pod/blockscout-postgresql-0       1/1     Running     0             33h
pod/goquorum-genesis-init-6v5wm   0/1     Completed   0             3d13h
pod/goquorum-node-validator-1-0   1/1     Running     0             33h
pod/goquorum-node-validator-2-0   1/1     Running     0             33h
pod/goquorum-node-validator-3-0   1/1     Running     0             33h
pod/goquorum-node-validator-4-0   1/1     Running     10 (8h ago)   33h
NAME                                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                                                                       AGE
service/blockscout                       ClusterIP      <IP_ADDRESS>              4000/TCP                                                                      33h
service/blockscout-postgresql            ClusterIP      <IP_ADDRESS>               5432/TCP                                                                      33h
service/blockscout-postgresql-headless   ClusterIP      None                      5432/TCP                                                                      33h
service/goquorum-node-validator-1        ClusterIP      <IP_ADDRESS>              8545/TCP,8546/TCP,8547/TCP,30303/TCP,30303/UDP,9545/TCP                       3d13h
service/goquorum-node-validator-1-lb     LoadBalancer   <IP_ADDRESS>   <IP_ADDRESS>   8545:30656/TCP,8546:30611/TCP,8547:31135/TCP,30303:32088/TCP,9545:32242/TCP   3d13h
service/goquorum-node-validator-2        ClusterIP      <IP_ADDRESS>              8545/TCP,8546/TCP,8547/TCP,30303/TCP,30303/UDP,9545/TCP                       3d13h
service/goquorum-node-validator-3        ClusterIP      <IP_ADDRESS>              8545/TCP,8546/TCP,8547/TCP,30303/TCP,30303/UDP,9545/TCP                       3d13h
service/goquorum-node-validator-4        ClusterIP      <IP_ADDRESS>               8545/TCP,8546/TCP,8547/TCP,30303/TCP,30303/UDP,9545/TCP                       3d13h
service/goquorum-node-validator-4-lb     LoadBalancer   <IP_ADDRESS>   <IP_ADDRESS>   8545:30953/TCP,8546:32728/TCP,8547:30433/TCP,30303:30758/TCP,9545:32183/TCP   3d13h
NAME                                         READY   AGE
statefulset.apps/blockscout                  1/1     33h
statefulset.apps/blockscout-postgresql       1/1     33h
statefulset.apps/goquorum-node-validator-1   1/1     3d13h
statefulset.apps/goquorum-node-validator-2   1/1     3d13h
statefulset.apps/goquorum-node-validator-3   1/1     3d13h
statefulset.apps/goquorum-node-validator-4   1/1     3d13h
NAME                              COMPLETIONS   DURATION   AGE
job.batch/goquorum-genesis-init   1/1           22s        3d13h
kalitamih@VivoBook-ASUSLaptop-X513EAN-K513EA:~/ptoynetwork-node$ `

Yes. I mean via contracts. If I don't make mistake, I can't save enode with dns name. I see enode with ip inside quourmPermission.nodeList.

Right, so for this you'd need to update your contracts to allow for DNS names rather than IP. We recommend using DNS names on k8s and we do this in the static-nodes.json and local permissions too. The second reason for this is that pods are mortal and should enough go down and come up with new IP's it will actually halt your network because the permissions lists uses the older fixed IP's.
I'm not sure which contracts you are using but this is outside scope of this repo and if you need help with writing the contracts the Discord channels are the best place for that.

I use the smart contracts from https://github.com/ConsenSys/quorum-examples/tree/master/examples/7nodes/perm-contracts/v2. I have not found a newer version of these contracts yet.

Gotcha, I'd recommend raising a issue in that repo and linking this thread in there - from what you've described, you'll need to change the contracts to use DNS names rather than IPs; alternatively you may have to add in more IPs depending on your networking setup. Typically cross cluster comms is done via CNI and peering VNet's so you avoid these sorts of issues becuase of the way kubernetes networking works


Spring Cloud Gateway throwing "hostname can't be null" based on my request only having headers and not multi-value headers

Serverless Java Container version: com.amazonaws.serverless:aws-serverless-java-container-springboot3:2.0.0
Implementations: Spring Cloud gateway
Framework version: org.springframework.cloud:spring-cloud-starter-gateway:4.1.1
Frontend service: ALB
Deployment method: localstack
Scenario
I am attempting to run Spring Cloud Gateway in a lambda environment, using AWS's Serverless Java container for Spring Boot 3. I am deploying with localstack locally and hitting it with requests.
I have a /health endpoint:
  @Bean
  public RouterFunction<ServerResponse> health() {
    return RouterFunctions.route(
        RequestPredicates.path("/health"), request -> ServerResponse.ok().build());
  }

which works as expected (I get a 200 OK back).
However, hitting one of my gateway endpoints I get the following

I have a pre-request filter saying I matched to my gateway configuration so it is forwarding a request
I have a post-request filter saying it called the downstream service (ie the proxy worked) and it returned 200
I then get a "hostname can't be null" exception from InetSocketAddress

I've tracked this down to:

a header filter tries to get the 'remote address'
this calls upon the HttpServletRequest for a host
which hits AwsProxyHttpServletRequest's AwsProxyRequest asking for a multi-value header describing host

However, using debugging I can see I only have headers rather than multi-value headers:

meaning .getHeaders().getFloorEntry("Host").getValue() is more likely what I need.
Does anyone here have advice on how to work the problem?
Expected behavior
Proxy requests should work and return my request.
Actual behavior
There is an exception when looking up a hostname due to it being null, based on the request I am sending into my service.
Steps to reproduce
n/a, but the app is currently very vanilla (so I don't think there is anything getting in the way). I have 3 beans, 1 for health (above) and 2 that do the pre/post proxy request logging. Nothing else is present in the service.
Full log output
2024-03-26 16:27:40 2024-03-26T16:27:40.405Z  INFO 17 --- [           main] c.a.s.p.internal.LambdaContainerHandler  : <IP_ADDRESS> null- null [26/03/2024:16:27:40Z] "GET /health null" 200 - "-" "-" combined
2024-03-26 16:27:40 2024-03-26T16:27:40.965Z  INFO 17 --- [           main] u.c.c.s.t.a.f.LoggingGlobalPreFilter     : Matched route id issuing_account_status: Forwarding request /account/{accountId}/status to http://wiremock:9090/account/123/status
2024-03-26 16:27:40 2024-03-26T16:27:40.967Z  INFO 17 --- [           main] u.c.c.s.t.a.f.LoggingGlobalPostFilter    : Response from http://wiremock:9090/account/123/status: 200 OK
2024-03-26 16:27:40 2024-03-26T16:27:40.975Z ERROR 17 --- [           main] a.w.r.e.AbstractErrorWebExceptionHandler : [3a588b5f]  500 Server Error for HTTP GET "/account/123/status"
2024-03-26 16:27:40
2024-03-26 16:27:40 java.lang.IllegalArgumentException: hostname can't be null
2024-03-26 16:27:40     at java.base/java.net.InetSocketAddress.checkHost(Unknown Source) ~[na:na]
2024-03-26 16:27:40     Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
2024-03-26 16:27:40 Error has been observed at the following site(s):
2024-03-26 16:27:40     *__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
2024-03-26 16:27:40     *__checkpoint ⇢ HTTP GET "/issuing/account/123/status" [ExceptionHandlingWebHandler]
2024-03-26 16:27:40 Original Stack Trace:
2024-03-26 16:27:40             at java.base/java.net.InetSocketAddress.checkHost(Unknown Source) ~[na:na]
2024-03-26 16:27:40             at java.base/java.net.InetSocketAddress.<init>(Unknown Source) ~[na:na]
2024-03-26 16:27:40             at org.springframework.http.server.reactive.ServletServerHttpRequest.getRemoteAddress(ServletServerHttpRequest.java:192) ~[spring-web-6.1.1.jar:6.1.1]
2024-03-26 16:27:40             at org.springframework.cloud.gateway.filter.headers.ForwardedHeadersFilter.filter(ForwardedHeadersFilter.java:116) ~[spring-cloud-gateway-server-4.1.1.jar:4.1.1]
2024-03-26 16:27:40             at org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter.filter(HttpHeadersFilter.java:38) ~[spring-cloud-gateway-server-4.1.1.jar:4.1.1]
2024-03-26 16:27:40             at org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter.filterRequest(HttpHeadersFilter.java:28) ~[spring-cloud-gateway-server-4.1.1.jar:4.1.1]
2024-03-26 16:27:40             at org.springframework.cloud.gateway.filter.NettyRoutingFilter.filter(NettyRoutingFilter.java:125) ~[spring-cloud-gateway-server-4.1.1.jar:4.1.1]
2024-03-26 16:27:40             at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:137) ~[spring-cloud-gateway-server-4.1.1.jar:4.1.1]
2024-03-26 16:27:40             at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44) ~[spring-cloud-gateway-server-4.1.1.jar:4.1.1]
2024-03-26 16:27:40             at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:117) ~[spring-cloud-gateway-server-4.1.1.jar:4.1.1]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:45) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:264) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:264) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerNext(FluxConcatMapNoPrefetch.java:258) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:158) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerNext(FluxConcatMapNoPrefetch.java:258) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onNext(MonoFilterWhen.java:136) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2571) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.request(MonoFilterWhen.java:182) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2331) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2331) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:338) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxMap$MapSubscriber.request(FluxMap.java:164) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2331) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxMap$MapSubscriber.request(FluxMap.java:164) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2331) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:338) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2367) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2241) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onSubscribe(FluxConcatMapNoPrefetch.java:164) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:201) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:83) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:264) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at reactor.core.publisher.Mono.subscribe(Mono.java:4512) ~[reactor-core-3.6.0.jar:3.6.0]
2024-03-26 16:27:40             at org.springframework.http.server.reactive.ServletHttpHandlerAdapter.service(ServletHttpHandlerAdapter.java:199) ~[spring-web-6.1.1.jar:6.1.1]
2024-03-26 16:27:40             at com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveServletEmbeddedServerFactory.service(ServerlessReactiveServletEmbeddedServerFactory.java:71) ~[aws-serverless-java-container-springboot3-2.0.0.jar:na]
2024-03-26 16:27:40             at com.amazonaws.serverless.proxy.internal.servlet.FilterChainManager$ServletExecutionFilter.doFilter(FilterChainManager.java:374) ~[aws-serverless-java-container-core-2.0.0.jar:na]
2024-03-26 16:27:40             at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[aws-serverless-java-container-core-2.0.0.jar:na]
2024-03-26 16:27:40             at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:154) ~[aws-serverless-java-container-core-2.0.0.jar:na]
2024-03-26 16:27:40             at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:183) ~[aws-serverless-java-container-springboot3-2.0.0.jar:na]
2024-03-26 16:27:40             at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:56) ~[aws-serverless-java-container-springboot3-2.0.0.jar:na]
2024-03-26 16:27:40             at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxy(LambdaContainerHandler.java:215) ~[aws-serverless-java-container-core-2.0.0.jar:na]
2024-03-26 16:27:40             at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxyStream(LambdaContainerHandler.java:258) ~[aws-serverless-java-container-core-2.0.0.jar:na]
2024-03-26 16:27:40             at my.LambdaHandler.handleRequest(LambdaHandler.java:36) ~[task/:na]
2024-03-26 16:27:40             at com.amazonaws.services.lambda.runtime.api.client.EventHandlerLoader$2.call(EventHandlerLoader.java:905) ~[aws-lambda-java-runtime-interface-client-2.4.2-linux-x86_64.jar:2.4.2]
2024-03-26 16:27:40             at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:245) ~[aws-lambda-java-runtime-interface-client-2.4.2-linux-x86_64.jar:2.4.2]
2024-03-26 16:27:40             at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:197) ~[aws-lambda-java-runtime-interface-client-2.4.2-linux-x86_64.jar:2.4.2]
2024-03-26 16:27:40             at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.main(AWSLambda.java:187) ~[aws-lambda-java-runtime-interface-client-2.4.2-linux-x86_64.jar:2.4.2]
2024-03-26 16:27:40
2024-03-26 16:27:40 2024-03-26T16:27:40.995Z  INFO 17 --- [           main] c.a.s.p.internal.LambdaContainerHandler  : <IP_ADDRESS> null- null [26/03/2024:16:27:40Z] "GET /account/123/status null" 500 150 "-" "-" combined

Update: I think the problem is that I interpreted that out-of-the-box this supports ALB messages (as well as API GW), but reading the AwsProxyRequest javadoc I don't think it does 😞

Thank you for raising this @tc2-c1 . If the Hostname only appears on singlevalueHeaders for ALB, then we should update the method to account for that. I will send a fix by the end of the day. Thanks again

Thanks @mbfreder , the response is massively appreciated 🙏
I have noticed that this line: return new InetSocketAddress(this.request.getRemoteHost(), this.request.getRemotePort()); implies that there are different headers for host and port, but the header that has come through in my screenshot above is host:port in just the 1 field, so this may need to be split...

Released as part of 2.0.2


Minor cleanup in tests discovery

This came up to life by pure accident, I looked at this code for an entirely different reason and realized these small changes can be done here.

@ryanjbaxter one more minor clean-up, thank you


Fixing issue where traceId was missing in the logs

Fix for issue: https://github.com/Nike-Inc/cerberus-management-service/issues/35
Also, upgrading Riposte to latest version
Minor formatting changes

Coverage decreased (-0.2%) to 62.492% when pulling 575d8888a5f3bd2222b65eba141370084777f988 on tlisonbee:trace-id-fix into 0074453a7dcd50a025c39a90e52cb88187fcd735 on Nike-Inc:master.


Add support for background modes on iOS

To enable BLE background mode on iOS, edit plugin.xml as follows, adding the config-file section "UIBackgroundModes":
<platform name="ios">
	<config-file target="config.xml" parent="/*">
		<feature name="BLE">
			<param name="ios-package" value="EVOBLE"/>
		</feature>
	</config-file>

	<config-file target="*-Info.plist" parent="UIBackgroundModes">
		<array>
			<string>bluetooth-central</string>
			<string>bluetooth-peripheral</string>
		</array>
	</config-file>

	<framework src="CoreBluetooth.framework" />

	<header-file src="src/ios/EVOBLE.h" />
	<source-file src="src/ios/EVOBLE.m" />
</platform>

Only bluetooth-central would be needed for the BLE central role.

Support for background scanning available in this branch: https://github.com/mikaelkindborg/cordova-ble/tree/background
Will be merged to master branch.


Should it be shelf or shelve?

Description
IMHO, we should probably use the noun shelf vs the verb shelve.
This is a suggestion. If people do not agree, please say so and I will close the PR.

@marcovandeveen The nice thing about self-hosted solutions is that things will only break if they update to the latest version.
We should still notify them. A good way to start is probably to add a CHANGELOG.md file to the source code to indicate the changes (after the initial real release).


Audio track language not set after processing in MP4s or MKVs with undefined audio track language

OS: OS X 10.6.8
Python: version 2.7.5
The audio track language of video files that have an undefined audio track language is not being set correctly to the preferred language as entered in the autoProcess.ini after being processed.
If the audio track language is "unknown" it will remain set as "unknown" after processing even if the audio-default-language = eng. If the pre-processing audio track language tag is "English" it will remain as "English" after processing.
To correct the audio track language, I have to run the processed video file through Subler (https://bitbucket.org/galad87/) which allows you to edit track and tag info along with artwork. There is a CLI version of Subler along with the source code, so perhaps it can be integrated into a future version of MP4_Automator.
Here is my autoProcess.ini settings:
[MP4]
ffmpeg = /usr/local/bin/ffmpeg
ffprobe = /usr/local/bin/ffprobe
output_directory =
copy_to =
move_to =
output_extension = m4v
output_format = mp4
delete_original = True
relocate_moov = True
audio-codec = ac3
video-codec = h264,x264
video-bitrate =
ios-audio = True
max-audio-channels =
audio-language =
audio-default-language = eng
audio-channel-bitrate =
subtitle-language =
subtitle-default-language = eng
subtitle-codec = mov_text
fullpathguess = True
convert-mp4 = False
tagfile = True
tag-language = en
download-artwork = True
download-subs = True
embed-subs = True
sub-providers = addic7ed,podnapisi,thesubdb,opensubtitles
permissions = 0777
post-process = False
pix-fmt =
ios-first-track-only = False
video-max-width =

Tag language is the language your metadata from thetvdb or tmdb will be pulled in. The setting you need to set is audio-default-language for audio tracks or subtitle-default-language for subtitle tracks. This will default unknown languages to whatever 3 letter code you've chosen (in your case set these to eng).
On Thu, Jul 30, 2015 at 12:29 PM, strafer<EMAIL_ADDRESS>wrote:

OS: OS X 10.6.8
Python: version 2.7.5
The audio track language of video files that have an undefined audio track language is not being set correctly to the preferred language as entered in the autoProcess.ini after being processed.
If the audio track language is "unknown" it will remain set as "unknown" after processing even if the tag-language = en. If the pre-processing audio track language tag is "English" it will remain as "English" after processing.
To correct the audio track language, I have to run the processed video file through Subler (https://bitbucket.org/galad87/) which allows you to edit track and tag info along with artwork. There is a CLI version of Subler along with the source code, so perhaps it can be integrated into a future version of MP4_Automator.
Here is my autoProcess.ini settings:
[MP4]
ffmpeg = /usr/local/bin/ffmpeg
ffprobe = /usr/local/bin/ffprobe
output_directory =
copy_to =
move_to =
output_extension = m4v
output_format = mp4
delete_original = True
relocate_moov = True
audio-codec = ac3
video-codec = h264,x264
video-bitrate =
ios-audio = True
max-audio-channels =
audio-language =
audio-default-language =
audio-channel-bitrate =
subtitle-language =
subtitle-default-language =
subtitle-codec = mov_text
fullpathguess = True
convert-mp4 = False
tagfile = True
tag-language = en
download-artwork = True
download-subs = True
embed-subs = True
sub-providers = addic7ed,podnapisi,thesubdb,opensubtitles
permissions = 0777
post-process = False
pix-fmt =
ios-first-track-only = False
video-max-width =
Reply to this email directly or view it on GitHub:
https://github.com/mdhiggins/sickbeard_mp4_automator/issues/290

Okay, putting the language code in the correct place has fixed the audio track language tagging issue with MKV files, but not with MP4 files. MP4 files still show unknown language.
2015-07-30 10:56:19 - SickbeardPostConversion - INFO - Sickbeard extra script post processing started.
2015-07-30 10:56:19 - readSettings - WARNING - Audio bitrate was invalid, defaulting to 256 per channel.
2015-07-30 10:56:19 - SickbeardPostConversion - INFO - Processing /Volumes/Vault/TV3/Person of Interest/Season 04/Person of Interest - S04E22 - YHWH.mp4.
2015-07-30 10:56:19 - SickbeardPostConversion - INFO - Tagging /Volumes/Vault/TV3/Person of Interest/Season 04/Person of Interest - S04E22 - YHWH.mp4 with ID 248742 season 4 episode 22.
2015-07-30 10:56:20 - tvdb_mp4 - INFO - Tagging file: /Volumes/Vault/TV3/Person of Interest/Season 04/Person of Interest - S04E22 - YHWH.mp4.
2015-07-30 10:56:21 - tvdb_mp4 - INFO - Trying to write tags.
2015-07-30 10:56:37 - tvdb_mp4 - INFO - Tags written successfully.
2015-07-30 10:56:37 - mkvtomp4 - INFO - Relocating MOOV atom to start of file.
2015-07-30 10:56:37 - mkvtomp4 - WARNING - QT FastStart did not run - perhaps moov atom was at the start already.
2015-07-30 10:56:40 - SickbeardPostConversion - INFO - Sickbeard extra script post processing started.
2015-07-30 10:56:40 - readSettings - WARNING - Audio bitrate was invalid, defaulting to 256 per channel.
2015-07-30 10:56:40 - SickbeardPostConversion - INFO - Processing /Volumes/Vault/TV3/Person of Interest/Season 04/Person of Interest - S04E20 - Terra Incognita.mkv.
2015-07-30 10:56:40 - mkvtomp4 - INFO - Reading video stream.
2015-07-30 10:56:40 - mkvtomp4 - INFO - Video codec detected: h264
2015-07-30 10:56:40 - mkvtomp4 - INFO - Pix Fmt: yuv420p
2015-07-30 10:56:40 - mkvtomp4 - INFO - Reading audio streams.
2015-07-30 10:56:40 - mkvtomp4 - INFO - Audio detected for stream #1: ac3 [und].
2015-07-30 10:56:40 - mkvtomp4 - INFO - Creating audio stream 0 from source audio stream 1 [iOS-audio].
2015-07-30 10:56:40 - mkvtomp4 - INFO - Creating audio stream 1 from source stream 1.
2015-07-30 10:56:40 - mkvtomp4 - INFO - Reading subtitle streams.
2015-07-30 10:56:41 - mkvtomp4 - INFO - Attempting to download subtitles.
2015-07-30 10:56:41 - subliminal.video - INFO - Scanning video u'Person of Interest - S04E20 - Terra Incognita.mkv' in u'/Volumes/Vault/TV3/Person of Interest/Season 04'
2015-07-30 10:56:41 - guessit - WARNING - Invalid infotype: autodetect
2015-07-30 10:56:41 - mkvtomp4 - INFO - Starting conversion.
2015-07-30 10:59:46 - mkvtomp4 - INFO - /Volumes/Vault/TV3/Person of Interest/Season 04/Person of Interest - S04E20 - Terra Incognita.m4v created.
2015-07-30 10:59:48 - SickbeardPostConversion - INFO - Tagging /Volumes/Vault/TV3/Person of Interest/Season 04/Person of Interest - S04E20 - Terra Incognita.mkv with ID 248742 season 4 episode 20.
2015-07-30 10:59:49 - tvdb_mp4 - INFO - Tagging file: /Volumes/Vault/TV3/Person of Interest/Season 04/Person of Interest - S04E20 - Terra Incognita.m4v.
2015-07-30 10:59:49 - tvdb_mp4 - INFO - Trying to write tags.
2015-07-30 10:59:50 - tvdb_mp4 - INFO - Tags written successfully.
2015-07-30 10:59:50 - mkvtomp4 - INFO - Relocating MOOV atom to start of file.

If you want to modify the content of streams within an mp4 already created you need to reprocess it, not just retag it. Make sure your convert-mp4 option is true to achieve this.

Oh, okay, but won't that re-process every MP4/M4V I have in my media folder?

Only if you're processing your whole media folder as your input

The way it's setup now is that downloaded videos get put in a folder outside my media folder. Sickrage watches that folder and moves any video files their to the correct show folder inside the media folder. Then the MP4_Automator script process the files in place (in the relevant TV show folder), deletes the old file, and refreshes Plex.
With that setup, will all my MP4s be re-processed or only new ones that are downloaded?

Nah only the ones that are downloaded, assuming you've linked postConversion.py into Sickrage as per the normal settings and don't have any crazy mods done to it

In the Post Processing section of Sickrage, I've entered the following in Extra Scripts:
/usr/local/bin/python /Users/ladmin/sickbeard_mp4_automator/postConversion.py
I had been using Sickrage to download subtitles and it was working well, but I turned it off to test out MP4_Automator's subtitle downloading capabilities, but it doesn't seem to be working; no subs are being downloaded even though the log file says it's attempting to download them.
Do I have to enter something in the Extra Scripts section under the subtitle processing section of Sickrage?

Ah screw it. I'll just use Sickrage's sub downloading since it was working for me and have MP4 Automator embed them.
Thanks for your help. Much appreciated.

It may have to do with Sickrage renaming the file before subliminal has a chance to analyze the file for a matching sub. Lots of times things like the release group and quality are required to find an exact sub match. But yeah subliminal definitely isn't 100% accurate, if Sickrage is matching them I'd just stick with that then.


IDEA: Fixed-position letter hints (similar to recently added popup hints)

Is your feature request related to a problem? Please describe.
I find I keep my eyes on the radial lines to figure out what letters I'm typing, but often my fingers are blocing the view.
The recently added hints that appear on the radial lines are great, but are often hidden under my fingers.
Describe the solution you'd like

The central circle interior could show the same information as appears on the new popup, but in a fixed and expected solution. The eye could stat focused on the one spot in the centre.

The grey quadrant icons for shift/back/enter/numerical could temporarily switch to this letter hint.  If all four were temporarily switched, then there would never be a situation where a finger was blocking the view.

This would allow several new visual places to learn and understand the layout of the keyboard, and would build well on the work that went into the layout hints.
Describe alternatives you've considered
Additional context
Add any other context or screenshots about the feature request here.
Thanks, this is an amazing project and I keep returning to it... but still struggling to master the layout !
bahut dhanyavad!

I like the idea of a popup inside the circle/icons around.
This could be an option, which could be disabled in the settings.
Also we could add a drop-down to select a layer or having a panel with all printable characters and showing how to display them (like a tutorial)

related https://github.com/8VIM/8VIM/issues/420


[ISSUE] CI on backported branches will use 9.2 helm charts despite not being on v9 yet (stable-8.3)

Describe the issue:
Look at this release PR:
https://github.com/camunda/camunda-platform-helm/pull/1415
reproduce by executing CI run against camunda-platform-8.3

Actual behavior:

Expected behavior:

How to reproduce:

Logs:

Environment:
Please note: Without the following info, it's hard to resolve the issue and probably it will be closed.

Platform:
Helm CLI version:
Chart version:
Values file:

Duplicate of https://github.com/camunda/camunda-platform-helm/issues/1585


[CI] Remove tim-actions/dco action in favour of DCO app

What
Once the DCO app is approved and "installed", remove usages of tim-actions/dco ("Check messages" job)
Why
The third-party action we were using is throwing up deprecation warnings and needs to be replaced. There is a handy GitHub app that is much better - see https://github.com/OpenAssetIO/OpenAssetIO/issues/709#issuecomment-1306342203

Closing in favour of the umbrella https://github.com/OpenAssetIO/OpenAssetIO/issues/731


Mark '...' as defined global not working.

I'm using Roblox-Lua and there are some internal global variables that don't need to be declared, such as "workspace", "Vector3", etc.
LSP-Lua is showing this warning:

If I choose `Mark 'workspace' as defined global, it changes nothing:

What's wrong?

It's supposed to update your project settings with something like:

Make sure that you have opened a folder instead of a single file.
And ideally save the workspace as a project so that your settings are preserved.
(Note that there are warnings in project settings when using LSP-json but that hopefully doesn't affect the behavior)

Thanks. In fact, I had to create a project for it. I've never actually used projects before, but that's okay.

However, there is an issue:
If I Mark a variable as defined global, ALL  other variables that appear underlined with the same problem are no longer charged.
Before:

After:

To get the correct result, I have to close the file and open it again:

What you probably want is to use the Lua.workspace.library setting to point to a Roblox interface. I don't know exactly how that works though. I believe @zainthemaynnn got that working.
https://github.com/sublimelsp/LSP-lua/blob/3dbb0e5ae41f96e36bc8f0be5b11202d08b96e62/LSP-lua.sublime-settings#L162-L166

Actually @rchl solved the original problem.
My last post is to inform another behavior.


[WIP] Invocies:  refactor InvoiceDB methods

This PR includes multiple changes. Some of them are specific to the InvoiceDB, some to the Invoice domain logic in general and others to the new DB interfaces.
Changes to the InvoiceDB:
- New set of methods that remove most of the domain logic from the db implementation. The new methods are "dumber" and they are supposed to be used to simply store/retrieve/delete data from the db.
- For each new method two versions have been added. One with a explicit tx and another one without it. When the new set of interfaces for storage (last commit) is finished only the ones without explicit tx will survive (WitTx will also be removed)
Changes to the  Invoice domain logic:
- Most of the logic to check if an invoice could be updated and what changes where needed to be applied given a new event and the current invoice status have been removed from the channeldb package.
- In order to add an htlc, settle an invoice or canceling it we can use now its struct methods. Those methods implement the flow for all the invoice types (regular, hodl, amp...). We may want to add a new interface for invoices in the future. Until then most of the logic is separated in specific methods for each type while the public method simply implements acts as dispatcher.
New DB interfaces:
- The idea is to have a TxExecutor that is able to bind a tx to a db interface and injects it to the users custom logic. This is similar to what we have in other projects (but generic not only for sql/sqlc). You can check the latest commit for more.
Part of #6288

Closed in favor of #7354 #7343 #7357


[FIF-173] Adds IsAdminSurveyLoader column to Staff table.

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


connector-dingtalk error 500

It can normally click the login button and redirect to the login center, but after confirming, it returns to the page with a 500 error. I have configured all the related content.

It was fine when I tested it, you need to check the error messages in the logs.
You might have forgotten to apply the dingtalk permissions.

@LinkinStars @sy-records
Indeed, thank you. The permission needs to be enabled, and it works after I manually enabled it.