hl-NonText background colour overrides completion popup background colour

Describe the bug
When displaying popups with set completeopt+=popup where there are long info parts causing line wrapping, 'showbreak' characters are displayed with the background colour of the window below, not the popup background colour.
To Reproduce
Detailed steps to reproduce the behavior:

Create demo script:" complete_showbreak.vim
func DummyComplete(findstart, base)
  if a:findstart
    return 0
  else
    let long_info = range(100)->map({_->'abcde'})->join()
    return [#{ word: 'word_1', info: long_info }, #{ word: 'word_2', info: long_info }]
  endif
endfunc

set showbreak=>
set completeopt+=popup
setlocal completefunc=DummyComplete

Open the script with vim --clean -S complete_showbreak.vim complete_showbreak.vim
Invoke DummyComplete using i<C-x><C-u>
The info popup is displayed with wrapped lines. The 'showbreak' character > is displayed at the start of each except the first line of wrapped text, but it does not have the background colour of the popup window, it has the terminal background colour.

Expected behavior
Since the NonText highlight group usually does not have a termbg or guibg specified, the 'showbreak' character should use the popup window background colour.
Screenshots

Environment (please complete the following information):
Tested in terminal Vim 8.1.1968 in arch linux, and gvim 8.1.2021 in Windows.

Lovely, thanks Bram!


Port forward to a service instead of pod

Current quick start forwards a port to a front-end pod instead of service, which is both wrong and more complex.
We should change the example to forward a port to a service, which should be as simple as
kubectl port-forward --namespace sockshop service/front-end <localPort>:80

closed by #4


make-json with a specific file name fatal errors.

Running
wp i18n make-json lang/de_DE.po lang/

Gives the following fatal error.
ArgumentCountError: Too few arguments to function Symfony\Component\Finder\SplFileInfo::__construct(), 1 passed in /Users/timothybjacobs/.composer/vendor/wp-cli/i18n-command/src/MakeJsonCommand.php on line 89 and exactly 3 expected in /Users/timothybjacobs/.composer/vendor/symfony/finder/SplFileInfo.php on line 29

OS:	Darwin 18.2.0 Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64 x86_64
Shell:	/bin/bash
PHP binary:	/usr/local/bin/php
PHP version:	7.2.6
php.ini used:	/usr/local/etc/php/7.2/php.ini
WP-CLI root dir:	/Users/timothybjacobs/.composer/vendor/wp-cli/wp-cli
WP-CLI vendor dir:	/Users/timothybjacobs/.composer/vendor
WP_CLI phar path:
WP-CLI packages dir:	/Users/timothybjacobs/.wp-cli/packages/
WP-CLI global config:	/Users/timothybjacobs/.wp-cli/config.yml
WP-CLI project config:
WP-CLI version:	2.1.0

The docs say "Path to an existing PO file or a directory containing multiple PO files." so this is definitely a bug.


Minimallib: Stereo missing in SMILES when starting with 3D molblock

Describe the bug
Using the JS Minimallib, when loading a CTAB having 3D coordinates and stereochemistry, if I then generate the smiles out of it, the stereochemistry information is lost in the output SMILES.
To Reproduce
See this js file, paste it in any box here and see the results in the console:
RdkitJS Stereo Issue.js.txt
Expected behavior
I'd say that we need to expose the function that enables stereochemistry perception from 3D coordinates in case a mol has this 3D coordinates, or make that an option upon loading a molecule. Or maybe I've missed an option / way of doing that.
Configuration (please complete the following information):

RDKit version: 2022.3.2
OS: Windows10
If you are not using conda: how did you install the RDKit? Minimallib -> npm

We do not need a new flag. This bug is a consequence of #5327, which has just been fixed.
So the problem will also be fixed in MinimalLib if you rebuild it from the latest master branch.
I have just tested this locally with your Java snippet and I get this:
[H]c1c([H])c([H])c([C@]([H])(N([H])[H])C([H])([H])C(=O)[O-])c([H])c1[H]

I am closing this as the bug has already been fixed; feel free to reopen if needed.

Thanks for the swift response @ptosco. We'll rebuild it internally.

@leguilv A patch release was released yesterday and it includes the fix for #5327:
https://github.com/rdkit/rdkit/releases/tag/Release_2022_03_3

Thanks guys !!

Quick Question @greglandrum: is the NPM release coming as well ?

Those normally happen after each RDKit release, so I would assume so (I don't do the distribution updates myself)

Thanks for your continued efforts here @MichelML

Thanks to both of you! We upgraded to the latest version and it works perfectly!


Clarify and enforce thread safety contract of DOMProvider et. al.

This introduces a new interface, ThreadBound, which provides methods for dealing with the UI thread safety contract that we need to enforce w.r.t. Android UI objects. We are also much more stringent about verifying that calls are being made on the correct thread.
Closes #167

Looks good, squash and merge.


Selecting source

Hi !
I just came across your home-assistant Devialet extension, thank you for this work!
I was wondering why you didn't implement the source selection as well? Any reason in particular?
Thanks !

Hi, I already contacted Devialet about this. Apparently this feature is missing in the API at this moment. As soon as Devialet did add this feature, I will update the integration as well. Please let me know if you experience any issues or have suggestions.

Prior to finding your repo I was directly using curl calls to this API https://help.devialet.com/hc/en-us/articles/4415207423378
curl -X POST http://{IP}/ipcontrol/v1/groups/current/sources/{SOURCE_UUID}/playback/play works fine on a stereo phantoms setup to select a source
Related to sources also:
Looking at the code it seems sources that are present on multiple speakers are handled but on home assistant I see only one "optical jack".
Here is the response I get from curl -X GET http://{IP}/ipcontrol/v1/groups/current/sources:
{
  "sources": [
    {
      "deviceId": "b4a1710e-5b3c-5c58-9b5a-282ed0f10732",
      "sourceId": "c2c4b168-de96-426f-bda1-03b542126171",
      "type": "spotifyconnect"
    },
    {
      "deviceId": "b4a1710e-5b3c-5c58-9b5a-282ed0f10732",
      "sourceId": "1647f833-b1d9-4ae8-9f98-455bc6d28b6f",
      "type": "raat"
    },
    {
      "deviceId": "bbc8a550-7179-58f8-8a96-9638ac6eebf1",
      "sourceId": "9eaabc95-6b04-4089-a2d2-57c74823d2d6",
      "streamLockAvailable": false,
      "type": "opticaljack"
    },
    {
      "deviceId": "b4a1710e-5b3c-5c58-9b5a-282ed0f10732",
      "sourceId": "5fe805a4-180e-4d95-87b2-35844a3b5ba3",
      "streamLockAvailable": true,
      "type": "opticaljack"
    },
    {
      "deviceId": "b4a1710e-5b3c-5c58-9b5a-282ed0f10732",
      "sourceId": "93a1fcef-0085-4054-8c6e-7b1481eb6111",
      "type": "airplay2"
    },
    {
      "deviceId": "b4a1710e-5b3c-5c58-9b5a-282ed0f10732",
      "sourceId": "53c1eaca-6cdb-46de-9e2b-3001b4cb43ae",
      "type": "upnp"
    },
    {
      "deviceId": "b4a1710e-5b3c-5c58-9b5a-282ed0f10732",
      "sourceId": "11b34e20-982b-4817-bef8-821d7808aea1",
      "type": "bluetooth"
    }
  ]
}

However on home assistant the entity look like this

I''ll dig deeper though :)

I did a quick POC which works on my setup (two phantoms reactor in stereo):
https://github.com/fwestenberg/devialet/compare/main...simon-watiau:devialet:main
https://github.com/fwestenberg/homeassistant-devialet/compare/main...simon-watiau:homeassistant-devialet:main

Great! I tried it on my Phantom silver set, also working. I will fix this probably tomorrow.

thanks !

A new release is available. Select source is added as well as the optical jack left/right sources. Please let me know if it works well with your speakers.

Just tested it, the issue with my setup is that the two optical jack don't have the _left/_right suffix (phantoms), so only one of them is recognize at a time.
{
      "deviceId": "bbc8a550-7179-58f8-8a96-9638ac6eebf1",
      "sourceId": "9eaabc95-6b04-4089-a2d2-57c74823d2d6",
      "streamLockAvailable": true,
      "type": "opticaljack"
    },
    [...]
    {
      "deviceId": "b4a1710e-5b3c-5c58-9b5a-282ed0f10732",
      "sourceId": "5fe805a4-180e-4d95-87b2-35844a3b5ba3",
      "streamLockAvailable": true,
      "type": "opticaljack"
    },

Another issue I got on adding an index is that the endpoint doesn't return sources in the same order
So I ended up sorting the sources by devices id to be more consistent.
- for source in self._sources["sources"]:
+ for source in sorted(self._sources["sources"], key=lambda source: source["deviceId"]):

(Also as a side note on reboot device ids stay the same but source ids do change)
I'll update this issue is this does the trick

Thanks for your effort again! Can you please update the integration to 1.4.0? This will give you the option to download the diagnostic data from the integration.

I just tested it, the left/right source selection works great,
however the "selected source" does not show up correctly (I can select a source, but reopening the entity shows no selected source), I assume because the selected source is not in the sources list.

"source_list": [
  "Airplay",
  "Bluetooth",
  "Online",
  "Optical jack left",
  "Optical jack right",
  "Raat",
  "Spotify Connect"
],
"source": "opticaljack"

Here is the full diagnostic file:
config_entry-devialet-7ab686a536ad4c13f4c865d04c83b226.json.txt

Thanks! I think this helped me solving the problem. Please check out 1.4.2.
Also the sources will be selected again after turning off the device. This way the Source ID's will stay in sync.

Works like a charm with version 1.4.2, thanks for this amazing work ! I'll keep running this version and let you know how it goes.
Also another "nice to have" would have been to be able to customize the refresh rate.
For instance on my HA setup, I stop Spotify when the source change, however it takes 5 seconds for this change to be detected with the default value.

Currently I'm trying to get the UPnP push events working. But it will take a lot of additional time I'm afraid.
Keep an eye on https://github.com/home-assistant/core/pull/86551 by the way!

great news !

Well, I tried this library https://github.com/StevenLooman/async_upnp_client with both my Devialet and Sonos devices. When I subscribe to all services, I see calls incoming from Sonos, but not from Devialet. I doubt they've implemented it already.
Also, is there any chance you can review this PR? https://github.com/home-assistant/core/pull/86551 Thanks!


Emit absolute paths in builder:watch hook

Describe the feature
Related PR with discussion: https://github.com/nuxt/nuxt/pull/22333
Nuxt v4 would be the time to update that. Might need discussion before though.
Additional information

[X] Would you be willing to help implement this feature?
[ ] Could this feature be implemented as a module?

Final checks

[X] Read the contribution guide.
[X] Check existing discussions and issues.

implemented in https://github.com/nuxt/nuxt/pull/26925 under a flag (to be removed when v4 lands)


Allow using wildcard certificate

Description
Story
AS AN otomi admin
I WANT TO use wildcard certificates
SO I do not have to rely on Letsencrypt
Acceptance criteria
GIVEN a wild card certificate given from organisation
WHEN I set the wild card certificate in Otomi
THEN this certificate is used by all public core and team apps
GIVEN I do not have a wild card certificate from my organisation
WHEN I choose lets encrypt as certificate provided
THEN letsencrypt generates wildcard certificate that is used by all core and team apps
GIVEN wildcard support
WHEN I upgrade Otomi to new version
THEN wildcard certificate is used instead certificate per app
GIVEN there are multilevel domain names in Otomi
WHEN I support wildcard certificate
THEN all core and team apps are on the same domain level
By the same domain level we mean
grafana.<clusterDomainSuffix>
grafana-team-a.<clusterDomainSuffix>
mysvc-team-a.<clusterDomainSuffix>

instead of
grafana.<clusterDomainSuffix>
grafana.team-a.<clusterDomainSuffix>
mysvc.team-a.<clusterDomainSuffix>

Definition of done

[ ] Relevant PRs are merged
[ ] Tested by peer
[ ] Updated documentation reviewed by peer

apps:
    cert-manager:
        useWildcardCert: true|false

If useWildcardCert is set to true then only otomi-wildcard Certificate is going to be issued and shared among all hosts. Example:
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: otomi-wildcard
spec:
  secretName: otomi-wildcard-crt
  issuerRef:
    kind: Issuer
    name: letsencrypt-prod
  commonName: "*.{{$clusterDomainSuffix}}"
  dnsNames:
    - "*.{{$clusterDomainSuffix}}"

Alternatively a user may opt out from issuing the wildcard cert by cert-manager and bring its own trusted wildcard cert
apps:
    cert-manager:
        byoWildcardCert: <cert>

Then Otomi should deploy otomi-wildcard-crt secret to the istio-system namespace.


Cairo shell audio control issues

When I enable Cairo shell it does not allow me to controll my volume from your widget on the top bar are you working on a bug fix for this or is anything possible?

I already did an Issue about this, i think they're already working on this feature.

@OutragedMetro in Cairo Settings > Advanced, is Cairo configured as shell or Windows Explorer? In the next update we are hoping to use the native volume controls when Cairo is running alongside Explorer as shell.

Closing due to lack of response.


(maint) acceptance-fix with() function usage

In the calling_all_functions test we were passing a block to with() with
the wrong number of arguments. This passed in ruby 1.9 due to...
reasons. ruby 1.8 caught this when we ported the test to 3.x.
This change fixes the with() usage.
re: PUP-5378
[skip ci]

Looks good. I did notice an unrelated issue:
ix57icb9ydnhadj.delivery.puppetlabs.net (agent) 10:55:27$ puppet apply --trusted_node_data  --color=false --modulepath /tmp/calling_all_functions.xbdkl8/environments/production/modules/ /tmp/apply_manifest.pp.v1AvjT
  Warning: Unrecognised escape sequence '\w' in file /tmp/apply_manifest.pp.v1AvjT at line 32
  Warning: Unrecognised escape sequence '\1' in file /tmp/apply_manifest.pp.v1AvjT at line 32

Which I think is coming from:
    {:name => :regsubst,         :args => '"Cersei","Cer(\\w)ei","Daenery\\1"',:lambda => nil, :expected => 'Daenerys', :rvalue => true},

I think we don't want to escape the backslash, since it's using outer single quotes, e.g. \w

Actually it looks like it's not enough backslashes, and should be:
    {:name => :regsubst,         :args => '"Cersei","Cer(\\\w)ei","Daenery\\\1"',:lambda => nil, :expected => 'Daenerys', :rvalue => true},


chore: add missing return in message handler

also prevents from replying to other bots, avoiding endless chains when testing the bot

LGTM


Add ability to merge two type definitions

What is the feature you'd like to have?
I would like the ability to merge two type definitions.
Additional Information:
This will enable Sidekick to work more fluidly.

Could you provide a couple examples of ways you'd like to see them merged? I can imagine a lot of conflict cases.

Duplicate of #2594


Is there a way to change the style of the fuzzy completion?

Hi,
is there something like a style file where I can change all the fuzzy completions to look the same.
I've setup a few shortcut commands, using fzf-tmux with a few options and I would like the fuzzy completion to behave just like them.
How can I do this?
Thanks a lot.

$FZF_DEFAULT_OPTS. Does this answer your question?

theoretically yes, but somehow is seems not to work as expected.
I've set the following options:
FZF_DEFAULT_OPTS="-h 20% --multi --reverse"

but it still behaves as before

May this issue be related to the setup I use?
Cygwin with tmux on Windows.

This is a basic question, but did you export the variable?
You may need to restart tmux session after adding the variable to your .bashrc or .zshrc
Unfortunately, -h 20% is an option to fzf-tmux script and you can't put it in $FZF_DEFAULT_OPTS

I would simply define a custom shell function or alias which appends it to fzf-tmux like so

alias fzf-tmux='\fzf-tmux -d 20%'

(Alas, you're on Windows. Then you're running the old Ruby version instead of the new Go version.)

Ok, thanks a lot. It worked after restarting everything. Thanks for your patience and quick response.


add the branch name to output

i also suggest to show the branch name somewhere.
Originally posted by @zzuzhp in https://github.com/ansemjo/version.sh/issues/4#issuecomment-514672963

Afaik, the branch name is always present in the subsituted REFS variable and can be trivially found if we're in a git repository.

always present in the substituted REFS

It appears this assumption is false. The branch name is only included when the exported ref is the tip of a branch. See:
$ git init
Initialized empty Git repository in /tmp/tmp-naughty-yalow/.git/
$ cp .../version.sh .
$ echo 'version.sh export-subst' > .gitattributes
$ git add .
$ git commit -m init
[...]
$ git output HEAD version.sh | grep ^REFS
REFS='HEAD -> master'
$ git tag -a 1.0 -m test
$ git output HEAD version.sh | grep ^REFS
REFS='HEAD -> master, tag: 1.0'
$ git commit --allow-empty -m "$(date)"
[master cc3ae54] Wed 24 Jul 17:18:15 CEST 2019
$ git output HEAD version.sh | grep ^REFS
REFS='HEAD -> master'
$ git output 1.0 version.sh | grep ^REFS
REFS='tag: 1.0'   # <-- no branch name

So we can only use this information if we're working on the tip of a branch. But then it is already used for the version string as a fallback when it is not a tagged commit.
Maybe optionally allow printing the branch seperately and use a fallback value when it can't be parsed?

i use 'symbolic-ref'

Yes, that's for the case of a checked-out repository. But an explicit goal of this script is to work equivalently from a downloaded tar archive and checked-out clone. In the former, it can't be guaranteed that the branch name is included in the substituted strings at all. Thus I cannot guarantee that I can output the correct branch name.


Implement transaction relaying policies

pkg/network/server.go:
// RelayTxn a new transaction to the local node and the connected peers.
// Reference: the method OnRelay in C#: https://github.com/neo-project/neo/blob/master/neo/Network/P2P/LocalNode.cs#L159
func (s *Server) RelayTxn(t *transaction.Transaction) RelayReason {
...
        // TODO: Implement Plugin.CheckPolicy?
        //if (!Plugin.CheckPolicy(transaction))
        // return RelayResultReason.PolicyFail;

Refs. #244.

We're only implementing limited SimplePolicy plugin here, it's necessary for interoperability with C# nodes on mainnet/testnet.


Urgent: If you change the applicationid / packagename, it doesn't work

Hello,
Hope you can help me fast.
If you change the applicationid / packagename, it doesn't work, which means you can't release on playstore where you have to change the package name.
When I try to login after changing, I get the "Event rpcEventLogin - Reason: These login details are not valid. Please check your username and password and try again."
If I change the package names and application id's back to the default, then it works fine.
Please help :-)

My mistake sorry.


Throwing System.ArgumentNullException

This is the bpl file in question: driver.zip
This is how I invoke Symbooglix:
symbooglix driver.bpl --file-logging=0 --entry-points=main --timeout=1200 --max-loop-depth=1

This is the exception I get:
System.ArgumentNullException: Value cannot be null.
Parameter name: key
  at System.ThrowHelper.ThrowArgumentNullException (System.ExceptionArgument argument) [0x00006] in <a07d6bf484a54da2861691df910339b1>:0
  at System.Collections.Generic.Dictionary`2[TKey,TValue].FindEntry (TKey key) [0x00008] in <a07d6bf484a54da2861691df910339b1>:0
  at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x00000] in <a07d6bf484a54da2861691df910339b1>:0
  at Microsoft.Boogie.GraphUtil.Graph`1[Node].Predecessors (Node n) [0x00006] in <693cbe2cdcc8426c908d825c4ff59b0e>:0
  at Microsoft.Boogie.GraphUtil.DomRelation`1[Node].NewComputeDominators () [0x000a8] in <693cbe2cdcc8426c908d825c4ff59b0e>:0
  at Microsoft.Boogie.GraphUtil.DomRelation`1[Node]..ctor (Microsoft.Boogie.GraphUtil.Graph`1[Node] g, Microsoft.Boogie.Block source) [0x00014] in <693cbe2cdcc8426c908d825c4ff59b0e>:0
  at Microsoft.Boogie.GraphUtil.Graph`1[Node].get_DominatorMap () [0x00008] in <693cbe2cdcc8426c908d825c4ff59b0e>:0
  at Microsoft.Boogie.GraphUtil.Graph`1[Node].ComputeReducible (Microsoft.Boogie.GraphUtil.Graph`1[Node] g, Node source) [0x00000] in <693cbe2cdcc8426c908d825c4ff59b0e>:0
  at Microsoft.Boogie.GraphUtil.Graph`1[Node].ComputeLoops () [0x00000] in <693cbe2cdcc8426c908d825c4ff59b0e>:0
  at Symbooglix.ProgramLoopInfo.InitLoopInfo () [0x00022] in <692639236925446fa5df88fd5bc64c13>:0
  at Symbooglix.ProgramLoopInfo..ctor (Microsoft.Boogie.Program p) [0x00018] in <692639236925446fa5df88fd5bc64c13>:0
  at Symbooglix.LimitLoopBoundScheduler.ReceiveExecutor (Symbooglix.Executor executor) [0x0000f] in <692639236925446fa5df88fd5bc64c13>:0
  at Symbooglix.Executor.InternalRun (Microsoft.Boogie.Implementation entryPoint, System.Int32 timeout) [0x000bd] in <692639236925446fa5df88fd5bc64c13>:0
  at Symbooglix.Executor.Run (Microsoft.Boogie.Implementation entryPoint, System.Int32 timeout) [0x0004f] in <692639236925446fa5df88fd5bc64c13>:0
  at SymbooglixDriver.Driver.RealMain (System.String[] args) [0x0059f] in <bdc3582f735c4c9c95912485e1b8fe43>:0
  at SymbooglixDriver.Driver.Main (System.String[] args) [0x0003a] in <bdc3582f735c4c9c95912485e1b8fe43>:0
Exiting with EXCEPTION_RAISED

@delcypher : Have you maybe had a chance to take a peek at this one? Thx!

@zvonimir I had a very quick look and manage to reproduce the failure but I haven't had time to debug it. The crash is actually happening in Boogie code rather than in Symbooglix's code so this might be a bit tricky as I'm not that familiar with some of Boogie's code.

@delcypher : Hey, we are back and stuck on this one. We are trying to use symbooglix on SVCOMP benchmarks with SMACK, and it is failing on most of them due to this particular problem.
Any chance you'll have time to take a look at this any time soon?

@zvonimir I'm a bit busy right now but I should be able to take a look at this on Wednesday.

That works. Thanks @delcypher!

Hey @delcypher. Sorry for bugging you again, but did you have a chance to look into this?
Also, congrats!


Cexplorer bug causing valid pools to be blacklisted from yoroi

Cexplorer bug causing valid pools to be blacklisted from yoroi.
Current example is “ISYG”. They have a valid pledge, which is met (Live: 29,403 ₳ - Declared: 10,000 ₳ - cexplorer is wrongly reporting 93.01 ₳).
ISYG is currently blacklisted from yoroi for “pledge not met” bug in cexplorer:
Please see:
https://github.com/cexplorer/cexplorer.io/issues/38
and
https://github.com/cexplorer/cexplorer.io/issues/39
This is ongoing for months now. Please put some pressure on cexplorer to fix this- or please find a new, functional provider for yoroi’s pool and delegation data.
https://cexplorer.io/pool/pool1398yhldnhm3y7hzmf8c0h8wf4gwyqa2jd9s0vagj8srqyt7jcen

https://rawcardano.app/?pool=ISYG

Thank you for your consideration.

Hey @gusosborne, there is not much we can do, but I'm redirecting internally so our community manager can ping cexplorer folks about it. After we got an answer from them I'll consider it done from our side.

@gusosborne, fixed, tested on all platforms.


Implement Averages/Mode

Generic implementation of mode from a Vec

Here's a slightly more idiomatic approach that takes a generic IntoIterator and doesn't require the clone bound:
use std::collections::HashMap;
use std::hash::Hash;

fn mode<I>(items: I) -> Vec<I::Item>
    where I: IntoIterator,
          I::Item: Hash + Eq
{
    let items = items.into_iter();
    let mut map = HashMap::with_capacity(items.size_hint().0);

    for item in items {
        *map.entry(item).or_insert(0) += 1;
    }

    let max = map.values()                       // -> Iterator<&i32>
                 .cloned()                       // -> Iterator<i32>
                 .max()                          // -> Option<i32>
                 .unwrap_or(0 /* No Entries */); // -> i32

    map.into_iter()                              // -> Iterator<(I::Item, i32)>
       .filter(|&(_, v)| v == max)
       .map(|(k, _)| k)                          // -> Iterator<I::Item>
       .collect()                                // -> Vec<I::Item>
}

(Sorry, I'm not trying to scoop you. I just did this at the same time and didn't want to just throw away my code).

@Stebalien No worries! The more the merrier! :)
This gives another view into how to do the function with the HashMap functions rather than a somewhat manual approach. Yours has a cleaner look than mine to me.  I'm still fairly new with Rust, so just taking a stab at some easier stuff.

@Veratil @Stebalien Thanks to both of you! Which one should we take? :)

I think it would be beneficial to have both actually, @Stebalien's as primary though (his is eloquent and beautiful to me). Having mine would be good to show an alternative way using a T: Clone + Hash + Eq rather than a where I: IntoIterator, I::Item: Hash + Eq.
Versatility is a grand way to example the power of a language!

We like to try to come to a consensus! :)
@Stebalien feel free to open a PR and reference this.
@Veratil can you be the reviewer and give it a :+1:, then I'll merge?

@Stebalien Put a few more comments about what each chained function does, too. I understand the -> Iterator<&i32>, but not everyone might, and giving a more verbose description I believe would help follow better.

Done: #540

Closing in preference of #540.

Thanks you two. :)


Integrated Auth0 service

Integrated Auth0, now the user can login or signup at Auth0 page.
Add a popup for login or signup, login/logout button on the header.
Added user profile page.
Added user data to redux store.
Integrated with user history api to save the field user select in Location page. (Only the last selected point or polygon will be saved)

can you only show one modal at a time? i don't like the overlapping modals

also, if i change my location the zone dropdown isn't updating properly anymore. ex choose NC and then move the marker down towards Wilmington. it should change to zone 8a but is showing an empty dropdown

could you also add a text box for field name and then save that via the label in the api?


how to use use keys as english language ?

I had an existing project (in English).
To make it available in german I kept english labels as translation keys and added a new german translation files.
//Example
<span translate>First name</span>

Problem :  Is their a way to tell ngx-translate to use keys for english language instead of defining each time a redundant english file that contains key=value.

You could just use 'empty' translations for English (see i18n/en.json in my sample).
Per default the key is shown if the translation is not found.
Example: https://plnkr.co/edit/zvfGyIAv7dHIqUhz6eqO?p=preview

great TY :)


Grouping key selection for aggregating subqueries

CIR-2017-219
Grouping key selection for aggregating subqueries
Introduction
openCypher provides way to express aggregation queries by an implicit grouping key, and the Neo4j 3.1 documentation tells:

RETURN n, count(*)
We have two return expressions: n, and count(*). The first, n, is not an aggregate function, and so it will be the grouping key. The latter, count(*) is an aggregate expression.

As long as aggregate and non-aggregate expressions are clearly separated in the RETURN/WITH expression list, i.e. each comma-separated expression is either an aggregate or a non-aggregate expression, the situation seems clear. We have seen an example demonstrating the problem, and a proposed solution (#188, #218) is to force clear separation of aggregate and non-aggregate expressions.
In this CIR, I'd like to propose a solution that fits in the current syntax and it's semantics is still clear.
Options

grouping key is the tuple built from all variables (node, relationship, their properties or variables chained from previous subquery) that appear outside of aggregate functions of a particular WITH/RETURN clause
each item of the expression list in WITH/RETURN are forced to contain either (i) no aggregate function or a (ii) single aggregate function at the outermost level (this is the approach in #188, #218). The grouping key is the tuple built from items of type (i)

Discussion
Neither option 1 nor option 2 restricts the expressiveness of the language as the resultset of either approach can be expressed using the other approach by introducing subqueries.
Option 1: group by variables that appear outside of aggregate functions
The most notable problem with this approach is that it would change behaviour of Neo4j even when aggregating and non-aggregating return items are clearly separated.
On the other hand, grouping on the variables, i.e. the basic building blocks of an expression seems to be flexible yet still clear way in case of a complex expression.
Variables can stand for:

nodes
relationships
properties of nodes or relationships
expressions chained from previous subqueries

Option 2: group by expressions that has no aggregation
The most obvious benefit of this approach is that Neo4j currently works this way if each return item is either aggregating or non-aggregating.
However, counter-intuitive results come if mixed. Posing restrictions on creating complex by mixing aggregating and non-aggregating expressions is a safety net for beginners, but cumbersome for more complex queries.
Examples
Sample data
We initialize our database of 10 nodes and no relationships. 5 of them has a single label Foo, the other 5 has Bar, both partition having a single node for weights of -2, -1, 0, 1, 2.
unwind range(1, 5) as i
create (:Foo {id: i, weight: i-3})
;
unwind range(1, 5) as i
create (:Bar {id: 10+i, weight: i-3})
;

match (n)
return labels(n), n
order by n.id
;

Which leads to the dataset:
╒═══════════╤═════════════════════════╕
│"labels(n)"│"n"                      │
╞═══════════╪═════════════════════════╡
│["Foo"]    │{"weight":"-2","id":"1"} │
├───────────┼─────────────────────────┤
│["Foo"]    │{"weight":"-1","id":"2"} │
├───────────┼─────────────────────────┤
│["Foo"]    │{"weight":"0","id":"3"}  │
├───────────┼─────────────────────────┤
│["Foo"]    │{"weight":"1","id":"4"}  │
├───────────┼─────────────────────────┤
│["Foo"]    │{"weight":"2","id":"5"}  │
├───────────┼─────────────────────────┤
│["Bar"]    │{"weight":"-2","id":"11"}│
├───────────┼─────────────────────────┤
│["Bar"]    │{"weight":"-1","id":"12"}│
├───────────┼─────────────────────────┤
│["Bar"]    │{"weight":"0","id":"13"} │
├───────────┼─────────────────────────┤
│["Bar"]    │{"weight":"1","id":"14"} │
├───────────┼─────────────────────────┤
│["Bar"]    │{"weight":"2","id":"15"} │
└───────────┴─────────────────────────┘

Query1a: retrieving a variable and an aggregate: a clear situation
match (n)
return n.weight, count(*)

Both approaces should return the same as the non-aggregating return item is a single variable:
╒══════════╤══════════╕
│"n.weight"│"count(*)"│
╞══════════╪══════════╡
│"2"       │"2"       │
├──────────┼──────────┤
│"1"       │"2"       │
├──────────┼──────────┤
│"-2"      │"2"       │
├──────────┼──────────┤
│"0"       │"2"       │
├──────────┼──────────┤
│"-1"      │"2"       │
└──────────┴──────────┘

Query1b: retrieving a variable and a computation based on aggregate
match (n)
return n.weight as w, 2*count(*) as c2

This is still clear, however, using option 2, we have to rewrite this as:
match (n)
with n.weight as w, count(*) as c
return w, 2*c as c2

Query2: aggregating and non-aggregating return items separated, retrieving result of non-aggregating calculation
match (n)
return abs(n.weight) as abs, count(*) as count

Option 2
╒═════╤═══════╕
│"abs"│"count"│
╞═════╪═══════╡
│"2"  │"4"    │
├─────┼───────┤
│"1"  │"4"    │
├─────┼───────┤
│"0"  │"2"    │
└─────┴───────┘

When using Option 1, this result can be expressed like
match (n)
with abs(n.weight) as abs, n
return abs, count(*) as count

Option 1
╒═════╤═══════╕
│"abs"│"count"│
╞═════╪═══════╡
│"2"  │"2"    │
├─────┼───────┤
│"1"  │"2"    │
├─────┼───────┤
│"2"  │"2"    │
├─────┼───────┤
│"0"  │"2"    │
├─────┼───────┤
│"1"  │"2"    │
└─────┴───────┘

When using semantics of Option 2, this result can be achieved like
match (n)
with n.weight as w, count(*) as c
return abs(w) as abs, c as count

Query 3: returning complex, single item
match (n: Foo), (m:Bar)
where n.weight = - m.weight
return n.weight+m.weight+count(*) as expr
     , collect(n) as nc, collect(m) as mc

Option 2
Can't handle such a query as non-aggregating and aggregating expressions are mixed in 1st return item.
Option 1
Option 1 should return:
╒══════╤══════════════════════════╤═══════════════════════════╕
│"expr"│"nc"                      │"mc"                       │
╞══════╪══════════════════════════╪═══════════════════════════╡
│"1"   │[{"weight":"2","id":"5"}] │[{"weight":"-2","id":"11"}]│
├──────┼──────────────────────────┼───────────────────────────┤
│"1"   │[{"weight":"1","id":"4"}] │[{"weight":"-1","id":"12"}]│
├──────┼──────────────────────────┼───────────────────────────┤
│"1"   │[{"weight":"-1","id":"2"}]│[{"weight":"1","id":"14"}] │
├──────┼──────────────────────────┼───────────────────────────┤
│"1"   │[{"weight":"0","id":"3"}] │[{"weight":"0","id":"13"}] │
├──────┼──────────────────────────┼───────────────────────────┤
│"1"   │[{"weight":"-2","id":"1"}]│[{"weight":"2","id":"15"}] │
└──────┴──────────────────────────┴───────────────────────────┘

This result expressed when using syntax and semantics of option 2:
match (n: Foo), (m:Bar)
where n.weight = - m.weight
with n.weight as nw, m.weight as mw
   , count(*) as c
   , collect(n) as nc, collect(m) as mc
return nw+mw+c as expr, nc, mc

Option 3
The solution in the option lies in replacing aggregation function call by the neutral element of the operator which binds aggregation.  Replacement should be applied in mixed (aggregation and non-aggregation) expression only and if possible only.  E.G. in the following expression:

                      e1 + count(*) + e2 * count(*) + e3

for designation of aggregation key aggregation function call should be replaced in following
way:

                       e1 + 0 + e2 * 1 + e3

and that expression becomes an aggregation key component.
In above example aggregation function call bound by arithmetic "+" was replaced by "0" (addition neutral element) and aggregation function call bound by arithmetic "*" was replaced by "1"  (multiplication neutral element).
The general rule, for which expression replacement is possible is as the following:
the shape of groups for evaluated grouping key is independent of the value of constant we place for
aggregation function call. For example, let's consider expression

                      e1 + avg(e2)

where e1 multiset of values is {1,1,1,2,2,3}, what generates 3 groups of size 3, 2 and 1. Let's notice that
shape of groups does not depend on what constant avg(e2)  will be replaced by. E.g.: if we replaced avg(e2) by constant 10, multiset {11,11,11,12,12,13} determine identical set of 3 groups of sizes 3, 2 and 1.The example shows situation the replacement is possible.
Let's now consider expression:

                      list[e1..min(e2)]

In this case, value of constant that would replace min(e2) might influence evaluated value of expression and shape of groups, so we want to deny using such constructions with message „grouping expression is not independent of aggregating functions”.
So, the general rule of the possibility of  replacement (and subsequent designation of aggregation key) could be formulated as follows:
Replacement of aggregation function call by a constant is possible if  selection of the constant value does not change groups selected by the constructed key.
Existing examples
For such database:

create (:L {a:1,b:2,c:3})
create (:L {a:2,b:3,c:1})
create (:L {a:3,b:1,c:2})

there are two following (basically equivalent) queries that give two different results.

match (x:L) return x.a + count()  + x.b + count() + x.c as e;

match (x:L) return x.a + x.b + x.c + count() + count() as e;

When the option 3 would be applied result of first changes and both queries would return:
+----------------- ----+
| e                    |
+------- --------------+
| 12                   |
+----------------------+

Following queries results are the same (and intuitive) as in current neo4j implementation:

match (n)
return n.weight, count(*)

match (n)
return n.weight as w, 2count() as c2

match (n)
return abs(n.weight) as abs, count(*) as count

In the following query, replacement mechanism would be applied with full power and originally query

match (n: Foo), (m:Bar)
where n.weight = - m.weight
return n.weight+m.weight+count(*) as expr
, collect(n) as nc, collect(m) as mc

would have the same semantic as transformed ("explicit" group by) version:

match (n: Foo), (m:Bar)
where n.weight = - m.weight
with n.weight + m.weight as as nwmw
, count(*) as c
, collect(n) as nc,
collect(m) as mc
return nwmw + c as expr, nc, mc

@Mats-SX how to proceed, i.e. how to decide on the aggregation semantics/grouping key selection for openCypher?

@jmarton That is for the oCIG to decide, which will have its first meeting in June. A schedule will be broadcasted shortly (website, google groups, Slack channels); you are of course all invited.
The exact format of the decision-making process within the meeting is not set in stone. I imagine something similar to having one or several propositions, followed by a discussion, and eventually the reaching of a consensual decision.

@jmarton & @JanekPo Please be advised that this CIR (and others in the general area of aggregation and grouping) will be discussed at the first oCIG meeting, as detailed here: http://www.opencypher.org/ocig. In light of this, please can the two of you be ready to present - if necessary - this CIR and your options at the meeting?
Thanks!
( @JanekPo I have added your name to the agenda, but the build process is very delayed at the moment, which is why your name is not published at the time of writing)

This topic came up at Neo4j recently, and we had a discussion about it in our internal Cypher group.
We concluded that the Neo4j opinon on the matter is that expressions containing an aggregation should not be allowed. Instead queries should clearly separate the grouping key from the aggregation.
We thus propose that the example queries above should be written as follows:
Query 1:
MATCH (n)
RETURN n.weight, count(*)

Here the grouping key is n.weight, and the resulting count will be the number of nodes with the same weight for each distinct weight in the graph:
╒══════════╤══════════╕
│"n.weight"│"count(*)"│
╞══════════╪══════════╡
│"2"       │"2"       │
├──────────┼──────────┤
│"1"       │"2"       │
├──────────┼──────────┤
│"-2"      │"2"       │
├──────────┼──────────┤
│"0"       │"2"       │
├──────────┼──────────┤
│"-1"      │"2"       │
└──────────┴──────────┘

Query 2:
MATCH (n)
RETURN abs(n.weight) AS abs, count(*) AS count

Here the grouping key is abs(n.weight), and the resulting count will be the number of nodes with the same absolute value for weight for each distinct absolute value of weight in the graph:
╒═════╤═══════╕
│"abs"│"count"│
╞═════╪═══════╡
│"2"  │"4"    │
├─────┼───────┤
│"1"  │"4"    │
├─────┼───────┤
│"0"  │"2"    │
└─────┴───────┘

Query 3:
Variant a:
MATCH (n: Foo), (m:Bar)
WHERE n.weight = - m.weight
WITH n.weight + m.weight AS combined_weight, count(*) AS c, collect(n) AS nc, collect(m) AS mc
RETURN combined_weight + c AS expr, nc, mc

Here the grouping key is n.weight + m.weight, and the resulting count will be the number of node pairs where the combined weight sums up to the same value (which will be zero because of the WHERE):
╒══════╤══════╤══════╕
│"expr"│ "nc" │ "mc" │
╞══════╪══════╪══════╡
│ 5    │ ...  │ ...  │
└──────┴──────┴──────┘

Variant b:
MATCH (n: Foo), (m:Bar)
WHERE n.weight = - m.weight
WITH n.weight AS nw, m.weight AS mw, count(*) AS c, collect(n) AS nc, collect(m) AS mc
RETURN nw + mw + c AS expr, nc, mc

Here the grouping key is n.weight, m.weight, and the resulting count will be the number of node pairs where the tuple of weights is the same:
╒══════╤══════════════════════════╤═══════════════════════════╕
│"expr"│"nc"                      │"mc"                       │
╞══════╪══════════════════════════╪═══════════════════════════╡
│ 1    │[{"weight":"2","id":"5"}] │[{"weight":"-2","id":"11"}]│
├──────┼──────────────────────────┼───────────────────────────┤
│ 1    │[{"weight":"1","id":"4"}] │[{"weight":"-1","id":"12"}]│
├──────┼──────────────────────────┼───────────────────────────┤
│ 1    │[{"weight":"-1","id":"2"}]│[{"weight":"1","id":"14"}] │
├──────┼──────────────────────────┼───────────────────────────┤
│ 1    │[{"weight":"0","id":"3"}] │[{"weight":"0","id":"13"}] │
├──────┼──────────────────────────┼───────────────────────────┤
│ 1    │[{"weight":"-2","id":"1"}]│[{"weight":"2","id":"15"}] │
└──────┴──────────────────────────┴───────────────────────────┘

This topic came up at Neo4j recently, and we had a discussion about it in our internal Cypher group.
We concluded that the Neo4j opinon on the matter is that expressions containing an aggregation should not be allowed. Instead queries should clearly separate the grouping key from the aggregation.
We thus propose that the example queries above should be written as follows:
Query 1:
MATCH (n)
RETURN n.weight, count(*)

Here the grouping key is n.weight, and the resulting count will be the number of nodes with the same weight for each distinct weight in the graph:
╒══════════╤══════════╕
│"n.weight"│"count(*)"│
╞══════════╪══════════╡
│"2"       │"2"       │
├──────────┼──────────┤
│"1"       │"2"       │
├──────────┼──────────┤
│"-2"      │"2"       │
├──────────┼──────────┤
│"0"       │"2"       │
├──────────┼──────────┤
│"-1"      │"2"       │
└──────────┴──────────┘

Query 2:
MATCH (n)
RETURN abs(n.weight) AS abs, count(*) AS count

Here the grouping key is abs(n.weight), and the resulting count will be the number of nodes with the same absolute value for weight for each distinct absolute value of weight in the graph:
╒═════╤═══════╕
│"abs"│"count"│
╞═════╪═══════╡
│"2"  │"4"    │
├─────┼───────┤
│"1"  │"4"    │
├─────┼───────┤
│"0"  │"2"    │
└─────┴───────┘

Query 3:
Variant a:
MATCH (n: Foo), (m:Bar)
WHERE n.weight = - m.weight
WITH n.weight + m.weight AS combined_weight, count(*) AS c, collect(n) AS nc, collect(m) AS mc
RETURN combined_weight + c AS expr, nc, mc

Here the grouping key is n.weight + m.weight, and the resulting count will be the number of node pairs where the combined weight sums up to the same value (which will be zero because of the WHERE):
╒══════╤══════╤══════╕
│"expr"│ "nc" │ "mc" │
╞══════╪══════╪══════╡
│ 5    │ ...  │ ...  │
└──────┴──────┴──────┘

Variant b:
MATCH (n: Foo), (m:Bar)
WHERE n.weight = - m.weight
WITH n.weight AS nw, m.weight AS mw, count(*) AS c, collect(n) AS nc, collect(m) AS mc
RETURN nw + mw + c AS expr, nc, mc

Here the grouping key is n.weight, m.weight, and the resulting count will be the number of node pairs where the tuple of weights is the same:
╒══════╤══════════════════════════╤═══════════════════════════╕
│"expr"│"nc"                      │"mc"                       │
╞══════╪══════════════════════════╪═══════════════════════════╡
│ 1    │[{"weight":"2","id":"5"}] │[{"weight":"-2","id":"11"}]│
├──────┼──────────────────────────┼───────────────────────────┤
│ 1    │[{"weight":"1","id":"4"}] │[{"weight":"-1","id":"12"}]│
├──────┼──────────────────────────┼───────────────────────────┤
│ 1    │[{"weight":"-1","id":"2"}]│[{"weight":"1","id":"14"}] │
├──────┼──────────────────────────┼───────────────────────────┤
│ 1    │[{"weight":"0","id":"3"}] │[{"weight":"0","id":"13"}] │
├──────┼──────────────────────────┼───────────────────────────┤
│ 1    │[{"weight":"-2","id":"1"}]│[{"weight":"2","id":"15"}] │
└──────┴──────────────────────────┴───────────────────────────┘

We have published a paper on it in 2019: https://dl.acm.org/doi/10.1145/3315507.3330196
I was sure there is an open access to the paper, but it seems it's not.
Please let me know if anyone is interested in full version.

We have published a paper on it in 2019: https://dl.acm.org/doi/10.1145/3315507.3330196
I was sure there is an open access to the paper, but it seems it's not.
Please let me know if anyone is interested in full version.

@JanekPo I would be glad to receive a copy of the full paper. Are you okay with attaching a copy in a comment to this thread? Otherwise you can find my email in my Github profile.

@JanekPo I would be glad to receive a copy of the full paper. Are you okay with attaching a copy in a comment to this thread? Otherwise you can find my email in my Github profile.


Add rainbow-mode demo

This MR updates the readme file to demonstrate how it's possible to add support for rainbow-mode.
Feel free to rework the MR / incorporate it in a different manner.

Thank you! I'm going to make some minor fixes before merge, but otherwise a good job!


ignore intel VIRTUAL[1-9] outputs

When I try to test it, this happens:
./mons.sh: line 86: fg: no job control
Appears on master branch, so not a relevant problem.


Support a flag to override the target and logs directories on the CLI

Describe the feature
Support --logs-path and --target-path in all dbt invocations (including dbt rpc).
These flags will override the destination path for the logs/ and target/ directories, respectively.
I think we should add this as a subcommand to dbt itself, eg:
$ dbt --logs-path log-dir --target-path target-dir

Hey i'd be happy to pick this up, could you point me in the right direction ?

Hi @gh4n, that would be awesome! There are a couple changes you'd have to make:

In core/dbt/main.py, add --target-path and --logs-path to main.py, where we add the other arguments to the root command. It should default to None.
In core/dbt/config/runtime.py, add something to the from_parts classmethod, probably around here, that sets the target_path and log_path parameters to cls to args.target_path/args.log_path if they're set, and falls back to the value from project if not.
Unit tests that make sure RuntimeConfig.from_parts behaves appropriately given the various permutations of logs/target path being set or not (I don't see any need for an integration test about this).

That'll probably break a number of existing unit tests as well: I know you'll have to update test/unit/utils.py to add those parameters to the Obj class, but I have a feeling there's at least one other place we create a fake args object as well.

Cool, I've made the fix, will make some changes to the unit tests tonight and raise a PR soon.

@gh4n is this fix live in any version? Couldn't find it in documentation and ticket is open.


Replace jenssegers/model dependency

Detailed description
Replace jenssegers/model dependency.
Context
jenssegers/model doesn't receive much love from its maintainer. Besides, it requires illuminate/support and efforts to remove this dependency are ignored; https://github.com/jenssegers/model/pull/37
Possible implementation
Pull the class into this package and maintain it ourselves.

As talked about the current PR removed the dependency, but before a 2.0 release we need to clean up the separation of Model and Item. Seems like Model should be removed.


Suggestions for improvements to the Apache dubbo plugin

1、https://github.com/dromara/soul/blob/54281b06669c74fb994a72e0e71474c4b5030399/soul-plugin/soul-plugin-apache-dubbo/src/main/java/org/dromara/soul/plugin/apache/dubbo/cache/ApplicationConfigCache.java#L157
ApplicationModel.getConfigManager(). only support in 2.7.5+, If we need to be compatible with lower versions, we should use
reference.setApplication(applicationConfig);
2、Avoid always using reflection to get the invoke URL. (Maybe cache it would be better)
https://github.com/dromara/soul/blob/54281b06669c74fb994a72e0e71474c4b5030399/soul-plugin/soul-plugin-apache-dubbo/src/main/java/org/dromara/soul/plugin/apache/dubbo/proxy/ApacheDubboProxyService.java#L112

I'll see later

If it's possible, I want to try to fix this problem

I'll see later

If it's possible, I want to try to fix this problem

I'll see later

fine, you can think about how to optimize the no.2 question


Add option --no-break-on-existing

Template
Before submitting a pull request make sure you have:

[x] At least skimmed through contributing guidelines including yt-dlp coding conventions
[x] Searched the bugtracker for similar pull requests
[x] Checked the code with flake8 and ran relevant tests

In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check all of the following options that apply:

[x] I am the original author of this code and I am willing to release it under Unlicense

What is the purpose of your pull request?

[x] Core bug fix/improvement

What is the purpose of this in comparison with --no-download-archive?

Ah, okay, so you can re-download videos already existing in the archive file..
Thank you for the explanation, appreciate it!

@Hrxn no, it will not force downloading of already-recorded videos.
Let's say you pass a playlist URL with 100 videos, and you have only the 50th video in the playlist already downloaded and recorded in the archive.
--download-archive --break-on-existing will download the first 49 videos, and then break upon reaching the 50th video since it is already recorded, and no further videos in the playlist will be downloaded.
--download-archive --no-break-on-existing wil ldownload the first 49 videos, skip the 50th video, and continue downloading the rest of the playlist

Ah, gotcha. Makes more sense.
Good that --no-break-on-existing is the default, I think this is more intuitive.


[D&D 3.5] FIX Combat Expertise double calculation

Submission Checklist
Required

[x] The pull request title clearly contains the name of the sheet I am editing.
[x] The pull request title clearly states the type of change I am submitting (New Sheet/New Feature/Bugfix/etc.).
[x] The pull request makes changes to files in only one sub-folder.
[x] The pull request does not contain changes to any json files in the translations folder (translation.json is permitted)

Changes / Description

Character Sheet Info Roll20 Internal Use only.


Helm smoke tests for controller 2.x

Run controller 2.x builds through standard Helm chart CI and UAT. Document and fix issues as encountered.

So far:

[x] Initial tests failed because the controller did not contact the Kong admin API correctly. This was likely due to it not honoring the automatically set API address, and appears clear with a build based off #1347
[ ] UAT in GKE test environment failed with time="2021-05-25T17:51:58Z" level=error msg="unable to start proxy cache server" error="HTTP status 404 (message: \"Not found\")" logger=setup Error: HTTP status 404 (message: "Not found"). Requires further investigation.
[ ] Helm CI failed with  time="2021-05-25T17:47:24Z" level=error msg="if kind is a CRD, it should be installed before calling Start" error="no matches for kind \"Ingress\" in version \"networking.k8s.io/v1\"" kind="{\"Group\":\"networking.k8s.io\",\"Kind\":\"Ingress\"}" logger=controller-runtime.source. This probably requires a chart-testing update to bump the KIND version it uses. Otherwise we disable the v1 controller (not desirable).

Proxy cache server failure was due to invalid Kong admin API request. On the proxy container, I saw:
<IP_ADDRESS> - - [25/May/2021:18:03:39 +0000] "HEAD /workspaces/default HTTP/1.1" 200 0 "-" "Go-http-client/1.1"
<IP_ADDRESS> - - [25/May/2021:18:03:39 +0000] "GET /default/ HTTP/1.1" 404 23 "-" "Go-http-client/1.1"

This apparently happens if you explicitly set --kong-workspace=default. Need to confirm if similar with other workspaces--we should be getting /workspace/kong in those cases instead. No such issue if un-set.

https://github.com/Kong/charts/commit/b94095e90df4227b1083444cae1791176961b61a is the result of kustomize build in railgun/config/rbac with names and their references templated to include the release fullname, using the generated service account as the subject rather than the system/default default.
Metrics service should probably be elsewhere? Not sure exactly how we use it--I believe that's for the metrics RBAC proxy, but need to confirm where that's tied in. Not immediately seeing references elsewhere in Railgun config to the name.
That appears to clear most permissions errors, though still getting these:
time="2021-05-25T20:16:57Z" level=error msg="Reconciler error" error="endpoints \"kube-controller-manager\" is forbidden: User \"system:serviceaccount:kong-glv24qz24q:kong-glv24qz24q-kong\" cannot update resource \"endpoints\" in API group \"\" in the namespace \"kube-system\"" logger=controller-runtime.manager.controller.endpoints name=kube-controller-manager namespace=kube-system reconciler group= reconciler kind=Endpoints

Not sure what's up with that--it looks like we should have those per https://github.com/Kong/charts/commit/b94095e90df4227b1083444cae1791176961b61a#diff-2ad50c34fd7f9652831d3d782595acbb7ef5f4db6d78e7f2dd9649fd2a12a404R398-R409. API group (in the error) looks wrong though?

Explicitly adding the empty group to endpoints and services appears to fix this? That makes sense, but it's unclear to me why we were trying to operate on the no-group versions then. Prior to this change, only the v1 variants were present:
$ kubectl auth can-i --as=system:serviceaccount:helmgress:dancing-cow-kong --list=true | grep endpoints
warning: the list may be incomplete: webhook authorizer does not support user rule resolution
endpoints                                                []                                    []                       [create delete get list patch update watch]
endpoints.v1                                             []                                    []                       [create delete get list patch update watch]
endpoints/status                                         []                                    []                       [get patch update]
endpoints.v1/status                                      []                                    []                       [get patch update]
endpoints/finalizers                                     []                                    []                       [update]
endpoints.v1/finalizers

This goes a bit beyond my understanding of K8S API version and RBAC interactions, but it appears we have our generated RBAC stuff a bit off. The version is not the group, and that needs to be indicated explicitly for things in the empty group:
$ kubectl auth can-i get services.v1 --as=system:serviceaccount:helmgress:dancing-cow-kong
Warning: the server doesn't have a resource type 'services' in group 'v1'
no
$ kubectl auth can-i get services --as=system:serviceaccount:helmgress:dancing-cow-kong
yes
$ kubectl auth can-i get services.""/v1 --as=system:serviceaccount:helmgress:dancing-cow-kong
yes
$ kubectl auth can-i get ingresses.networking.k8s.io/v1 --as=system:serviceaccount:helmgress:dancing-cow-kong
yes

$ kubectl api-resources | grep services
services                          svc                             v1                                          true         Service
$ kubectl api-resources | grep ingres
ingresses                         ing                             networking.k8s.io/v1                        true         Ingress

So https://github.com/Kong/kubernetes-ingress-controller/blob/6ef21e594fa71e0b7d5471797405d10221353f2e/railgun/controllers/configuration/zz_generated_controllers.go#L124-L126 appears wrong, but that's generated code and we shouldn't modify it directly, correct? Not sure what the source of truth for that and/or the generated RBAC resources is.

Found two other significant gaps in functionality during the course of UAT. These do not relate to Helm, but they are significant and need to be addressed soonish:
https://github.com/Kong/kubernetes-ingress-controller/issues/1354
https://github.com/Kong/kubernetes-ingress-controller/issues/1355
Suspect we may have more gaps in things that aren't currently covered in the new integration test suite.

#1356 is now resolved. We have a follow-up to put https://github.com/Kong/charts/pull/364 in place before the alpha is readily available to users, but that will be handled as part of https://github.com/Kong/kubernetes-ingress-controller/issues/1256


Cannot lifecycle ignore write_capacity and read_capacity

Cannot set the lifecycle field for the underlying aws_dynamodb_table. When the table has scaled up, running terraform apply tries to reset the write_capacity to its base value

Duplicate of https://github.com/terraform-aws-modules/terraform-aws-dynamodb-table/issues/14


Leverage FastAPI/Pydantic features to avoid the from_db pattern

Context
Across the codebase, we adopted a pattern where we implement dedicated classmethod from_db to build a Pydantic object from an SQLAlchemy one. For example:
https://github.com/polarsource/polar/blob/844c1add10e4b0b887a8ae90152691bf8de2cd4d/server/polar/organization/schemas.py#L34-L50
And then:
https://github.com/polarsource/polar/blob/844c1add10e4b0b887a8ae90152691bf8de2cd4d/server/polar/organization/endpoints.py#L102-L105
While working well, it's a bit verbose and we miss the purpose of Pydantic which is precisely to take input data in any form and transform it to a valid object compliant with our schema. Basically, we're doing by hand what Pydantic can make automatically.
Proposal
If we consider the example above, the same behavior could by achieved like this:
# polar/kit/schemas.py

class Schema(BaseModel):
    class Config:
        orm_mode = True  # Enable Pydantic to work with arbitrary ORM objects, like SQLAlchemy
        json_dumps = json.dumps
        json_loads = json.loads
        json_encoders = {SecretStr: lambda v: v.get_secret_value() if v else None}

# polar/organization/schemas.py

class Organization(Schema):
    id: UUID
    platform: Platforms
    name: str
    avatar_url: str

    bio: str | None
    pretty_name: str | None
    company: str | None
    blog: str | None
    location: str | None
    email: str | None
    twitter_username: str | None

    pledge_minimum_amount: int
    pledge_badge_show_amount: bool

# polar/organization/endpoints.py

@router.get(
    "/organizations/lookup",
    response_model=OrganizationSchema,
    tags=[Tags.PUBLIC],
    description="Lookup organization. Like search but returns at only one organization.",  # noqa: E501
    summary="Lookup organization (Public API)",
    status_code=200,
    responses={404: {}},
)
async def lookup(
    platform: Platforms | None = None,
    organization_name: str | None = None,
    session: AsyncSession = Depends(get_db_session),
) -> Organization:
    # Search by platform and organization name.
    # Currently the only way to search
    if platform and organization_name:
        org = await organization.get_by_name(session, platform, organization_name)
        if org:
            return org

    raise HTTPException(
        status_code=404,
        detail="Organization not found ",
    )

The key thing here is that we can directly return the SQLAlchemy object from our endpoint. Thanks to response_model, FastAPI will automatically feed it to Pydantic that will make the conversion.
Of course, this is a simple case where the schema exactly maps the field of SQLAlchemy. For more advanced cases where we change the name of a field, or if we build slightly different schemas, we can leverage Pydantic features like aliases or validators.
The only drawback with this approach is that it's possible that we may trigger ValidationError while generating our API response, if we have a mismatch between our schema and the underlying data. It's true but that's something that should be considered a bug and verified by unit tests.

All in all, I think it could be a good improvement of the code base, that would be more idiomatic regarding FastAPI and Pydantic patterns.

Upvote & Fund

We're using Polar.sh so you can upvote and help fund this issue.
We receive the funding once the issue is completed & confirmed by you.
Thank you in advance for helping prioritize & fund our backlog :^)

Saying that this pattern "defeats the purpose of Pydantic" is a bit harsh. More like, we're not always utilising Pydantic in the best possible way. :)
We do use the pattern that you've suggested above in a few places, but have slowly moved away from it more and more, and I might be the one to blame there for a lack of understanding of how we can use Pydantic. But on the other hand, it's just a mapper, nothing complicated, and in this way we do get static type analysis, so there are some pros to it as well. :)
With Pydantics capabilities, it feels like it starts easy, until it suddenly isn't, where you need to have some fallback or want to have some extra logic before creating the response object. For example in this scenario, can you do this in Pydantic, and in a way that feels intuitive and as easy to read as this is? What would it look like?
https://github.com/polarsource/polar/blob/844c1add10e4b0b887a8ae90152691bf8de2cd4d/server/polar/pledge/schemas.py#L156-L172
By scanning our codebase, it seems to be around 50/50 between mappers that are as simple as the one you linked above and mappers like the one for pledges that have some sort of custom logic in it.

Saying that this pattern "defeats the purpose of Pydantic" is a bit harsh. More like, we're not always utilising Pydantic in the best possible way. :)

Sorry if it felt that way, my intention is never to put blame on anyone's work. Just wanted to open up the discussion. I've edited the issue title :)

With Pydantics capabilities, it feels like it starts easy, until it suddenly isn't, where you need to have some fallback or want to have some extra logic before creating the response object. For example in this scenario, can you do this in Pydantic, and in a way that feels intuitive and as easy to read as this is? What would it look like?

For those cases, we could have @property on the SQLAlchemy objects. Pseudo-code:
from dataclasses import dataclass

from pydantic import BaseModel

@dataclass
class User:
    name: str

@dataclass
class Organization:
    display_name: str

    @property
    def name(self) -> str:
        return self.display_name

@dataclass
class Pledge:
    id: int
    user: User | None
    organization: Organization | None

    @property
    def pledger(self) -> User | Organization:
        if self.organization is not None:
            return self.organization
        elif self.user is not None:
            return self.user
        raise Exception("Meh")

class Pledger(BaseModel):
    name: str

    class Config:
        orm_mode = True

class PledgeSchema(BaseModel):
    id: int
    pledger: Pledger

    class Config:
        orm_mode = True

u = User(name="Foo")
o = Organization(display_name="Orga")
p_u = Pledge(id=1, user=u, organization=None)
p_o = Pledge(id=2, user=None, organization=o)

p_u_s = PledgeSchema.from_orm(p_u)
p_o_s = PledgeSchema.from_orm(p_o)

print(p_u_s)
print(p_o_s)

This case is indeed a bit tricky 🙃


Chore/bump 0.10.9

This PR bumps the trader to<EMAIL_ADDRESS>

Actually we need to update the README to only require
poetry shell && poetry install
@Adamantios


Outdoor comfor tab

sometimes colors look funny (image below)
The funny colors are caused by the wrong range in the color scale, it should be from -5 (extreme cold stress) to +4 (extreme heat stress).
FIX: ensure that the scale of this graph stays always absolute (-5 to +4) even when the "Local Value Ranges" toggle is selected

Add better naming to the axis and to the hovertemplate as in the colab notebook (image below)

The fnny colors are caused by the wrong range in the color scale, it should be from -5 (extreme cold stress) to +4 (extreme heat stress)

@giobetti I cannot understand if this is still an issue. The labels are not changed and I have not understood whether you will fix these issues in Colab first and then I will implement them in Clima or whether I should fix them straight away?

@FedericoTartarini
sorry if it is unclear, it is probably because it is two issues, really.
one issue is the labels, that has been fixed.
the second issue is the difference in colors for the Thermal Stress cathegories when the scale is set to local.
for example this is a graph for oakland
global scale >> OK

Locan scale >> graphs colors are wrong

I think it should be eassy to fix this in dash directly. Essentially the graph should always be the same (global scale) regrdless of the radio button

fixed 85e15f8315e1a00a7685bb6873dc184673ac1d04


UI Logs user out when attempting to bind roles with elevated permissions

Setup

Rancher version: 2.6.3
Browser type & version: Chrome 97.0.4692.99

Describe the bug
When a user attempts to bind a user to a role which has more permissions than the current user the UI logs out the current user, forcing them to relogin again and not displaying a meaningful error.
To Reproduce

Create a restricted admin user.
Login as the restricted admin.
Create a new user with user-base permissions.
Edit the config of the user. Attempt to assign the user to the administrator role.

Result
You are logged out of rancher.
Expected Result
The error that rancher returns is displayed on the screen, and the user is not logged out.
Screenshots

Additional context
Core issue seems to be that the redirectUnathorized value not being set to false when this update occurs. There's a similar issue which was solved a while ago: rancher/dashboard#3737.

Closing - changes will be made in the backend.


Update vendor of storage, common and SELinux

  github.com/containers/common v0.4.4

  github.com/containers/storage v1.16.3

  github.com/opencontainers/selinux v1.4.0

Signed-off-by: Daniel J Walsh<EMAIL_ADDRESS>

common is broken.


Can't type the letter 'q' in the query editor

bug description
Can't type the letter 'q' in the query editor. Probably some key binding blocks it, but should work in the vi insert mode
technical details
system info

arch linux x86-64/Linux 6.10/Wayland
rainfrog 0.2.1

crash logs
no crash
steps to reproduce
Go to query editor, enter insert mode, press (lower case) q.
expected behavior
A lower case q should appear :D

thx for the report; does this happen all the time, or only when there's a query running?
when there's a query running [q] aborts the query

actually i was able to repro, apparently the default keybindings have allowed this to happen all along.... no idea how i never caught this lol

noice


Filters fix blurfilter identifier, create a new color filter

Hi @arsonik,
Thanks for putting this together! I like the CoreImageFilter protocol. I pulled it into master in 805c7cb3 while keeping your attribution. I don't want to add the CoreControlsFilter though. The only direct CoreImage filter I think we should support in AFI is blur. All the others can easily be extended.
Thanks again! 🍻


Add iptables rule for tracking connections

Description
Adds a iptables rule to track connections on the port that you wish to watch with fail2ban.  This is dependent on the default behavior of the cookbook.
Issues Resolved
N/A
Check List

[ ] All tests pass. See https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/TESTING.MD
[ ] New functionality includes testing.
[ ] New functionality has been documented in the README if applicable
[ ] All commits have been signed for the Developer Certificate of Origin. See https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/CONTRIBUTING.MD

Seems to be more trouble than its worth to get this working with all of the different disto types.

Thanks @duncaan for looking into this. That is often the challenge with community cookbooks.


[Bug?] zoom in-out

Please check the steps to reproduce section for clarity.
-Version: 1.32.3
-Commit: a3db5be9b5c6ba46bb7555ec5d60178ecc2eaae4
-Date: 2019-03-14T23:38:49.842Z
-Electron: 3.1.6
-Chrome: 66.0.3359.181
-Node.js: 10.2.0
-V8: 6.6.346.32
-OS: Linux x64 4.15.0-46-generic
Steps to Reproduce:
1.Press and hold (ctrl + +) until max zoom.
2.Once in max zoom, use the keybindings(ctrl + +) a couple more times (keep a count).
3.Try zooming out (ctrl + -) now. The zoom out is not instantaneous.
Does this issue occur when all extensions are disabled?: Yes

Can I get the issue number to which this is a duplicate of?
I tried searching,before submitting this bug report and couldn't find any. Moreover the preemptive experimental duplicate detection of vscodebot shows issues that aren't related to my issue.
Thanks in advance :)


Is it reasonable that some tasks have obvious data skew when executing compute snapshot?[BUG]

Describe the problem
When the delta log log becomes larger, it is found that during the process of executing the compute snapshot, the operation task execution has obvious data skew, and the data volume of each task varies greatly.
Further details

It is found that the data volume of each task varies greatly, there is obvious data skew, and the resource utilization is insufficient. Does this really happen in the log compact stage of delta lake? Is there any way to handle this effectively?
Environment information

Delta Lake version: 1.0.1
Spark version: 3.1.1
Scala version: 2.12.8

Hey @kongluo sorry for the delay. We are busy with Data + AI summit currently, but will look into this shortly.

Generally, Delta will use Spark to load transaction files, including incremental changes (json files), and table checkpoint (parquet files). It does have skew, since json files are usually small but checkpoint files are usually large. Spark will create tasks based on the file size and the number of cores available on your cluster. Would you be able to provide logs like this to help us understand how spark creates the tasks? The small sizes are likely coming from json files, and dozens of MBs are likely coming from checkpoint files.
22/08/25 18:39:11 INFO FileSourceScanExec: Planning scan with bin packing, max size: 4194304 bytes, open cost is considered as scanning 4194304 bytes.

In addition, it's weird to see 0 records in a file and processing dozens of MBs takes 10s seconds. Were you running on a VM that has a low CPU speed?


Remove Disqus comments

Because, why not?

Agreed. Same thing here: "No one comments in this shitty blog".


Did not regenerate rewrites at all

I am using a fresh install of 2.2.6 and I have just run the extension (php bin/magento ok:urlrewrites:regenerate) which did not show any issues while running in the console. However, it did not actually generate any URL rewrites at all (it did, however, delete all of my previous url rewrites).
What am I doing wrong?

Same here on 2.1.16 ...  ALL products now have /product/view/id/etc now on front end url, which is what I was trying to fix to begin with... now the entire store is this way. Fortunately I did this on a test server and not production.

Hello @ywsw , @budoland-ab , @twistedatrocity
I've released v1.4.0. Please test it and confirm that issue is fixed (extension pass my internal tests).
Best regards,
Oleg Koval

Closed.


Implements fixes for iPad, spec fixes

For iPad (and larger phones), we support a larger ProfileAvatarView (it scales proportional to the ratio and frame.width)
Orientation changes will trigger a height mismatch in ProfileAvatarView.

Test Suite 'All tests' failed at 2016-10-31 15:17:37.026.
	 Executed 2327 tests, with 27 failures (0 unexpected) in 252.240 (253.334) seconds

The failures are from ProfileScreen and ProfileTotalCountView snapshots.


[5.5] Simplify queueing notifications

No need for the first clone since no change happens between that and the clone per channel
No need to clone per channel since the ID is given per notifiable

The PR will make us clone the notification only once per notifiable, instead of once per notifiable per channel.

Gonna keep this as-is for now because I remember I refactored it to be this way after some problems and I need to remember them first. :smile:

Yeah there was this problem while the Queue manager is trying to serialize the SendQueuedNotifications job, but in 5.5 we made the manager serialize a clone of the object and we implemented the __clone() magic method to clone the Notification object and the Notifiers collection as well, that way we do safe cloning without touching the original objects:
https://github.com/laravel/framework/blob/master/src/Illuminate/Notifications/SendQueuedNotifications.php#L75
So I think it's safe now to do such change based on the changes we made to 5.5 already, but anyways it's not a major performance win unless you're sending to hundreds of notifiables so yeah you can keep the old way :)


Deadlock fix

There are 2 patches in this PR that solves some issues that can occurs after several hours of restarting apps continuously on a small windows cell.

The first issue is a deadlock inside Container class that will prevent the container to get destroyed. After a thread dump I saw that the RunProcess RPC was stuck indefinitely for some reason and kept the Container's _ioLock lock alive ( https://github.com/cloudfoundry/IronFrame/blob/04b0bf6040c2dd00da09614d82f161e72509a1e0/IronFrame/Container.cs#L99 ). My proposed fix is to add a timeout to the RunProcess RPC call, because it not a secure and reliable transport channel.

The second issue is when IronFrame.Host processes remain orphan (maybe due to a timeout) and never gets terminated. My proposed fix is to add the IF.Host process to the JobObject so that, in case of any future failure, the IF.Host process will get terminate when the JobObject is closed at destroy time.

After some stress testing with this patches, it seems to solve my experienced issues.
I have a core dump of the Containerizer.exe process, but it's pretty big (~400 MiB) to attach here.
As a reference, I could also reproduce this issues with a bosh_lite + windows cell attached and running for 1 - 2 hours the following script that pushes and re-pushes nora:
#!/bin/bash

while true; do
 cf push snora  -s windows2012R2  -m 128MB  -i 50  -k 100M --no-start -b binary_buildpack
 cf enable-diego snora
 cf push snora
 for i in `seq 1 100`;
 do
  curl -s -o /dev/null -I -w "%{http_code}" http://snora.bosh-lite.com
 done
 cf delete snora -f -r
done

I use this scripts to install my windows cell ( https://github.com/stefanschneider/bosh-lite/commit/40029613cb861318f6ba3e8f6674ed5c02253a91 )
Have you guys experienced similar problems on long running environments?

Thanks @stefanschneider! I was able to lock up my Containerizer in the method you described, and this fix resolves that issue in my testing. I'm a bit concerned about the ContainerHostService change. Let me know if I'm being overly cautious here, especially if you know the reasoning behind the original implementation.
We haven't seen lockups like this in our longrunning environment, but we have seen container directories sticking around. The scenario seems different from the one these steps reproduce, as the container directories are completely empty at the time of failure, whereas this repro leaves IronFrame.Host and associated libraries in place at the time of failure.

Thanks @mhoran for looking into this.
I've also seen at some point empty directories sticking around. I wanted to investigate of the read-only flag or other file metadata caused this, but I never got to do it.

Merged! Thanks again.


Improve plugin system

Codecov Report

Merging #22 into master will increase coverage by 9.35%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master      #22      +/-   ##
==========================================
+ Coverage    81.3%   90.66%   +9.35%
==========================================
  Files           8        9       +1
  Lines         428      514      +86
==========================================
+ Hits          348      466     +118
+ Misses         80       48      -32

Impacted Files
Coverage Δ

tests/test_plugin.py
100% <100%> (ø)

inspectortiger/plugin.py
98.82% <100%> (+40.59%)
:arrow_up:

Continue to review full report at Codecov.

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


Release version tagging missing

Hi,
Great work on this project. I would really appreciate it if you could tag release versions and carry this through to the docker hub builds. Without this, every release gets tagged with 'latest' which is not good practice.
Thanks!

Hi,
I appreciate your suggestion.
Since the project is relatively small, I haven't implemented tagging release versions for Docker Hub builds in the CI setup, which is built with the GitLab CI on my private instance.
However, if you're interested, you can create a pull request with the feature,
and I would be happy to review and merge it.


Don't allow users or teams to enter the queue more than once

When a user or team tries to !enter when they're already in the queue, an error message should be returned.

@Xiocious what should the error message be?

"Sorry, you can't join the queue more than once!"


KAFKA-2120

Trivial fix to get rid of unused statements in kafkaProducer.

@MayureshGharat There's a typo here: https://github.com/apache/kafka/blob/c67ca65889721e3af7527ab26df49a9fb4db87ef/clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java#L682 it's maybe, not may be ;)
Also, it would be nice to be detailed about the error by informing the value and the threshold that was surpassed: https://github.com/apache/kafka/blob/c67ca65889721e3af7527ab26df49a9fb4db87ef/clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java#L692
Finally, this checkMaybeGetRemainingTime is a mouthful of a name and mixes two duties for a single method: it checks if the threshold was violated and retrieves the value otherwise. In this case, the exception is more of a side effect of this function -- and so, better to be documented in the @throws clause of the comment -- than a proper goal of this method, that is, afaik, to retrieve the remaining time. I would suggest to rename it to checkAndGetRemainingTime or something alike, because it only "maybe" retrieves the time if the check doesn't passes so "maybe" is superfluous here, imho. Up to you.

Since the purpose of this PR is just a follow-up cleanup of KAFKA-2120, I am fine either addressing @eribeiro 's comments in another MINOR PR or in this PR as well if @MayureshGharat would like to do so.

@guozhangwang I will make the change for @throw and also the threshold message in this PR. I am not sure if we should change the method name. I had discussed this with Joel and we had comeup with that name. Its little verbose but it kind of explains what might happen. Does that sound good ?

I am OK with the current function name too, it is up to you for how to address the comments :)

@eribeiro
Adding the threshold is a great suggestion.
Regarding "In this case, the exception is more of a side effect of this function -- and so, better to be documented in the @throws clause of the comment -- than a proper goal of this method, that is, afaik, to retrieve the remaining time.",
The main goal is to first check and return the value only and only if the check is valid.
As per http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html#throwstag, the purpose of the @throws tag is to indicate which exceptions the programmer must catch (for checked exceptions) or might want to catch (for unchecked exceptions). (It is considered poor programming practice to include unchecked exceptions in the throws clause.)
Also TimeoutException is a type of KafkaException, which is an unchecked exception. . Also the checkMaybeGetRemainingTime() is a private method and is only used in the Kafkaproducer.send(). so if we are throwing the TimeoutException from checkMaybeGetRemainingTime(), it will be caught in Kafkaproducer.send() as a KafkaException and rethrown to the user.

@MayureshGharat +1 about your comments. :) After posting the comment, I ended up in the http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html page too, so I totally see the point of throws. Agree with you again. I am okay with keeping the name as-is too. No problem. :)

LGTM, thanks @MayureshGharat


STOR-963: Add LOGGER_LEVEL env. var on debug log level

When the operand log level is Debug or higher, then add LOGGER_LEVEL=DEVELOPMENT to get detailed logs of the CSI driver.
It's really annoying to set the env. var manually if I need the logs.
cc @openshift/storage

/label docs-approved
IMO not worth documentation
/label px-approved
dtto

cc @openshift/storage-qe for testing & approval

/retest

Verified and updated result.
https://issues.redhat.com/browse/STOR-963
/label qe-approved

/lgtm


Feature 'recursive patterns' is not available in C# 7.3. Please use language version 8.0 or greater.

Issue / Steps to reproduce the problem
Using VS2019 latest build. Core 3.1 installed
Run build.ps1
Relevant parts of the log file
I get 5 errors.
Severity	Code	Description	Project	File	Line	Suppression State	Suppression State
Error	CS8370	Feature 'recursive patterns' is not available in C# 7.3. Please use language version 8.0 or greater.	IdentityServer4	C:\Users\smorgan\Source\repos\IdentityServer4-master\src\IdentityServer4\src\Configuration\CryptoHelper.cs	90		Active
Error reoccurs four more times in same file at line 104, 118, 143, 158.
When looking at the project file, I cannot choose the version of C# as it states it is tied to the version of .Net you are using. I checked and I am using 3.1 Core which should be c#8.0
Any suggestions would be appreciated.
<log goes here>

Sorry - no idea. Can't repro.

Closing. If you still have issues, feel free to reopen.


.Net wrappers for XML functions

We use System.Xml.XmlNode, System.Xml.XmlNamespaceManager, System.Xml.XmlDocument and System.Xml.XmlNodeList.
Will it be posible to use corresponding functions in D365 for this or will we have to rely on XML-ports?

We are working on providing AL types and functions that you will be able to use instead of the .NET XML* types. It will be available within the next few updates.

That was very good news!
Thanks!
/Lars
Från: Stanislaw Stempin<EMAIL_ADDRESS>Skickat: den 27 april 2017 10:06
Till: Microsoft/AL<EMAIL_ADDRESS>Kopia: Lars Westman<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Ämne: Re: [Microsoft/AL] .Net wrappers for XML functions (#175)
We are working on providing AL types and functions that you will be able to use instead of the .NET XML* types. It will be available within the next few updates.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/Microsoft/AL/issues/175#issuecomment-297643033, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AVx3y_760Q25fz6Gs1tS0Re5gZnpSoQ3ks5r0ExKgaJpZM4NI5Yw.

I just though I'd add to this, the UK government gateway for submission of online VAT, tax and accounting returns makes heavy use of XML and XML namespaces.
For this communication we used XmlDocument,  Xpath functions, XmlNamespaceManager, Attributes, XMLHTTP for the basic creation and sending of the gateway message. (Both Automation objects and later DotNET)
For authentication of the message an "IRMark" has to be generated, this uses XML c14n routines specifically XmlDsigC14NTransform to create a normalised stream which has to be converted back to a string so the newlines can be regularised to what their Java libraries expect after which it's converted to UTF-8 and a SHA1 sum generated on all the message except the location that the hash is to be stored (encoded in base 64).
Unfortunately I was unable to create the IRMark directly calling DotNET DLLs from Nav, mostly because of byte arrays if I remember correctly. So I ended up with two actual solutions; make a custom DLL in C# or embed the C# in Nav and use  System.CodeDom.Compiler.* and System.Reflection.* to compile and execute it. Both methods work fine.
In addition for online submission of CT600 corporation tax and general accounts they currently use iXBRL documents for mixed data and visual representations which have to be constructed as valid xhtml with the iXBRL additions. In one option these are embedded inline in the c14n'd gateway message. This doesn't work very well so they included another variant where the included document is encoded to UTF-8 as a whole and encapsulated as a single base64 string. While the generation of the iXBRL is complex it doesn't generally need heavy usage of the XML library; it does, however, need full control over the representations of the prefixes used in the namespaces as these prefixes are required to be embedded in attributes for their processing.
The VAT submission routines do seem to be a nice candidate for an extension, but it cannot work without a working IRMark.

@StanislawStempin Do you have an expected release time for the XML component on the dev preview?

I have good news - it will be released in the July Update.


Feature Request - Record Sound to File

Occasionally my friends and I have some hilarious moments over discord voice that would be great to record, as having a built in functionality is better than opening audacity/wasting precious time before the moment disappears
Maybe have a command (!rec to start/stop or something) that takes the incoming voice data (no idea if discord.net supports it) and uses ffmpeg to put it in a file? Alternatively, if I use Virtual Audio Cable to output discord to a certain output, have a command that uses ffmpeg to take that output into a file.
A more advanced thing would be like an oddshot system for audio - constantly record the past x amount of minutes, and on a command cut that time into an audio file.

yeah good idea, sadly discord.net does not support audio receiving atm.
I will implement this after discord.net 1.0 is done

Maybe one day. Not planned.


Add js-validator-livr

Add LIVR validator –  Lightweight validator supporting Language Independent Validation Rules Specification (LIVR)
https://github.com/koorchik/js-validator-livr

Thanks for the suggestion, but there are already many validations modules in the list, all pretty much doing the same thing. I don't see what this brings to the table for Node.js. With Node.js you're running JS on the back-end and front-end, so no point in having language independent rules. Also doesn't look very actively maintained.


Please add a license file

ISC requires a license file to be present with the code.

Closing in favour of https://github.com/crypto-browserify/parse-asn1/pull/27