BGP Control Plane v2: Updates CiliumBGPNoeConfigOverride Type

Previously, the CiliumBGPNodeConfigOverrideSpec included the nodeRef field for referencing the name of a CiliumBGPNodeConfig to override. This approach introduces the potential for conflicts by multiple CiliumBGPNodeConfigOverride resources referencing the same CiliumBGPNodeConfig.
This PR removes the nodeRef field and updates the CiliumBGPNodeConfigOverride spec so users understand that the name of the CiliumBGPNodeConfig and CiliumBGPNodeConfigOverride must match for the configuration overrides to be applied.

cc: @YutaroHayakawa @harsimran-pabla

/test

/ci-ginkgo

ci-ginkgo is failing due to:
• Failure in Spec Teardown (AfterEach) [420.720 seconds]
K8sUpdates
/home/runner/work/cilium/cilium/test/ginkgo-ext/scopes.go:461
  Tests upgrade and downgrade from a Cilium stable image to master [AfterEach]
  /home/runner/work/cilium/cilium/test/ginkgo-ext/scopes.go:515

  Found 4 k8s-app=cilium logs matching list of errors that must be investigated:
  2024-03-26T15:41:00.247846907Z level=warning msg="unknown field \"spec.bootid\"" subsys=klog
  2024-03-26T15:41:00.482086200Z level=warning msg="unknown field \"spec.bootid\"" subsys=klog
  2024-03-26T15:41:00.070067466Z level=warning msg="unknown field \"spec.bootid\"" subsys=klog
  2024-03-26T15:41:00.195602475Z level=warning msg="unknown field \"spec.bootid\"" subsys=klog

https://github.com/cilium/cilium/commit/c72e9f4600e0efec1c8d53a8b235f75b8df83ae8 added this field to CiliumNode after this PR was pushed. I'm going to rebase to see if the commit resolves this CI flake.

/test

/test

@YutaroHayakawa since https://github.com/cilium/cilium/pull/31684 requires this PR, it would be great to get this merged. cc: @joestringer

It still needs the review from sig-k8s. Let me ping @tommyp1ckles.

@YutaroHayakawa do you have any suggestions for someone else to review this PR?

Ok, Tom is not available now. Let me randomly select a person from sig-k8s and request a review from @squeed 🙏

This needs a proper release note, unless we are removing a field that was never released.

@squeed yes, this is a change to an unreleased API type.

Easy. Approved, thanks.


Add "Workspace" to the Workspace menu on the left pane header on Desktop/Web

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Create Workspace
View Workspace menu on Mobile
View Workspace menu on desktop/web

Expected Result:
The term "Workspace" should exist in the left pane of the Workspace menu, irrespective of platform. Ideally it should look like this on Web:

Actual Result:
"Workspace" only exists on mobile in the leftpane, and not on Web/Desktop.
Web:

Mobile:

Platform:

Web
Desktop App
Mobile Web

View all open jobs on GitHub

Triggered auto assignment to @SofiedeVreese (AutoAssignerTriage), see https://stackoverflow.com/c/expensify/questions/4749 for more details.

Picking this up for ya @SofiedeVreese just to get it out there. Job posted
https://www.upwork.com/jobs/~01a0df2a984ccdedd6

Triggered auto assignment to @chiragsalian (Exported), see https://stackoverflow.com/c/expensify/questions/7972 for more details.

Proposal
It enabled here only for small screen, we should remove the check
https://github.com/Expensify/App/blob/2578d3a662a1f405af6c8cabb8b2e36862206077/src/pages/workspace/WorkspaceSidebar.js#L100-L106

I see more options ( vertical three dots...) in the workspace side bar, from the image above. What options do we want to show now?

Hmm have you tested that plan @Santhosh-Sellavel. I have not but the reason i ask is because the component says  HeaderWithCloseButton so I feel like a close button would show next to the header which isnt what we want.
So maybe the proposal would involve a change wherein isSmallScreenWidth is moved to be within HeaderWithCloseButton so that close button is only shown for mobile devices and not web & desktop. Does that make sense? Let me know if i'm mistaken.

Proposal
Just removing the isSmallScreenWidth won't solve it as we don't want the close button. Hence I recommend adding a conditional element Header for large screens.
{isSmallScreenWidth
     ? (
         <HeaderWithCloseButton
             title={translate('workspace.common.workspace')}
             onCloseButtonPress={() => Navigation.dismissModal()}
         />
     ):
(
<Header title={translate('workspace.common.workspace')}  />
)
}

Nice yeah i like that plan, then we don't have to worry about the 3 dots too since its literally just the header. Plain and simple. I like it 🙂
@kevinksullivan, feel to hire @mananjadhav in upwork.
@mananjadhav feel free to create the PR.

Thanks @chiragsalian

@chiragsalian I tested out Chirag. The HeaderWithCloseButton will show a close icon. I see more options in the Expected section as said here https://github.com/Expensify/App/issues/5185#issuecomment-916550999
The header alone we can use, we need some styling.

That being said, the three dots essentially replace the "x" icon. Style-wise, hopefully the top part of the left pane is basically identical to mobile, with the exception that the "X" button is removed. Here it is in full context:

Let me know if that make sense.

@kevinksullivan I know you had a separate issue for the three dots (I think?) but I wonder if it makes sense to address this together.

@mananjadhav, maybe pause on the PR atm, until we confirm the design. It's a little different than the original expected result. I think it makes sense to tackle the three dots design here too.

@shawnborton I am guessing the three dots are not there at the moment and will be added sometime later? Adding the three dots menu would be a part of WorkspaceSidebar, so shouldn't have an impact on the design if we just add the Header. Might require some basic flex styling changes.

Ideally it won't require any style changes, we should be able to reuse the header component in both the left pane and in the right pane. It's just a matter of only passing through the icon with three dots on the left for desktop. We will provide that .svg for the icon as well.

@chiragsalian I tested out Chirag. The HeaderWithCloseButton will show a close icon. I see more options in the Expected section as said here #5185 (comment)
The header alone we can use, we need some styling. I suggest we use the HeaderWithCloseButton component itself. And rename it to a more generic name. The close button can be configurable with a new prop like shouldShowCloseButton

Updated Proposal
Based on @shawnborton's feedback on the requirement here's my updated proposal. We modify the HeaderWithCloseButton

Add three props: shouldShowThreeDotsMenu (for lack of better word, need suggestions ), shouldShowCloseButton and a function onThreeDotIconPress.
Add the following code:

props.shouldShowThreeDotsMenu && (
                    <Tooltip text={props.translate('common.more')}>

                        <TouchableOpacity
                            onPress={props.onThreeDotIconPress}
                            style={[styles.touchableButtonImage]}
                        >
                            <Icon src={ThreeDotIcon} />
                        </TouchableOpacity>
                    </Tooltip>

Update the close button section like:

props.shouldShowCloseButton && (
<Tooltip text={props.translate('common.close')}>
                    <TouchableOpacity
                        onPress={props.onCloseButtonPress}
                        style={[styles.touchableButtonImage, styles.mr0]}
                        accessibilityRole="button"
                        accessibilityLabel={props.translate('common.close')}
                    >
                        <Icon src={Close} />
                    </TouchableOpacity>
                </Tooltip>
)

Lastly, in WorkspaceSidebar, remove isSmallScreenWidth conditional render.

{
                            <HeaderWithCloseButton
                                title={translate('workspace.common.workspace')}
                                shouldShowCloseButton={isSmallScreenWidth}
                                onCloseButtonPress={isSmallScreenWidth ? () => Navigation.dismissModal(): null}

                                /** Guessing we don't have it right now but whenever we add */
                                shouldShowThreeDotMenu={true}
                                onThreeDotMenu={() => ourFunctionToHandleThis()}
                            />
                        }

@Santhosh-Sellavel, firstly I'm unsure what to reply to your post because there is no question associated with it.  Then a little unsure why you linked my https://github.com/Expensify/App/issues/5185#issuecomment-916550999 to begin with.
So we've to still wait for @kevinksullivan to confirm he's on board with the changes.
Additionally, you mentioned The HeaderWithCloseButton will show a close icon in your post here but we don't want to show a close button hence I preferred manan's proposal at this time. The original design also didn't have 3 dots and was just the header which is why manan's original proposal fit the solution better.
Let me know if I'm misunderstanding something or if you have any follow-up questions for me. Plus feel free to hit me up on Expensify chat anytime for questions. My email -<EMAIL_ADDRESS>🙂

@mananjadhav, I like the proposal thought. Question though, what are the options shown when the 3 dots are clicked? When I create a workspace on mobile or web I don't see it so I was wondering what is it even supposed to contain? Is it for specific pages that doesn't include the workspace page?

Afaik,  it seems we are planning to add more menu options in Workspace on click of the button. Even I am not sure what atm, @shawnborton might be the best person to share.
But I added those checks and icon so that whenever we plan to add it we just have to add the prop and the function handling.  Headed components stays the same.

Yeah, the three dots will launch a menu of options. That might be getting handled separately though, apologies for the confusion as I am not quite up-to-speed on how the issues were divvied up. Perhaps @kevinksullivan can confirm there.

@kevinksullivan @chiragsalian Can you confirm what approach are we going to take ?

I am ok with using this PR to:

Add "Workspace"
Add the 3 dots

There was one other GH https://github.com/Expensify/Expensify/issues/176926 where we planned to have the 3 dots open a bottom tray that showed options to create another workspace or delete the existing workspace.

Should this GH also take care of that? Or does it make more sense to separate that out into its own issue, which is a follow-up to this one?

I think it can be added to this. This Add "Workspace" to the Workspace menu on the left pane header on Desktop/Web issue sounds like a minor side-change, generally speaking.

Yeah, i think it can be added here too. @kevinksullivan or @shawnborton, could you share how the options will look expanded for web as well, just so that we're all on the same page.

Also should we have an option like "Rename Workspace" in the options? It's not very obvious from the mobile and web that clicking on the workspace name allows you to edit it.

I would suggest Edit Workspace. That pencil icon on the avatar looks like that it is only for changing avatar and I don't this it's needed on this screen. it should be moved to the Edit workspace page.

I think we can discuss "Edit Workspace" or making the renaming part easier as a separate issue, though personally I think it's fine right now.
In terms of what the options look like when expanded, I think this screenshot should cover it. On desktop, the menu launches near the icon. On mobile, we bottom-dock:

In terms of what the options look like when expanded, I think this screenshot should cover it. On desktop, the menu launches near the icon. On mobile, we bottom-dock:

Yeah, this works.
@chiragsalian I can create a new Component similar to VideoChatButtonAndMenu, except for the fact that our button lies outside the component. We'll also have to add ConfirmModal for the delete workspace button. Also, can you help me with the delete workspace API?

Yup i can help you out with any of the API's, can you post your complete plan of action for me to review?

I went ahead and updated the OP as well, so that we're clear that this GH should:

Add a Workspace header to web/desktop so that is consistent with mobile
Add a "3 dot button" to the Workspace menu, and allow a user to select from two options; New Workspace and Delete Workspace

@mananjadhav, any update here? Can you post your complete plan of action for me to review?

Updated Proposal:
Apologies for the delay. Took a little while for the long proposal. Here's my updated proposal including the updated implementation:

We still modify the HeaderWithCloseButton with additional props: shouldShowCloseButton and add a moreOptionsComponent (renamed ThreeDots from previous proposal to MoreOptions)

We'll create 2 components: WorkspaceHeader and WorkspaceOptionsMenu

We'll replace HeaderWithCloseButton with WorkspaceHeader in WorkspaceSidebar
 <WorkspaceHeader policy={policy} />

Our WorkspaceHeader will look something like this:

class WorkspaceHeader extends React.Component {

	propTypes = {
		/** Policy for the current route */
	    policy: PropTypes.shape({
	        /** ID of the policy */
	        id: PropTypes.string,

	        /** Name of the policy */
	        name: PropTypes.string,
	    }),

	}

	render() {
		<View>
			<HeaderWithCloseButton
			    title={translate('workspace.common.workspace')}
			    onCloseButtonPress={() => Navigation.dismissModal()}
			    shouldShowCloseButton={isSmallScreenWidth}
			    shouldShowMoreOptionsMenu
			    moreOptionsComponent={<WorkspaceOptionsMenu policyId={policy.id} />}
			/>
		</View>

	}
}

Our main component WorkspaceOptionsMenu that has the popover will look something similar to VideoChatMenu. I've added maximum code with approach.

class WorkspaceOptionsMenu extends Component {

	props = {
		policyId: PropTypes.string
	}

    constructor(props) {
        super(props);

        this.toggleOptionsMenu = this.toggleOptionsMenu.bind(this);
        this.measurePopOverPosition = this.measurePopOverPosition.bind(this);
        this.moreOptionsWrapper = null;
        this.state = {
            popoverPosition: {x: 0, y: 0},
            isOptionsMenuOpen: false,
            isDeleteModalOpen: false
        };
    }

    componentDidMount() {
        Dimensions.addEventListener('change', this.measurePopOverPosition);
    }

    componentWillUnmount() {
        Dimensions.removeEventListener('change', this.measurePopOverPosition);
    }

    toggleOptionsMenu() {
        this.setState(prevState => ({
            isOptionsMenuOpen: !prevState.isOptionsMenuOpen,
        }));
    }

    confirmDeleteAndHideModal() {
        deleteWorkspace(this.props.policyId);
        this.hideDeleteModal();
    }

    hideDeleteModal() {
        this.setState({
            isDeleteModalOpen: false,
        });
    }

    /**
     * This gets called onLayout to find the cooridnates of the wrapper for the threedots button.
     */
    measurePopOverPosition() {
        if (this.moreOptionsWrapper) {
            this.moreOptionsWrapper.measureInWindow((x, y) => this.setState({
                popoverPosition: {x, y},
            }));
        }
    }

    render() {

    	this.menuItemData = [
            {
                icon: Plus, // imported from Icon/Expensicons
                text: props.translate('workspace.addWorkspace'),
                onPress: () => create() // Imported from src/libs/actions/Policy
            },
            {
                icon: Trashcan, // imported from Icon/Expensicons
                text: props.translate('workspace.deleteWorkspace'),
                onPress: () => this.setState({ isDeleteModalOpen: true })
            },
        ].map(item => ({
            ...item,
            onPress: () => {
                item.onPress();
                this.toggleOptionsMenu();
            },
        }));

        return (
            <>
                <View
                    ref={el => this.moreOptionsWrapper = el}
                    onLayout={this.measurePopOverPosition}
                >
                    <Tooltip text={this.props.translate('common.moreOptions')}>
                        <Pressable
                            onPress={() => {this.toggleOptionsMenu();}}
                            style={[styles.touchableButtonImage, styles.mr0]}
                        >
                            <Icon src={ThreeDots} />
                        </Pressable>
                    </Tooltip>
                </View>
                <Popover
                    onClose={this.toggleOptionsMenu}
                    isVisible={this.state.isOptionsMenuOpen}
                    anchorPosition={{
                        left: this.state.popoverPosition.x - 150,
                        top: this.state.popoverPosition.y + 40,
                    }}
                    animationIn="fadeInDown"
                    animationOut="fadeOutUp"
                >
                    {this.menuItemData.map(({icon, text, onPress}) => (
                        <MenuItem
                            wrapperStyle={styles.mr3}
                            key={text}
                            icon={icon}
                            title={text}
                            onPress={onPress}
                        />
                    ))}
                </Popover>
                <ConfirmModal
                    title={this.props.translate('workspace.deleteWorkspace')}
                    isVisible={this.state.isDeleteModalOpen}
                    onConfirm={this.confirmDeleteAndHideModal}
                    onCancel={this.hideDeleteModal}
                    prompt={this.props.translate('workspace.deleteConfirmation')}
                    confirmText={this.props.translate('common.delete')}
                    cancelText={this.props.translate('common.cancel')}
                /
            </>
        );
    }
}

WorkspaceOptionsMenu.propTypes = propTypes;
WorkspaceOptionsMenu.defaultProps = defaultProps;
WorkspaceOptionsMenu.displayName = 'WorkspaceOptionsMenu';
export default compose(
    withWindowDimensions,
    withLocalize,
)(WorkspaceOptionsMenu);

Add the deletePolicy function in src/libs/actions/Policy.js

Handle translations in en.js and es.js

A couple of things to highlight:

Because I need the popover to open next to the MoreOptions (ThreeDots), I have to pass the whole component as the position will be determined at the runtime. Other approach to this would be to have the IconButton in the Header and pass the reference to the WorkapceOptionsMenu. I generally prefer keeping the anchor and the popover in the same comoponent. But if you want to split we can do that too.

In addition to what I mentioned in point 1, one other suggestion would be skip HeaderWithCloseButton altogether and add the title, the close button and more options in WorkspaceHeader. This is what I'll personally recommend and I've added the updated WorkspaceHeader code below.

There's a permission that is used in FAB for workspace creation. ...(Permissions.canUseFreePlan(this.props.betas). Do we need to add it here too?

Can you let me know if there's any Permissions or checks to hide/show Delete Workspace?

By default the Workspace is created with name as email prefix. Here also we'll do the same right?

Components might require some styling changes which I'll add when I work on the implementation.

Lastly, I feel the budget of 250$ is less for the updated score. Can we please revise the budget then it'll be great.

WorkspaceHeader as per point 2
With this WorkspaceHeader component, we don't have to modify HeaderWithCloseButton.

class WorkspaceHeader extends React.Component {

	propTypes = {
		/** Policy for the current route */
	    policy: PropTypes.shape({
	        /** ID of the policy */
	        id: PropTypes.string,

	        /** Name of the policy */
	        name: PropTypes.string,
	    }),

	}

	render() {
   		<View style={[styles.headerBar, props.shouldShowBorderBottom && styles.borderBottom]}>

   			<View style={[
	            styles.dFlex,
	            styles.flexRow,
	            styles.alignItemsCenter,
	            styles.flexGrow1,
	            styles.justifyContentBetween,
	            styles.overflowHidden,
	        ]}
	        >

			<Header title={translate('workspace.common.workspace')} />
			<WorkspaceOptionsMenu policyId={policy.id} />
			{
				isSmallScreenWidth && (
					<Tooltip text={props.translate('common.close')}>
	                    <TouchableOpacity
	                        onPress={() => Navigation.dismissModal()}
	                        style={[styles.touchableButtonImage, styles.mr0]}
	                        accessibilityRole="button"
	                        accessibilityLabel={props.translate('common.close')}
	                    >
	                        <Icon src={Close} />
	                    </TouchableOpacity>
	                </Tooltip>
				)

			}

			/>
		</View>

	}
}

cc - @chiragsalian

Cool, the updated plan looks good to me. Some thoughts though, it feels like the WorkspaceOptionsMenu is a nice opportunity to set it up in a reusable manner. How about we create it as PopupMenu which accepts any icon. Then for this solution when you call HeaderWithCloseButton  pass a prop like shouldShowThreeDotsButton (similar to what you have but I think I like ThreeDotsButton since its more verbose) as true also pass menuItemData with the necessary callbacks. You've to update HeaderWithCloseButton to call PopupMenu with ThreeDotsIcon image passed as the default from HeaderWithCloseButton. Finally, with those changes, I don't think WorkspaceHeader  is really needed and instead, you can call HeaderWithCloseButton directly within WorkspaceSidebar. I feel like this would clean up the code and have PopupMenu as a reusable generic component. You could even DRY the code in VideoChatButtonAndMenu by reusing this component with the only change being the icon.
Thoughts?
Answering your "A couple of things to highlight",

It's fine to me the way you currently mentioned it in your plan.
I personally would rather re-use HeaderWithCloseButton with my proposed changes above it would be even more closely dependent on HeaderWithCloseButton.
No not for now. Correct me if I'm wrong @kevinksullivan, only if you're under free plan beta can you create a workspace correct? Can you ever see a workspace if you are not in the free plan beta?
Nope no permissions to check. Atm, I believe only admins of the workspace see these workspaces as an option to click into. Correct me if I'm mistaken @kevinksullivan.
Yup.
Sure
I'll leave that part to @kevinksullivan too 🙂

Also, I'm unsure if you read but if not this issue is under n6-hold. That means even if you create the PR we cannot merge it until the label is removed. Just letting you know, you can still work on the issue and I can review it though.

@chiragsalian I am fine with the approach of having HeaderWithCloseButton and making a generic PopupMenu too if that will have more use-cases to handle :)

Cool we can wait for @kevinksullivan to answer some of your questions but he might be a little busy at the moment working on n6 stuff so I'm unsure when he can get to this. Either way, the proposal sounds good to me 👍
From my perspective, @kevinksullivan can hire you (@mananjadhav) on Upwork and you can create the PR.

Will wait for @kevinksullivan's response for this one.

@kevinksullivan @chiragsalian Do we have any updates for me here?

Hired @mananjadhav

Code is being worked on. There is a draft PR with good amount of progress in it.

@mananjadhav what's the latest on this one?

The solution for this issue has been :rocket: deployed to production :rocket: in version 1.1.18-3 and is now subject to a 7-day regression period :calendar:. Here is the list of pull requests that resolve this issue:

https://github.com/Expensify/App/pull/5921

If no regressions arise, payment will be issued on 2021-12-15. :confetti_ball:

@chiragsalian https://expensify.slack.com/archives/C01GTK53T8Q/p1639142507005200 Should we treat this as a regression from my PR.
The problem is this.menuItems are initialized in the constructor and hence they don't get the updated values. We'll have to define them in the render method so that they receive the latest props.
This wasn't the case when we had the old layout and I had explicitly tested this.

Should we treat this as a regression from my PR.

Sure, yeah I feel like I tested this too in your PR at some point. But I guess i lot changed around the N6 stuff. Anyway thanks for creating the follow-up PR.

@kevinksullivan  Bump on Upwork payment.

Paid @mananjadhav in Upwork, wanted to get it issued before the weekend. Job was $250 and I added $250 because the PR was during the Company Offsite Hold (where I forgot to properly label all issues that were eligble).   If anything doesn't look correct, please comment and/or reopen.

@mallenexpensify This was a bigger task and we had decided to add bonus completion based on the scope. For your reference, https://github.com/Expensify/App/issues/5185#issuecomment-928735294
and this issue is also eligible for n6-hold. Primarily all the rework happened due to n6-hold only.

The solution for this issue has been :rocket: deployed to production :rocket: in version 1.1.21-1 and is now subject to a 7-day regression period :calendar:. Here is the list of pull requests that resolve this issue:

https://github.com/Expensify/App/pull/6697

If no regressions arise, payment will be issued on 2021-12-27. :confetti_ball:

Sorry @mananjadhav , I think I checked for the n6 hold but missed because it was listed in 'hidden items' in the issue (I really wish those could be auto-extracted every time)
So.. $250 for the #5185 (comment) and $250 for n6-hold, correct?

That’s right @mallenexpensify

Paid @mananjadhav $500! Thanks!


ng build for lib with self referencing components fails with no message

Bug Report or Feature Request (mark with an x)
- [x] bug report -> please search issues before submitting
- [ ] feature request

Area
- [x] devkit
- [ ] schematics

Versions

Windows 10. Node 9.9.4. NPM 6.1.0
Repro steps

Create a library and then create two components inside that library. In ComponentA add a reference to ComponentB but change the import statement to reference the library name instead of the relative directory path ala - import {ComponentB} from 'my-lib'. Run a build with ng build and notice that the command line prints Building Angular Package and then exits with no message.
The log given by the failure

Log simply prints "Building Angular Package" just like command line
Desired functionality

Some kind of error message. Obviously this is a rather silly error but the first time it happened to me it did take awhile to hunt down what was happening.
Mention any other details that might be useful

Which version of ng-packagr are you using? This should have been solved in version 3.0.0.
https://github.com/dherges/ng-packagr/commit/ada4081

Yes. I was on an RC version of 3.0.0.


the trait OperationOutput is not implemented for axum_jsonschema::Json<T>

I suspect the problem is that the published version of axum-jsonschema is 0.6.0 instead of 0.7.0 - that is, the latter does not appear to be a released version for use in cargo. Attempting to use 0.6.0 with aide 0.12.0 results in the trait OperationOutput is not implemented for axum_jsonschema::Json<T> for both derive OperationIo and impl OperationOutput
Reproduce using aide/examples/example-axum by modifying aide/examples/example-axum/Cargo.toml to specify:
axum-jsonschema = { version = "0.6.0" , features = [
    "aide",
] }

instead of axum-jsonschema = { path = "../../crates/axum-jsonschema" ...
This results in:
error[E0277]: the trait bound `axum_jsonschema::Json<T>: OperationOutput` is not satisfied
  --> examples/example-axum/src/extractors.rs:10:23
   |
10 | #[derive(FromRequest, OperationIo)]
   |                       ^^^^^^^^^^^ the trait `OperationOutput` is not implemented for `axum_jsonschema::Json<T>`
   |
   = help: the following other types implement trait `OperationOutput`:
...

you can use the new WithApi wrapper type, it's a bit convoluted right now:
 #[derive(Debug)]
struct JsonOverride<T>(PhantomData<T>);

impl<T> ApiOverride for JsonOverride<T> {
     type Target =  axum_jsonschema::Json<T>;
}
impl<T> OperationInput for MyCustomXML<T> {
    // delegate the OperationInput from the old json
}
async fn my_handler(WithApi(ty, ..): WithApi<JsonOverride<SomeType>>) {
// use the parsed json from ty
}

Another alternative is to make a wrapper like we did with aide-axum-sqlx-tx

it's unfortunately the only way when you need to implement a trait on a type from two different external crates in the current state of rust

The reason it was done is beacause we have conflicting versions of every dependency crate, so the traits are often implemented on the wrong version. this new method allows external crates to handle these dependencies with wrappers. The easiest is types that have no associated openapi spec, then you can just extract with fn(NoApi(type): NoApi<T>)
I think we could add a special WithApi type specific to schema so that you can use WithSchema<Json<T>, T> if T is JsonSchema

@dpasirst you're right actually, it's a version issue.  @tamasfe can you give me the rights to publish the new version of axum-jsonschema ?

sorry, I forgot about this, I've just invited you on crates.io.

@dpasirst axum-jsonschema 0.7.0 is released, it should fix your issue, feel free to reopen if it's not the case


Integration with Gems & Crystals.

https://www.curseforge.com/minecraft/mc-mods/gems-and-crystals

Ruby
Sapphire
Emerald
Topaz
Amethyst
Quartz

https://github.com/Coliwogg/Gems-And-Crystals

Integration is complete.


⚠ Processors has degraded performance

In bc25f12, Processors ($STATUS_URL) experienced degraded performance:

HTTP code: 200
Response time: 154 ms

Resolved: Processors performance has improved in ed0be1a.


Rename devcontainer.json to devcontainer.jsonr

Why:
Closes:

What's being changed (if available, include any code snippets, screenshots, or gifs):

Check off the following:

[ ] I have reviewed my changes in staging (look for the "Automatically generated comment" and click the links in the "Preview" column to view your latest changes).
[ ] For content changes, I have completed the self-review checklist.

👋 Hey there spelunker. It looks like you've modified some files that we can't accept as contributions. The complete list of files we can't accept are: .devcontainer/** .github/actions-scripts/** .github/workflows/** .github/CODEOWNERS assets/fonts/** data/graphql/** Dockerfile* src/** lib/redirects/** package*.json scripts/** content/actions/deployment/security-hardening-your-deployments/**
You'll need to revert all of the files you changed in that list using GitHub Desktop or git checkout origin/main <file name>. Once you get those files reverted, we can continue with the review process. :octocat:

hi

hi


Add a --metadata flag to dapr publish

Describe the proposal
When publishing a message using the Dapr CLI by using dapr publish, it is automatically wrapped as a CloudEvent.
Add a --metadata flag to the dapr publish command to allow custom metadata, enabling the publich rawPayload option as a result.
Release Note

RELEASE NOTE: ADD support for custom metadata in dapr publish using the new --metadata flag.

Would you be open to adding this?

@yaron2 yes, that was the plan 🙂
Wanted to make sure the proposal is acceptable before starting to work on it.

@guyzyl Assigned the issue to you

@guyzyl assigning this issue to you.

@guyzyl Are you still working in this issue?

@mukundansundar not atm, I unassigned myself from this issue.


Thanks!

Just wanted to say thanks for writing greuler. I just used it to write a blog post about networks with an interactive visualization. greuler was great.

Awesome! Happy to know you like it, can you send me the link of your blog post please?

https://akud.github.io/visualization-blogs/posts/01_content_distribution_networks/index.html
I'm mostly exploring building interactive visualizations, so the idea in the post is kind of a toy problem.


using new version libevent

Why the type changes?

Ok, checked the code. This is good!
@not-a-robot r+


Alternative to this bot (big sad)

Does anyone have a backup or alternative search bot suggestion?
I have been using this bot for a while and it's been great. but it seems that Chromium is getting more and more difficult for the developer to work with. I'm on MS Edge (Chrome based obvs) and the issues are occurring with Chrome as well... and even previous versions of Chrome
This is not the first bot I've used unfortunately and when one goes belly up I've been able to find a new one.  However, this time I'm having trouble finding an alternative.
Any ideas or suggestions would be much appreciated!

Issues are ongoing and the extension is not in cause : https://www.reddit.com/r/MicrosoftRewards/comments/x7bgth/anyone_else_having_problems_with_bing_mobile_mine/

Issues are ongoing and the extension is not in cause : https://www.reddit.com/r/MicrosoftRewards/comments/x7bgth/anyone_else_having_problems_with_bing_mobile_mine/

Thanks for the heads up!! This has been the best bot I've used that handles desktop and mobile searches and I was getting nervous lol
Hope everything works out.

Issues are ongoing and the extension is not in cause : https://www.reddit.com/r/MicrosoftRewards/comments/x7bgth/anyone_else_having_problems_with_bing_mobile_mine/

Thanks for the heads up!! This has been the best bot I've used that handles desktop and mobile searches and I was getting nervous lol
Hope everything works out.

Everything is back and working.

I'm glad to hear it!


[QUERY] Listing UsageDetails and Marketplaces by billing period

Library name and version
Azure.ResourceManager.Consumption v1.6
Query/Question
I need a replacement for some function in Microsoft.Azure.Management.Consumption that are deprecated.
The functions I need :
ConsumptionManagementClient.UsageDetails.ListByPeriodAsync ConsumptionManagementClient.Marketplaces..ListByBillingPeriodAsync
I've looked into Azure.ResoureManager.Consumption that is listed as the replacement Microsoft.Azure.Management.Consumption, I also looked at CostManagement but I haven't been able to functions that return the same thing and work in the same way. I saw a ticket talking about Quota for Usage so I will look into that.
Environment
No response

Thank you for your feedback.  Tagging and routing to the team member best able to assist.

I can see the functions I need in the github :
ConsumptionExtensions.GetConsumptionUsageDetailsAsync and ConsumptionExtensions.GetConsumptionMarketPlacesAsync
But they are not visible in the documentation or the version 1.0.1 of the Azure.ResourceManager.Consumption NuGet package

Hi @NovaWasTaKenn, you can try browsing this documentation about Usage details and marketplace,or using the updated version of NuGet Package (version.1.1.0)

Hello @mcgallan , I looked at the updated version of the package, the function I was looking for are here. The function listing usage details seems to work fine however, the funciton listing marketplaces details return the error below. The scope and clients are the same used for listing the usage details and worked fine.

Deleted the previous comment because I am interested in the Async version of the function.
However after testing ConsumptionExtensions.GetConsumptionMarketPlacesAsync in the beta version of the package I get this exception :

With this stacktrace :  à System.Text.Json.JsonElement.GetGuid()
à Azure.ResourceManager.Consumption.Models.ConsumptionMarketplace.DeserializeConsumptionMarketplace(JsonElement element)
à Azure.Core.PageableHelpers.PageableImplementation1.<GetAsyncEnumerator>d__15.MoveNext() à Azure.Core.PageableHelpers.PageableImplementation1.d__15.System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult(Int16 token)
à System.Runtime.CompilerServices.ValueTaskAwaiter`1.GetResult()
à Program.<>c__DisplayClass0_0.<<$>g__IterateWithAwaitForeachAsync|0>d.MoveNext()
à Program.<>c__DisplayClass0_0.<<$>g__IterateWithAwaitForeachAsync|0>d.MoveNext()
à Program.<$>d__0.MoveNext()
The code I use is from a microsoft article on iterating over pageable and it works for the functionConsumptionExtensions.GetConsumptionUsageDetailsAsync so I guess the problem comes from ConsumptionExtensions.GetConsumptionMarketPlacesAsync
Thanks in advance for the help !

Deleted the previous comment because I am interested in the Async version of the function. The updated version of the package has the functions I'm looking for. The one one that lists the usageDetails works well. However, when using ConsumptionExtensions.GetConsumptionMarketPlacesAsync, that is the function I need to list the marketplaces, I get this exception :
With this stacktrace : "at System.Text.Json.JsonElement.GetGuid() at Azure.ResourceManager.Consumption.Models.ConsumptionMarketplace.DeserializeConsumptionMarketplace(JsonElement element) at Azure.Core.PageableHelpers.PageableImplementation1.CreatePage(Response response, String& nextLink) at Azure.Core.PageableHelpers.PageableImplementation1.d__16.MoveNext() at Azure.Core.PageableHelpers.PageableImplementation1.<AsPagesAsync>d__16.System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult(Int16 token) at System.Runtime.CompilerServices.ValueTaskAwaiter1.GetResult() at Program.<
$>d__0.MoveNext() in C:\Users\user\source\repos\ConsoleApp1\ConsoleApp1\Program.cs :ligne 29
at Program.<$>d__0.MoveNext() in C:\Users\user\source\repos\ConsoleApp1\ConsoleApp1\Program.cs :ligne 29"
The code I use is from a microsoft article on iterating over pageable and it works for the function ConsumptionExtensions.GetConsumptionUsageDetailsAsync so I guess the problem comes from ConsumptionExtensions.GetConsumptionMarketPlacesAsync Thanks in advance for the help !

@NovaWasTaKenn Could you help to log the service response of the API call while invoke GetConsumptionMarketPlacesAsync  to see if it is a valid Guid? Thanks!

Hello @live1206,
Sorry, I was on vacation last week, do you still need the information on the meterId and the subscriptionGuid ?

Hello @live1206,
Sorry, I was on vacation last week, do you still need the information on the meterId and the subscriptionGuid ?

No worries.
Yes, that would be very helpful for us to trouble-shoot this issue. Thanks!

Hello @live1206,
So subscriptionGuid has this format dddddddd-dddd-dddd-dddd-dddddddddddd and the meterId is just empty.
This is the code I used with the scope for the request being the same as in my original message

Thanks @NovaWasTaKenn for the information.
@HarveyLink Empty meterId is causing error during deserialization, please help to resolve it, thanks!

Hello @live1206,
So subscriptionGuid has this format dddddddd-dddd-dddd-dddd-dddddddddddd and the meterId is just empty.
This is the code I used with the scope for the request being the same as in my original message

Will be fixed in next version release.


Use magic publicPath prefix for loading extension resources

Public-Facing Changes
This updates the default value of the output.publicPath setting in the Webpack config to use a magic value that is substituted at extension load time by Studio.
Existing extensions will need to update the version of their @foxglove/fox dependency to adopt the new default. It is unlikely any existing extensions would have a conflict with the new publicPath value.
Description
Necessary for allowing extensions to load resources from their bundles as implemented in https://github.com/foxglove/studio/pull/3413.
Webpack uses the publicPath as the base path for resolving relative paths.
Using the magic value lets Studio itself determine what the appropriate base path is, which would vary between the desktop app and the web app, and can remain an internal implementation detail should there be a change in the future.
Likewise, Studio does not make any assumption that the extension places its resources under ./dist/, which is something the extension could override. The only requirement is that package.json is at the root of the extension bundle.
This does not include any change to Webpack for how it loads resources, an example of which is here: https://github.com/rgov/studio-extension-resource-test/commit/df6b5946f3e324ea49a6a83be2a221f4b40dc4df
Alternative
As described in this comment (and elsewhere in the thread), Webpack can automatically determine the publicPath if Studio changes up how it loads the extension.

Thanks for the research on this. Definitely some good learnings here that we can revisit in some future but I don't want to give the impression that there's a plan to merge this anytime soon.


Improve server event logic

Allow the system to determine what client to use in case some are unavailable.
Currently ws and sse are supported.

There seems to be a bit of a bug inside reconnecting-websockets library -- when I manually close the connection, the lib reopens it.
Working on it/work around but the main logic is there

SSE will have to wait. Staying on WS.


nixos-container: Make show-ip work together with ipv4 + netmask

Motivation for this change
The containers local address can be given as ipv4 only or with a subnetmask in
CIDR notation in the container configuration, see [1]. This works fine but the
'nixos-container show-ip' only supports plain ipv4 addresses without the netmask
suffix.
[1] https://github.com/NixOS/nixpkgs/blob/9939032e35bb144bc8f6b57ed6325089910f738c/nixos/modules/virtualisation/containers.nix#L382
Things done

Changed the regex to also match in case of a CIDR netmask suffix.
Modified an exiting test to also cover this case.

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option build-use-sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[x] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Fits CONTRIBUTING.md.

Thank you! I'm not familiar with nixos-container, but thanks to the test I was able to verify your patch.


TASK - Implement Usage Analytics in CLI and VS Code

Description
Implement CLI and VS Code usage analytics and telemetry solution determined in #23
Acceptance Criteria

[ ] Analytics and telemetry solution forms part of the distribution of:

[ ] CLI application
[ ] VS Code Extension

[ ] User opt-in forms part of the installation process
[ ] User can opt out at any time via CLI or config file change
[ ] Documentation showing what information is gathered is available

Additional Context and Related Items

Deferred.


Carousel dot: enable custom left top right bottom padding

Currently available padding option:
paginationPadding which receives Number type
Enable custom padding with a different left, top, right, and bottom size.

oh, wait, I think we don't need a padding for every direction. so, my suggestion is to create an option only for left and right padding to give some space between two carousel items.

Oh, that actually already exists with :spacePadding={num}, it hasn't made it to the documentation yet though. I have a PR up adding the feature. Let me know if that works for you!

Umm, sorry, actually I mean the padding is between two carousel dots. So yeah, my first suggestion is the right one. Maybe someone else needs to set the top and bottom padding with a different value than the left and right padding.
Current state:
With :pagginationPadding="10"

With :pagginationPadding="5"

So, I think it's better if we can specify the horizontal and vertical padding separately. For example, with options like:
paginationHorizontalPadding and paginationVerticalPadding
Or maybe we just need to enable String value for paginationPadding, so that we can use it with css padding value like this:
5
0 8px
5px 10px 10px 5px
That two examples are just my suggestions. Maybe you can think of other different and better approaches. The main purpose is to customize the dot padding not only with 1 value for every direction (top, right, bottom, left).

@rodrigodata I tested your code, and it's still not working as expected. Then, I checked your code, there's something needs to be fixed.
Here's the part of your code (src/Pagination.vue:77):
padding[0], padding[1], padding[2], (padding[3] = `${this.carousel.paginationPadding}px`);

And I think this is what you mean to do:
padding[0] = padding[1] = padding[2] = padding[3] = `${this.carousel.paginationPadding}px`;

This syntax is also applied for line 82 and 85.
Can you create a PR for this changes after you fixed those lines?
Thank you for your help to implement this feature :+1:


add link state enable on test

if we run on a system where the PF is not connected to the network we can still use it for tests but we need the link state to not be auto.

@adrianchiris @zeeke please take a look quick fix for our internal CI system when the nics are not all connected to the network

Pull Request Test Coverage Report for Build<PHONE_NUMBER>9
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.06%) to 47.284%

Totals

Change from base Build<PHONE_NUMBER>5:
0.06%

Covered Lines:
7207

Relevant Lines:
15242

💛  - Coveralls

Thanks @adrianchiris merging this one


mxnet: 1.6.0 -> 1.8.0

Motivation for this change
Upstream update.
Things done

[X] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[X] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Added a release notes entry if the change is major or breaking
[ ] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 124329 at 8e0a186f run on x86_64-linux 1

2 packages marked as broken and skipped:

python38Packages.optuna
python39Packages.optuna

2 packages skipped due to time constraints:

python38Packages.mxnet
python39Packages.mxnet

1 package built successfully:

mxnet

2 suggestions:

warning: unused-argument
Unused argument: bash.
Near pkgs/applications/science/math/mxnet/default.nix:5:3:
  |
5 | , bash
  |   ^

warning: python-include-tests
Consider adding a checkPhase for tests, or if not feasible, pythonImportsCheck.
Near pkgs/applications/science/math/mxnet/default.nix:58:0:
   |
58 |     description = "Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler";
   | ^

Result of nixpkgs-review pr 124329 run on x86_64-darwin 1

2 packages marked as broken and skipped:

python38Packages.optuna
python39Packages.optuna

We already have 1.8.0 in master.


python3.pkgs.osmpythontools: 0.2.6 -> 0.2.8

Motivation for this change
upstream release
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)

(there are none)

[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

Note on tests
Since mocnik-science/osm-python-tools@e07ce69c6e3f9efbce4a8590048f0976cf1e17ae, the GitHub repo actually contains automated tests, but

releases aren't tagged on that repo, so we have to either continue to take them from PyPI, or guess the release's commit ID
the tests call the actual external services, thus being slow and impure

so for now, I think it's best to not include them in the build of the Nixpkgs derivation.

Result of nixpkgs-review pr 100661 1

2 packages built:

python37Packages.osmpythontools
python38Packages.osmpythontools


feat: Proof Negotiation

Signed-off-by: Łukasz Przytuła<EMAIL_ADDRESS>Allow proof negotiation by providing an updated proof request to /present-proof/records/{pres_ex_id}/send-request endpoint (if no proof request will be passed in body, it will be created according to the presentation proposal)

This code is really clean and it would be a shame to not get these changes in. The original author hasn't responded to comments made earlier in the year so I'll get pull these changes locally, merge in upstream and open a new PR. Thanks for your contributions @Przytua!

Superseded by #2416


What is the use of Katana assistant model? What is the use of it?

What is the use of Katana assistant model?

Replied through medium comment


Prepare for breaking changes in K8s 1.25 / OCP 4.12

See https://connect.redhat.com/en/blog/updating-your-operators-openshift-when-kubernetes-changes-apis .
In particular, PodDisruptionBudget is no longer v1beta1.

This ticket thankfully got solved recently but is not yet available as a stable release. OCP 4.12 is available now and I would prefer to upgrade the operator to a stable version rather than using the dev version which is also 2 years old. Are there plans to tag a new release?
Particularly, the current apicurio-registry-operator v1.0.0 has 3 issues that are partially fixed on the main branch that would be worth a release:

This issue #181 itself, for the breaking changes that prevent the ARO 4.12 upgrade
Memory leak: The operator by default has 100MiB memory, and memory usage grows linearly over time with a rate of 200-400Mb/hour (with/without reduced log level), leading to an out-of-memory restart every 15-30 minutes.
Endless reconciliation loop (causes unnecessary load on the API server and causes 300 logged messages/min or 76.23MB/day amount of logs), see also issue #93.


Conda installing 0.1.4?

@jchodera - via conda, we're still getting 0.1.2 from Omnia rather than 0.1.4. Is there something we have to do to get the build to update? @limn1 is having issues with this when attempting to get it going on Orion to use the SMIRNOFF forcefields.

Fixed by updating the conda recipe: https://github.com/omnia-md/conda-recipes/pull/673
Note that you have to do this for each release you want to build.

Yes, I'd forgotten that, but then figured it out again yesterday. Thanks.


/refund command to make recording refund/cancelled payments easier

If I return something and get cash back, I need to enter it as a separate entry in through /record
This can be done away with if we start marking payments as refunds.
/refund
This can show a list of payments with next and previous buttons
/refund 774
We can simply send the id of the transaction like so.
This will create a new entry automatically reverting the payment.

If we make the above alteration it would also be nice to consider transactions which are returning loaned money. For e.g. I lend money to a friend and he returns the same back to me at a later date.

Currently it shows refund/cancelled transactions as gains in /view.
It does not show lent money repaid as gains because of course the accounts are not expense accounts as in they are self accounts.
Refund/cancelled transactions have also been marked as expenses while issuing.
Both of which are technically wrong.
Ideally they should be removed from being expenses, and they should never be shown as gains.

In order to remove them from expenses/gains, on using the /refund command, it can soft delete the original transaction add REFUNDED $ID as a word with the id of the newly created entry in the description.
At the same time soft delete also the newly auto created transaction and add REFUND $ID in the description.
This can solve the expense/gain issue, and can also be ignored systematically from any calculations.


Added listing_info view with ability to favorite and buy items

Also adds a new view add_quantity_to_cart that takes listing_id and quantity (and return_to). It's a more flexible way of adding items to the cart. It will add items that aren't in the cart if needed, or just update their quantity otherwise. If you set quantity to zero, it removes them from the cart.

When you click the back to search button, the search should be preserved

Can you resolve the merge conflicts?

Merge conflicts resolved


gnuastro: 0.22 -> 0.23

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://repology.org/project/gnuastro/versions.
meta.description for gnuastro is: GNU astronomy utilities and library
meta.homepage for gnuastro is: https://www.gnu.org/software/gnuastro/
meta.changelog for gnuastro is: https://git.savannah.gnu.org/cgit/gnuastro.git/plain/NEWS?id=gnuastro_v0.23
Updates performed

Version update

To inspect upstream changes
Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 0.23 with grep in /nix/store/3nn6kpbpy1abm0s81kjlh7ilrp5jm6sl-gnuastro-0.23
found 0.23 in filename of file in /nix/store/3nn6kpbpy1abm0s81kjlh7ilrp5jm6sl-gnuastro-0.23

Rebuild report (if merged into master) (click to expand)

2 total rebuild path(s)

2 package rebuild(s)

First fifty rebuilds by attrpath

gnuastro

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/3nn6kpbpy1abm0s81kjlh7ilrp5jm6sl-gnuastro-0.23 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A gnuastro https://github.com/r-ryantm/nixpkgs/archive/e145cabe34a92c1a6eee4d137ca33dbfbba704b5.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/e145cabe34a92c1a6eee4d137ca33dbfbba704b5#gnuastro

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/3nn6kpbpy1abm0s81kjlh7ilrp5jm6sl-gnuastro-0.23
ls -la /nix/store/3nn6kpbpy1abm0s81kjlh7ilrp5jm6sl-gnuastro-0.23/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package built:

gnuastro

Maintainer pings
cc @sikmir for testing.


best-fit save and read

Changes:

updated to cs_util v0.1.0
object-wise leakage

best-fit parameters can be saved and read from .pkl files
separated fitting from plotting
cleaned up functions (e.g. arguments)

notebooks/py scripts for spin-consistent calculations

object- and scale-dependent leakage plots and notation updated, used on SPv1.3

It makes sense, I ran into the same issue. I modified the angular scale from rnom to meanr which introduced differences. But the meanr is consistent with what's used for xi_plus in cosmo_val.


Hebrew: auto Geresh (Apostrophe) on relevant keys on long press

Hi,
first thanks for this keyboard. I use the hebrew keyboard and it's great. the only problem I have is when typing letters with Geresh (apostrophe) I need to swipe up to reveal the apostrophe and add it to the letter I typed.
I wish I could long press any relevant letter (ז ג צ ד ת) and reveal the option to add them with an apostrophe (').
see: https://en.wikipedia.org/wiki/Geresh (although the Geresh is originally different than an apostrophe it is very common to use it instead)

this is a very good suggestion.
Thanks. I'll try to implement that with appropriate Geresh (׳).

Hi Menny. Is there any progress with this? Could I help somehow?


Where can I see the code examples that are on the website?

The examples present on the website https://nadbm.github.io/react-datasheet/, are very good examples and I would like to see the implementation. Is there a place I can see this?
Is is not present on the README.
Thanks

Perhaps, this is what you are looking for
https://github.com/nadbm/react-datasheet/tree/master/docs/src/examples

Thank you very much! Will take a closer look :)


cmake: modules: dts: Restore gen_defines.py warnings

Ever since 059aae7c9168328279657433d77ae0f1d0214f1b (cmake: modules:
dts: make Device Tree error messages more visible, PR #76472), warnings
generated by gen_defines.py got only printed when the exit code signaled
an error.
Without this patch, the warning gets swallowed and the build continues:
$ west build --pristine --board nrf54l15pdk/nrf54l15/cpuapp \
  samples/userspace/hello_world_user
<snip>
-- Found BOARD.dts:
<snip>/boards/nordic/nrf54l15pdk/nrf54l15pdk_nrf54l15_cpuapp.dts
-- Generated zephyr.dts: <snip>/build/zephyr/zephyr.dts
<snip>

With this patch:
$ west build --pristine --board nrf54l15pdk/nrf54l15/cpuapp \
  samples/userspace/hello_world_user
<snip>
-- Found BOARD.dts:
  <snip>boards/nordic/nrf54l15pdk/nrf54l15pdk_nrf54l15_cpuapp.dts
-- In: <snip>build/zephyr, command: <snip>
CMake Error at <snip>cmake/modules/dts.cmake:311 (message):
  gen_defines.py failed with result code: 0 - stderr contents:

  unit address and first address in 'reg' (0x5004c000) don't match for
  /soc/peripheral@50000000/vpr@4c000/mailbox@1

Call Stack (most recent call first):
  <snip>cmake/modules/zephyr_default.cmake:133 (include)
  <snip>share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
  <snip>share/zephyr-package/cmake/ZephyrConfig.cmake:92
  (include_boilerplate)
  CMakeLists.txt:5 (find_package)

-- Configuring incomplete, errors occurred!
<snip>

IMO it should fail the same way as if(NOT "${ret}" STREQUAL "0")

Just the printed message or should it also be message(FATAL_ERROR ...)?

IMO it should fail the same way as if(NOT "${ret}" STREQUAL "0")

Just the printed message or should it also be message(FATAL_ERROR ...) and therefore breaking the build the same was as if(NOT "${ret}" STREQUAL "0")?

I think the check above should be
if(NOT "${ret}" STREQUAL "0" OR stderr)

Adapted.
Warning:If merged as is, this will cause some fallout, e.g. #78251. I'd be willing to help cleaning up first however.

Did some smoke testing:
twister -T samples/userspace/hello_world_user --all

Result:
INFO    - 460 of 829 test configurations passed (92.93%), 0 failed, 35 errored, 334 skipped with 0 warnings in 1537.25 seconds

$ rg -A4 "gen_defines.py failed with result code:" --glob build.log
<EMAIL_ADDRESS>18:  gen_defines.py failed with result code: 0 - stderr contents:
19-
20-  unit address and first address in 'reg' (0x1000) don't match for
21-  /soc/spi@40003800/spi_nor@0/partitions/partition@10000
22-

<EMAIL_ADDRESS>18:  gen_defines.py failed with result code: 0 - stderr contents:
19-
20-  unit address and first address in 'reg' (0x1000) don't match for
21-  /soc/spi@40003800/spi_nor@0/partitions/partition@10000
22-

<EMAIL_ADDRESS>18:  gen_defines.py failed with result code: 0 - stderr contents:
19-
20-  unit address and first address in 'reg' (0x1000) don't match for
21-  /soc/spi@40003800/spi_nor@0/partitions/partition@10000
22-

nrf52dk_nrf52805/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x20000) don't match for
20-  /soc/flash-controller@4001e000/flash@0/partitions/partition@19000
21-

cyw920829m2evk_02/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x60000) don't match for
20-  /qspi_flash@40890000/flash@60000000/partitions/storage_partition@70000
21-

imx93_evk_mimx9352_a55/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x2) don't match for
20-  /enet@42890000/mdio/phy@0
21-

da1469x_dk_pro/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x82000) don't match for
20-  /soc/flash-controller@38000000/flash@16000000/partitions/partition@80000
21-

slstk3401a/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x3e800) don't match for
20-  /soc/flash-controller@400e0000/flash@0/partitions/partition@fe800
21-

imx8mp_evk_mimx8ml8_a53/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x1) don't match for
20-  /soc/enet@30be0000/mdio/phy@0
21-

imx8mp_evk_mimx8ml8_a53_smp/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x1) don't match for
20-  /soc/enet@30be0000/mdio/phy@0
21-

lpcxpresso55s06/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x3fc70) don't match for
20-  /soc/peripheral@40000000/flash-controller@34000/flash@9fc70
21-

google_twinkie_v2/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0xf) don't match for
20-  /soc/adc@40012400/channel@15
21-

mimxrt595_evk_mimxrt595s_cm33/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x1a0000000000000000) don't match
20-  for /soc/peripheral@50000000/i3c@36000/wm8904@1a
21-

da14695_dk_usb/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x82000) don't match for
20-  /soc/flash-controller@38000000/flash@16000000/partitions/partition@80000
21-

mimxrt685_evk_mimxrt685s_cm33/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x1a0000000000000000) don't match
20-  for /soc/peripheral@50000000/i3c@36000/wm8904@1a
21-

nrf9280pdk_nrf9280_cpuppr_xip/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x2f0d0000) don't match for
20-  /reserved-memory/memory@2
21-

nrf9280pdk_nrf9280_cpurad/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x2f0d0000) don't match for
20-  /reserved-memory/memory@2
21-

nrf9280pdk_nrf9280_cpuapp/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x2f0d0000) don't match for
20-  /reserved-memory/memory@2
21-

ctcc_nrf52840/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x88000) don't match for
20-  /soc/flash-controller@4001e000/flash@0/partitions/partition@87000
21-

usb_kw24d512/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x70000) don't match for
20-  /soc/flash-controller@40020000/flash@0/partitions/partition@700000
21-

frdm_kw41z/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x70000) don't match for
20-  /soc/flash-controller@40020000/flash@0/partitions/partition@700000
21-

arduino_nano_33_iot/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x6a) don't match for
20-  /soc/sercom@42001800/atecc608a@15
21-

rzt2m_starter_kit/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x80280000) don't match for
20-  /soc/sckcr@81280004
21-

frdm_mcxn236/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x88000) don't match for
20-  /soc/peripheral@50000000/flash-controller@43000/flash@0/partitions/partition@80000
21-

altera_max10/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x1002c0) don't match for
20-  /soc/dma@100200
21-

lpcxpresso11u68/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0xa0000000) don't match for
20-  /soc/gpio@0
21-

lpcxpresso55s28/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x40094000) don't match for
20-  /soc/peripheral@40000000/usbhs@144000
21-

lpcxpresso55s16/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x3fc70) don't match for
20-  /soc/peripheral@40000000/flash-controller@34000/flash@9fc70
21-

nrf54l15dk_nrf54l15_cpuflpr/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x20028000) don't match for
20-  /soc/memory@2002f000
21-

nrf54l15dk_nrf54l15_cpuapp/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x5004c000) don't match for
20-  /soc/peripheral@50000000/vpr@4c000/mailbox@1
21-

v2m_musca_s1_musca_s1_ns/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0xa080000) don't match for
20-  /mram@a080400
21-

nrf54l15pdk_nrf54l15_cpuflpr/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x20028000) don't match for
20-  /soc/memory@2002f000
21-

nrf54l15pdk_nrf54l15_cpuapp/samples/userspace/hello_world_user/sample.helloworld/build.log
17:  gen_defines.py failed with result code: 0 - stderr contents:
18-
19-  unit address and first address in 'reg' (0x5004c000) don't match for
20-  /soc/peripheral@50000000/vpr@4c000/mailbox@1
21-

IMO it should fail the same way as if(NOT "${ret}" STREQUAL "0")

Not against failing gen_defines on warnings like mentioned in PR description, but I don't think the decision to fail should be done in CMake, instead this should be decided at the earliest point in time, ie. here https://github.com/zephyrproject-rtos/zephyr/blob/main/scripts/dts/gen_defines.py.
Meaning, if gen_defines should fail on warnings, then it should be gen_defines itself which has a return code != 0.
Whether to treat warnings as errors could be controlled by allowing a --warnings-as-errors flag when calling gen_defines.
But short-comings in underlying scripts should not be handled by adjusting CMake.
Note, we need to cleanup devicetree files before being able to enable such a --warnings-as-errors.

@tejlmand My understanding is that --edtlib-Werror would (should) do pretty much this. Do you think that https://github.com/zephyrproject-rtos/zephyr/pull/78253 goes in the right direction? If so I can flesh it out before continuing with this PR.

definitely the right way to go. Thanks for pointing to #78253 :+1:


Create README.md mission 3585

Get Started on SAP BTP with SAPUI5/Fiori - Create a Hello World App
Purpose
readme for new mission

...

Pull Request Type
What kind of change does this Pull Request introduce?
new Readme
[ ] Bugfix
[ ] Feature
[ x] Documentation content changes
[ ] Other... Please describe:

Other Information

@Gituserneumann Can you please sign the contributor license agreement, After that we can merge the PR

signed the cla


Stale Firebase Admin Authentication API Errors?

Believe two of the auth errors ('user-disabled' and 'wrong-password') inside the switch statement of signInDialog's signIn method might be stale... I wasn't able to find them in Firebase's API doc... might be due to an update..?

https://firebase.google.com/docs/reference/js/firebase.auth.Auth#error-codes_12


Verify safe to delete

@jeffmendoza Could you take a look at /python-docs-samples and verify that everything that is needed has been moved?

@elibixby Docs have finally been updated. This can be archived now.


Autotune Code Review

I'm using AAPS (xDrip+ Libre2 / Accu-Check Insight -> meaning there are some gotchas) and am a windows user so i tried getting it to run locally on which i gave up after some struggling with WSL dependency conflicts around node-gyp. I then did what every self respecting developer would do and did a line by line port to my favorite and totally unbiased best language 😜 C# and tweaked it until it was bug compatible (producing same output) with AutotuneWeb. During this process i noticed quite a few suspicious code snippets where i was unable to tell if it's an atrocious feature of dynamic code or a bug.

This code will only warn, not actually handle the case that glucose data couldn't be found, thus possibly either working with undefined variables or the values of the last loop iteration.
https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/autotune-prep/categorize.js#L148-L160
Only uses the 0'th element but doesn't pass the currentIOBOnly flag https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/autotune-prep/categorize.js#L209
inputs.clock isn't passed by all callers and will be undefined here which tz turns into the current timestamp https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L174
Just goes on if duration couldn't be computed https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L350-L352
This code doesn't set the timestamp property https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L362-L373 which leads to https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L515 effectively doing new Date(undefined) which results in an Invalid date that returns NaN for its instance methods causing https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/profile/basal.js#L19 nowMinutes to become NaN, thus always failing this condition https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/profile/basal.js#L22 and effectively returning https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/profile/basal.js#L14
currentItem.rate is sometimes undefined / null causing netBasalRate to become NaN here https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L546
This uses created_at but the other code seems to assume started_at (yaay schemaless) https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L556
new Date(0).getTime() is a very elaborate / obfuscated way of saying 0, https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/index.js#L40-L42
It's called endOffset here but in the JSON file it's endoffset (although, just thinking about it, that could also be an error from AutotuneWeb) https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/profile/isf.js#L16 https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/profile/isf.js#L41
Also this code recomputes endOffset even it's already set https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/profile/isf.js#L30-L38
This code checks current._type https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/meal/history.js#L58 which is a property that does not exists in my nightscout data unlike eventType from the quite similiar looking code here https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L294
current.insulin is sometimes null here https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L301
These two pieces initialize temp.timestamp with current.created_at and then try to find duplicates with current.timestamp that might not exists or be different from created_at https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/meal/history.js#L74-L78 https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/meal/history.js#L87-L89
This code uses current.absolute for AAPS but unless you set always use absolute values, which must not be used with insight, AAPS sends rate (with the same value as absolute) https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L317-L319 which is the case for the non AAPS case here https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/history.js#L325-L327 i've personally changed the code to either use absolute ?? rate whatever is present
Here's some abuse of the insane scoping rules of JS, declaring variables in an inner scope, then using them in the outer scope of different loop iterations https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/autotune-prep/categorize.js#L250-L252
This code just moves on https://github.com/openaps/oref0/blob/acb0150021e7bf284b6741a9510076a13f690747/lib/iob/calculate.js#L112-L114
Some places declare variables without ever using var thus creating them in global scope.
Some places use number = number.toFixed(precision) to round which actually returns a string and then use that elsewhere to do arithmetic. Also this uses IEEE754 compliant AwayFromZero rounding while other code uses Math.round(x * 1En) / 1En which uses half-up rounding that will also round differently than IEEE754 compliant code since the multiplying fucks with otherwise irrepresentable numbers like 0.15 which is actually 0.1499999999999999944488848768742172978818416595458984375 and thus rounds with toFixed(1) to 0.1 but with Math.round(0.15 * 10) / 10 to 0.2

All in all the lack of static type safety and the schemaless design of nightscout with attempted normalization scattered across the entire codebase makes this code a pain to work with and the inconsistent naming doesn't help either (treatment might refer to different sorts of objects; the various datetime properties that alternate between unix timestamp, iso8601 string or date instance, the type isn't even guaranteed to be consistent with the same name; all styles are used, lower_snake_case, camelCase, PascalCase). I'd suggest normalizing the data into a single format before the call to prepare even. Most of these things were found by the C# compiler telling me off. I'm sure i've also missed another few cases because i've only started documenting these things halfway through. And after these painful discoveries, here's something to laugh

If you (anyone) would like to fix these issues, please open a pull request against oref0 dev. To verify the fixes don’t have unintended consequences, we can run oref0-backtest with and without the fixes and confirm whether it changes insulin dosing behavior.

@Suchiman 👍 for code review,
If you have some advices with my adaptation of Autotune for AAPS (not finished yet) you're wellcome https://github.com/MilosKozak/AndroidAPS/pull/2669 ...
I have 2 other point that surprised me (it's not a deep analysis):
oref0/lib/autotune-prep/categorize.js (lines389-395)
    if (opts.categorize_uam_as_basal) {
        console.error("--categorize-uam-as-basal=true set: categorizing all UAM data as basal.");
        basalGlucoseData = basalGlucoseData.concat(UAMGlucoseData);
    } else if (CSFLength > 12) {
        console.error("Found at least 1h of carb absorption: assuming all meals were announced, and categorizing UAM data as basal.");
        basalGlucoseData = basalGlucoseData.concat(UAMGlucoseData);
    } else {

To verify if all meals were announced, check if there is at least 1h of CSF values seems to me very strange (if you have just only one meal recorded, it's very difficult to have less than one hour of CSF data...)
During my tests I found some days with more than 3 hours of UAM data considered as basal (this test is allways true on my side)
For my part, I would have chosen something like "less than one hour of UAM data" (line 392)
    } else if (UAMLength < 12) {
        console.error("Found less than 1h of UAM data: assuming all meals were announced, and categorizing UAM data as basal.");
        basalGlucoseData = basalGlucoseData.concat(UAMGlucoseData);

oref0/lib/autotune/index.js (lines 361-364)
        } else {
            deviations += Math.max(0*previousAutotune.min_5m_carbimpact,parseFloat(CSFGlucose[i].deviation));
            mealCarbs = Math.max(mealCarbs, parseInt(CSFGlucose[i].mealCarbs));
        }

What's the idea behind 0*previousAutotune.min_5m_carbimpact?

Some GitHub archaeology shows that the 0*previousAutotune thing was from https://github.com/openaps/oref0/commit/5b3ecb3fc4c5be6f455f1d6066ca8b2729d28f6a "disable min deviation for CSF calculation" - it was a leftover from something I attempted during initial autotune development, and just never got cleaned up.

But with this modification you also disable negative deviation in calculation...
For categorize_uam_as_basal setting I never see on my tests any impact on results (I always have more than 1 hour of csf data so test is always true, even with 2 or 3 hours of uam data...).
Do you think my proposal is a good idea (UAMLength < 12)?


[Feature] Kakoune mode

Kakoune is a modal text editor, like VIM, but absolutely superior! (In my humble opinion, of course)
What?
The gist of the difference between VIM and Kakoune is that, while VIM commands generally have a verb-object shape, Kakoune commands have an object-verb shape.
For example, in VIM, dw first says something should be deleted (d), and then that this something is the remainder of the word under the cursor (w). The Kakoune command is the opposite, wd, which first specifies that the the rest of the word should be selected (w), and then to delete this selection (d).
I propose that this "style" of command input be made possible as an alternative to "VIM mode".
Why?
The benefits to this approach are:

Selection commands compose, actions don't. For example, wwd will delete the next word. (wWd, or 2Wd, will delete the rest of the current word AND the next word).

It removes the need for a separate visual mode.

It provides immediate visual feedback by showing the selection on-screen. VIM on the other hand requires you to keep a model of the "selection" in your head. For example, to delete the next 9 words, in VIM you can use 9dw, but you have to count the words in advance. Or undo the action and try again if you miss. In Kakoune you can ballpark it, observe the selection and correct it if it's off before doing any editing action. For example, select the next 10 words (10W), correct it by unselecting the last (B), then delete the selection (d).

With additional support for multiple selections, the combination of immediate visual feedback and composition means you can do some very elaborate selections without planning the entire thing out in your head in advance.

Read more, and watch fancy animated illustrations, at Why Kakoune?
How?
From what I understand of the code base so far (which admittedly isn't much) it seems like the least intrusive approach would be to provide a replacement for libvim (or reason-libvim). This means reimplementing a lot of stuff like buffer management, commands, and... yeah, a lot.
Perhaps it would be possible to wrap libvim in some way and delegate most of it right back to libvim? Or emulate it on top of libvim using existing commands?
The cleanest approach might be to pull the keymapping part of libvim out. This would undoubtedly complicate the currently very minimal libvim API, and is fairly intrusive, but might still be less work than the other options. I also think this is a better option long-term, as control over keymapping adds flexibility that I think will be desired for other features (such as contextual command help, also a feature of Kakoune).

I hadn't heard of Kakoune until you mentioned it recently on discord. I'm pretty fascinated by it now.
I think having a libkakoune might be too onerous a task, particular at this stage of the project, but perhaps a translation layer between keyboard output from sdl2 (when finalised) and libvim might work.
I think that would work for the object-verb part of kakoune, but instead of a direct translation to vim of verb-object it would need to be changed into visual mode to get the visual feedback of the selection. So something like 3wd would be translated to v3ed.  (not sure what the equivalent of x in kakoune is though, so some edge cases to think about).
I'm not sure how things like multiple selections in kakoune would work though? Might need to test on some example to get some ideas how to generalise.
Alternatively as bryphe nearly put neovim as the core of onivim then perhaps specing out an api for an buffer engine might be a good idea and trying to get kakoune to work with this.

Thanks for the input @yunti!

I think having a libkakoune might be too onerous a task, particular at this stage of the project

It might have to be a long term project, with libvim being split into separate pieces over time perhaps. I think that's be good for the project as a whole anyway.

...instead of a direct translation to vim of verb-object it would need to be changed into visual mode to get the visual feedback of the selection. So something like 3wd would be translated to v3ed.

Yeah, that's the kind of approach I was considering as well, but I think it'd get really messy. You can't exit visual mode without losing the selection, not through normal commands at least, so it seems you'd have to keep track of which selection operations have been performed, to be replayed later if the user enters a command that requires going back to normal mode.

not sure what the equivalent of x in kakoune is though, so some edge cases to think about

It's just d. The character under the cursor is considered the selection, so it's the same command as with any other selection.
x instead selects the current line, since there's no special-cased dd commands and such. xx selects the next line and xX selects the current AND next line, just like with w, ww, and wW. It's a very consistent and easy to learn command scheme (dd does have the benefit of being a tiny bit faster than xd however).

I'm not sure how things like multiple selections in kakoune would work though?

You'd usually get multiple selections by doing a search that finds multiple matches. Subsequent commands are then just applied to each selection individually. I imagine it would work much the same way with vim.

...specing out an api for an buffer engine might be a good idea and trying to get kakoune to work with this.

Absolutely. I don't know much about the internals of libvim, but I'm hoping it already has a separate internal API for a kind of "buffer engine" that could be exposed, so that the input handling part could be extracted relatively easily. If not, then adopting an editor back-end like xi might be a better approach, since I believe that's pretty much what it does.

Just to add that VS Code has some basic kakoune extensions, would an extension work in this case? Given that the core wasn't designed for different editors, it sounds like it'd be a lot of work to retrofit it in.
I would love for this project to support kakoune's interaction model (as I've moved over from vim, but can't quite stop using VS Code).

Ireally wish that Oni would be be built on Top kak. It would be a killer combo.

+1


Resolve issue in prod example on volume mount

Resolves #142

Can you add this too please:
fsGroupChangePolicy: onRootMismatch

@kfox1111 where should this be added? You can do inline suggestions.

@kfox1111 where should this be added? You can do inline suggestions.

Anywhere fsGroup is set.... I'll look closer though.


Fix incorrect variable name in the documentation

The environment variable controlloing the max string length is BPFTRACE_STRLEN, not BPFTRACE_STR_LEN.
Checklist

[ ] Language changes are updated in man/adoc/bpftrace.adoc and if needed in docs/reference_guide.md
[ ] User-visible and non-trivial changes updated in CHANGELOG.md
[ ] The new behaviour is covered by tests

Thanks!


Add Serial Ports explorer view and context menus

For better look and feel integration with MPRemote and more pleasing user interaction.

Closed with https://github.com/DavesCodeMusings/esptool-vscode/commit/830f3a67eb6d112562641e30556c59d5e962c2e0


Using ia32 version on x64 windows system

The ia32 windows build seems to work fine on x64 systems but not vice versa. I would prefer to only distribute one windows version (32 bit) of my app, but still build it on a x64 system. Is there any way to install the ia32 version on x64 windows (besides from copying the folder from another system)?
And is this recommended at all? Should I rather just distribute separate ia32 and x64 windows versions of my app?

Seems electron-downloader supports an arch option that will override the value of os.arch() so if that parameter could be passed somehow then it should be possible to install the module for another architecture I guess?

In the mean time, while the PR is in the works, you can force using ia32, by installing and using the 32 bit version of node, since os.arch() returns the architecture of node and not the OS (this is true at least for Windows).

I believe this was addressed by https://github.com/electron-userland/electron-prebuilt/pull/60 and so this issue cannot be closed.

Should I rather just distribute separate ia32 and x64 windows versions of my app?
Yes.


[pyflakes] Stabilize detection of is comparisons to lists, etc. (F632)

Summary
See: https://github.com/astral-sh/ruff/pull/8607. Rare but uncontroversial.

(LGTM!)


[Storage] Add std::recursive_directory_iterator analog

Just wondering, if this is an analog to a stdlib thing, could we get the stdlib fs code working on Wii or is it not that portable?

That's a good question. I'm not sure how practical it'd be, here's the GCC one, for instance:
class recursive_directory_iterator
{
  // ...
  recursive_directory_iterator(const path& __p)
    : recursive_directory_iterator(__p, directory_options::none, nullptr)
  { }
  // ...
  directory_options  options() const noexcept;
  int                depth() const noexcept;
  bool               recursion_pending() const noexcept;
  // ...
  void pop(error_code&);
  void disable_recursion_pending() noexcept;
  // ...
  struct _Dir_stack;
  std::__shared_ptr<_Dir_stack> _M_dirs;
  // ...
  recursive_directory_iterator& __erase(error_code* = nullptr);
};

The standard filesystem library does a bunch of allocations (not just the ARC pointer here, but also all paths are just std::strings), which might not be the most appropriate for the game?
That being said, we could certainly implement the Posix APIs GCC is going to call, and presumably our code would just work.


[Required] Clearly defined and discoverable process to report security issues.

Will create something tweaked from the template: https://github.com/cncf/tag-security/blob/main/community/resources/project-resources/templates/SECURITY.md

Also btw the security guidelines.