Allow for nested logprob rewrites

Copying comments from this exploratory #102 PR:

This PR is a proof of concept for how we could handle composite RVs that require nested aeppl rewrites. The goal is to figure out if this approach is too limited / cumbersome and, if so, what could work better.
Roughly, most of our rewrites come in two parts:

Check if an initially non-measurable variable was assigned to a value variable
If so, try to convert this variable into an temporary measurable variable for which _logprob can be safely dispatched

In step 2, we often need inputs that are themselves measurable variables, but which don't have value variables assigned to them:
https://github.com/aesara-devs/aeppl/blob/05d0c683aa568e59bab8fcce4618f89c57355122/aeppl/mixture.py#L283-L287
If these inputs are RandomVariables things are fine, as those are measurable by default. Otherwise, we might still be dealing with things that could be measurable... but we will never know because they don't (and shouldn't) have value variables and their corresponding rewrites won't be triggered due to step 1.
The illustrating example in this PR is a scalar mixture that has a clipped variable as one of it's components:
    x = at.clip(at.random.normal(loc=1), 0.5, 1.5); x.name = "x"
    y = at.random.beta(1, 2, size=None, name="y")

    comps = at.stack(x, y); comps.name = "comps"
    idxs = at.random.bernoulli(0.4, size=None, name="idxs")
    mix = comps[idxs]; mix.name = "mix"

    mix_vv = mix.clone()
    idxs_vv = idxs.clone()
    logp = joint_logprob({idxs: idxs_vv, mix: mix_vv})

I have also added a test example with nested scalar mixtures
Suggestion
The suggestion is that any rewrite that depends on other inputs being measurable, can assign a temporary value variable UPSTREAM_VALUE to those inputs. This value variable is automatically discarded by the PreserveRVMappings when such variables are converted to measurable ones by their own rewrites.
Limitations
This would work for some current and future rewrites like #26, but not for everything.
For example nested rewrites that depend on the direct manipulation / creation of value variables such as inc_subtensor and scans would not work. This would also not work when the _logprob dispatched function depends on having RandomVariables as inputs, as happens with non-scalar mixtures:
https://github.com/aesara-devs/aeppl/blob/05d0c683aa568e59bab8fcce4618f89c57355122/aeppl/mixture.py#L354
Also depending on the order with which rewrites are called this may not always work, because the attribution of the UPSTREAM_VALUE is not a visible graph change, and I guess the Equilibrium optimization will stop if after passing through all nodes, none is changed

Roughly, most of our rewrites can be divided in two parts:

Check if an initially non-measurable variable was assigned to a value variable
If so, try to convert this variable into an temporary measurable variable for which _logprob can be safely dispatched

It's better to think of this process as first producing a "measurable" intermediate representation (IR) of the original model graph.  The fact that the value variable checking/manipulation is also done at that point is mostly a matter of convenience.
This distinction is important, because there may be use/need for the identification of measurable terms independent of value variables, to which it seems you're ultimately alluding.
It's possible that the entire scenario you're describing could be handled by simply loosening the overly strict value variable requirements instead of adding a new placeholder element and associated logic.
In other words, why work around/within existing restrictions when they might be unnecessary in the first place?  If we don't consider these kinds of things first and foremost, we'll likely end up building something that becomes more and more difficult to develop.
Originally posted by @brandonwillard in https://github.com/aesara-devs/aeppl/issues/102#issuecomment-1004275233

Also depending on the order with which rewrites are called this may not always work, because the attribution of the UPSTREAM_VALUE is not a visible graph change, and I guess the Equilibrium optimization will stop if after passing through all nodes, none is changed

#78 is an answer (of sorts) to this.  The idea is to put value variables in the graph, then we don't need a Feature, and the rewrites we're using make a lot more sense at a higher level, because they're operating directly upon a measurable variable, observed value pair.
Originally posted by @brandonwillard in https://github.com/aesara-devs/aeppl/issues/102#issuecomment-1004277027

Also depending on the order with which rewrites are called this may not always work, because the attribution of the UPSTREAM_VALUE is not a visible graph change, and I guess the Equilibrium optimization will stop if after passing through all nodes, none is changed

#78 is an answer (of sorts) to this.  The idea is to put value variables in the graph, then we don't need a Feature, and the rewrites we're using make a lot more sense at a higher level, because they're operating directly upon a measurable variable, observed value pair.
Originally posted by @brandonwillard in https://github.com/aesara-devs/aeppl/issues/102#issuecomment-1004277027

Currently we distinguish between the two based on whether it has a value variable or not, but if I understand you correctly, we would now always rewrite a clip so that it would work in nested expressions like the mixture example above.

Yes, we're currently performing (IR) normalizing/canonicalizing rewrites to the entire graph, even if there are some "upstream" terms that may be irrelevant.  This is the case in the former example, where the measurability of the y term isn't relevant and the rewrites for clip aren't needed.
That's done because it's (generally) cheap and it provides a simplicity to our rewrites and the way in which they're applied.  It's basically a "greedy" approach.
As I mentioned above, we can always control the graph traversal and application of rewrites so that certain rewrites are only applied upstream from a valued variable when they're needed; however, complications arise in this scenario due to an added dependency between the traversal logic and the rewrite rules themselves.
For instance, starting at the "bottom"-most/valued nodes, in the former case, we would start at the expression graph for z and immediately determine that it's measurable and that no further traversal + rewrites are necessary.  That's the easy case.
In the latter case, we would start at y and determine that it's only measurable if x is measurable, so we need to walk up the inputs of y and potentially rewrite those so that they're measurable.  In this example, no rewrites are necessary, but the general logic still requires that the rewrites be applied by same logic that determines whether or not something is measurable.  This is the dependency that conditional rewrite applications introduce.
Taking the above literally and creating a routine based simply on walk and manually applications of rewrites would result in a very convoluted and error-prone interface/development context.  If we want to take a more efficient approach, we need to carefully consider how best to handle this dependency without foregoing a lot of the existing graph and rewrite tooling.
There may be a way to do this using "preconditioning" passes that truncate graphs via their naive "base" measurability.  For example, we could walk up graphs and determine the relevant subgraphs using isinstance(..., MeasurableVariable) (i.e. the atomic/"base" measurable nodes):
I = at.random.bernoulli(0.5)
C = at.random.normal(0, 1)
A = at.clip(C, -1, 1)
B = at.random.normal(0, 1)
R = at.ifelse(I, A, B)
X = at.random.normal(R)
Y = at.clip(X, 0, 1)

# Traversal/subgraph should stop at `Y -> X`
joint_logprob({Y: y_vv})

# Traversal/subgraph should stop at `X`
joint_logprob({X: x_vv})

# Traversal/subgraph should stop at `R -> [I, A -> C, B]` (i.e. the immediately
# measurable `I`, `C`, `B`)
joint_logprob({R: r_vv})

We could also make it possible to determine the non-measurable Ops for which we have rewrites and use that to better trim the subgraphs.
Anyway, the point is that this approach produces subgraphs for which broad application of the rewrites is generally necessary (i.e. any rewrite that can be applied needs to be applied), but no changes to the rewrites or the way they're applied are needed.
Originally posted by @brandonwillard in https://github.com/aesara-devs/aeppl/issues/102#issuecomment-1006154407

This is also related to https://github.com/aesara-devs/aeppl/pull/26 and https://github.com/aesara-devs/aeppl/issues/18


ClosureLifetimeFixup: Remove copy of borrowed move-only nonescaping captures when possible.

SILGen introduces a copy of the capture, because the semantics of escaping partial_apply's requires the closure to take ownership of the parameters. We don't know when a closure is strictly nonescaping or its final lifetime until ClosureLifetimeFixup runs, but that replaces the consume of the copy with a borrow of the copy normally, hoping later passes fix it up. We can't wait that long for move-only types, which can't be copied, so try to remove the copy up front when the copy lives long enough and has no interfering uses other than the partial_apply. rdar://110137169

@swift-ci Please test

~TransitiveAddressWalker does not currently distinguish between transitive vs. leaf uses, and you only care about leaf uses.~

That comment I made was wrong. TransitiveAddressWalker gives you the leaf uses, which is correct in your case.

@atrick I've updated the patch to skip over uses that !mayWriteToMemory() and added a test that we let the same borrow get captured multiple times in simultaneous nonescaping closures.

@swift-ci Please test

@swift-ci Please test

Also, with my suggestions, I am fine if you want to do a follow up so we can get this into 5.9.

@swift-ci Please test


Work page

We don't have an About page, About needs to be changed to Work.
We're currently linking to the Work page from the 'Book me now' button in the footer. (This button should actually link to https://www.buymeacoffee.com/kelvinlockwood/e/24822)
Each Work / Product item is currently 1020 pixels wide (on desktop). I might be better in the region of 900 pixels to fit in with the other content types and be consistent when displayed on this category page...
https://pedantic-sinoussi-3efb9c.netlify.app/tags/ux/

should be fixed in the latest build


Move the GDX project

We should move the GDX project in it's own repo. It's a separate project that should live on it's own repo.

This has been done already, I don't know if it has been merged in dev or main yet. The gdx repo exist on Cardshifter. We can probably close this issue.

The GDX project is not even the recommended client anymore as well. The most actual client is https://github.com/Cardshifter/HTML-Client


KeyError in migration 0004 and 0005 with custom/overridden FILER_IMAGE_MODEL

Migrations 0004_auto and 0005_auto alter a field on the Image model. As this model can be overridden with the FILER_IMAGE_MODEL setting it may not exist and produce a KeyError: ('filer', 'image') when the migration is run.
Proposal: check in the migration if FILER_IMAGE_MODEL is set and only do the operation if it is not. The same is done in migration 0001 with CreateModel for the Image model.

see #778

Closing since it is now fixed by #857 . Please re-open if it is still an issue.


Upgrade to React 16.6.0

https://reactjs.org/blog/2018/10/23/react-v-16-6.html
This will enable React.Lazy which will be very nice for the Butterchurn stuff.

Hmm. I guess React.Lazy is actually not quite what we want, since we are not splitting at the component level


Zap Fails to load LNURL

Describe the bug
Snort fails to load LNURL service when making a zap to<EMAIL_ADDRESS>but payments work from other nostr interfaces (damua) and to the LN Address from coinos & stacker news. Even when the error appears in snort an invoice is created in my btcpayserver
Invoice Created in BTCPayServer

Failure Message

To Reproduce
Steps to reproduce the behavior:

Go to https://snort.social/p/npub18h0w55nsp839ezxnggf00jd2xc6yl0ht62mf5p8wwllu8s80wdcs83ws8m
Click on<EMAIL_ADDRESS>Wait 1 second
See error (Failed to load LNURL service)

Expected behavior
Expected Zap payments widget to open

Update your BTCPayServer (added CORS headers)


Create SILK Repo Notes.md

I created these notes for uploading the media content in the SILK Corp Guide...

@Aini-Bashir please check these notes, and suggest changes


Add sentinel support for older versions of Redis

Fun backstory
When I met @whatyouhide in Prague during the ElixirConfEU speakers dinner and I told him I loved Redix he asked if I used Sentinel. I said, yes, but in conjunction with redix_sentinel. He said, "you should upgrade your Redix, we now support sentinel." 🎉
Flash forward 7 months and I'm finally upgrading my Redix version so I can drop the redix_sentinel dependency...and I run into the same issue I had with redix_sentinel (that I forgot to mention in our conversation). And the problem isn't with the library so much as it is with my project being stuck on a really old version of Redis (😢).
This PR
The crux of the problem I'm running into is this:
As part of connecting to a sentinel, we need to verify that the server we are told is the primary actually thinks it is the primary. This is usually done via the ROLE command.
Unfortunately (for me), the ROLE command was introduced in version 2.8.12 so when Redix attempts to verify the role of the primary, it gets an error saying the server doesn't understand ROLE.
According to the Redis docs:

If the ROLE commands is not available (it was introduced in Redis 2.8.12), a client may resort to the INFO replication command parsing the role: field of the output.

And this ^^ is what this PR does.
For more context, I added "old sentinel" support to redix_sentinel back in May 2018 and have been using it in production ever since with no issues.
Also, I kind of just plopped this code in a place that I thought made sense based on my limited knowledge of the Redix internals, so let me know if it should be somewhere else.

Hey @mertonium, thanks for the PR! I pushed some refactoring but then wanted to test this by adding a < 2.8.12 Redis version to the docker-compose.yml file we have in this repo and saw that Redis doesn't support versions that are older than 4.x anymore. Should we support a feature on a version of Redis that not even Redis supports anymore? Feels like maybe this might be a bit too "legacy". Thoughts?

Love the refactor. It is much more graceful than my original.

It sounds like you went down the same road as I did before the PR wrt testing: I couldn't find a redis 2.8.8 image on dockerhub 🤦♂.

Should we support a feature on a version of Redis that not even Redis supports anymore?

Yeah, you make a good point. Selfishly, I want to Redix to support my use case, but I understand the  maintenance burden that adding "super legacy" support could bring - especially without proper testing. So yeah, I agree that this is probably too much to include in the library (and I will be relegated to using my fork until my Redis version is upgraded).
Thanks for taking a look 🙇

@mertonium yeah, thanks for understanding. It's not a big change in any way but the fact we can't test this scares me just a little bit. Plus, yeah, we're supporting something that not even Redis supports anymore :smile: Is there a strong reason you can't upgrade to newer Redis? Just out of curiousity.

I talked with my team and (as I suspected) - we're still using that version for a legacy system where upgrading redis hasn't been a priority. 😢


Create the partition if provided

Thanks @byte911 for contribution! Could you provide a bit more detail on what this does?

@baskaryan I would like to insert text into a partition, and I hope that the partition can be automatically created if it does not exist. In some conditions, the collection and the partition will be created dynamically.
milvus = Milvus()
milvus.add_texts(..., partition_name="par1")

@byte911 A partition should be a list, and I believe it not only needs to be supported during automatic creation, but also in search

@byte911 As @tsingmao mentioned, in order to use the partitions there are quite a bit more changes that need to be made. Partitions need to be created, data needs to be inserted into them, and searches need to be directed at them. What is the use case for these partitions?

@byte911 Hi , could you, please, resolve the merging issues and address the last comments (if needed)? After that, ping me and I push this PR for the review. Thanks!
If this PR is not needed anymore, could you, please, let me know or close this PR?

Closing because the PR wouldn't line up with the current directory structure of the library (would need to be in /libs/langchain/langchain instead of /langchain). Feel free to reopen against the current head if it's still relevant!


5.58 Performance..?

Please forgive me if this sounds weird.  I downloaded an older version of XIVAlex over the weekend since my Ping was just getting... Absurd.  And I updated the Opcodes for 5.57 (I found an old thread in here from about 30 days ago) and on Gunbreaker and Dark Knight was having zero double-weaving issues, and even noticed the improve weaving issues on both classes that the buttons almost registered the moment I hit them.  I was running on v<IP_ADDRESS>, but I downloaded v<IP_ADDRESS> and just deleted the .5 folder and unzipped the .6 and booted XIVAlexander up like normal.  There a setting I need to clear out first?
The double-weaving and everythign is nowhere near as instantaneous as it was over the weekend when I first started using this.  Is there something I have to edit in order to get the oGCD commands to be almost as responsive as they were earlier?  I'm VERY new to using this, so I apologize if this sounds very lost.  I can answer any follow-up questions if needed.
https://github.com/Soreepeong/XivAlexander/issues/96
I'm playing on NA.  Anybody got any tips or recommendations?  I used the txt file in that thread and just copied and pasted them over.  I suppose one other tidbit was when I copied those 5.57 opcodes, it felt like there was hardly, if any, animation lock (I was paying attention to the GCD and hotbar, not the animations.  I'm just noting the times in which the abilities themselves registered felt VERY responsive with minimal delay) and absolutely NO clipping.  Now... I'm clipping a lot.  And I'm not sure if there's something I need to do or modify to get back to the same performance level XIVAlexander had over the weekend.
Thanks for the help.  And I'm sorry about the wall, just want to make sure it's understood what I'm trying to say. :)

How about checking if 'delayed detection' and 'latency correction' are turned off?

I'd say i'm experiencing the same thing. XIVAlexander isn't feeling as consistent or effective as it previously was and it's definitely a more noticeable difference. 'delayed detection' and 'latency correction' are turned on, my anti-virus software/Defender have this software selected as an exception and opcodes are set up to date. If anyone has any recommendations or answers it would be nice, thank you.

Both are on, Justin, and made sure the normal settings were on as well.
Like, it doesn't feel like it's egregious;  It's just not as consistent when it comes to double-weaving, which makes doing Ultimate and Savage content rather challenging on certain parts depending on the phase/fight.  Any other settings we'd be able to check to test it out?  I'm open to any suggestions.

Both are on, Justin, and made sure the normal settings were on as well.
Like, it doesn't feel like it's egregious; It's just not as consistent when it comes to double-weaving, which makes doing Ultimate and Savage content rather challenging on certain parts depending on the phase/fight. Any other settings we'd be able to check to test it out? I'm open to any suggestions.

I was told to turn OFF both 'delay detection' and 'latency correction' in such cases. But regardless, I do feel slight

Both are on, Justin, and made sure the normal settings were on as well.
Like, it doesn't feel like it's egregious; It's just not as consistent when it comes to double-weaving, which makes doing Ultimate and Savage content rather challenging on certain parts depending on the phase/fight. Any other settings we'd be able to check to test it out? I'm open to any suggestions.

I was told to turn OFF both 'delay detection' and 'latency correction' in such cases. But regardless, I do feel slighty the same as you right now. The performance seems to fluctuate alot. I myself too are trying to do Ultimates from NA in Korean DC.

  Yeah, I attempted that too.  Like, it's nothing outlandish and still is better than nothing, but it still would be nice to get back to where it's been in the past.  Would anybody know if maybe the fluctuation in performance could be due to server stress or connection or something?
I really don't understand the specifics behind XIVAlexander on the level of some people, so I may be misusing things or assumptions.  I just wanna try and get the performance reliable again.  It worked flawlessly the two days before 5.58, so I'm wondering what's different for right now.

Both are on, Justin, and made sure the normal settings were on as well.
Like, it doesn't feel like it's egregious; It's just not as consistent when it comes to double-weaving, which makes doing Ultimate and Savage content rather challenging on certain parts depending on the phase/fight. Any other settings we'd be able to check to test it out? I'm open to any suggestions.

I was told to turn OFF both 'delay detection' and 'latency correction' in such cases. But regardless, I do feel slighty the same as you right now. The performance seems to fluctuate alot. I myself too are trying to do Ultimates from NA in Korean DC.

 Yeah, I attempted that too. Like, it's nothing outlandish and still is better than nothing, but it still would be nice to get back to where it's been in the past. Would anybody know if maybe the fluctuation in performance could be due to server stress or connection or something?
I really don't understand the specifics behind XIVAlexander on the level of some people, so I may be misusing things or assumptions. I just wanna try and get the performance reliable again. It worked flawlessly the two days before 5.58, so I'm wondering what's different for right now.

Guess we'll have to wait for developer's response for the time being..😭😭

Check the new release


How to add Layer on non Leaf node

As per the documentation of the plugin 'Non leaf nodes (that is, those with children) can also have a layer. In this case you will be able to select the layer, and only the icon will collapse or expand this branch'
When I tried to add layer to non leaf node...then instead of one checkbox ..2 checkbox are rendering for that node....
please help...thanks in advance

Providing a simple self contained example that reproduces it will help.

Below is the object that I am trying to add as inner child:
var innerchild = [{
label: 'France',
selectAllCheckbox: true,
layer: L.marker([52.9413240, 8.9581201]),
children: [{
label: 'Tour Eiffel',
layer: L.marker([48.8582441, 2.2944775])
},
{
label: 'Notre Dame',
layer: L.marker([48.8529540, 2.3498726])
},
{
label: 'Louvre',
layer: L.marker([48.8605847, 2.3376267])
},
],
        }, {
            label: 'Germany',
            selectAllCheckbox: true,
            children: [{
                    label: 'Branderburger Tor',
                    layer: L.marker([52.5162542, 13.3776805])
                },
                {
                    label: 'Kölner Dom',
                    layer: L.marker([50.9413240, 6.9581201])
                },
            ]
        }, {
            label: 'Spain',
            layer: L.marker([52.9413240, 8.9581201]),
            selectAllCheckbox: 'De/seleccionar todo',
            children: [{
                    label: 'Palacio Real',
                    layer: L.marker([40.4184145, -3.7137051])
                },
                {
                    label: 'La Alhambra',
                    layer: L.marker([37.1767829, -3.5892795])
                },
            ]
        }]

Below is the code of how I add above inner child to overlays:
overlaysTree = {
label: "Overlay Layers",
selectAllCheckbox: "Un/select all",
children: [{
label: "States",
selectAllCheckbox: "Un/select all",
children: innerchild
}, ],
};
I have also attached screenshot with red color marker on right ...
What I am trying to achieve :
Lets take example of airports of your docs...
Suppose user selects Germany checkbox then polygon shape must appear on map for Germany ...and all the airports in Germany must be displayed as point ....and user can select and unselect any of these airports for displaying on map.
The problem of two checkbox is occurring when I set selectAllCheckbox option true for Germany and if I do not provide any selectAllCheckbox option then single checkbox is appearing for Germany but on selecting it...it is not selecting checkbox of all the airports in Germany.
However when I provide selectAllCheckbox true for germany the second checkbox is working as per my need but first checkbox is also appearing which is working independently that is when I select first checkbox all the airports in Germany are not getting selected .
Thanks

Have you looked into this issue? Thanks

No, sorry, I had no time. I cannot ensure that I will have time in the near future.
What I remember is that the checkboxes feature was added much later than the non-leaf with layer. Probably I never tested checkboxes in a non-leaf node with a layer.
One explanation could be that there are two checkboxes, one for the non-leaf layer itself, and another to control the children.
... but do you really need a layer in that non-leaf node?

Sorry...but yes....I need layer in non leaf node...thanks


Avoid serializing/deserializing position in TermInfo when there is no positions.

Done in the streamdict codec at least.


adding set / delete UI to environment config

Signed-off-by: Flynn Joffray<EMAIL_ADDRESS>What is the purpose of this pull request? (put an "X" next to item)
[ ] Documentation update
[ ] Bug fix
[x] New feature
[ ] Other, please explain:
What changes did you make? (Give an overview)

Added UI to add or change environment variables
Added UI to select+delete environment variables in bulk
minor 'configuration' page UI cleanup and organization

Which issue (if any) does this pull request address?
Finishes functionality to utilize balena SDK routes, to get/post/delete environment variables
Is there anything you'd like reviewers to focus on?
I am kind of a vue+quasar n00b. It would be great to double check that I didn't do anything dumb that will break going into the future?

I tried it out, and noticed that all the containers are restarted after changing an env variable. Presumably this is some Supervisor reaction to the SDK request. Not really sure why it does it, but seems like it is something we can't control. We should probably put some sort of notification in to tell people that it is going to happen though, maybe a dialog box so they can click to confirm. The restart and shutdown buttons have a simple dialog box in it that I have been copying and pasting from when I need one.

Yes, this is correct. New variables on the device level need to restart the container context, and so the services get restarted. Unfortunately this is something we can't avoid =/ I think maybe adding a note under the 'environment variable' title might be a good way to explain this? I will try adding just that message and we can see if it's not explicit enough

I haven't tested it again, but happy if you are.

I think we are good to go! I wish we had some kind of test suite to work out the online/offline stuff in an automated way honestly, but I can't wrap my head around how we would do that. It will be learn by doing for the moment

I think we are good to go! I wish we had some kind of test suite to work out the online/offline stuff in an automated way honestly, but I can't wrap my head around how we would do that. It will be learn by doing for the moment

Yeah, I think that is something worth a lot of thought. I had a look at the Postman (Newman) tests you mentioned in another post the other day. Very interesting for API testing, considering Postman requests tend to get put together for development already, then just needs inputting what to expect to receive, export and done. Great that it is a GUI too, will make it much easier for other users forking the UI.
I think it has reached a point where we have to really work out what the goal is now. More work could add more complexity, which could be detrimental. And not sure where the point of diminishing returns will be. For me, it was clear this was coming out well so stuck some extra time in as I am going to use it after all for another project. Sometime in the future. But really time spent after this stage isn't going to be so beneficial for that other project, so really got to work out what the hell I'm doing.


How to call VSCode API with VimScript?

Previously, I could use VSCodeNotifyVisual to call VSCode API from Neovim, since v1 deprecated VimScript functions, am I forced to convert to Lua? Are there any alternatives?
Since VimScript works across Vim and Neovim, I really don't see any point in the Lua conversion, probably add the VimScript functions back? Or at least provide a guide for calling VSCode API in VimScript.

Hmm, looks like map / <cmd>call VSCodeNotify('editor.action.commentLine')<cr> works, but wasn't VSCodeNotify deprecated?

Old VimScript functions can still be used for backward compatibility. You can also call lua functions in VimScript

@xiyaowong Then they shouldn't be called deprecated in the doc, I thought they were removed:

Take map / <cmd>call VSCodeNotify('editor.action.commentLine')<cr> for example, how to call the equivalent Lua functions in VimScript? And if I go this route, will they take effect in Vim?

There are examples in the README
https://github.com/vscode-neovim/vscode-neovim#examples

@xiyaowong Thanks for the pointer, but since the VimScript functions code is there, we should probably change the doc to reflect that? Marking them as deprecated makes me nervous, feels like they'll stop working at any time.

Keeping the Vim functions is only for backward compatibility. For new users, they should use the Lua API instead.


Suggestion to use class library

If your tool is not intended to be a class library, how would you feel about using a nuget package to help.
I could create the nuget package.  Then yours can just be a sample even though that yours would be just a console etc.

This is a stand-alone executable application. It is designed to be run on its own, apart from Visual Studio. Making a NuGet package here would not help.


Subscribing to non-durable Queues

Hi!
I'm working with RabbitMQ though CloudAMQP.  I'm having my frontend connect to the service via your library and SockJS.  I have two main queues that I want to be durable.  A user on the frontend generates a random token and sends a request on one of those queues with the token.  The server listens to those and publishes to a queue which is named by the token.  It seems that the subscribe block in the frontend is creating the queue and making it durable.  What headers do I set on the subscribe call so that the queue is not durable and auto-deletes?  Here's what I attempted:
const ws = new SockJS('https://url.cloudamqp.com/stomp');
const client = webstomp.over(ws);
client.connect(username, password, () => {
  client.subscribe(token, callback, {"durable": false, "auto_delete": true});
}, failurecallback, vhost);

Depends the type of queue but I'm using mostly '/topic/xxxx' queue which are topics obviously and it's non-durable and auto-delete. Refer to RabbitMQ documentation or http://jmesnil.net/stomp-websocket/doc/ I'm sorry I do not know more about your case.


Implement configuration mechanism

Needs to support:

[x] Symphony credentials
[ ] GitHub credentials
[x] Ops monitoring configuration
[x] List of bot admins

Partly addressed in rev eaf3cba.


Untar expects file, but produces directory

See repro at https://github.com/wisechengyi/rust_tar_repro
Encountered during https://github.com/pantsbuild/pants/pull/6748 where we try to migrate python's tar lib to rust tar lib for performance reasons.

Thanks so much for the detailed bug report! Turns out this was a bug introduced quite recently, and I'll publish a new version to make sure it's fixed on crates.io


Update logo for MARCUSS OPT TOKEN

I'm submitting a ...
[ ] bug report
[X] feature request
[ ] question about the decisions made in the repository
[ ] question about how to use this project

Summary
I want to update the logo of my token.

Other information (e.g. detailed explanation, stack traces, related issues, suggestions how to fix, links for us to have context, eg. StackOverflow, personal fork, etc.)
PR with update of the logo: https://github.com/solana-labs/token-list/pull/23111
PR where the token was added: https://github.com/solana-labs/token-list/pull/23024

merged


Disallow multiple assignment for constants. Fixes #3466

This is a reopen of https://github.com/crystal-lang/crystal/pull/3507. #3507 got messed up and couldn't find a way to fix unknown repository error on Github.

@asterite i've updated the PR

@sdogruyol Thank you! 🎉


Do you think the project updates?

No time for working on it as of now as it deserves, unfortunately.

@frktmr  is suggest you to have a look at https://github.com/goetas-webservices/soap-client
I have built it exactly for OTA. is pretty new, but if you need a client side implementation, should work fine
While if you need a server side, https://github.com/goetas-webservices/soap-server , unfortunately needs still some weeks of work


Webmin displaying blank page

The last version is displaying me a blank page.
Checking the page source I'm getting this:

Error - Perl execution failed

--
  |
Undefined subroutine &WebminCore::convert_to_json called at /usr/share/webmin/authentic-theme/authentic-funcs.pm line 72.
  |

Any solution?
Thank you.

😄 Yes, there is.
This is due to incompatibly.
Downgrade the theme:
./theme-update.sh -release:19.19
or update Webmin to latest Git version using:
update-from-repo.sh

Hei,
When I try to update the theme it complains that I don't have curl installed, but I can't install curl because it requires libcurl4 and I already have libcurl3 for urbackup-server (which is a requirement to have). Also, I don't want to update Webmin from a non release repository.
Is there any other way to downgrade the theme?
Thanks!

:smile:  Yes!
Download the package and de-archive it to Webmin directory.
I wonder, how could you upgrade to the latest version if you didn't have curl at the first place?

You could also git clone https://github.com/authentic-theme/authentic-theme.git from inside Webmin directory.
/usr/libexec/webmin
or
/usr/share/webmin
You could run
whereis webmin

..to find where it is.

😄 Yes!
Download the package and de-archive it to Webmin directory.
I wonder, how could you upgrade to the latest version if you didn't have curl at the first place?

I have it working again, I just added the json missing functions to web-lib-funcs.pl
But I'm going to downgrade using your instructions so I get a clean system.
Regarding on how I upgrade without having curl? no idea, I just did it via the web interface; maybe perl is using liburl3 and not curl directly?
Thanks for the help :) 👍


Add hybrid common.js - ESM support. Bump deps. Closes #79, #80, #14

cc @holgerd77
before
npm notice package size:  16.0 kB
npm notice unpacked size: 57.6 kB
after
npm notice package size:  18.2 kB
npm notice unpacked size: 76.7 kB

@alcuadrado ping

@alcuadrado can you merge it?


libsForQt5.libopenshot-audio: 0.1.6 -> 0.1.7

Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools. This update was made based on information from https://repology.org/metapackage/libopenshot-audio/versions.
meta.description for libsForQt5.libopenshot-audio is: '"High-quality sound editing library"'.
Compare changes on GitHub

Checks done (click to expand)

built on NixOS
Warning: no invocation of /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7/bin/openshot-audio-test-sound had a zero exit code or showed the expected version
0 of 1 passed binary check by having a zero exit code.
0 of 1 passed binary check by having the new version present in output.
found 0.1.7 with grep in /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7
directory tree listing: https://gist.github.com/2de21b76545cab622fc32c34298c8dcf
du listing: https://gist.github.com/0715cf688e6c7c3244145a6e9c7d462a

Instructions to test this update (click to expand)

One-time optional setup to skip building using Cachix:

Install cachix from https://cachix.org/
Use r-ryantm's cache:cachix use r-ryantm

Test this update by entering a nix shell, seeing what is inside the
result, and if applicable, running some binaries:
nix-shell --pure -I nixpkgs=https://github.com/r-ryantm/nixpkgs/archive/0e072681de3c671bff79d3435aa086d52c05fd16.tar.gz -p libsForQt5.libopenshot-audio
ls -la /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7

cc @AndersonTorres for testing.

No attempt on x86_64-darwin (full log)
The following builds were skipped because they don't evaluate on x86_64-darwin: libsForQt5.libopenshot-audio
Partial log (click to expand)

a) For `nixos-rebuild` you can set
  { nixpkgs.config.allowUnsupportedSystem = true; }
in configuration.nix to override this.

b) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add
  { allowUnsupportedSystem = true; }
to ~/.config/nixpkgs/config.nix.

Success on x86_64-linux (full log)
Attempted: libsForQt5.libopenshot-audio
Partial log (click to expand)
-- Installing: /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7/bin/openshot-audio-test-sound
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7
shrinking /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7/bin/openshot-audio-test-sound
shrinking /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7/lib/libopenshot-audio.so.0.1.7
gzipping man pages under /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7/share/man/
strip is /nix/store/h0lbngpv6ln56hjj59i6l77vxq25flbz-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7/lib  /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7/bin
patching script interpreter paths in /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7
checking for references to /build in /nix/store/xp70ja1p7gf8zgr66a9yypy46dn7n1zj-libopenshot-audio-0.1.7...

Success on aarch64-linux (full log)
Attempted: libsForQt5.libopenshot-audio
Partial log (click to expand)
-- Installing: /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7/bin/openshot-audio-test-sound
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7
shrinking /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7/bin/openshot-audio-test-sound
shrinking /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7/lib/libopenshot-audio.so.0.1.7
gzipping man pages under /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7/share/man/
strip is /nix/store/y4ymnvgxygpq05h03kyzbj572zmh6zla-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7/lib  /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7/bin
patching script interpreter paths in /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7
checking for references to /build in /nix/store/07qyqrr1mkw795ajhywqk89kkkbabcv5-libopenshot-audio-0.1.7...


pouet.net

please implement support for pouët.net, e.g. post title, group and compo when prod link is posted :)

There even is an api, c'mon.


Upgrade the Android build files of the example

Upgrade the example's Android build files. Tested to be working fine on Flutter versions 3.0.5 and 3.3.0.
I basically just generated a new project on Flutter 3.3.0 and copied over the build files (respecting the existing package id)

Thank you!


Add window/door sensor to integration

This PR adds the Window/Door sensor to the integration.

@derjoerg, I'll need your help testing this one as well.

Should this also work for the wireless window position sensors like 6222/1 AP-66-WL?

Should this also work for the wireless window position sensors like 6222/1 AP-66-WL?

Do you have the device configuration for this? I'd be able to double check based on that.

I got the following error:
Logger: homeassistant.components.binary_sensor
Source: helpers/entity_platform.py:369
integration: Binary sensor (documentation, issues)
First occurred: 11:05:04 PM (1 occurrences)
Last logged: 11:05:04 PM

Error while setting up abbfreeathome_ci platform for binary_sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 369, in _async_setup_platform
    await asyncio.gather(*pending)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 628, in async_add_entities
    for entity in new_entities:
  File "/config/custom_components/abbfreeathome_ci/binary_sensor.py", line 80, in <genexpr>
    FreeAtHomeBinarySensorEntity(
  File "/config/custom_components/abbfreeathome_ci/binary_sensor.py", line 115, in __init__
    entity_description_kwargs.pop("translation_key")
KeyError: 'translation_key'

Addresses https://github.com/kingsleyadam/local-abbfreeathome-hass/issues/41


Make empty lists not contain the top of the stack

Fixes #845

I don't understand this. Why isn't struct.items empty for empty lists in the first place? Then the if x check wouldn't be needed.


[BugFix] Set the default value of default role to empty set instead of NULL

What type of PR is this：

[x] BugFix
[ ] Feature
[ ] Enhancement
[ ] Refactor
[ ] UT
[ ] Doc
[ ] Tool

Which issues of this PR fixes ：

Fixes #
Problem Summary(Required) ：

Checklist:

[ ] I have added test cases for my bug fix or my new feature
[ ] This pr will affect users' behaviors
[ ] This pr needs user documentation (for new or modified features or behaviors)

[ ] I have added documentation for my new feature or new function

Bugfix cherry-pick branch check:

[ ] I have checked the version labels which the pr will be auto backported to target branch

[ ] 3.0
[ ] 2.5
[ ] 2.4
[ ] 2.3

run starrocks_fe_unittest

[FE PR Coverage Check]
:heart_eyes: pass : 4 / 4 (100.00%)
file detail

path
covered_line
new_line
coverage
not_covered_line_detail

:large_blue_circle:
com/starrocks/qe/SessionVariable.java
3
3
100.00%
[]

:large_blue_circle:
com/starrocks/qe/ConnectContext.java
1
1
100.00%
[]

run starrocks_admit_test

run starrocks_admit_test


Setup proper build environment

Targeting

[ ] CentOS 7
[ ] TinyCoreLinux (B2D)
[ ] Fedora 2x
[ ] Alpine (MobyLinux)
[ ] ...

2 targets are needed for our own usage in minishift/minishift


ament_index: 1.0.5-1 in 'rolling/distribution.yaml' [bloom]

Increasing version of package(s) in repository ament_index to 1.0.5-1:

upstream repository: https://github.com/ament/ament_index.git
release repository: https://github.com/ros2-gbp/ament_index-release.git
distro file: rolling/distribution.yaml
bloom version: 0.10.6
previous version for package: 1.0.4-1

Holding for a coordinated merge.


Release a new version of the gem

After releasing a new version. Update marc_liberation.

this was done


Improve setAttribute Mutators return consistency

This change returns the current object from setAttributeMarkedMutatedAttributeValue which allows using $model->setAttribute('key', 'value')->save() when using Attribute Mutators. As far as I can tell the setAttribute is otherwise intended to return $this and only returns mixed (in phpdoc) since it is unknown what is returned in a custom mutator function via setMutatedAttributeValue.
Since setAttributeMarkedMutatedAttributeValue currently returns void this change should have no impact on anything else.

I don't think I'll change this behavior for now. You can use tap.


Allow to keep the last mute state for a room widget per user

Is your feature request related to a problem? Please describe.
When you mute the widget and switch rooms, the mute state isn't kept. This gets annoying sometimes.
Describe the solution you'd like
Some way of saving it on a per widget/room base per user.
Describe alternatives you've considered
Starting muted by default. But that's against the purpose of a conference.

related: #51


Can support myck conversion?

convert: DelegateLibrarySupportNotBuiltIn 'srcFile.jpg' (LCMS) @ warning/profile.c/ProfileImage/873.
const command = ["convert", "srcFile.jpg", "-colorspace", "CMYK", "-profile", "myck.icc", "out.jpg"];

I was actually trying to convert ICC profiles as well; it seems the delegate library is not built in, like you experienced.

LCMS support is in https://github.com/dlemstra/Magick.Native
See https://github.com/KnicKnic/WASM-ImageMagick/issues/46 to port that project's compilation steps

@a573367014  @DevinKott-KA can you please provide samples to files to attempt this either links here or email them to me.
Thanks!

@KnicKnic Here is a repository full of ICC/ICM files that you can download one from. I specifically just tried the "acer_xb270hu.icc" profile. I ran it on my desktop with "magick ./horse1.jpeg -profile ./acer_xb270hu.icc ./output.jpeg" and it worked fine. Generates output.jpeg with the color profile applied.

@DevinKott-KA I added support for lcms delegate (which is the library needed for this) to magica - a project similar to this one. You can find wasm files here but I don't think they will work with this project out of the box.
I will try to support lcms on this project , in the meanwhile you can replace .wasm with  magica's  magick.wasm and edit magick.js file replacing the minified js with magica's magick.js file
To use magica's wasm in this project sources this should work also
Copy magica's magick.js and magick.wasm to this project's folder ImageMagick/utilities - remember you have to clone this project using --recurse-submodules and the execute:
git clone --recurse-submodules https://github.com/KnicKnic/WASM-ImageMagick.git
cd WASM-ImageMagick
npm i --ignore-scripts
rm ImageMagick/utilities/magick.js ImageMagick/utilities/magick.wasm
 wget https://github.com/cancerberoSgx/magica/raw/master/src/imageMagick/compiled/magick.wasm -P ImageMagick/utilities
 wget https://github.com/cancerberoSgx/magica/raw/master/src/imageMagick/compiled/magick.js -P ImageMagick/utilities
npm run build-ts
npm run copy
npm run magickApiJs


Activate virtual environment automatically

PyCharm detects and activates Django project's virtual environment automatically. Love to see the same thing on vscode.

/extPython
Python functionality provided by Python extension and this request make sense in extension repo.

/extPython
Python functionality provided by Python extension and this request make sense in extension repo.


publication_date in news sitemap is not compatible with sitemap spec

Currently publication date is formatted using DATE_ISO8601 which is not compatible with ISO-8601.
It should use DATE_ATOM or DateTime::ATOM to format date to comply with sitemap spec
https://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd
https://www.google.com/schemas/sitemap-news/0.9/sitemap-news.xsd

Merged into master. Preparing for release.


User and Custom Property information in Analytic and Diagnostics

Describe the solution you'd like
User information in Analytic and Diagnostics. So you can filter by custom properties and user. We might set custom properties for the Client (as we are B2B).
Describe alternatives you've considered
N/A
Additional context
Finding out which client is getting the errors allows us to get in touch and investigate as they have their own infrastructure.

Thank you for creating this feature request! Your input is valuable to us, and I will take this feature back to the team to be reviewed.

Has a review taken place on this?


Remove stale files for scala compilation

Whenever Zinc doesn't have the data to remove them.
Note that Zinc cannot do incremental compilation on Java 9 :(

This should fix #5769.


Changes from 3.2

Merged changes from 3.2.x-new.

Closing this as it looks weird to have only 1 commit, will submit a new one.


fix typescript config for rollup

It turns out that even with the nodeResolve fixes, we still need the typescript plugin to build with rollup. This PR fixes that

Is this needed to fix the Babel type issue you mentioned? If so, I think we should go with your original approach and remove both nodeResolve and Babel (or at least the Babel Typescript preset). Otherwise we're going to have two tools compiling TypeScript syntax, which doesn't feel right to me.

We need babel for sure. It just removes all typescript syntax and converts to Javascript. We use tsc independently to verify types in the build step. I suppose there must be some other way to do this that is better?
To answer your question directly, when I ran the branch I'm about to draft PR, it failed on the first TS syntax. Maybe you can grab that branch and play around with it to find the best config? You seem more versed in the options than I am, it would be good to get this just right.

(#3520 is the draft PR @nickmccurdy)

The TypeScript compiler (tsc) can generate JS, it's not just a typechecker. If we disable noEmit, the TypeScript compiler will emit JS, and we can either remove Babel or just remove the TypeScript Babel preset if we need to use JS features not supported in TS (unlikely, even JSX works in TS).
Thanks, I'll take a look at #3520 and let you know if I have better ideas. Sorry if my previous config PRs caused confusion, I'm less experienced with the Babel TypeScript preset so I'm not as aware of its limitations compared to the TypeScript compiler.

I see what you mean, removing the TypeScript Rollup plugin causes unexpected token errors, but I'm not sure why (note that you have to disable JSX in tsconfig to this this first, or TS will think that the <> type assertion syntax is JSX). Meanwhile giving the extension list to Babel causes a circular dependency for some reason.

I managed to fix the syntax error, but there's a circular dependency in #3520. If you want to use the TypeScript compiler, you cannot import the declaration file from src/index.ts, because it has the same path, which will cause the index file to import itself and crash with a stack overflow. It seems like the best way to fix this would be to move index.d.ts to src/types.ts and import that in src/index.ts without importing src/index.ts, ., or .. in src/types.ts.

Also I'm still confused about how the Babel issue was solved. Is the TypeScript compiler needed for this or can we remove it in favor of Babel?

ok, @nickmccurdy @timdorr I'm pretty sure this is the simplest working setup.
I tried changing whether babel had its extensions, and removing the nodeResolve. This fixed nothing. We need rollup-plugin-typescript2.
I think this is the best setup for now. Perhaps we'll find something better later

Thanks for your help, I know this isn't easy. In the case that we need TypeScript, I'd rather remove Babel, as we don't seem to be using any part of it that TypeScript itself can't handle. Would you like me to make a PR trying that? We could merge this for now, assuming it works with your other PR.

not at all, I enjoy this stuff :)
I prefer to keep both, as babel has much better support for transpiling features down. typescript is compiling to the latest javascript, and then babel refines it for us. I also imagine that in the future, support for ts will improve, and we can revisit it then.
The final call is @timdorr in this, my opinions are only opinions

OK. I finally have some clarity on this.
The configuration will go through 2 stages.

While we still have an index.d.ts, the config in this PR will be used.
Once all the types are moved out, we can use a config that is more standard, and remove the typescript plugin.

So, this PR should be considered a step-along-the-path PR, but an essential one.

Interesting, so our dependency on the TypeScript compiler is only because of how we're migrating the index.d.ts file?

Interesting, so our dependency on the TypeScript compiler is only because of how we're migrating the index.d.ts file? In that case I'm ok with merging this, but I'd prefer to switch to either only Babel or only TypeScript once it's fully migrated.

This is explicitly the plan I'd like to take.
My motivation is having human-readable diffs along the way, and a working config as we go. If this seems too git-focused, I'm OK doing everything-at-once, but it should make it easier to roll back if I/we make a mistake along the way. At least that's my theory :P

so... anything need changing in this PR?

no worries, thanks for taking a look!


How to implement Structured Logging in Adonisjs

How-To Guides Overview
I will be showing you the best practice in implementing Structured in Adonisjs, discussing in detail the best ways involved in implementing a scalable Logging System in your RESTFUL API. We will build a real-world app to demonstrate how to debug easily with a good Structured Log in AdonisJS.
What is the Scope and Purpose of the Guide
Students will learn how to build a high-maintainable app with Adonisjs
Students will learn how to implement a Structured Logging in AdonisJS Restful API
Students will learn how to choose what to Log and how to Log it.
Students will learn about the concept of Structured Logging and how to maintain a large App with it.
Students will learn best practices in building large-scale Web apps with AdonisJS.
References:
https://www.scalyr.com/blog/the-10-commandments-of-logging/
https://stackify.com/what-is-structured-logging-and-why-developers-need-it/
https://www.loggly.com/blog/30-best-practices-logging-scale/

Hello @hectorkambow,
What's the status of this?

@Kaperskyguru  seems like a helpful topic - lets please be sure it add value beyond what is in the official docs and that it does not overlap with any existing EngEd articles or incoming topic suggestions (if you haven't already) to avoid any potential article closure. - approved
Apologies for the delayed response - we try to approved at the same time we published 🚀

Thanks.

@Kaperskyguru
Just pinging you on this topic form - as Im making some room in the topic queue.
No rush if you're still working on this one - if you need more time we can always re-open at a later date.

Yeah. I am almost done with this. Sorry for delaying. I will send my first draft by Monday.


support port forwarding for deployment resources

Hi 👋  kubectl supports port-forwarding using deployment object. Currently k8s package inside terratest restricts it to only pods and services. It would be nice to support deployments too.

Hello, This is my first help and I'd like to implement this issue. I already read the guidelines.
If there isn't any problem, my next steps will be:

Update the document
open a PR with the code.

I saw the doc folder and there aren`t any necessary changes to be made.

PR #1274 was merged. This issue can be closed. Thank you all.

Released in https://github.com/gruntwork-io/terratest/releases/tag/v0.41.21


Fixing plotting

@birdage @oceanzus @FBRTMaka @lukecampbell
THIS NEEDS TO BE CHECKED HARD!  I think I resolved the conflict.

@birdage REVIEW
@lukecampbell REVIEW

@lukecampbell pls im busy at the min


Timeout to short in private VPC for DNS challenge

Lego does not work in private AWS VPCs.
The timeout in line https://github.com/xenolf/lego/blob/bacb545c7a26a247cf36a0c9ec46b2697a65465a/acme/dns_challenge.go#L107 needs to be configurable.
./lego --dns-timeout=3 --server=https://acme-staging.api.letsencrypt.org/directory -d *** --dns=route53 -m<EMAIL_ADDRESS>run
2018/03/12 11:03:52 [INFO][***] acme: Obtaining bundled SAN certificate
2018/03/12 11:03:52 [INFO][***] AuthURL: https://acme-staging.api.letsencrypt.org/acme/authz/***
2018/03/12 11:03:52 [INFO][***] acme: Trying to solve DNS-01
2018/03/12 11:05:41 [INFO][***] Checking DNS record propagation using [<IP_ADDRESS>:53]
2018/03/12 11:08:13 [***] Could not obtain certificates
        Time limit exceeded. Last error: read udp <IP_ADDRESS>:44781-><IP_ADDRESS>:53: i/o timeout

<IP_ADDRESS> is the aws DNS server which is responsible for our VPC
<IP_ADDRESS> is one of the 4 NS of route53
Our machine <IP_ADDRESS> only has access via a http proxy to the internet. DNS queries DNS server in the internet like (<IP_ADDRESS>) or our NSs like <IP_ADDRESS> are not possible. We can only ask our VPC DNS server (<IP_ADDRESS>).
I did some tests in our environment. It takes approx. 5 minutes till the TXT entry is answered first by <IP_ADDRESS> (not accessible in the VPC) and then max 1 minute later by <IP_ADDRESS> (accessible in the VPC). With very short refresh rates in our SOA entry we can get it down to approx. 3 minutes till the entry is answered by our dns server. This is still too long.

Hey!
There is currently no way for the user himself to override this timeout but for the provider implementation by having the provider be a ChallengeProviderTimeout instead of just a ChallengeProvider. You are using route53 and it seems like there was no custom timeout specified for this provider.
What timeout would you feel is plenty for a route53 VPC setup? Like 15 to 30 minutes?

Hi,
It depends which refresh rates and cache timings are configured on the SOA entries. But generally 10 minutes should be enough for the last check before triggering the challenge by letsencrypt. So setting the default timeout to 10 minutes is the simplest way.
Increasing should be no problem because this is only for private VPC. VPC with internet access should have no disadvantages.

Closed by #603 and #634


Implementation of pure SSH API

This PR makes git-lfs compatible with a pure SSH server implementation, rather than only authenticating then doing everything else over HTTP. This is particularly useful for people self-hosting who don't want the overhead of setting up & maintaining a web server.
Corresponding reference server implementation is at https://github.com/sinbad/git-lfs-ssh-serve
PR in its current state focusses on a pure SSH route (including upload/download), future extensions might include supporting a further hybrid setup where again no web server is required for any API calls (UploadCheck/DownloadCheck) but the Upload/Download can still be redirected to hypermedia links (most likely S3).
PR also adds support for a few more SSH URL forms including custom ports. The existing git-lfs-authenticate route is not affected.

Before merging, I'd like to get some assurance that you'll be around to support it. We're not planning on using it in production anywhere. I don't see this being a problem, but I just want to be clear :) I also still need to set this up locally and see the flow working, and make sure our existing servers all still work.
After merging, here are some things I'd like to see:

Git config to immediately fallback to git-lfs-authenticate.
Implement the *All() batch methods, and get rid of ApiContext.
Integration tests would be awesome. I wonder if we can spin up a fake ssh server...
Eventually merge the SSH commands. git-lfs-ssh-authenticate (command name doesn't matter) could verify the auth, and then send a response tells the client to either send further commands over the connection, or use the given token to talk to the API.

Regarding a git config fallback: If I understand this, it falls back to the hybrid https/ssh authentication method if connect() discards the error and returns a nil context. Any thoughts on writing a key like remote.{name}.lfs**** to the repo's git config when this happens, so that it doesn't have to do all this every time a user accesses their remote? We're experimenting with this idea in #358.

Yeah I'd love to figure out how to fully test over real SSH instead of having to use a pipe, that last little piece of non-automated testing bothers me. I couldn't figure out a way to fake it without still having a gap - a fake ssh server in go is possible but it still wouldn't be 100% real. But then again, still better so maybe I should have a crack at it. Before you merge I'd like to do a few more tests myself anyway since I had to finish it while travelling and didn't have my office servers available to test with. Also I don't have a live implementation git-lfs-ssh-authenticate to test with, assume GH's implementation is not available as source - I've signed up for the GitHub LFS early access queue which I guess is the best way to test this, maybe you can get that enabled for me?
Config fallback to remember the preferred route sounds sensible, the only issue is dealing with transitory error conditions, e.g. someone tries to push while offline etc - you wouldn't want to bake in that failure as a preference. I guess that means only setting the option after a successful use of that path.
About maintenance, I'm assigned to this area by Atlassian for at least the next few months and have a personal interest in it anyway so would probably be tinkering with it even if I wasn't. I can't make any irrefutable promises for the future though, real life etc :) I think it's useful even if marked 'experimental' with GH's line being simply that you don't support it - the refactoring is useful anyway. Or, if you're worried it will slow you down when you're adapting the API, at least now I know you're OK with the principles you could merge just the stuff that's immediately useful (SSH URLs, plink/Tortoise support) and I can maintain my SSH fork in parallel & see what the community thinks. The main issue with that is that the refactoring required moving some code around which becomes harder to maintain over time. That said, it was only about 10 days work so if I had to do it manually again I could do it more quickly anyway - it might just not be always in sync. I'm happy with whichever approach you want to take.

Found a couple of auth prompting issues now I can test in real environments, hold off merging either way until I've nailed them down.

I am seemingly able to stall it sometimes with large numbers of files when using git lfs fetch though (and not git checkout - maybe an issue with the batch implementation). Working on that.

OK, finally figured out why - my misunderstanding of how your goroutines worked. Needs a bit of a design change to accommodate & serialise to the SSH pipe(s), I'll resubmit once I've sorted it out.


Run APIM Cli without requesting access to sonatype

APIM-CLI version
1.14.5
API-Management version
May 2024
Question
Hello, is there an option to debug APIM CLI locally without requesting an access to your sonatype?
We are facing issue with import new APIs , some of the subscribed applications have access to over 500+ APIs an importing process take 5-10 minutes, which is not acceptable for us.
So I would like to run it locally and find the rootcause before create a bug report here.

Hi @blcktqq,
Please clone the project locally and run mvn clean package -Dmaven.test.skip=true to build it locally.


restyled load scenario page

While working on combining scenarios I've cleaned up this view a bit. We might want to merge it. What do you think @antw ?

I'm having a bit of trouble formulating the issues I'm trying to solve here. I'll get back on it when I've structured my thoughts a bit better


unit_defs.txt file is missing on PyPi

PyPi excludes a unit_defs.txt file that is required for doing automatic unit conversions.

Resolved


Add dark mode

With switcher similar to the microsoft dev services recruiting site.

Went dark.. no switcher.

Hi

Hi


remove pipelinexxx macros

Starting here: https://github.com/scicloj/tablecloth/blob/e0306d7b87c9c0ec92c4c970d99ed58631f37b59/src/tablecloth/pipeline.clj#L31
They are all in metamorph:
https://github.com/scicloj/metamorph

But this way we make pipeline napespace not usable without metamorph which is not a dependency of the library.
What about removing pipeline completely?

But this way we make pipeline napespace not usable without metamorph which is not a dependency of the library.

That is not a problem. The code of the functions is "repeated"  and started to diverge already. So we have maintenance costs.

What about removing pipeline completely?
That would break backwards compatibility heavely.
The remaining code has "no maintenance cost", as it just auto generates functions. Its 'free beer".

I do agree that the  pipeline namespace could have been avoided altogether.
scicloj.ml should have run the generation on the fly.
But it is there and does not harm in my view.
Same in TMD itself:
https://github.com/techascent/tech.ml.dataset/blob/master/src/tech/v3/dataset/metamorph.clj
Here we have only the function generation.
If we "remove completely" we should do on "one go"   for TC + TMD together (and move to scicloj.ml) , announcing it properly.

Then it would stay "invisible" for scicloj users, if there are any....
Maybe this PR first to avoid having real duplication (and divergence) in the pipeline functions.

And then we think about a simultaneous change of TMD / TC + scicloj.ml, to move the generation here:
https://github.com/scicloj/scicloj.ml/blob/main/src/scicloj/ml/metamorph.clj
So instead of export-xxx we do generate-xxx

Agreed. Will merge PR soon.


Control; 'name_unique' option

Currently, if a Mint control is added into a Luxe scene with a duplicate name, the scene will throw a warning.
It'd be great if Mint control options had the 'name_unique' parameter like Luxe objects have, so this is handled in the constructor.

Upon further thought, it seems more sensible to default to a good name + unique id and the explicit name override to be what it's intended: explicit.
What that means is previously, the defaults were sensible plain names:

button
progress

Now:

button.2F6xWQ
progress.8FCHj

This means that you can create controls freely without naming overlaps, since the name is not a function of the library usage, unless explicitly required to be, in which case the application implementation detail will handle both of those. The library provides the option to be explicit.


platform(melpomene): simulate I2C devices

it would be cool if we could exercise the i2c_puppet driver in Melpomene. in order to simulate i2c devices, we would need to add a simulated implementation of the I2cService in Melpomene, and configure it to respond to I2C transactions with the i2c_puppet address.

copied from chat:
(Eliza)

specifically what i'm thinking would be nice for melpomelo is if we could have a sim impl of I2cService so that the i2c_puppet driver, which is cross-platform, can run in melpo
it would be really cool if melpo made keyboard input pretend to be i2c_puppet and then the i2c_puppet driver read from the IRL keyboard

(me)

Okay, so just the service for starters
I was figuring you'd want some kind of instrumentation, like "expect this sequence of commands"

related: #169


[Docs]: Create notifications YAML reference

Type
New content idea
What do you want to report?
Create notifications YAML reference
Code of Conduct

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

Review link: https://storage.googleapis.com/sem-docs/main/index.html#/docs/reference/notifications-yaml


Running as user causes installer to ask for the .msi

ℹ Computer information

PowerToys version: <IP_ADDRESS>
PowerToy Utility:
Running PowerToys as Admin: no
Windows build number: [run "winver"] 18363.1377

📝 Provide detailed reproduction steps (if any)

…INstalled PT using local admin account
…Tried to run the powertoys icon from the windows menu
…

✔ Expected result
Start the powertoys utility in the task bar
❌ Actual result
I ambeing prompted for the network path to the installation files
📷 Screenshots
Are there any useful screenshots? WinKey+Shift+S and then just paste them directly into the form

Same issue here. I had tried the choco route first and received the same prompt about the bootstrap installer being in the admin's temp folder, and thought that's a bit daft, I'll try the exe route--same result. I would have expected it to be left in %CommonAppdata% to facilitate "installation" by standard users.
I've not used the app before (found a need to now) so wondered if the current installer regressed to leave the bootstrap in Admin's temp folder instead of a publicly accessible folder. Or, heaven forbid, there is an assumption all users will have admin access all the time? I'm hoping it's the former, ;-).

@gmkeif @look4sol
can you please provide the exact repro steps?
Is this an update or a clean installation?
Is the current logged on user an administrator or not?
Are you starting PowerToys for the same account or did you logged off and logged on with a different account?

Logged on using an ordinary user account (no privileges)
Ran the install as local admin ("Run As") whilst logged on as the ordinary user
Attempted to start the app using the same ordinary user account (did not log off)

@look4sol
thanks.

* Logged on using an ordinary user account (no privileges)

* Ran the install as local admin ("Run As") whilst logged on as the ordinary user

* Attempted to start the app using the same ordinary user account (did not log off)

Ditto, although I ran the installer from an elevated command prompt. The EXE installer ran the app upon completion, but as the administrator. Closing it, and launching it as the ordinary user presents the failure to locate bootstap installer. Mind you, I wanted it to preview Markdown files, which is functional without the PowerToys app actually running. :-D

I'd like to add a plus one to this issue and hopefully some additional info. Like the other two I had the same process (logged on ordinary user, install as admin, attempted to start as ordinary user) to the same fate. However, I have found I can start it by opening the app from Program Files\PowerToys no issue as an ordinary user. For me it seems to be an issue with the default shortcut made for the start menu. If I delete the shortcut made by the installer at ProgramData\Microsoft\Windows\Start Menu\Programs and replace it with a handmade shortcut I no longer get the same issue.

@ralemons, very good tip indeed. Running the software from Program Files\PowerToys works, no problems. It's the windows menu shortcut that is causing the issue.

Very interesting! Also noticed the Target Path of the shortcut appears "blank" unlike, the Office shortcuts, for example, which target the executables in Program Files. PowerShell revealed the TargetPath on the installed short to be: C:\WINDOWS\Installer\{FB5F92BF-39E2-4757-A744-55D2D28E9BEF}\powertoys.exe. Dunno if this path has any bearing on trying to launch the bootstrap installer.

I ran into this too. Occurred for <IP_ADDRESS> also.

This issue doesn't exist in older versions.
Silent installation was run by an administrator. If a standard user want's to use it (from default startmenu shortcut) this error comes up.

Adding a reference to https://github.com/microsoft/PowerToys/issues/9169 that may be related.

I ran into this after manually upgrade from 0.28.0 to 0.31.2. Ran in under local admin account. Switched to another user and tried to run and it gave this error.

I have this same issue after updating to 0.31.1 and 0.31.2. The ProgramFiles/PowerToys approach works, but I just want to add to this issue is that if I would log in with the admin user, which is how I've installed it in the first place, it would work without the issue. It only fails when I try running it from the start menu as a regular user.

The issue is that the underlying MSI installer is creating "advertised" shortcuts. More info: [](https://stackoverflow.com/questions/11776023/advertised-shortcuts-vs-non-advertised-shortcuts-in-windows-setup-project#:~:text=An advertised shortcut (Windows Installer,shortcut supports advertisement and repair.)

I have a different problem.
I am logged as a administrator and still I have the same problem.
As I run the PowerToys.exe file from the C:\Program Files\PowerToys folder, still the application tells me that I have to run as an administrator.
If I select to restart as an administrator, nothing happens.
These images show the situation I described.

I would really appreciate your help.
Thank you.

@soneghet
the problem you reported is different from the topic of this issue, please open a new issue, thanks.

@soneghet
the problem you reported is different from the topic of this issue, please open a new issue, thanks.

Thank you. I did it.

Same happened today for me. After Updating.
Note: The msi is searched in the other user's directory of the user that was used for installing.

The bug is caused by a combination of having the advertised icon and this registration:
https://github.com/microsoft/PowerToys/blob/0413fe944ff4d81a84cb49b0f656bb765d98ed22/installer/PowerToysSetup/Product.wxs#L923-L927
that uses HKCU.

This has been resolved in the 0.35 release. https://github.com/microsoft/PowerToys/releases/latest

Hi,
still a bit puzzled here. I tried to uninstall PowerToys to get a clear install.
May have done some bad moves cause now i can't install anymore the 0.35 (same problem asking for PowerToysBootstrappedInstaller-<IP_ADDRESS>) nor use PowerToys anymore.

I have the exact same problem. how to uninstall version Release v0.31.2

@und3rn00b @Netzlichter
use the Microsoft uninstall trouble shooter
https://download.microsoft.com/download/7/E/9/7E9188C0-2511-4B01-8B4E-0A641EC2F600/MicrosoftProgram_Install_and_Uninstall.meta.diagcab

Thanks a lot, works perfectly now.

I had the same issue on one PC with version <IP_ADDRESS>. Fixed this by downloading the installer for <IP_ADDRESS> and then extracting the MSI (using --extract_msi) to access PowerToysBootstrappedInstaller-<IP_ADDRESS> which then allowed me to Uninstall it.


Refactor and repair checking logs for eventing

Description
We missed tests for checking logs in the eventing flow.
Changes proposed in this pull request:

Added tests for checking logs after triggering function

Related issue(s)
Closes #777

/test pre-busola-integration-test-k3s

/hold

/retest


Add async readline/echo and add composer commands

Thanks, I was missing something akin to readLine just yesterday (just on a TCP socket to be used via telnet) ... But there's a catch: you are throwing away everything but the first line.
 Is just sort of ... too primitive. Even on the kernel level you have the possibility to peek at the input stream and decide how much you want to consume (recv(MSG_PEEK)). But here this is not trivially possible.
It feels to me that there is fundamental functionality lacking here.

Actually, I'm not throwing away anything because the other lines are being buffered in a static variable that persists after the function exits.
I, too, encountered some issues when working with non-file AMP streams, which is why I created my own incremental async stream APIs, with buffered wrappers, hashing proxies, generic proxies.
I intend to separate the stream and loop APIs of MadelineProto soon, so you can use them without including the entire project.
In the meantime you can try fiddling around with them if you like.

@bwoebi I don't think these need to be on the basic interface. While they're sometimes needed, they can be provided by wrappers.

We could include an implementation similar to https://github.com/kelunik/streaming-json/blob/c8b5bb9f65c67c0ca1fd2771ef00332c4c8ffe93/src/StreamingJsonParser.php, which doesn't do the JSON decoding and allows for customization of the line ending.

Ping?

This is something we see out of scope of this package, so I'm closing this. It hasn't received much attention in the last 4 years.


Being asked for details for SMB instead of RSYNC

Hey there.
Host: Windows 7
I am being asked for details for SMB instead of RSYNC when using vagrant-aws. Is there any way to force RSYNC? Or am I doing something completely wrong?
VagrantFile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|

  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id = "blerpblerpblerpblerpblerpblerp"
    aws.secret_access_key = "S/blerpblerpblerpblerpblerpblerpblerpblerp"
    aws.keypair_name = "blerp"
    aws.region = 'us-west-2'
    aws.instance_type = 't1.micro'
    aws.security_groups = "blerp"

    aws.ami = "ami-a850c898"

    override.ssh.username = "ubuntu"
    override.ssh.private_key_path = "C:\\keys\\blerp.pem"

  end
end

Output:
C:\xampp\htdocs\DEV\vagrant_aws_test>vagrant up
Bringing machine 'default' up with 'aws' provider...
==> default: Preparing SMB shared folders...
    default: You will be asked for the username and password to use for the SMB
    default: folders shortly. Please use the proper username/password of your
    default: Windows account.
    default:
    default: Username:
    ...

Thanks!

Oh, how I loathe the Vagrant SMB sharing feature. :(
The workaround for this is to not run your command prompt with admin privileges. Using current vagrant and vagrant-aws with a regular user shell allows me to launch without the SMB sharing code (which never works for me) from firing.

Is there a way to force a different sync mechanism?  It looks like even if I set the sync option to "rsync", "smb" is still used when it comes to running the provisioner (I have chef solo configurations).

Not that I've found so far.

@michaelzhou999 still an issue?
How did you " set the sync option to "rsync" "? What works for me is:
config.vm.synced_folder ".", "/vagrant", disabled: false, type: 'rsync'
which "overwrites" the default sync definition.

@bheuvel That works for the vagrant shared folders, but chef shared folders will still try to use SMB. :cry:

For chef syncedfolders I think it would be like:
  config.vm.provision "chef_zero" do |chef|
    chef.synced_folder_type = "rsync"
  end

(Hope it helps. I'm not using aws plugin, but this works for me for the cloudstack plugin using (forcing to) winrm.)

How about:
config.vm.allowed_synced_folder_types = [:rsync]

See https://github.com/mitchellh/vagrant/pull/5013

Adding the below command worked for me.
config.vm.synced_folder ".", "/vagrant", disabled: true

@bheuvel This helped me.  Thank you sir.

@bheuvel  Worked for me. Thank you.

@hemags worked for me as well

I'm not understanding how this bug has gone three years without being fixed...how is the AWS plugin even usable? Rsync is explicitly called out as the method to use for shared folder support, it's what the plugin supports, yet it asks for SMB credentials? What is going on? I'm not using Chef, Puppet, Ansible, or anything like that. Just Vagrant on macOS with Linux guests. The plugin is completely unusable in this state.

How about:
config.vm.allowed_synced_folder_types = [:rsync]

See hashicorp/vagrant#5013

This worked for me! I haven't run a vagrant up using vagrant-aws for about 5 months and I go t the "SMB" prompt. This fixed it. Thanks.


Authentication problem while cloning using git bash

I used this command - "git clone --recursive git@github.com:smc/Indic-Keyboard.git" and got following errors -
"$ git clone --recursive git@github.com:smc/Indic-Keyboard.git
Cloning into 'Indic-Keyboard'...
The authenticity of host 'github.com (<IP_ADDRESS>)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,<IP_ADDRESS>' (RSA) to the list of know                                                      n hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
"
So it means either project is no more public or it isn't exit at that place, so can someone help me to find out what can be the real cause

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/31744662-authentication-problem-while-cloning-using-git-bash?utm_campaign=plugin&utm_content=tracker%2F493413&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F493413&utm_medium=issues&utm_source=github).

Use https instead of ssh if you are cloning from the main repo.
If you want to use ssh, make a fork and use that repository instead.

I had also cloned from  "git clone https://github.com/smc/Indic-Keyboard.git", and done successful build after removing gradle.build, but it was showing too many unused import errors when I tried to run it in emulator(or tried to generate apk), and hence I used method shown in How to build,
I will see how to fork and check whether it will work or not

Please go through the official github help for this issue. The error you get has no relation to Indic-Keyboard

Solved- below are the problem and there solution I faced for successfully running this project in android studio
1)Authentication Error - follow this document to get public key for your computer(suggested by asdofindia);
after that you can successfully clone the project.
2)Too many unused imports after successful cloning(check if indic-keyboard/ime have something inside it or not, if it is empty follow step given below to run the project) -

after using this command "git clone --recursive git@github.com:smc/Indic-Keyboard.git" use cd indic-keyboard to navigate to project directory

use "git submodule update --init --recursive" or "git submodule foreach --recursive git checkout master" as suggested by asdofindia and in this stackoverflow question.

then go to build.gradle in your clonned directory/indic-keyboard/java and remove signingConfigs and buildTypes part from it after saving import java folder to android studio and hopefully everything will work


How to run locally in prod mode

npm run dev runs app in dev mode.
Before packaging I want to test the app in prod mode. What command I need to execute to do that.

Add a script called "start-prod": "cross-env NODE_ENV=production electron ./app/main.prod.js", and then run npm run start-prod. note that this skips building the main and renderer processes in production. It assumes that you've done that already =

Forgot to mention that that script should be an npm script. I updated my comment

If I understand correctly then I need to execute following commands.
npm run build-main #builds in prod mode by default
npm run build-renderer #builds in prod mode by default
npm run start-prod

Should we add it to README? Others might have the same question.

Yea I can PR for that


Deterministically generate IDs from Ingress rules

What this PR does / why we need it:
Generates route IDs based on Ingress contents.
Special notes for your reviewer:
This is a PoC WIP and lacks tests. Tests will be similar to #1003's, i.e. mostly meaningless (but necessary) changes to expected objects for parser tests and a new translate test to confirm that rule order does not affect the ID->route configuration mapping. Route names will still change, but the hostname and path set for a given ID will not.
If this PoC looks good, we'll further add similar logic for Services and KongConsumers.
See https://github.com/Kong/kubernetes-ingress-controller/issues/834#issuecomment-759739025 for some additional overview of the landscape. Main important point is that this change does not affect existing routes for Postgres-backed databases; those will require a reset for the new IDs to appear.

Left unsquashed for now though it's probably not hugely useful.
Services and KongConsumers aren't particularly interesting because we already deterministically generate names for them (Namespace+Name+Port and Namespace+Name, respectively), so the UUID5 input is just the name. No tests other than confirming the ID, since we weren't populating those at all previously--any previous change in IDs was only realized after the resources were submitted to Kong.
Consumers are annoying to test because FillConsumersAndCredentials() manipulates state rather than generating resources, and dealing with state objects is no fun. The new test for it is only intended to test that the ID never changes from the test value, but has to generate a complete object and state scaffolding for it.

Left unsquashed for now though it's probably not hugely useful.
Services and KongConsumers aren't particularly interesting because we already deterministically generate names for them (Namespace+Name+Port and Namespace+Name, respectively), so the UUID5 input is just the name. No tests other than confirming the ID, since we weren't populating those at all previously--any previous change in IDs was only realized after the resources were submitted to Kong.
Consumers are annoying to test because FillConsumersAndCredentials() manipulates state rather than generating resources, and dealing with state objects is no fun. The new test for it is only intended to test that the ID never changes from the test value, but has to generate a complete object and state scaffolding for it.

As agreed in a zoom call (@rainest @mflendrich @shaneutt), the choice of preferred solution to this problem (hashing the entire object vs hashing a set of fields) depends on whether components depending on these IDs will aggregate data within a high-level business object that potentially maps to multiple IDs.

As agreed in a zoom call (@rainest @mflendrich @shaneutt), the choice of preferred solution to this problem (hashing the entire object vs hashing a set of fields) depends on whether components depending on these IDs will aggregate data within a high-level business object that potentially maps to multiple IDs.

@skibum and @eskibars we're in disagreement about how to implement this and are looking for product input on when it makes sense for changes in K8S-level configuration to result in different Kong entity IDs. We've considered the following options:

Tie IDs to a combination of the source Kubernetes configuration and the logic we use to split that configuration into multiple pieces of Kong configuration. For example, since we split K8S Services into Kong services by port, the ID is derived from the K8S namespace, Service name, and port, and only a change to one of those will result in a different ID.
Tie IDs to the complete Kong object. Any change to configuration will result in a different ID, e.g. changing a service's protocol from http to https will change its ID.
Ignore the split logic and use a single ID for all Kong entities derived from a Kubernetes resource. Kong would require changes that allow it to store this new ID, submit Vitals data for it, and provide an aggregate view of Vitals data submitted for it.

IMO (1) makes sense, and it's what I've currently proposed. (3) is arguably most coherent for end users, since they interact with K8S resources and may reasonably expect that we'd show metrics for all traffic that is handled by a single Ingress definition, for example. However, that's not possible because we cannot always represent an Ingress with a single route and require unique IDs for routes. In light of that, my rationale with (1) was that it only generates IDs when the split logic requires it, and does not change them unless a user makes a change to the split criteria, allowing a solution that avoids the Kong/Vitals changes that (3) would require.
@mflendrich proposed (2), with the rationale that we don't have to update ID generation logic if we change our split logic. I'm opposed to this because I think it results in a markedly different experience from using Kong without the ingress controller: Kong resources can be changed after creation while keeping the same ID. Sending a PATCH request for an existing service that changes its protocol field will not modify its ID, whereas implementing (2) and making the equivalent change to an existing K8S Service would result in a new Kong service ID, and break continuity with past Vitals information associated with it. IMO we should avoid ID changes if at all possible. (1) results in some still, but only those that I think are necessary to ensure we have an ID for each Kong entity we create--you can normally PATCH a Kong service and change its port without changing its ID, but (1) will change the resource ID.

@skibum and @eskibars we're in disagreement about how to implement this and are looking for product input on when it makes sense for changes in K8S-level configuration to result in different Kong entity IDs. We've considered the following options:

Tie IDs to a combination of the source Kubernetes configuration and the logic we use to split that configuration into multiple pieces of Kong configuration. For example, since we split K8S Services into Kong services by port, the ID is derived from the K8S namespace, Service name, and port, and only a change to one of those will result in a different ID.
Tie IDs to the complete Kong object. Any change to configuration will result in a different ID, e.g. changing a service's protocol from http to https will change its ID.
Ignore the split logic and use a single ID for all Kong entities derived from a Kubernetes resource. Kong would require changes that allow it to store this new ID, submit Vitals data for it, and provide an aggregate view of Vitals data submitted for it.

IMO (1) makes sense, and it's what I've currently proposed. (3) is arguably most coherent for end users, since they interact with K8S resources and may reasonably expect that we'd show metrics for all traffic that is handled by a single Ingress definition, for example. However, that's not possible because we cannot always represent an Ingress with a single route and require unique IDs for routes. In light of that, my rationale with (1) was that it only generates IDs when the split logic requires it, and does not change them unless a user makes a change to the split criteria, allowing a solution that avoids the Kong/Vitals changes that (3) would require.
@mflendrich proposed (2), with the rationale that we don't have to update ID generation logic if we change our split logic. I'm opposed to this because I think it results in a markedly different experience from using Kong without the ingress controller: Kong resources can be changed after creation while keeping the same ID. Sending a PATCH request for an existing service that changes its protocol field will not modify its ID, whereas implementing (2) and making the equivalent change to an existing K8S Service would result in a new Kong service ID, and break continuity with past Vitals information associated with it. IMO we should avoid ID changes if at all possible. (1) results in some still, but only those that I think are necessary to ensure we have an ID for each Kong entity we create--you can normally PATCH a Kong service and change its port without changing its ID, but (1) will change the resource ID.

It's a little difficult for me to follow along/understand the 3 options since there are a few abstractions/indirections.  What I think would help is some examples in something like a table that shows what IDs may look like under various conditions.  (3) roughly sounds like the most ideal to me from a user perspectiv, but what I don't understand with (3) though is: is it an actual proposal (e.g. there's something that can be done to reconcile the split) or is it just something that was thought of but has no actual way we'd be able to implement?

It's a little difficult for me to follow along/understand the 3 options since there are a few abstractions/indirections.  What I think would help is some examples in something like a table that shows what IDs may look like under various conditions.  (3) roughly sounds like the most ideal to me from a user perspectiv, but what I don't understand with (3) though is: is it an actual proposal (e.g. there's something that can be done to reconcile the split) or is it just something that was thought of but has no actual way we'd be able to implement?

@eskibars option 3 requires some new, non-unique field on resources that Vitals reports on, e.g. you'd have two routes that both have vitals_id=04e8375c-c4ec-461c-8fee-0b34c63e078e (we'd presumably use the Ingress/Service/KongConsumer ID) and Vitals shows data based on that. This has been proposed previously. To work, it'd require both tables to store those IDs and GUI pages to display their data, versus the current pages that display data for Kong routes/services/consumers. This doesn't reconcile the split--there are still multiple routes for an Ingress and multiple Kong services for a K8S Service--but asks Vitals to report and display something else.
For the others, consider this Ingress:
kind: Ingress
metadata:
  annotations:
    konghq.com/https-redirect-status-code: "301"
  name: example
  namespace: exampleNamespace
  uid: 88618f13-c08a-4f09-98ca-913cd3090137
spec:
  rules:
  - host: host.example
    http:
      paths:
      - backend:
          serviceName: serviceExample
          servicePort: 80
        path: /foo
      - backend:
          serviceName: serviceFoo
          servicePort: 8999
        path: /bar

This would create two routes:
{"id":"1f2199c4-9f0c-5256-8f7b-56f343e39313","name":"exampleNamespace.example.00",
"hosts":["host.example"],"paths":["/foo"],"https_redirect_status_code":301}

{"id":"056c67f6-489f-4764-98fe-9ef652984077","name":"exampleNamespace.example.01",
"hosts":["host.example"],"paths":["/bar"],"https_redirect_status_code":301}

Changing the path of the second rule to /baz results in a new ID for the second route with either option:
{"id":"1f2199c4-9f0c-5256-8f7b-56f343e39313","name":"exampleNamespace.example.00",
"hosts":["host.example"],"paths":["/foo"],"https_redirect_status_code":301}

{"id":"ee43a020-f0d2-4e41-9aa3-57347745ed51","name":"exampleNamespace.example.01",
"hosts":["host.example"],"paths":["/baz"],"https_redirect_status_code":301}

With option 1, changes to settings other than the hosts or paths don't affect existing IDs, so using konghq.com/https-redirect-status-code: "426" instead of konghq.com/https-redirect-status-code: "301" gives you:
{"id":"1f2199c4-9f0c-5256-8f7b-56f343e39313","name":"exampleNamespace.example.00",
"hosts":["host.example"],"paths":["/foo"],"https_redirect_status_code":426}

{"id":"ee43a020-f0d2-4e41-9aa3-57347745ed51","name":"exampleNamespace.example.01",
"hosts":["host.example"],"paths":["/baz"],"https_redirect_status_code":426}

With option 2, all settings are input to the hash, so that change results in new IDs for both:
{"id":"84d0d796-be08-4ef9-9739-998cf877887a","name":"exampleNamespace.example.00",
"hosts":["host.example"],"paths":["/foo"],"https_redirect_status_code":426}

{"id":"90c674a4-f5a3-4c43-bd7b-b1f7a2394fa5","name":"exampleNamespace.example.01",
"hosts":["host.example"],"paths":["/baz"],"https_redirect_status_code":426}

Does that help clarify the difference?
Unrelated, but writing it down so that I don't forget: @shaneutt noted that using the current inputs don't take the K8S cluster into account, so, for example, if you use the same Namespace and Ingress in dev and prod clusters, we'd generate identical Kong route IDs. We probably want to use something unique to the K8S cluster (e.g. the kube-system Namespace ID) instead of the static controller ID.

Closing because there's a likelihood of the problem being solved in a completely different way in the pipeline requiring this change.


Flagger Canary deployment doesn't support StatefulSet

I have a service that uses StatefulSet instead of deployment, I've modified the canary file to:
apiVersion: flagger.app/v1alpha3
kind: Canary
metadata:
  name: {{ .Values.project }}
  namespace: default
spec:
  provider: istio
  # deployment reference
  targetRef:
    apiVersion: apps/v1
    kind: StatefulSet

However I got this error message:
validation failure list:
spec.targetRef.kind in body should be one of [Deployment Service]

Is there any way to use Flagger Canary deployment for such services?

Duplicate of #410


cleanup: removes deprecated bus models

With #72 and #60 merged in, we can get rid of our pre #52 code that was written to handle Prometheus data models before Prometheus exposed the storage/remote/remote.proto types.
This removes the old (pre-consumer groups) Kafka message reader that is no-longer in-use, and the old Cassandra datapoint reader (now replaced with the Cassandra SeriesIterator).

LGTM


Support Token![$] for token::Dollar as documented

I added the missing macro rule and changed the single use of token::Dollar within syn to use Token![$] as the surrounding code used the Token! macro for other tokens.
This fixes #647

Master didn't compile with today's nightly already. It does compile with yesterday's.

I went ahead and did what you suggested (duplicating the macro with a cfg to select the correct version). I bisected this change in rustc down to 1.16 -> 1.17, I made sure cargo build succeeds with both of these compiler versions. While making sure that codegen works, I also noticed that the syn.json file is generated from that macro, so that is updated too.


Swiping tabs: Feature flag

Task/Issue URL: https://app.asana.com/0/1202552961248957/1208659739219426/f
Description
This PR adds a feature flag that will allow us to disable the tab swiping.

Closing in favor of #5263