Draft proposal of standard parameters and functions for DisplayIO Widgets

The DisplayIO_Layout library will rely on having several standard parameters for any "widgets" so this function can place them in the desired layout.  Additionally, for any touch-related objects, it is useful to have standard response functions.
The starting point for this proposal was the Adafruit_CircuitPython_Display_Text library with the label item along with the Adafruit_CircuitPython_Display_Button library with the button item.
I'd especially like proposals on the standardized "Response functions" for widgets.

Proposed widget parameters and naming:

Position and sizing

x, y : upper left corner of the widget, in display pixel coordinates (see diagram)
anchor_point : (a, b) two values between 0 and 1.  Widget placement using anchor_point and anchored_position should operate the same as display_text.Label (see candy hearts example: https://learn.adafruit.com/circuit-python-tft-gizmo-candy-hearts/how-it-works)
anchored_position : (C,D) in pixels (see anchor_point description above)
width : in pixels
height : in pixels
bounding_box : (x, y, width, height), *getter only

Touch-related

touch_padding : in pixels, additional space around the bounding_box that accept touch input (alternately, modify touch_boundary directly)
touch_boundary : (x, y, width, height) region that will accept touch input

Response functions and data

contains(touch_point) : responds True if touch-point is within the widget’s touch_boundary
selected(touch_point) : widget was just touched, reaction to selection will depend upon the widget’s needs
still_touched(touch_point) : widget remains touched (***?)
released(touch_point) : widget is released (***?)
value : type will depend upon the widget (getter/setter required)

Widget naming (*** Should each widget have a label that can be optionally displayed and positioned?)

label : text label to describe the button
display_label : Boolean, set True to display the name of the widget
label_font : font
label_anchor_point_on_widget : proposed (*need to add description and diagram)
label_anchor_point_on_label : proposed (*need to add description and diagram)

Optional parameters and naming recommendations:

_color : use as many parameters as needed for fill and outline colors for the widget structures, prefer to include _color somewhere in the parameter name.  Should accommodate hex 0xFFFFFF 8-bit RGB color codes, but prefer to also support tuples (R, G, B).
_stroke : this is the width in pixels of outline features.  Use as many as needed, prefer to include _stroke in the parameter name.
animation_time : in seconds, the time required for the widget’s animation.  For example, for a switch, the time allotted for switching from off to on and vise versa.  Preferably, the widget will check the elapsed animation time and redraw accordingly, so that the response time is the approximately the same even when run on different processors and systems.  (see example in switch_round_horizontal.py, see selected function)
orientation : horizontal or vertical
flip : Boolean, default is False.  Set True if mirror image is desired.

Coordinate scheme
Here is a proposed graphic with a proposal some of the naming of the pixel coordinate schemes:

Draft code snippet: Switch widget
Here is a code snippet of the __init__ function for a draft of a switch widget that runs on the Adafruit PyPortal:
class SwitchRoundHorizontal(displayio.Group):

    def __init__(
        self,
        *,
        x=0, # Placement of upper left corner pixel position on the display
        y=0,
        width=None, # defaults to the 4*radius
        height=30,
        name="",
        value=False,
        touch_padding=0,
        anchor_point=None,
        anchored_position=None,
        fill_color_off=(66, 44, 66),
        fill_color_on=(0,100,0),
        outline_color_off=(30,30,30),
        outline_color_on=(0,60,0),
        background_color_off=(255,255,255),
        background_color_on=(0,60,0),
        background_outline_color_off=None, # default to background_color_off
        background_outline_color_on=None, # default to background_color_on
        switch_stroke=2,
        text_stroke=None, # default to switch_stroke
        display_button_text=True,
        animation_time=0.2, # animation duration (in seconds)
        ):

        super().__init__(x=x, y=y, max_size=3)

Widget positioning
As described above, the widget position on the screen can be defined directly by widget.x and widget.y or by the combination of widget.anchor_point and widget.anchored_position.
Here is a reference image for the usage of anchor_point and anchored_position as snipped from the Adafruit Learn guide's Candy Hearts Example:

What if all of these widgets used a "Control" superclass rather than directly deriving from Group and the superclass handled these standard events?

What if all of these widgets used a "Control" superclass rather than directly deriving from Group and the superclass handled these standard events?

@kmatch98 this is a really great start! Thanks for taking the time to get all of this down.
I am in agreement with the majority of what you've laid out. I'll list only the things I might add to or suggest different below.
I am thinking the same as Melissa as well about putting these things into a class and then having the specific widgets extend this instead of Group. I'll refer to it as "Control" here, I do like that name, but open to other ideas still as well.
For the response functions I wonder if there may be a way to leverage the contains() function along with the debouncer library to get the other property states concepts like just touched and just released.
Widget naming - I don't think a widget_label option should be done at the Control level. I do see the usefulness of this construct, but I think the way to go about it is making a specific widget / layout. Like LabeledThing class (hopefully better name) and it has a set_thing(control_obj) function. So it works a bit like the GridLayout (or any layout) in that you "add" or in this case "set" a control into it and it adds "something" to the control. This one will add the text off the side (or wherever configured) of the control. This way it will be still be able to work with all controls, but doesn't need anything else specific to exist on the Control class for it to work.
animation_time I'm not sure if we need this on Control. Some widgets may not need it, and I'm not sure if the layouts would need to access it.
orientation Same for this one. It could live on the specific widgets need it. As long as they handle width and height appropriately based on their orientation the layouts can use that and not have to worry about orientation.
flip is interesting. Is the use case for rear-projection, or mirrored screen? I'm not sure if we have an easy way to achieve it in disiplayio, but perhaps I'm unaware or something.
Coordinate scheme - This is an awesome illustration! Would love to see diagrams like this find a home in the documentation or learn guide.

@kmatch98 this is a really great start! Thanks for taking the time to get all of this down.
I am in agreement with the majority of what you've laid out. I'll list only the things I might add to or suggest different below.
I am thinking the same as Melissa as well about putting these things into a class and then having the specific widgets extend this instead of Group. I'll refer to it as "Control" here, I do like that name, but open to other ideas still as well.
For the response functions I wonder if there may be a way to leverage the contains() function along with the debouncer library to get the other property states concepts like just touched and just released.
Widget naming - I don't think a widget_label option should be done at the Control level. I do see the usefulness of this construct, but I think the way to go about it is making a specific widget / layout. Like LabeledThing class (hopefully better name) and it has a set_thing(control_obj) function. So it works a bit like the GridLayout (or any layout) in that you "add" or in this case "set" a control into it and it adds "something" to the control. This one will add the text off the side (or wherever configured) of the control. This way it will be still be able to work with all controls, but doesn't need anything else specific to exist on the Control class for it to work.
animation_time I'm not sure if we need this on Control. Some widgets may not need it, and I'm not sure if the layouts would need to access it.
orientation Same for this one. It could live on the specific widgets need it. As long as they handle width and height appropriately based on their orientation the layouts can use that and not have to worry about orientation.
flip is interesting. Is the use case for rear-projection, or mirrored screen? I'm not sure if we have an easy way to achieve it in disiplayio, but perhaps I'm unaware or something.
Coordinate scheme - This is an awesome illustration! Would love to see diagrams like this find a home in the documentation or learn guide.

Thanks for the encouragement.
I’m not sure I follow the difference in purpose or function between a Group and a Control class, so I could use some clarification on how this would be organized.
Right now, the only thing that can be displayed using display.show() is a Group class element. And currently there are only a few things that can be held in a Group, I think only Group and TileGrid. What level would this “control” class fall into?
If y’all can sketch a block diagram of your proposal that will help me understand better.
@FoamyGuy thanks for the comments on the variables, I think some variables should be categorized as “mandatory” (so things like grid_layout can operate on them) and other variables as “optional”.  And anytime we can use meaningful reuse of variable names that will probably make life easier, even for optional variables.
Also I like your idea about the labeling of a widget. I struggled to make sense of a good way of doing that, but I think you are on a good track about having a separate “thing” that does any labeling. I’m also thinking of the best way of putting text inside of a widget, like numbers on a dial and how it can use a common way of laying them out. Maybe that is the same as a “grid layout” task, but used inside a widget.
Regarding widget orientation, taking the example of a switch I could imagine someone wanting it to switch right/left (horizontal) or up/down (vertical with ON is up), then next someone will want eventually want the mirror image of that (vertical but ON being down), so I thought maybe “flip” would be a way to describe the mirror image orientation. (I think I saw that lingo used some other library, maybe for setting up matrix display?). Another example, if someone wants a Sparkline to scroll in the opposite direction, they could “flip” it. I was thinking the individual widget drawing routine could be designed to handle dealing with the orientations (if that feature is desired).
Thanks again for the feedback. I’ll do some more cleanup on the slider switch widget example (better color handling) and post it somewhere for general consumption.

Thanks for the encouragement.
I’m not sure I follow the difference in purpose or function between a Group and a Control class, so I could use some clarification on how this would be organized.
Right now, the only thing that can be displayed using display.show() is a Group class element. And currently there are only a few things that can be held in a Group, I think only Group and TileGrid. What level would this “control” class fall into?
If y’all can sketch a block diagram of your proposal that will help me understand better.
@FoamyGuy thanks for the comments on the variables, I think some variables should be categorized as “mandatory” (so things like grid_layout can operate on them) and other variables as “optional”.  And anytime we can use meaningful reuse of variable names that will probably make life easier, even for optional variables.
Also I like your idea about the labeling of a widget. I struggled to make sense of a good way of doing that, but I think you are on a good track about having a separate “thing” that does any labeling. I’m also thinking of the best way of putting text inside of a widget, like numbers on a dial and how it can use a common way of laying them out. Maybe that is the same as a “grid layout” task, but used inside a widget.
Regarding widget orientation, taking the example of a switch I could imagine someone wanting it to switch right/left (horizontal) or up/down (vertical with ON is up), then next someone will want eventually want the mirror image of that (vertical but ON being down), so I thought maybe “flip” would be a way to describe the mirror image orientation. (I think I saw that lingo used some other library, maybe for setting up matrix display?). Another example, if someone wants a Sparkline to scroll in the opposite direction, they could “flip” it. I was thinking the individual widget drawing routine could be designed to handle dealing with the orientations (if that feature is desired).
Thanks again for the feedback. I’ll do some more cleanup on the slider switch widget example (better color handling) and post it somewhere for general consumption.

I am imaging it like this:

The main reason for Control existing is that Group itself doesn't have width and height or things that rely on them like anchor_point and anchored_position. But it also gives us a nice place to define the common interface that all of the layouts and other "enchancing" widgets like the LabeledThing will assume exists in order to do whatever they need.

I am imaging it like this:

The main reason for Control existing is that Group itself doesn't have width and height or things that rely on them like anchor_point and anchored_position. But it also gives us a nice place to define the common interface that all of the layouts and other "enchancing" widgets like the LabeledThing will assume exists in order to do whatever they need.

Ah I think I see what you mean with flip, its more conceptual and the specifics can be up to each widget, not necessarily strictly mirroring the pixels. I do think that is a nice option to have.
Orientation I think I understand what you mean better as well. But I do think it can live on each widget that wants to have it. Doesn't need to be on Control

Ah I think I see what you mean with flip, its more conceptual and the specifics can be up to each widget, not necessarily strictly mirroring the pixels. I do think that is a nice option to have.
Orientation I think I understand what you mean better as well. But I do think it can live on each widget that wants to have it. Doesn't need to be on Control

In the initial code I have a widgets directory that I'm thinking we can include things like the RoundSwitch that you made if you are interested in having it there.

In the initial code I have a widgets directory that I'm thinking we can include things like the RoundSwitch that you made if you are interested in having it there.

That's the great thing about using a superclass. The subclasses can override any functions from the superclass for any specific implementation details.

That's the great thing about using a superclass. The subclasses can override any functions from the superclass for any specific implementation details.

I agree with @makermelissa and @FoamyGuy  on separating a "Control" or "Interactable" base widget. It also makes that functionality opt-in as opposed to required for every "Group", might be a ram/space saver on some of the more ram tight m4 boards (like the Nrf). Also groups don’t have dimensions where as Controls do is a great point.
There may be a be advantages to separating controls further? Not all widgets may need control. It could be something like Group -> Widget -> Control. Widget adds dimension and Control adds, well, control.
If I may add in two cents to the original post. Might I suggest that 'x' and 'y' be specified together as 'coord=', a tuple of (x, y). Same thing for width and height as (width, height) as 'dims='.
From my experience having the user specify them as pairs allows the backend more flexibility to reason about where it should be, and generally it means the user can't  input invalid or implicit data.
For the data/control interface  I'd suggest separating selection from pressing from updating scroll coordinates, etc.
As a small case example, I've had to decouple selection, pressing, and "scrolling" from each other as pressing and scrolling are mutually exclusive but a scroll may start with a finger on a button/selectable. when scrolling starts the button  needs to be deselected without activating it's functionality. (That reasoning is handled by an input event loop)
Another useful debug widget may be frame, something to draw the exact borders around a widget.

I agree with @makermelissa and @FoamyGuy  on separating a "Control" or "Interactable" base widget. It also makes that functionality opt-in as opposed to required for every "Group", might be a ram/space saver on some of the more ram tight m4 boards (like the Nrf). Also groups don’t have dimensions where as Controls do is a great point.
There may be a be advantages to separating controls further? Not all widgets may need control. It could be something like Group -> Widget -> Control. Widget adds dimension and Control adds, well, control.
If I may add in two cents to the original post. Might I suggest that 'x' and 'y' be specified together as 'coord=', a tuple of (x, y). Same thing for width and height as (width, height) as 'dims='.
From my experience having the user specify them as pairs allows the backend more flexibility to reason about where it should be, and generally it means the user can't  input invalid or implicit data.
For the data/control interface  I'd suggest separating selection from pressing from updating scroll coordinates, etc.
As a small case example, I've had to decouple selection, pressing, and "scrolling" from each other as pressing and scrolling are mutually exclusive but a scroll may start with a finger on a button/selectable. when scrolling starts the button  needs to be deselected without activating it's functionality. (That reasoning is handled by an input event loop)
Another useful debug widget may be frame, something to draw the exact borders around a widget.

I'm trying to digest y'all's inputs so I made a chart to see if I'm getting it right.  Also, I'm unsure how generic the Control class should be so I thought I'd make a graphic to see if I understanding it:

Here are some questions:
Should the Control class be it's own separate Class, or a subclass of Widget?
How generic do we want to make Control?  I first envisioned it as related to dealing with touch screen inputs, but it could be more generic.  For example, do we want the Control class to be able handle D-pad or joystick switch inputs to control a cursor widget on the screen?
Specifically regarding touch_screen related control functions, it seems like touch_screen capabilities differ a lot depending upon the type.  The current Adafruit_CircuitPython_Touchscreen Library for the resistive touch screen seems to only provide single touch response.  But I guess there could be added wrappers to provide touch_down, still_touched and touch_up actions.  Also, some touch screens also provide other gesture response (multi-touch points, pinch zoom, etc.).  How should this Control class be configured?  How many Control functions should be required functions, or does the event loop just dump a Dictionary of touches and/or gestures to the Control, and each Control has to decide if it responds to those?
One more question about contains().  I was first envisioning that the event loop will check each widget using contains() and then call the widget.selected() function.  In contrast, should the event loop just send the Touch/Gesture event dictionary to each widget and then they each return whether they handled that event?
As I'm fairly new to all of this, so I'm mixing up a lot of questions and concepts between the class structure and the event loop handling, so I appreciate your patience.  Also, I'm sure this has been done before, so if you have a suggested reference design, please fire it over.

I'm trying to digest y'all's inputs so I made a chart to see if I'm getting it right.  Also, I'm unsure how generic the Control class should be so I thought I'd make a graphic to see if I understanding it:

Here are some questions:
Should the Control class be it's own separate Class, or a subclass of Widget?
How generic do we want to make Control?  I first envisioned it as related to dealing with touch screen inputs, but it could be more generic.  For example, do we want the Control class to be able handle D-pad or joystick switch inputs to control a cursor widget on the screen?
Specifically regarding touch_screen related control functions, it seems like touch_screen capabilities differ a lot depending upon the type.  The current Adafruit_CircuitPython_Touchscreen Library for the resistive touch screen seems to only provide single touch response.  But I guess there could be added wrappers to provide touch_down, still_touched and touch_up actions.  Also, some touch screens also provide other gesture response (multi-touch points, pinch zoom, etc.).  How should this Control class be configured?  How many Control functions should be required functions, or does the event loop just dump a Dictionary of touches and/or gestures to the Control, and each Control has to decide if it responds to those?
One more question about contains().  I was first envisioning that the event loop will check each widget using contains() and then call the widget.selected() function.  In contrast, should the event loop just send the Touch/Gesture event dictionary to each widget and then they each return whether they handled that event?
As I'm fairly new to all of this, so I'm mixing up a lot of questions and concepts between the class structure and the event loop handling, so I appreciate your patience.  Also, I'm sure this has been done before, so if you have a suggested reference design, please fire it over.

Here an event loop I've implemented. It scans through all the widgets that have certain control functionalities and then informs them of what to do. That was the widgets don’t have to parse raw data*
in this design widgets' control functionality is defined by the presence of specific methods but I could easily be defined as subclasses with overrides.
[*] scrolling is not finished
(It is lacking the press or scroll behavior atm, and detailed comments)
https://github.com/TG-Techie/TG-Gui-Std-CircuitPython/blob/main/tg_gui_std/event_loops.py

Here an event loop I've implemented. It scans through all the widgets that have certain control functionalities and then informs them of what to do. That was the widgets don’t have to parse raw data*
in this design widgets' control functionality is defined by the presence of specific methods but I could easily be defined as subclasses with overrides.
[*] scrolling is not finished
(It is lacking the press or scroll behavior atm, and detailed comments)
https://github.com/TG-Techie/TG-Gui-Std-CircuitPython/blob/main/tg_gui_std/event_loops.py

I updated the sliding switch widget now with classes as laid out in the diagram above.  Here are the main updates:
Demo files are here, along with a pyPortal example.
To Do:

I'm not happy with how the WidgetLabel integrates with Widget.  It seems like the relationship isn't exactly right.  I think the WidgetLabel should some how be related to Widget so that it can have direct access to the name and bounding_box properties of the Widget.

This is my first time making a more complicated set of interacting Python classes, so I welcoming any suggestions that you have to improve this. It took me quite a bit of trial and error to figure out the use of *args and **kwargs along with the super().init details.  If I can improve how to do these, I'm eager to learn how.
I appreciate your inputs!

The diagram above captures the general Class design.  But here it is in a list, along with a few comments.
SwitchRoundHorizontal class:

Subclass from Widget and Control classes (uses multiple inheritance)
Includes a WidgetLabel class as an option to label a switch.

Widget class:

Positioning
Sizing
Name

Control class: Outlines response functions

contains(touch_point): for touch checking
selected
still_touched (needs a better name)
released
gesture_response: for future expansion if gestures are available

WidgetLabel class: Positions the label with relative position on the widget.

anchor_point
anchor_point_on_widget

This class positions the label's anchor_point at the widget's anchor_point_on_widget.
Note that x and y values for anchor_point_on_widget can be < 0.0 or can be > 1.0 to place it outside of the widget's bounding_box.

I submitted a draft pull request with the initial version of the proposed class definitions and an example.
Feedback is welcome.

This is superseded by the PRs and other discussions so I’m closing this.


Add support for Picture element

Use case:
I'd like to display a completely different image on some screen widths. (eg different orientation etc)
Thanks!!

Hi @stavros-k,
I would argue that this is best left to each individual use and it could be done with a JavaScript conditional in your code.


imutils conda installation on m1 macbook

I am working on a m1 macbook and wanted to install imutils. I need to use conda to install packages but it does not work. I tried conda install imutils and conda install -c conda-forge imutils but both give a package not found error.
Is there a solution to installing it on the m1 macs?

I don't see an arm64 build on conda and that's why it fails. You should be able to install it using pip in your conda environment. If that fails, the repository has a setup.py that you can use: setup.py --install

Encountered the same problem and proceeded to install it using pip. Thanks for the solution!

I don't see an arm64 build on conda and that's why it fails. You should be able to install it using pip in your conda environment. If that fails, the repository has a setup.py that you can use: python setup.py --install

I don't see an arm64 build on conda and that's why it fails. You should be able to install it using pip in your conda environment. If that fails, the repository has a setup.py that you can use: python setup.py --install

Sorry if this is a dumb question, but why wouldn't conda have a build for this?


Turkish Comment

@selocan1563 please, note that you've broken the tests since Dockerfile is not valid after adding comments to it. Also please note that we use only English comments/code/docs/etc in this repository as far as it is international.


save files before build

This PR add functionality of saving all opened unsaved files before starting build  process.

How to use:
In qbs-configurations.json config file set saveAllBeforeBuild option to true
[
    {
        "name": "release",
        "displayName": "Release",
        "saveAllBeforeBuild": "true",
        "description": "Build with optimizations.",
        "properties": {
            "qbs.buildVariant": "release"
        }
    },
    {
        "name": "debug",
        "displayName": "Debug",
        "saveAllBeforeBuild": "true",
        "description": "Build with debug information.",
        "properties": {
            "qbs.buildVariant": "debug"
        }
    },
    {
        "name": "profiling",
        "displayName": "Profiling",
        "description": "Build with optimizations and debug information.",
        "properties": {
            "qbs.buildVariant": "profiling"
        }
    }
]

Thanks, sorry for delay. I have fixed it similar to as it is done in the cmake-tools extension.


Painted pressure plates do not render textures properly

If you paint a (in my case, stone) pressure plate with a block that has different textures on each side (in my case: matter transmitter), The incorrect texture will be used for the top side of the pressure plate as demonstrated here:

It should be obvious that the expected output is that the top texture is used for the top side of the pressure plate.
Affected Versions (Do not use "latest"):

EnderIO: 1.10.2-<IP_ADDRESS>-beta
EnderCore: 1.10.2-3.1.156
Minecraft: 1.10.2
Forge: <IP_ADDRESS>5

Same issue as #4057


Add a missing require

Fishwife doesn't seem to load StringIO before it is used. If my code doesn't load it I get only error 500 and "uninitialized constant Fishwife::RackServlet::StringIO".
A minimal example to reproduce:
require 'fishwife'
server = Fishwife::HttpServer.new(:Port => 3210)
server.start(lambda { [200, {}, []] })

Thanks for the clean patch @iconara. Merged, released as fishwife-1.7.1.
Also related, released: rjack-jetty <IP_ADDRESS>


Allow readonly properties to be overridden

Search Terms
override readonly
Suggestion
I have many interfaces that have readonly properties. This is because in standard usage, those properties are indeed intended to be treated as readonly. However, when setting them up I want to be able to set those properties with some sort of override command.
Right now, I either just run with an 'any' and cast it after the fact, or just disable type checking of that line altogether. Both methods come with their own disadvantages.
This has been a sticking point in my codebase for years now, and I think this is a wise addition to the language. It keeps the language succinct and means I don't have to do strange workarounds.
Examples
The following example is NOT allowed. I think having some sort of keyword like force could help here.
interface Example {
	readonly a: number,
	readonly b: number,
	readonly someDerivativeProperty: string
}

const row: Example = await getOneRowFromDatabase();
// example row:
// { a: 3, b: 6 }

// complete the object.
// THE BELOW IS NOT ALLOWED AND THERE IS NO WAY TO OVERRIDE IT
row.someDerivativeProperty = (row.a + row.b > 9 ? 'something' : 'something else');

Checklist
My suggestion meets these guidelines:

[x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
[x] This wouldn't change the runtime behavior of existing JavaScript code
[x] This could be implemented without emitting different JS based on the types of the expressions
[x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
[x] This feature would agree with the rest of TypeScript's Design Goals.

Just create a matching type that does allow mutation:
type Mutable<T> = { -readonly [P in keyof T]: T[P] }

const row: Mutable<Example> = await getOneRowFromDatabase();
row.someDerivativeProperty = (row.a + row.b > 9 ? 'something' : 'something else');
const done: Example = row;

Huh... nice.
That's some black magic though. I wonder if the TS team is happy with this being a solution

That is the intended solution, it's why the possibility to remove the readonly modifier as part of mapped types was added (same with making it non-optional, or vice-versa). And definitely to be preferred over another keyword like forced.


Anvil executable should extract palette automatically

If no palette is given, automatically extract it. Could/should we output the palette along side the map? Should we store it somewhere for future use?

I think it should
btw, what's --jar option mean?


Peering Request

Full Name
DreamServer
ASN
57050
PeeringDB Integration

[X] My PeeringDB Entries are current
[ ] Peer at all available exchanges (and omit Peer Address(es) field below)

Peer Address(es)
2a10:fa80:10::246 2a10:fa80:10::247
Code of Conduct (TODO)

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

Thank you for your interest in the RouteViews project. We are awaiting installation of additional capacity to support more multihop connections. We will only support same-address family peerings though. Please confirm if you are still interested in setting up a multi-hop peering, and we can work on that with you.

Thank you for your message and for providing an update on the current status of the RouteViews project. We appreciate your efforts in expanding the capacity to accommodate more multihop connections.
Despite the delayed response, we remain keenly interested in setting up a BGP session with RouteViews.
Please consider this message as our confirmation of continued interest in establishing a multi-hop peering with RouteViews. We are ready to collaborate with you on the configuration process and eagerly await further instructions on how to proceed.
Thank you once again for your attention to this matter. We look forward to your guidance on the next steps.

Great, thanks for your patience and continued interested in RouteViews. I'll set up a multihop session on one of our University of Oregon based collectors. Here are the details:
asn: 6447
ipv4: <IP_ADDRESS>
ipv6: 2001:468:d01:33::80df:330f
fqdn: route-views4.routeviews.org

If you would please let us know your IPv4 end points, and confirm the IPv6 end point, then I will configure the EBGP multihop session with AS57050.
Please filter out default route and RFC6490 address space.
NOTE: we do not accept addpath-RX or TX on connections.
Thanks!

We use for ipv4: <IP_ADDRESS> and <IP_ADDRESS>
For ipv6: 2a10:fa80:10::246 and 2a10:fa80:10::247

Thank you for those details! I've now set up the multihop peering on our route-views4.routeviews.org collector:
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc
<IP_ADDRESS>   4      57050    159280         5 10145573    0    0 00:02:11       936095        0 DreamServer.ro
<IP_ADDRESS>   4      57050    159067         5 10145573    0    0 00:01:25       936095        0 DreamServer.ro

Neighbor             V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc
2a10:fa80:10::246    4      57050     52168         5 12284795    0    0 00:02:15       190029        0 DreamServer.ro
2a10:fa80:10::247    4      57050     52225         5 12284795    0    0 00:02:04       190029        0 DreamServer.ro

Many thanks for helping support RouteViews!


[R-package] added support for first_metric_only

closing since I have a PR in the main repo with these changes


[pinot]Support for pausing the realtime consumption without disabling the table.

As of now, to pause the realtime consumption from kafka we have to disable the table. This also leads to the table not being available for querying.
It would be helpful if there is support for only stopping the realtime consumption while having the table available for querying.

Two questions, @Aka-shi

After a pause, if the server is restarted, how do you desire the server should come back up? Should it consume up to the exact same paused place again? Should it simply not consume after the last completed/committed point? Should it forget that it was paused?
If there are multiple replicas, then the above question becomes even harder since the behavior has to be co-ordinated across all replicas. I suppose it is not OK for one replica to forget the pause, and the other replica to still be paused.
Further if there are multiple replicas, do you want them all to pause at the same place after a pause command?

@snleee , @sajjad-moradi  if you have other questions/thoughts please chime in

Other questions:

Would you want all partitions of the stream to pause , or just some specific partitions?
Would you want all partitions/tables in a given server to pause?

@mcvsubbu

Would you want all partitions of the stream to pause , or just some specific partitions??

For all partitions. The consumption for the table itself should be stopped. I was thinking something like this.

User pauses stream -> pinot server commits the current consuming segments(for all partitions) along with offsets.
User resumes stream -> Pinot starts consumption from all partitions from previously committed offsets.

Would you want all partitions/tables in a given server to pause?

I was expecting the pause option to be at a table level. Because of this #6555 . If the pause and reset APIs are available at a table level, then the user can pause the current stream(which would commit current segments and pause the stream), reset the offsets, and resume consumption  from earliest/latest offsets as per config.

After a pause, if the server is restarted, how do you desire the server should come back up? Should it consume up to the exact same paused place again? Should it simply not consume after the last completed/committed point? Should it forget that it was paused?

If a table is paused and server restarts after it, then considering the previous consuming segments were already committed when the table is paused, I would expect the server to not consume after the restart too. My understanding is when we pause the stream, we are changing the state of the table and it should not start consuming until the user resumes the stream himself.

Further if there are multiple replicas, do you want them all to pause at the same place after a pause command?

Yes. That's what I would expect when I pause the stream. No replica of any partition consumer should be active is what I feel.
PS: Just putting it out here. When we pause the table, the table should still be available for querying the already consumed data. If not, this would be more or less like the enable/disable API.

Thanks for clarifying. So, you are not really looking for a "pause" (which I assumed to mean pause without committing segments). You are looking for a "commit now and do not consume until further instructions".
Last question (should have been the first). What is the use case for this?
Question for the community: Are there others who need this feature?

Hi 👋
Do you have any news on this kind of feature?

@mcvsubbu @npawar we should definitely consider implementing this. I remember discussing a simple approach for this but I dont seem to recall the solution.

@Eywek just clarifying if your request to "pause" is the same as that of @Aka-shi  -- "Commit all data you have and do not consume any more until operator resumes".  Also, if you don't expect to touch the table or send any more data ever again, then why bother pausing? You can get all the queries, and data in consuming segment will be committed eventually, and everything should be good.
@Aka-shi  please state your use case as well (i.e. why do you want to "pause" the stream? How long do you expect the pause to last? Will you also need a resume, or just pause and finish the table?)

@Eywek just clarifying if your request to "pause" is the same as that of @Aka-shi -- "Commit all data you have and do not consume any more until operator resumes"

In my use case, I don't need to be able to resume, only being able to pause and query the data.

why bother pausing?

Because we don't need to put useless pressure on our Apache Pulsar cluster (e.g. creating consumers, reading data...), we won't be able to delete the topic if we have consumer attached to it.
I also think that it's preferable to commit the segment when we pause so Pinot doesn't have to re-compute the segment if a server is restarted, and the data won't be lost.

@Eywek just clarifying if your request to "pause" is the same as that of @Aka-shi -- "Commit all data you have and do not consume any more until operator resumes"

In my use case, I don't need to be able to resume, only being able to pause and query the data.

why bother pausing?

Because we don't need to put useless pressure on our Apache Pulsar cluster (e.g. creating consumers, reading data...), we won't be able to delete the topic if we have consumer attached to it.
I also think that it's preferable to commit the segment when we pause so Pinot doesn't have to re-compute the segment if a server is restarted, and the data won't be lost.

Good point.
Will it help if the realtime segments were moved to an offline table, and you just drop the realtime table when the segments are moved completely? We do have that feature now.

Will it help if the realtime segments were moved to an offline table, and you just drop the realtime table when the segments are moved completely? We do have that feature now.

Good idea. But can we trigger a segment move (from REALTIME to OFFLINE) via the API? And know when this is done?
And can we drop the REALTIME table (of an hybrid table) without breaking anything?

Will it help if the realtime segments were moved to an offline table, and you just drop the realtime table when the segments are moved completely? We do have that feature now.

Good idea. But can we trigger a segment move (from REALTIME to OFFLINE) via the API? And know when this is done?
And can we drop the REALTIME table (of an hybrid table) without breaking anything?

No, it is done automatically in a periodic manner. Also, you will need to deploy minions for it.
Of course, you can always do this manually by downloading the segments and uploading them to the offline table. APIs are available for it. A small script can change the segment name. This is a hack (as of now, since segment name change is not a supported feature), but if, for example, we have an API to add a segment to a table under a different name (not a bad ask, IMO), your problem can be completely solved with APIs.
Again, this is based on the assumption that yours is a one-time operation, and therefore having some manual intervention is not an issue.

I would prefer using API instead of minions, since I would do it as soon as my job finished processing data, I want to end this job only when the data is ready (which means when the segment is in the OFFLINE table in this solution).
Not an issue if the API supports it since we can automate it in our job.
This solution seems to work for our use case. But downloading and uploading segments could be a long task, isn't it? There is no other way?

There is an API (check Task section on swagger) to trigger the movement
from real-time to offline instead of waiting for the periodic task (you
still need minions).
However the realtimeToOffline task is not designed to achieve exactly what
you want. It will not pick up the segments for movement unless they're
completed segments. If it seems consuming segments, it will wait for them
to complete.
https://youtu.be/V_KNUUrS6DA (minute 33 onwards) explains that behavior. We
might need to change the job's behavior to support this.
On Tue, Aug 3, 2021, 7:04 AM Valentin Touffet @.***>
wrote:

I would prefer using API instead of minions, since I would do it as soon
as my job finished processing data, I want to end this job only when the
data is ready (which means when the segment is in the OFFLINE table in this
solution).
Not an issue if the API supports it since we can automate it in our job.
This solution seems to work for our use case. But downloading and
uploading segments could be a long task, isn't it? There is no other way?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/apache/pinot/issues/6302#issuecomment-892012040, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AEWIC3NWSBA6K6TAQS5ZSEDT3AOQLANCNFSM4UIMSSVQ
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email
.

There is an API (check Task section on swagger) to trigger the movement from real-time to offline instead of waiting for the periodic task (you still need minions). However the realtimeToOffline task is not designed to achieve exactly what you want. It will not pick up the segments for movement unless they're completed segments. If it seems consuming segments, it will wait for them to complete. https://youtu.be/V_KNUUrS6DA (minute 33 onwards) explains that behavior. We might need to change the job's behavior to support this.
…
On Tue, Aug 3, 2021, 7:04 AM Valentin Touffet @.***> wrote: I would prefer using API instead of minions, since I would do it as soon as my job finished processing data, I want to end this job only when the data is ready (which means when the segment is in the OFFLINE table in this solution). Not an issue if the API supports it since we can automate it in our job. This solution seems to work for our use case. But downloading and uploading segments could be a long task, isn't it? There is no other way? — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub <#6302 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEWIC3NWSBA6K6TAQS5ZSEDT3AOQLANCNFSM4UIMSSVQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email .

The segment will complete when the time constraint is reached. Since there is no more new data, the last completed segment will be moved, and the next consuming segment will be empty. Am I right?

@Aka-shi please describe your use case for pause. Thanks

The segment will complete when the time constraint is reached. Since there is no more new data, the last completed segment will be moved, and the next consuming segment will be empty. Am I right?

Not quite. The movement job waits for the complete window. So if you've set window as 1h, it will wait until the completed segments have crossed the entire 1 hour. If there's a consuming segment immediately after, it will wait. There's no way to know if the next consuming segment is going to get events for the incomplete window or not.
This was designed with the assumption that in production you'll have a continuous stream of events and none of these manual and edge cases.
My preference would be to design a pause/resume, instead of relying on the realtimeToOfflineJob for this. Or else, we'll be adding too many if-else to handle all these edge cases in the minion job. Plus, they would have to wait for the time threshold, or adjust it manually just for making this work.

I agree realtime to offline does not fit the bill here. I think the use case described by @Eywek  is unique, so I wanted to avoid a feature build (that may not be simple) for a one-time operation in one installation. Also, I wanted to check if there are existing mechanisms that @Eywek could use one-time to satisfy their needs. Segment name change seems perfectly fine here.
@Eywek Do you expect to get into this situation often (i.e. other tables in the pipeline for such a pause feature)?

Do you expect to get into this situation often (i.e. other tables in the pipeline for such a pause feature)?

Yes I'll have many table with this situation, each time one of our customer try to import a new "datasource" (which happen maybe 10 times / day) we will create a new table and have this situation.

one option is to wait for all data to make its way into completed segments

That's not something that meet my use case, I want to be able to process and save data as fast as possible, waiting for pinot to complete a segment after an amount of time is increasing my processing time, which isn't desirable

+1 to the feature. We have a similar request but for a different reason.
When we bootstrap an upsert table using the real-time segment push, we need to pause the real-time ingestion. Otherwise the upsert metadata will hit a race condition. Though it's possible to implement this pause internally, making it explicit will simplify the implementation and make it safer for operations.

e ingestion. Otherwise the upsert metadata will hit a race condition. Though it's possible to implement this pause internally,

Thanks, yupeng. I need to understand this better. Is this a race condition in pinot? If so, we should fix it regardless?
Let us discuss a little bit on this. I will reach out. and then we can summarize our discussion here.

Do you expect to get into this situation often (i.e. other tables in the pipeline for such a pause feature)?

Yes I'll have many table with this situation, each time one of our customer try to import a new "datasource" (which happen maybe 10 times / day) we will create a new table and have this situation.

thanks, this is good to know.

one option is to wait for all data to make its way into completed segments

That's not something that meet my use case, I want to be able to process and save data as fast as possible, waiting for pinot to complete a segment after an amount of time is increasing my processing time, which isn't desirable

e ingestion. Otherwise the upsert metadata will hit a race condition. Though it's possible to implement this pause internally,

Thanks, yupeng. I need to understand this better. Is this a race condition in pinot? If so, we should fix it regardless?
Let us discuss a little bit on this. I will reach out. and then we can summarize our discussion here.

You can think of it this way:
When the segment in the history is modified, we need to scan the history to derive the latest upsert state per primary key, especially for the partial upsert. This scan cannot proceed when the real-time consumption is on, as we dont have the latest metadata info to handle the real-time update. The way to solve it is to put a lock and block the real-time ingestion, until the load/scan is completed.

@yupeng9  and I discussed offline, and here is the summary for Upsert support:
For upsert tables, we need an occasional refill of older data. During refill, the segments change data, and if ingestion is also going on, then it messes up the indexing since other (uploaded realtime) segments are being modified. A few minutes of pause where queries are still being served (but potentially served with stale data) is acceptable. The requirement is to pause all partitions, not one at a time.
Having things pause while retaining a CONSUMING segment with data in it is hard. Pausing is easy, but in case a server gets restarted, it is hard to remember the exact offset when things were paused, and consume up to that.
Instead, I suggest we support two controller API primitives

Complete current consuming segments NOW, and optionally create a new segment. This may address Issue #7280 (basically, force a commit now).
Restart consumption by creating new consuming segments.
Support the above two for a single partition or all partitions (we can start with all I think).

Things to think about and handle correctly (just listing a few)

Make sure the server initiates ONE call to complete segments. The pause operation needs to be invoked on the PartitionConsumer object. Not sure what happens if an ONLINE transition already comes in. A bad race condition can happen in such a case.
Make sure the periodic task does not restart a paused consumption.
Decide if paused state needs to be marked in zk (in idealstate?) Handle server restart during paused state.

I am sure people can add more.

Thanks for writing down the summary!
A question on if we need to complete the consuming segment upon pause. Is it possible to simply pause the consumption? If the server restarts, then the server will lose the offset info, and restart from the previous checkpoint which is the same as the current consuming segment behavior. This could avoid the segment sealing (and small segment file) if the pause is not too long.

I suggest to provide an option of either discarding all the consuming segments or completing all of them. I feel that handling server restarts when we are consumed half way and paused will be hard.
Take the case when the server starts to consume a segment at offset 100 and there are two replicas A and B. After sometime, a "pause" command is entered. Replica A is at 150, and Replica B is at 160, and they stop consuming, with the rows still in memory.
Now, A gets restarted. Ingestion has continued, so the current offset available in stream is 200.
Should A just serve data until 100 (i.e. data that has been committed) whereas B will serve data until 150?
Should A consume up to 150 and stop?
Should A consume up to 160 and stop? What if there are three replicas?
It gets harder to maintain state.
We can provide the operator an option to either complete the current consuming segment or discard it. Either way, we "pause" at a point where everything is committed.

@mcvsubbu Sorry for the delayed response. The initial use case for which I raised this issue is:
We had frequent downtimes on Kafka at that time and during every downtime server fails to ingest and we had to restart servers to recover. Even though we were informed of the downtime, the other option to avoid server restarts was to disable the table. But disabling the table also means querying is disabled for that table, which is not intended. So we wanted a functionality where if we are aware/anticipate ingestion failures we can just pause the ingestion and resume it later.
Recently, we are also using the upsert feature in pinot and we want to manually push segments to the upsert table too. SO @yupeng9's use case is valid for us too.

@Aka-shi Pinot automatically recovers from Kafka failures. How much time did you allow to recover? There is a periodic task (you can adjust the frequency to run every X minutes) that recreates failed segments and restarts consumption. We use that in production, and things just auto-recover.
https://docs.pinot.apache.org/configuration-reference/controller#periodic-tasks-configuration
The one you want is controller.realtime.segment.validation.frequencyPeriod
If that does not work right, then we have a bug that needs to be fixed nevertheless.

@Aka-shi did the periodic task help you recover from kafka downtimes automatically?

Hi,
maybe adding another question to this issue: How to restart the ingestion process (with new configuration)?
Let's assume the following two use cases:

The Kafka broker died completely; all data lost; the Kafka broker is completely built up new
Using a new / different Kafka broker

How could I restart the streaming ingestion process (maybe with new configs that the "old" offsets doesn't match)?
I've tried to disable and then enable the table; I tried to "overwrite" the table (by just adding it again with new streamconfigs); didn't work.
Thanks!

@mbecker I think the scenario you state is closer to issue #6555 and/or issue #7280 but I agree that these are closely related.

did the periodic task help you recover from kafka downtimes automatically?

@mcvsubbu Yes. That helped us in recovering. Apologies for delayed response.

Pause/resume feature #8986 is now merged into master.


prowlarr: <IP_ADDRESS>08 -> <IP_ADDRESS>54

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for prowlarr is: Indexer manager/proxy built on the popular arr .net/reactjs base stack
meta.homepage for prowlarr is: https://wiki.servarr.com/prowlarr
meta.changelog for prowlarr is: https://github.com/Prowlarr/Prowlarr/releases/tag/v<IP_ADDRESS>54
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found <IP_ADDRESS>54 with grep in /nix/store/7mw324m28i4x9a514p2szag4v40bpiz3-prowlarr-<IP_ADDRESS>54
found <IP_ADDRESS>54 in filename of file in /nix/store/7mw324m28i4x9a514p2szag4v40bpiz3-prowlarr-<IP_ADDRESS>54

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

2 total rebuild path(s)

2 package rebuild(s)

First fifty rebuilds by attrpath

prowlarr

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/7mw324m28i4x9a514p2szag4v40bpiz3-prowlarr-<IP_ADDRESS>54 \
  --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 prowlarr https://github.com/r-ryantm/nixpkgs/archive/28d09338c496a12b8e17b2bb8ca7b88db62f60c9.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/28d09338c496a12b8e17b2bb8ca7b88db62f60c9#prowlarr

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/7mw324m28i4x9a514p2szag4v40bpiz3-prowlarr-<IP_ADDRESS>54
ls -la /nix/store/7mw324m28i4x9a514p2szag4v40bpiz3-prowlarr-<IP_ADDRESS>54/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:

prowlarr

Maintainer pings
cc @jdreaver for testing.

[!TIP]
As a maintainer, if your package is located under pkgs/by-name/*, you can comment @NixOS/nixpkgs-merge-bot merge to automatically merge this update using the nixpkgs-merge-bot.

Add a :+1: reaction to pull requests you find important.

Result of nixpkgs-review pr 345056 run on x86_64-linux 1

1 package built:

prowlarr


Include $BUILD_PREFIX headers

As some headers are bundled with nvcc in the targets path in $BUILD_PREFIX and the host compiler doesn't necessarily know where to look for them, add them to the host compiler environment variables so they can be found.

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[ ] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

@conda-forge-admin, please re-render

cc @isuruf

Q: Do we expect cuda-nvcc_activate.sh to print a line like this?
2023-05-25T21:48:28.9070693Z INFO: activate-gcc_linux-64.sh made the following environmental changes:

because I don't see it in the CI log. Could it be the reason that the flags aren't set up right?

Not sure if it’s because the activation script is not called at all, hence CXXFLAGS isn’t updated, hence -lcuda failed. Would be nice to print out CXXFLAGS during the test to be sure.

Thanks all! Anything else needed here?


Determine how to handle report versioning

We should decide on how we're going to version reports and what that translates to as far as database structures & dependencies.
In CIIP, we had an application table & an application revision_table which had a composite key of application_id & version_number. The outcome of #126 may have an effect on this decision (or vice versa).
Blocking
#219

Closing, merged in #126


Row select support in tables is missing features

The bootstrap-vue feature for row select support is partly documented here: https://bootstrap-vue.org/docs/components/table#row-select-support

When a row is selected, the 'selected' field should display a check iff the row is selected. Currently the check is always displayed, and only the class of the check changes (text-primary is added) when the row is selected.

The checkbox field should only display if the fields array contains a 'selected' field, and it should display in the column location corresponding to the position in the fields array. Currently the select cell always displays in the first column, unless the select-head prop is false in which case it does not display.

In this https://github.com/bootstrap-vue-next/bootstrap-vue-next/pull/1262 PR, You will be able to apply your own selection styling using the mentioned css selectors.
About the "selected" field, I didn't like the way BV2 doing it and how its limiting you from using "selected" named field. Keep in mind that it is very rare to find someone who wants the selection box in the center of the table and i don't think it worth the effort

@devhus
Thanks for the thoughtful reply.
I agree a checkbox in the center of the table is rare. I have a need to put the selection box at the end of the table, and tried to follow the BV2 docs to see if it would work. I ended up coding my own selection box in a column at the end, and if I need to keep my custom table so be it.
Is there is an easy way in css to make the checkbox appear at the end of the selected row using the selection styling you mentioned? From what I saw it looks like we will be able to change the way the checkbox looks, or how the row is styled, but adding a checkbox to the last column seems tricky or impossible in css.

So, based on my changes there are a couple of things to note.
The major note is that the "row-selected" event is different than the BV version. Namely that it does not emit the array.
The second major note is that the functionality for row selection has changed. Now instead you can (in addition to the other methods, exposed and otherwise) use a v-model. This allows for more flexible selection.
The documentation on this is yet to be written, and its in an unreleased state. I'm going to keep "row-selected" event as emitting only its row, as I believe it makes more logical sense for a "row-selected" to emit only that "selected row", given all the new options you have for selection (simply v-model:selectedItems should give you the same result, with some minor modification [you won't need the event])
In the meantime, I'm going to close this, docs to come


CiderCollective.Cider.Nightly version 1.3.1481

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?

[x] Does your manifest conform to the 1.0 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

My bad it went back to x32


Error on gui open

Hello can u kindly help me ?
https://pastebin.com/0uzeYHbv

Hey, if the plugin is Paper (1.16.5+) only, I would suggest you exclude adventure from the transitive dependencies. If the plugin accepts Spigot as well then I would suggest you relocate net.kyori into your own package.

fixed thx


ARROW-1123: Make jemalloc the default allocator

Change-Id: Ib03392431851773df3b59b2c9a4d9a7bd672d2cb

Looks like this may be failing for only cpplint

Everything expect some internals in gtest are broken with jemalloc. At the moment I'm not sure if the culprit is jemalloc or gtest or libc++.

Green build: https://travis-ci.org/xhochy/arrow/builds/245418595


Unexpected Token '?'

I'm running clean-package in our prepublishOnly script, but I'm getting errors on node 15 w/ npm 7.7.6:
><EMAIL_ADDRESS>prepublishOnly /home/runner/work/warframe-items/warframe-items
> npm_config_yes=true npx clean-package

npx: installed 14 in 2.59s
Unexpected token '?'

this is during a semantic-release run using clean-package before packing.
actions run | script

@TobiTenno Can you provide an example to reproduce the issue?

yeah, i linked to the action and the script.

The error indicates that @semantic-release/npm is the cause of the issue, which is not used by clean-package.

Ok, I'll keep investigating from that angle.


Add pyyaml to installation instructions

It doesn't look like the installation instructions include pyyaml
pip install pyyaml

Hey, thanks for the feedback :)
Auto3D doesn't use or import pyyaml in its modules. We tried to keep the dependencies as few as possible. Could you let me know why you think pyyaml should be installed?

Hi, I think it's because the auto3D.py program imports yaml and it would not run without pyyaml. I ran into the same issue when trying to run auto3D

Yes, exactly

From: ShaotingPeng @.>
Sent: Tuesday, September 27, 2022 5:44:04 PM
To: isayevlab/Auto3D_pkg @.>
Cc: Patrick Walters @.>; Author @.>
Subject: Re: [isayevlab/Auto3D_pkg] Add pyyaml to installation instructions (Issue #21)
Hi, I think it's because the auto3D.py program imports yaml and it would not run without pyyaml. I ran into the same issue when trying to run auto3D
—
Reply to this email directly, view it on GitHubhttps://github.com/isayevlab/Auto3D_pkg/issues/21#issuecomment-1260086288, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAVCVTM24HUJT7R7PEVTJQTWANTCJANCNFSM6AAAAAAQWKCVCQ.
You are receiving this because you authored the thread.Message ID: @.***>

I see, I will include pyyaml as the installation process in the future update.
pyyaml is part of my Python environment since I used Anaconda to manage Python packages. I believe it automatically installs dependencies like pyyaml. Out of curiosity, could you let me know how you set up the Python environment?

I'm running conda and pyyaml is not installed by default.  Try this:
conda create --name test python=3.7
conda activate test
python -c 'import yaml'
Traceback (most recent call last):
File "", line 1, in
ModuleNotFoundError: No module named 'yaml'
pip install pyyaml
python -c 'import yaml'
On Tue, Sep 27, 2022 at 8:35 PM Zhen(Jack) Liu @.***>
wrote:

I see, I will include pyyaml as the installation process in the future
update.
pyyaml is part of my Python environment since I used Anaconda to manage
Python packages. I believe it automatically installs dependencies like
pyyaml. Out of curiosity, could you let me know how you set up the Python
environment?
—
Reply to this email directly, view it on GitHub
https://github.com/isayevlab/Auto3D_pkg/issues/21#issuecomment-1260241111,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAVCVTMFTFZH44FNYDHV4OTWAOHENANCNFSM6AAAAAAQWKCVCQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

Got it, thanks!

I think you can just add pyyaml to the dependencies in your installation.yml
On Tue, Sep 27, 2022 at 9:13 PM Zhen(Jack) Liu @.***>
wrote:

Got it, thanks!
—
Reply to this email directly, view it on GitHub
https://github.com/isayevlab/Auto3D_pkg/issues/21#issuecomment-1260267101,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAVCVTLP2XLCKAJIYHWFLEDWAOLTVANCNFSM6AAAAAAQWKCVCQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

Hey, this issue is solved. I'm closing it for now. Feel free to open new issues if you have any questions.
Thanks for supporting Auto3D!


New Azure Storage policies not mentioned in article

This Azure Update states that policies are available for Key Rotation and Expiration for Azure Storage
https://azure.microsoft.com/en-us/updates/key-rotation-and-expiration-policies-for-azure-storage/
The Azure Update article links to the article on managing storage account keys but the new policies aren't mentioned.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 3463d1c7-f458-738a-2317-b756a1be7de0
Version Independent ID: 40f9e40a-0f2f-f510-7ee4-39e55158c99e
Content: Manage account access keys - Azure Storage
Content Source: articles/storage/common/storage-account-keys-manage.md
Service: storage
GitHub Login: @tamram
Microsoft Alias: tamram

Thanks for reporting this. I have assigned the issue to the content author to investigate further and update the document as appropriate.

#please-close
The new policies are now covered in this article.


Release deployment on Azure Portal

Two days ago Functions 0.7.10532 (1.0.0-beta1-10532) was released. Could you please provide an estimate when the Azure Portal will be updated to this version? Currently 0.6 is the highest version available.
In general:
Is it possible to retrieve the detailed version number which is used by the Azure Portal?
Is it possible to test a new azure-webjobs-sdk-script release within the Azure Portal which is not yet officially deployed?
Thanks for your amazing work on Azure Functions!

Sometime early next week we'll update the portal. We have final testing to do for the new portal updates to handle the new http routing support. There's nothing stopping you from moving to the new runtime version now if you wish - however if you use the new http routing, the URI for http functions shown in the portal won't be correct until the portal UI updates. That won't affect the actual runtime functionality of your http functions though - they'd still work.
You can move yourself forward using the instructions here.

@mathewc, thanks a lot for your quick reply!
I just tried to follow your instructions and it works now for me. I already switched the App Settings to ~0.7 but was confused that the UI stated that 0.6 was the lastest available version.
Just tested the routing and it works as described for version 0.7.
Thanks a lot! :)


DOCS Update SilverStripe Contributing Code GitHub labels

Suggested updates to SilverStripe CMS GitHub labels:
Note: I've created this pull request on behalf of @newleeland & @clarkepaul's work. cc @silverstripeux
Problem:
When reviewing the labels applied to both Type/UX and non-Type/UX issues they seem to be weighted quite differently, most noticeably when the phase “Workarounds” is used.
Example: When a CMS user has an alternative way to accomplish a task the label is often marked as Impact low (e.g. breadcrumbs don’t work as expected), because a user could choose to navigate the UI without using the breadcrumbs. The problem with this is that breadcrumbs might be the main way they intend to navigate and not be aware of alternatives. Breadcrumbs are a prominent feature of the UI, used in every view. When they don’t look or function correctly it is going to be very obvious to users that something is wrong, this can have a long term effect on how reliable they perceive our CMS to be and how confident they are with how we will manage their content and customer details.

Enhancement label is not covered in the classifications
Bug label is not covered (maybe this doesn't need to be?)

Proposed solution:

Make it clearer that the labels are incorporating both tech functionality and end-user functionality.
Add a definition of an enhancement
Enhancements can be combined with the Impact rating and still make sense in that context
Add definition of a bug

@silverstripe/core-team


Override min.insync.isr for the monitor topic only if it is specified by the user

This has checkstyle violtions.

@smccauliff My bad. It is fixed now. Thanks!


remove startingCSV from Subscription yaml

/cherry-pick release-4.12

/cherry-pick release-4.12-compatibility


feat: Implemented proper email-password authentication with conditional UI rendering.

Summary
This PR aims proper email-based authentication and protects routes which are only accessible for authenticated user. It does proper conditional rendering of UI and display appropriate success & errors notification when user performs actions.
Description
This PR solves the auth problem and conditional UI rendering.

Application displays login button to unauthenticate user.
When user fill the signup/signin form data stores in DB and notify user success/error.
After successful authentication, application display create post + logout button.
Authenticate user can create post until access_token expires ( 2 min expiration time ) and created post ObjectID is added to user's createPosts field.
When token is expired and user try to create post, application notify error (with error-msg : Invalid user!) and redirects to homepage and display login button because now user has to login again.
Added icons for login and logout and aligned them correctly.

Images

https://github.com/krishnaacharyaa/wanderlust/assets/114509045/8552a36f-476d-4ae5-95d5-e0b348875772
Prerequisites

[x] Have you followed all the CONTRIBUTING GUIDELINES?

@Mohitsen11 Awesome work :) Loved the description of the PR. Thank you bunch for the efforts put in.

When token is expired and user try to create post, application notify error (with error-msg : Invalid user!) and redirects to homepage and display login button because now user has to login again.

Can we may be say "Your session has expired, please login again!" instead of "Invalid User".Because user faced messages should be always friendly and normally shouldn't be like "Value null", "Invalid user" kinda thing, it should be like user understandable. The rest  code, I'll review once we are on the call and we go through the demo, I can't test because in the production, the environmental variable aren't there.

Hi @Mohitsen11, can you please let us know if you are busy, I'll try to pick this up... I'm aiming to finish this by today. Our test cases are being blocked because of this

Hi @Mohitsen11, can you please let us know if you are busy, I'll try to pick this up... I'm aiming to finish this by today. Our test cases are being blocked because of this

I will try to finish this today. And will take your help.

Yes please, let me know when we can sync up

Yes please, let me know when we can sync up

Sure @krishnaacharyaa

I made changes according to the review.
Now only localStorage + 3 Cookies is set make it 2  + delete contextProvider + The error messages should come in the input message error
Protected routes in the frontend should not be shown at all the add-blogs page are pending.

I have made changes according to the review.
Now only localStorage + 3 Cookies is set make it 2 + delete contextProvider + The error messages should come in the input message error Protected routes in the frontend should not be shown at all the add-blogs page are pending.

Can you guide me how to use set-cookie in frontend returned in response by server after successful sigin/signup.

Sure @Mohitsen11 , https://www.youtube.com/watch?v=dX_LteE0NFM
check this video out, we'll do it this way, if you are facing issues let me know

Sure @Mohitsen11 , https://www.youtube.com/watch?v=dX_LteE0NFM check this video out, we'll do it this way, if you are facing issues let me know

Cookies are not available in the application's cookies tab. When we had meet in discord we saw cookies were set there.
When I am logging or signing up, cookies are set by the server in the response headers.
In network tab set-cookie field is present with access_token and refresh_token in response headers but not available in application's cookie tab.

In this video, weren't we able to figure out ? The one shared above

Sure @Mohitsen11 , https://www.youtube.com/watch?v=dX_LteE0NFM check this video out, we'll do it this way, if you are facing issues let me know

Cookies are not available in the application's cookies tab. When we had meet in discord we saw cookies were set there.
When I am logging or signing up, cookies are set by the server in the response headers. In network tab set-cookie field is present with access_token and refresh_token in response headers but not available in application's cookie tab.

I got the solution.😊

In this video, weren't we able to figure out ? The one shared above

Approach to remove localStorage :-

For removing the localStorage, we have to create an api which gets the token set by the server in browser and authenticate it and returns that token in response (if token is valid or not expired). And we'll make an api call from frontend ( basically from the home-layout page because where we want conditional rendering ) so that we can get the verified token and can set the isAuthenticated state and do the conditional rendering in UI. And we'll make api call inside useEffect hook with array containing single user state dependency.

Any suggestions? @krishnaacharyaa

Approach to remove localStorage :- For removing the localStorage, we have to create an api which gets the token set by the server in browser and authenticate it and returns that token in response (if token is valid or not expired). And we'll make an api call from frontend ( basically from the home-layout page because where we want conditional rendering ) so that we can get the verified token and can set the isAuthenticated state and do the conditional rendering in UI. And we'll make api call inside useEffect hook with array containing single user state dependency.

Why extra api call? Can't we leverage the cookie's variable directly by accessing it!
Let's have a call, and address all the issues...

Owner

Sure.

In this video, weren't we able to figure out ? The one shared above

Approach to remove localStorage :-  For removing the localStorage, we have to create an api which gets the token set by the server in browser and authenticate it and returns that token in response (if token is valid or not expired). And we'll make an api call from frontend ( basically from the home-layout page because where we want conditional rendering ) so that we can get the verified token and can set the isAuthenticated state and do the conditional rendering in UI. And we'll make api call inside useEffect hook with array containing single user state dependency.
If we don't use context-provider then we'll have to leverage the above approach. after getting the token we'll send with request headers.
"The error messages should come in the input message error", I close to solve this.
If unauthenticate user try to access (hit)  /add-blog route, we'll simply redirect to a page that will display You are not authorized to access this page.

Any suggestions? @krishnaacharyaa

3rd task is done.

Hey @Mohitsen11, Great work, kudos to you for figuring out multiple things and doing a great contribution. Thanks a bunch.
Just a couple of clarification on the localstorage part and then we are very good to merge this.

I made the changes.
Only persistent state management is pending and overall work is done.
And one more thing, when user clicks on logout button cookie must remove from browser's cookie but it is not happening.
I checked out the /signout api change the maxAge from 1 to 0. but cookie is still present in browser's cookie.
They remove when they are expired and page refreshes.


suggestion: more parameters when zoomend- current data displayed and the minimum and maximum dates

I will find it very useful if those parameters will be added to zoomend event.
I tried before to get it from minimum and maximum elements as suggested in #128. but it's wrong to do so, because the values in the element are just for displayed(formatted) and not the real boundaries.

please see PR #140

Does https://github.com/marmelab/EventDrops/pull/151 answers your need?


feat: dynamic dev-portal version

Fixes: https://github.com/stoplightio/elements/issues/1291
Updating elements dev portal version that is sent with a header to elements service.
I went with a update version during build approach as doing it dynamically in runtime caused problems with loading json files in some environments.
The idea is to replace a version value in a js file before build (or while running storybook). No need to set it back to old value in such case. No problem with committing that file as well.

Doesn't work on a Mac

Good catch. Looks like sed slightly differs on mac and linux within -i argument so I've used platform agnostic replace.
It does work now.


PSReadLine redraws entire line with each key press

On Windows, with a Narrator enabled (often used by visually empaired users), user opens Powershell
When you type a character there are two wrong results depending on the narrator in use
Expected: The new character is spoken and when a word is complete the word is spoken
Actual using NVDA: no text is spoken
Actual using Narrator: the entire line is spoken
Requested change is for PSReadline to not redraw the entire line every time a character is typed when a Navigator is in use.

@lzybkr Can you point me towards the relevant code?  I'd like to attempt a fix for this.
If the code is currently redrawing the entire line, it should be possible to amend that logic without too much added complexity.
Step through the line in memory and compare to the previous line, stopping at the first difference.  Redrawing can be done starting from that point.  So if the only change was appending a character (which should usually be the case) then the cursor will jump to its current location and draw a single character.
Does that make sense?  Is "render.cs", private void Render where I should look to get started?

Thanks for the offer @cspotcode. This issue has been improved significantly since it was opened, but I left it open because improvements are still possible. That said, I'm not sure if improvements will be noticeable, maybe on a really slow terminal.
Most rendering is done in render.cs, and the current code tracks what was previously written. The trickiest bit will be maintaining correct colors. For example, if the user typed:
PS> Get-

Then typed C, you can't just write the C, you'd need to use the last VT sequence in addition to writing the C.
There is also some rendering code in completions.cs, but I think that code only updates what has changed.

@lzybkr thanks for the quick reply!  This issue makes PSReadline pretty uncomfortable inside WSL.  I can see the cursor flickering all over the place and sometimes it even places floating characters off to the right and triggers the buffer to scroll up when it shouldn't.
For example, here's what I see when I open PowerShell on Windows 10, run bash -c pwsh, type a few commands to get the buffer to scroll to the bottom of the screen, and then hold down the a key.

I could be wrong, but I'm assuming this behavior can be improved if PSReadline doesn't redraw the entire line.

Yeah - the version shipped with pwsh is not great. My new code in this repo is much better. 2.0.0-beta1 is available in the gallery and works great with any version of PowerShell >= 3.0.

@lzybkr I should be running 2.0.0 already.  I installed it with Install-Module PSReadline -RequiredVersion 2.0.0 -Scope CurrentUser; is there something else I need to configure?  Is pwsh forcing itself to use the older, bundled version?
PS /mnt/c/Users/abradley>       get-module psreadline
ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     2.0.0      PSReadLine                          {Get-PSReadlineKeyHandler, Get-PSReadlineOption, Remove-PS...

PS /mnt/c/Users/abradley>

It does look like you're using 2.0.0.
The cursor shouldn't flicker, it's supposed to be hidden during rendering, and that definitely works with Windows PowerShell as well as PowerShell on Windows and Linux, I haven't tried Mac or WSL.


Is it possible to add custom classes on the .trumbowg-box container?

I'm trying to add a class to the containing element. tried declaring the classes on the textarea to initiate trumbowyg to but the classes stay on that field. is this an available option?

No :/
There is no option for that. Why did you need that?
What about:
$('#editor-demo').parent().addClass('my-custom-class')

oof bummer. no worries. I'm working on a internal framework for work with the plugin integrated. Trying to make the build reliant on helper classes and minimizing dom elements needed.


Wrapped TF C APIs as runtime functions, so that IRGen can generate calls to them

This patch "dissolved" the call to the packaged experimental C API TF_RunConstOp() into a set of finer-grained C API calls.
An alternative to the runtime function approach is to use Clang importer to call
the C APIs. Clang importer allows the C APIs to become available as SIL
functions with the same names, and thus can be found and called in IRGen via
silModule.findFunction() (see
https://github.com/apple/swift/blob/ad7def2c6bffd95d62e5e665c9faed0f8dac49f5/lib/IRGen/IRGenSIL.cpp#L1956-L1957). The concerns with this approach are:

There are no precedents in IRGen that calls C APIs via this clang importer
route. Having IRGen depend on clang importer may not be desirable.

Some C APIs cannot be found via clang importer (e.g. TF_NewStatus() can be
found, but TFE_NewOp() cannot). As a work-around, these C APIs must be called in
the user module code first, before IRGen over the user module can locate them as
SIL functions. This feels brittle.

When passing objects between compiler runtime entry points (swift functions)
such as @_silgen_name("_swift_tfc_GetGlobalEagerContext") and the C APIs, IRGen
have to issue bitcast to convert between a real struct type (e.g. TFE_Context*)
and void* (i8* in LLVM type) as used in the entry points.

In contrast, the wrapped runtime functions consistently use void* in their
interfaces, so that IRGen need not do such bitcasts.
One downside with the runtime function approach is that we need to wrap ~20 TF C
APIs in the new files TensorFlow.{h,cpp}. This is however mostly a one-time eng cost.

@swift-ci please test tensorflow

@swift-ci please clean test tensorflow

@swift-ci please clean test tensorflow

@swift-ci please clean test tensorflow

@swift-ci please clean test tensorflow

@swift-ci Please test tensorflow macOS

Mac test finished: https://ci-external.swift.org/view/Pull Request/job/swift-PR-TensorFlow-macOS/92/
Thanks all for the review!


[NuGet.org Bug]: Unable to access api.nuget.org using the .NET SDK, but can access it using curl or Firefox.

Impact
I'm unable to use NuGet.org
Describe the bug
When I do dotnet restore, it times out while fetching https://api.nuget.org/v3/index.json but I can access it using curl or open it in Firefox.
Note: I honestly have no idea whether this is a .NET SDK bug or a NuGet.org problem. The original issue at dotnet/sdk for this is https://github.com/dotnet/sdk/issues/37673. I did see similar issues regarding connectivity to the API in this repo, so felt this should be the place. I apologize if this is the wrong place. 😅
Repro Steps

Open any .NET project
Run dotnet restore

Expected Behavior
Not time out
Screenshots

Additional Context and logs
No response

Going through some older similar issues, --disable-parallel doesn't seem to help either

Weird, I tried using a VPN and it instantly restores. That doesn't explain why I am able to access the API using curl or Firefox though without the VPN.

Hi! My apologies for this inconvenience! Some intermittent failures were detected in some regions and likely our CDN provider in your region had a regression at that time. If it is still happening, could you please follow this document (https://learn.microsoft.com/en-us/nuget/nuget-org/nuget-org-faq#why-can-t-i-restore-packages-from-nuget-org) and send more diagnose information to the support mailbox? There are also some suggestions in the document that should help you enhance the resilience on the client side.
Feel free to reach out to the support mailbox or open an issue under this repo at any time when you meet failures!

Hey \o
Can still reproduce it unfortunately :(

FSharp.Core (Default F# project)
dotnet nuget --version: <IP_ADDRESS>767 dotnet --version: 8.0.100
Log.txt
MTR or a Fiddler traces (On Linux, sorry! No idea how to setup either)
Geographical Area (India)
No proxy or a firewall
It is a local machine, no cloud service involved.

Possibly related: https://github.com/NuGet/Home/issues/13148

Can't reproduce anymore, seems fixed, cheers! 🥳


raidboss: more treasure maps

HW: The Aquapolis
SB: The Lost Canals of Uznair
SB: The Shifting Altars of Uznair
SB: The Hidden Canals of Uznair
ShB: The Dungeons of Lyhe Ghiah
ShB: The Shifting Oubliettes of Lyhe Ghiah

Do you mean for this to be a draft, or is this ready to go?

Do you mean for this to be a draft, or is this ready to go?

I was hoping to catch a few more of the missing IDs but what's here for now can go.

I was hoping to catch a few more of the missing IDs but what's here for now can go.

Yeah, feel free to come back and fill things in whenever.  Seems good to just get some of this landed to have it there.


Chinese characters may display as garbled text

The possible reason is that the Chinese characters encoded in UTF-8 were read in GBK format.
An example:
搴斿鐗规畩鏃舵湡鐨勫簲鎬ョ墿璧勬竻鍗晇1.2.pdf
Actually should be:
应对特殊时期的应急物资清单v1.2.pdf

Is this in a file listing or in an HTML file or something else?

Is this in a file listing or in an HTML file or something else?

I'm not quite sure, do you mean the configuration here?

Where are you seeing that Chinese characters are garbled? Is it in a file served by render?

On the page of Workers.
An example
I'm not sure if render will generate a file in the R2 bucket, maybe there is something wrong with my configuration?

Just pushed a commit that ensures the directory listing is parsed as UTF-8, (version 1.1.3), let me know if it works.

Everything is fine now. Thank you very much for your work!


#901 Forbid change layout on click without drag

It resolves https://github.com/STRML/react-grid-layout/issues/901 and does not allow to change layout until layout item was dragged. BTW, it is still doesn't clear why that bug wasn't reproducible on examples included in library.

Thanks!


Feature/build via gh action

Tested it in https://github.com/benjaminbauer/homebrew-klog/actions/runs/3980660153. Did not result in a commit, since no changes resulted in running the generator as expected. I tested the workflow with an artificial change to the formula in https://github.com/benjaminbauer/homebrew-klog/actions/runs/3976325272
This PR also incorporates:

reverting to use sudo for apt-get
make the generator script fail early. I had several, unexplained, cases where the version was null. This would be a hassle, when the action commits that garbage. Failing early makes reasonably sure that does not happen

fixes https://github.com/jotaen/homebrew-klog/issues/3

Awesome, thanks for setting this up! Can’t wait to try this (unfortunately there is nothing to release right now…)
I moved the script back to the repo root, because I think it doesn’t harm for discoverability. That way, it’s also less ambiguous in regards to the working directory, because before it referenced the Ruby file via ./Formula/klog.rb, even though the script resided in the .github/ subdirectory. I actually made the script completely workdir-agnostic now.

Update: I just ran it on my fork and it failed. I created a fix and it worked as expected (no changes in the formula -> no commit)


chore: bump version to v1.10.0-rc1

关联的Issues (Related Issues)

https://github.com/filecoin-project/venus/issues/5650
改动 (Proposed Changes)

附注 (Additional Info)

自查清单 (Checklist)
在你认为本 PR 满足被审阅的标准之前，需要确保 / Before you mark the PR ready for review, please make sure that:

[ ] 符合Venus项目管理规范中关于PR的相关标准 / The PR follows the PR standards set out in the Venus project management guidelines
[ ] 具有清晰明确的commit message / All commits have a clear commit message.
[ ] 包含相关的的测试用例或者不需要新增测试用例 / This PR has tests for new functionality or change in behaviour or not need to add new tests.
[ ] 包含相关的的指南以及文档或者不需要新增文档 / This PR has updated usage guidelines and documentation or not need
[ ] 通过必要的检查项 / All checks are green

Codecov Report

Merging #142 (2ccc9dc) into master (ba26b2e) will not change coverage.
The diff coverage is n/a.

Additional details and impacted files

@@           Coverage Diff           @@
##           master     #142   +/-   ##
=======================================
  Coverage   45.35%   45.35%
=======================================
  Files          35       35
  Lines        3819     3819
=======================================
  Hits         1732     1732
  Misses       1874     1874
  Partials      213      213

Flag
Coverage Δ

unittests
45.35% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

core/const.go
48.64% <ø> (ø)


kubefnord join failed

root@gyliu-dev1:~/go/src/github.com/kubernetes-sigs/federation-v2# ./bin/kubefnord join cluster138.k8s.local --host-cluster-context cluster138.k8s.local --add-to-registry --v=2
ERROR: logging before flag.Parse: I0705 06:17:36.583065    3075 join.go:125] Defaulting cluster context to joining cluster name cluster138.k8s.local
ERROR: logging before flag.Parse: I0705 06:17:36.583150    3075 join.go:129] Args and flags: name cluster138.k8s.local, host: cluster138.k8s.local, host-system-namespace: federation-system, kubeconfig: , cluster-context: cluster138.k8s.local, secret-name: , dry-run: false
ERROR: logging before flag.Parse: I0705 06:17:36.589103    3075 join.go:183] Performing preflight checks.
ERROR: logging before flag.Parse: I0705 06:17:36.611982    3075 join.go:270] Registering cluster with the cluster registry.
ERROR: logging before flag.Parse: I0705 06:17:36.621322    3075 join.go:278] Registered cluster with the cluster registry.
ERROR: logging before flag.Parse: I0705 06:17:36.621351    3075 join.go:204] Creating federation-system namespace in joining cluster
ERROR: logging before flag.Parse: I0705 06:17:36.636999    3075 join.go:212] Created federation-system namespace in joining cluster
ERROR: logging before flag.Parse: I0705 06:17:36.637048    3075 join.go:215] Creating cluster credentials secret
ERROR: logging before flag.Parse: I0705 06:17:36.637059    3075 join.go:404] Creating service account in joining cluster
ERROR: logging before flag.Parse: I0705 06:17:36.652299    3075 join.go:413] Created service account in joining cluster
ERROR: logging before flag.Parse: I0705 06:17:36.652333    3075 join.go:415] Creating role binding for service account in joining cluster
ERROR: logging before flag.Parse: I0705 06:17:36.676963    3075 join.go:525] Could not create cluster role binding for service account in joining cluster: ClusterRoleBinding.rbac.authorization.k8s.io "federation-controller-manager:cluster138.k8s.local-cluster138.k8s.local" is invalid: subjects[0].namespace: Required value
ERROR: logging before flag.Parse: I0705 06:17:36.677000    3075 join.go:420] Error creating role binding for service account in joining cluster: ClusterRoleBinding.rbac.authorization.k8s.io "federation-controller-manager:cluster138.k8s.local-cluster138.k8s.local" is invalid: subjects[0].namespace: Required value
ERROR: logging before flag.Parse: I0705 06:17:36.677011    3075 join.go:221] Could not create cluster credentials secret: ClusterRoleBinding.rbac.authorization.k8s.io "federation-controller-manager:cluster138.k8s.local-cluster138.k8s.local" is invalid: subjects[0].namespace: Required value
ERROR: logging before flag.Parse: F0705 06:17:36.677025    3075 join.go:105] error: ClusterRoleBinding.rbac.authorization.k8s.io "federation-controller-manager:cluster138.k8s.local-cluster138.k8s.local" is invalid: subjects[0].namespace: Required value

/assign


Applications sub-page alignment is off

Describe the bug
Sub-pages that lead to applications are not properly aligned like the rest of the pages. The tables are truncated and the position of the details section is off.
Is this a UI bug or a server bug?

[x] UI
[ ] Server

Screenshots
https://user-images.githubusercontent.com/76788247/163510051-2ea3fcb9-f176-4b9b-9d72-91f09f186b4b.mp4
What is the severity of the bug

[ ] severity/Critical: Weave GitOps is crashing or experiencing data loss, the UI is inaccessible or a key feature is unusable. There is no known workaround
[ ] severity/Major: Weave Gitops functionality is broken, there is a workaround, but the workaround requires significant effort
[ ] severity/Minor: Weave Gitops functionality is broken, but there is a fairly straightforward workaround
[x] severity/Low: Doesn’t affect primary flow/functionality but would be good to fix

Environment

gitops: v0.7.0
How you deployed the Weave GitOps server: Helm Chart

[x] KinD
[ ] k3s - version
[x] cloud: GKE
[ ] other - name version

To Reproduce

Go to UI dashboard
Click on any of the available applications
See page misaligned

Expected behavior
Application sub-pages should look like the rest of the pages in the UI, like so:

Fixed in above PR - closing


Will Argoverse V2 provide the 2D bbox (length & width) of objects?

Argoverse V1.1 & V2 is missing the 2D bbox (length & width) of objects.
Will Argoverse V2 provide these data?

Hi @yenw, thanks for your interest in Argoverse 2.
In the Argoverse v1.1 and v1.2 3D Tracking Dataset, each object cuboid does come with a length and width. For the Motion Forecasting datasets in v1.1 and v1.2, we didn't provide an object size.
Our Argoverse 2 release consists of 4 datasets -- a Sensor Dataset with full sensor suite measurements and labeled cuboids (1K logs w/ object length, width, height), a Motion Forecasting Dataset with object tracks and categories (250K logs), a large unlabeled LiDAR Dataset (20K logs), and a Map Change Dataset (1000+ logs).
Could you tell us a bit more about which datasets you are referring to and are hoping to work with?

Hi @yenw, thanks for your interest in Argoverse 2.
In the Argoverse v1.1 and v1.2 3D Tracking Dataset, each object cuboid does come with a length and width. For the Motion Forecasting datasets in v1.1 and v1.2, we didn't provide an object size.
Our Argoverse 2 release consists of 4 datasets -- a Sensor Dataset with full sensor suite measurements and labeled cuboids (1K logs w/ object length, width, height), a Motion Forecasting Dataset with object tracks and categories (250K logs), a large unlabeled LiDAR Dataset (20K logs), and a Map Change Dataset (1000+ logs).
Could you tell us a bit more about which datasets you are referring to and are hoping to work with?

Hi @johnwlambert, thanks for your reply.
I hope ArgoverseV2 can provide the length and width of object in Motion Forecasting Dataset. The length and width are important features for Motion Forecasting. In addition to this, other datasets provide the size of objects, such as Waymo Motion Dataset and Shifts Vehicle Motion Prediction dataset.

Hi @yenw, unfortunately we don't provide those attributes for actors in the motion forecasting dataset at this time.
However, we've noted your interest in these attributes and will certainly consider adding them in alongside a future release. :-)

@yenw I will point out that unlike the Argoverse 1 Motion Forecasting Dataset, the Argoverse 2 Motion Forecasting Dataset provides the object class for each actor. So you know if it's a bicycle, or a bus, or a passenger vehicle, etc. This gives a strong prior on the spatial extent of the object.