Status clear after

Details

In this PR, the ability to set an expiration date for the status has been added.
To test it, you need to enable the beta flag 'customStatus'. I encountered some challenges regarding the UX of certain components, such as the time picker. Originally, the document described it as a 'terminal-like' input, where input goes from right to left, replacing inappropriate numbers with zeros. However, this approach didn't work well for numbers like 9:00. For instance, 9 was corrected to 0, resulting in 00:90. As a workaround, I implemented it as a standard time picker where you can change a number by replacing the next one after the caret.
I have ideas on how to enhance the user experience, but for now, this is version 1.
Fixed Issues

$ https://github.com/Expensify/App/issues/23138
PROPOSAL:
Tests

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

Use account A.
Open Settings -> Profile -> Status.
Select an emoji status and save it.
Navigate to the 'clear after' page.
Test all of the available options.
Use the custom calendar picker.
Use the custom time picker.

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://github.com/Expensify/App/assets/48593211/3f933bf4-4220-4255-b090-8d3fbf31eee8

Mobile Web - Chrome
https://github.com/Expensify/App/assets/48593211/e9cd35d2-6fca-49ed-8718-1089d50e4199

Mobile Web - Safari
https://github.com/Expensify/App/assets/48593211/c02369ad-4557-4b2e-8471-9e834ca548df

Desktop
https://github.com/Expensify/App/assets/48593211/6473488c-92e3-4196-83c3-7c5e5e2a9a75

iOS
https://github.com/Expensify/App/assets/48593211/9cfb0c3c-cd01-428a-b27e-d84052a01e4d

Android
https://github.com/Expensify/App/assets/48593211/dac61a30-6f4b-4376-b370-d401f3ef69b0

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[ ] MacOS / Chrome / Safari
[ ] MacOS / Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[ ] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[ ] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[ ] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

Mobile Web - Chrome

Mobile Web - Safari

Desktop

iOS

Android

Hey @perunt! Just running through some quick tests on this and wondering what the expected behaviour is when selecting the default types. I was expecting that selecting A Week should show as A Week in the Clear after section, but it always displays the exact datetime instead and resets to the Custom type:
https://github.com/Expensify/App/assets/27287420/1e193d7e-159d-4591-a22d-076991df6c57
See my comment on where this probably stems from (if it is indeed an issue!).

The interface hangs quite a bit after saving or clearing the status. Not sure if that's related to this PR though?
https://github.com/Expensify/App/assets/27287420/59641d24-23fc-4b02-8713-0c703c80e64b

@perunt Another little issue: the date picker doesn't allow setting a date in the past, but the time picker does. Again unsure how polished this is expected to be now, especially as you mentioned having trouble with the timepicker UX, but just mentioning anyway!
https://github.com/Expensify/App/assets/27287420/9a38f3d7-8764-4ca9-9a66-c82415036771

Hey @perunt! Just running through some quick tests on this and wondering what the expected behavior is when selecting the default types. I was expecting that selecting A Week should show as A Week in the Clear after section, but it always displays the exact datetime instead and resets to the Custom type:

Afaik week property means 'from now seven days,' so there is no proper way to measure this selection type. If it would be realized as 'by the end of the week' then yes, we can do the same as for today.

(I guess maybe we should force PM to only accept values from 01:00, so that 00:00 PM won't be accepted 😄)

good point, I'll add validation for that, thanks!
Also, I've noticed that the backend doesn't clear statuses, at least not always. Need to explore this as well.

I've gone through the app and tried to identify an appropriate pattern for displaying errors for two fields: datePicker and timePicker, specifically for custom selection. However, I couldn't find a standard. We already have error indications for text input, checkboxes, and the submit button. In our situation, we need to display an error for the Item Menu.
Certainly, we can handle this within the component. For instance, with the datePicker, we currently block selections of past dates. For the timePicker, we could potentially implement similar functionality, but it would introduce unnecessary complexity and could become a source of potential bugs.
The main headache with implementing error handling inside the component is the user workflow. A user could select a proper value, return to the menu (where options like 'never, 30 min...' are visible), wait for some time, and then save that value. We see the same thing on the status page. At this point, we need to highlight the error's location if such exist.

I'd like to tag @shawnborton to get some input. Shawn, what kind of UI error indication would you prefer in this context? Should it be a red dot with accompanying text underneath, similar to textInput? Or would you like something different, like simply changing the text color to red?

I'm not quite following - what would the exact scenario be and what would the exact error be in this case?

A user could select a proper value, return to the menu (where options like 'never, 30 min...' are visible), wait for some time, and then save that value. We see the same thing on the status page.

Assuming this is it, I would say that we would just validate the form on submission. If we find that the exact time has passed, we would just use the red brick road dot on the time field with the error message of "Please choose a time in the future" or something like that. Let me know if that makes sense.
cc @Expensify/design

@shawnborton sorry for bringing it up again, but I also found this version in the code

Should we proceed as you described before or use this older style for error handling? I couldn't reproduce it and find this part in the app, only in the code, so I wonder if it's used anymore.

I think it's okay if we go with what you originally had because this way the user knows what the error is without needing an extra tap. Thoughts?

I think in the subsequent page we would still show the error though. Maybe you can give us a side-by-side-by-side flow of:

overall status page
then the clear after page
then either the date or time page

Clean state:

Option 1:

Option 2:

I also like the second option because it highlights the path where the error is with a red dot, and at the end, it displays the error text (on the time/date screen). However, the mix also looks good to me.
I'll implement it today.
Thanks for your help!

Of course!

how it looks like now

Image 1
Image 2
Image 3

Not sure why this row looks like this:

There shouldn't be any underline. It would look like this:

updated

That error message should be a bit closer to the push row though.
Also, are we using some kind of global component for the push-to-page rows and the errors? I feel like we already have this in place in the app somewhere.

Much better.

@jjcoffee, can you look at it again?

@perunt Sure, can I ask what the priority level is? I've got a lot on my plate today so may need to bump to tomorrow if it's not high priority!

@stitesExpensify wanted to receive it by the end of this week, so it would be nice if you could do it during the day. But I'm not aware of the priority level.

Tomorrow should be fine @jjcoffee. As long as we can get it merged early next week I think we're still on track

Just running some quick initial tests today. Looks good so far, just having a little issue with the timepicker interface:
https://github.com/Expensify/App/assets/27287420/81a31817-e593-49ee-b883-8b3bd96c572e
I guess it's blocking 18:00 PM from being entered, but I'm trying to enter 11:11 PM.

@perunt Another little issue, if I save an initially valid time I don't get any error after waiting a while on the status screen and then trying to save (the button just doesn't work):
https://github.com/Expensify/App/assets/27287420/06322b75-9149-4caf-96f1-087eeddad023

Other than that no other issues found, and nothing major in the code. Will do a deeper code review and a few more tests tomorrow morning!

I guess it's blocking 18:00 PM from being entered, but I'm trying to enter 11:11 PM.

I could remove all restrictions and simply show an error message like "wrong format," but that approach doesn't seem right to me.
Currently, the system prevents users from entering values greater than 12. For instance, if someone wants to change the time from 08:30 to 11:30, they need to remove the '8' first.
As an improvement, I suggest automatically transforming the time by toggling AM/PM. For example, 08:30 AM could change to 06:30 PM when the user enters 18:30. If someone enters a time greater than 24, we could modify the value, like turning 48:30 AM into 04:30 AM(if he typed 4 first).
@stitesExpensify, what are your thoughts on this? Should we modify our validation approach now, or should we release it as-is and consider these changes for a future update?

New translations

@perunt I think we might need a copy review for the updated error messages? (Apologies if this was already done behind the scenes!). From the checklist:

any copy / text that was added [...] is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.

I'm thinking something simpler like:

Date must not be in the past.
Time must be at least one minute from now.

@perunt Found a few more issues.

iOS Safari: Save button overlays the number buttons.

iOS Safari: Date display is cut off (I think this may be a known issue with smaller screens though)

When selecting an initially valid date + time combo, e.g. 2 AM on a future date, and then changing the date to today to make the time invalid, the time field resets to the previous value (12 AM in this case)

https://github.com/Expensify/App/assets/27287420/30b0b4a7-80b2-4478-b07a-faec1bde9bd8

We recently made the number pad buttons way smaller on smaller screens to handle this case of not having too much vertical space. Perhaps we do the same here. GH for reference.

@perunt When I go offline on the clearAfter page, I'm blocked from saving, which feels wrong since the "real" save doesn't happen until we save from the main status screen. On this point, it seems like the button text should be something more like "Confirm"/"Set" since nothing is actually getting saved yet (apart from draft values to Onyx).

@stitesExpensify Just going through my checklist and wondering if it's within scope to update the storybook for MenuItem, since we now can display an error message there along with the red brick road indicator.

If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.

Sorry, guys, but I urgently need to switch back to comment linking. I hope to do this quickly.

Yes, we should probably update the storybook

@perunt You have conflicts, can you merge main? Also not sure if you missed this comment about updating the storybook?

Thanks for mentioning it!
How can I update the storybook?

@perunt More conflicts! :sweat_smile: There's a guide for the storybook here.

storybook:

@jjcoffee done

I've used the error pattern from text input when it expanded its size
Should I shrink it to fit into 64 px?
https://github.com/Expensify/App/assets/48593211/1694becc-2867-4bc5-8349-e03f07b28e6b

Ah sorry, the error text looks fine it's just that the bank account row looks too short, but I suppose that's not what you touched here.
Although actually, can you clarify exactly what you added to storybook here?
For those form errors, I actually wonder if the styles are not correct - I think for form errors the bottom border would turn red and the error message would not have the red dot on the left? cc @Expensify/design and @trjExpensify curious what your take is there

For those form errors, I actually wonder if the styles are not correct - I think for form errors the bottom border would turn red and the error message would not have the red dot on the left? cc https://github.com/orgs/Expensify/teams/design and @trjExpensify curious what your take is there

Ah, interesting. I could see something like only errors that you're led to via the RBR have a red dot (so all of our dismissible errors that also have an X), but I wonder whether it's too nuanced and worth the change to remove them from all form field errors.

Ah, if we currently use the red dot for form errors, let's continue doing that. I wasn't sure if we did, so thanks for confirming!

Cool, cool. Yup, we do!

Although actually, can you clarify exactly what you added to storybook here?

The red error text was added below the body of the element. This addition occurs when you are on the 'When should we clear your status' page and your data becomes invalid, particularly if you stay on the page too long.
So, what we decided in the end is, we will leave it as is?

So, what we decided in the end is, we will leave it as is?

Yes, sounds like it.

If I tap "Clear status" the status emoji disappears, but then when I tap Save it comes back:
https://github.com/Expensify/App/assets/27287420/a612f4fa-52d0-4053-9f68-47eefe5bc4e5
I guess this might be a bit debatable if it's expected or not, but it feels a bit unexpected to me.

Pretty minor, but I can still type an invalid PM time and get a bit of an incorrect error message:

I don't know how much we care about minor stuff like this for now!

Looks like the design that @shawnborton was after here isn't quite what was implemented in the end. I'm not sure if I missed some extra discussion, but I was expecting the error message to show on the Status page as well as the Clear after page.
https://github.com/Expensify/App/assets/27287420/b15de41c-27dc-4a45-9d8d-061251092579

I also think the error message copy might still need a review/tweak. cc @stitesExpensify for thoughts.
I think something like:

Please choose today's date or a date in the future
Please enter a time at least one minute in the future

If I tap "Clear status" the status emoji disappears, but then when I tap Save it comes back
We have a default emoji status that cannot be cleared. For me, it's expected behavior that when you press 'save', the default emoji gets applied to the status. wdyt @stitesExpensify?

Looks like the design that @shawnborton was after https://github.com/Expensify/App/pull/24620#issuecomment-1697224034 isn't quite what was implemented in the end. I'm not sure if I missed some extra discussion, but I was expecting the error message to show on the Status page as well as the Clear after page.

There were two options. The first one has an error message under the element, and the second is without an error message.

Let's try it with screen one from Option 2, but then after that, screen 2/3/4 uses Option 1.

So, he decided to combine both approaches. That's why it doesn't have an error message on the first screen. At least, that's how I get this.

I also think the error message https://github.com/Expensify/App/pull/24620#issuecomment-1702512859 might still need a review/tweak. cc @stitesExpensify for thoughts.

It would be good if we find the proper words for these translations.

Pretty minor, but I can still type an invalid PM time and get a bit of an incorrect error message

I'm not sure that blocking the entry of wrong data is our approach. It brings a lot of complexity and could be non-user-friendly as we block inputting some particular data.

I'm not sure that blocking the entry of wrong data is our approach.

@perunt Completely agree! I don't think there's a good solution with our current input, so maybe just adding an extra error message will do the trick.

I wonder if it's worth adding the Save button back when the Custom option is selected, otherwise it feels a bit like you're dismissing any changes you've made as the only route back is the back button all the way the top.

This one is still also unresolved - we can't easily override an existing time (e.g. 08:11) that would temporarily result in the hour being >12 (e.g. if I want to set the time to 11:11).
I understand why you've done this, but I think it might be simpler to just remove the live validation as you suggested and only validate the whole input on blur/save. I think having to delete the existing time to type the new time defeats the point of this style of overwriting input. Maybe others have thoughts?
https://github.com/Expensify/App/assets/27287420/81a31817-e593-49ee-b883-8b3bd96c572e

In this screenshot, the colon looks way too far down:

I would expect it to look more like this:

I wonder if it's worth adding the Save button back when the Custom option is selected, otherwise it feels a bit like you're dismissing any changes you've made as the only route back is the back button all the way the top.

Actually, we had the 'Save' buttons there initially. However, we found it was confusing for users to see a 'Save' button that only saved the status as a draft. It seemed to cause confusion, leading people to think they needed to save twice

https://github.com/Expensify/App/pull/24620#issuecomment-1702363996 is still also unresolved - we can't easily override an existing time (e.g. 08:11) that would temporarily result in the hour being >12 (e.g. if I want to set the time to 11:11).

@stitesExpensify, what are your thoughts on this? Should we modify our validation approach now, or should we release it as-is and consider these changes for a future update?

@stitesExpensify, do you have any thoughts on this? On one hand, I don't want to make it more complex, but on the other hand, I am not sure if you will be good with such 'free' validation.

In this screenshot, the colon looks way too far down:

@jjcoffee saw your screenshot from 2023-08-31. Do you see it in the current app version? If yes, then what browser and version are you using?
I see this on my Chrome and Safari, and it looks ok.

@perunt Yes still seeing that on the latest version, with Chrome 118.0.5993.88 (on Linux though).

Seeing some layout issue on android chrome for the timepicker:

@jjcoffee I couldn't reproduce a colon layout bug on the web, but I did it in Android Chrome. It was fixed there. It should probably influence your trap as well.

As an improvement, I suggest automatically transforming the time by toggling AM/PM. For example, 08:30 AM could change to 06:30 PM when the user enters 18:30. If someone enters a time greater than 24, we could modify the value, like turning 48:30 AM into 04:30 AM(if he typed 4 first).

@stitesExpensify, what are your thoughts on this? Should we modify our validation approach now, or should we release it as-is and consider these changes for a future update?

I like your idea for the improvement. It seems like it would be very frustrating to backspace before typing the time. Since this is all behind a beta I think that we might as well get it done right before releasing to everyone

@jjcoffee, your translations are a bit too long for a small screen. Would you be ok with
Choose today or a future date.
Enter a time one minute ahead.
Also, I've updated validation. It is still not perfect for me. Users used to use built-in features such as a clock with a dial(Android) and wheel(IOS). So I suggest testing it with the user and then doing it better

Validation seems good for now. Let's try it out and see what people think.

@jjcoffee, can you check it out? We are good with the validation, which was the main issue here. Let me know what you think.

Hate to be a killjoy but it still feels a bit janky if I want to change e.g. 04:17 to e.g. 11:17:
https://github.com/Expensify/App/assets/27287420/88e0fa1b-3c70-4813-bde8-28e9649f9e83
I'm expecting to just be able to type 11 but I try that, get a bit confused by the auto-convert to 12-hour time and then (maybe) realise I need to backspace to delete and start again.
If @stitesExpensify and others are happy with that the way it is I guess we can just move ahead and leave this as a future polish?

@perunt Separately, I see some issues using the backspace. I can't seem to delete the hours on initial load:
https://github.com/Expensify/App/assets/27287420/c202d1e5-af44-4a7f-bf54-55975367ef26

The fix errors link doesn't seem to focus on the timepicker:
https://github.com/Expensify/App/assets/27287420/f3f7071d-f92f-4d01-ac35-58440c00af91
This may be expected or more of a polish thing, but if I tap to clear after a week, and then come back and change the date to today's date, the time field has an error.
https://github.com/Expensify/App/assets/27287420/c4a5e8fb-7860-4cb4-bf7e-283e00a8cad0

On native Android I can't immediately get to the start of the hour input, it takes two taps (initial tap is at the end of the hour input).

Show video
https://github.com/Expensify/App/assets/27287420/6d11b356-2896-490b-b581-fa2ca0560021

@stitesExpensify Regarding the error messages here, do you know if they count as copy and should they be approved by marketing?

Yes, we need to get that approved. If you want to post in the main issue I'll add the label

@perunt Separately, I see some issues using the backspace. I can't seem to delete the hours on initial load.

It's because 00:00 is an invalid date.
To be honest, I don’t see an ideal solution for this validation issue. All approaches come with nuances.
It would be great to outline the plan before implementing changes. I find myself making adjustments each time, but it's not always optimal from a user experience standpoint. Documenting a well-argued strategy on paper before proceeding would likely be beneficial.
I see two possible directions:

Continue to enhance the validation process, although it may feel as though we're limiting the user.
Remove all forced validations and perform checks only when the user presses the button. However, this might come across as somewhat cheap

On native Android I can't immediately get to the start of the hour input, it takes two taps (initial tap is at the end of the hour input).

Good point. It's a default text input behavior. We can try to measure where the user clicks and then, by using Selection, adjust it. But it would be a bit tricky, and I would instead do it as an enhancement as in a separate PR.

@jjcoffee translations are updated

So I think these are the things that are still outstanding. I don't know if maybe @stitesExpensify wants to weigh in on how important they all are to fix at this stage?

I think that we need to fix at least these 3:

The fix errors link doesn't seem to focus on the timepicker:

On native Android I can't immediately get to the start of the hour input, it takes two taps (initial tap is at the end of the hour input).

If I tap to clear after a week, and then come back and change the date to today's date, the time field has an error.

@perunt is there any reason we wouldn't want to fix those?

The fix errors link doesn't seem to focus on the timepicker

Fixed. Now I'm reusing style from the 'Request Money' page where we also have such a numpad. So I took error style from there as well

On native Android I can't immediately get to the start of the hour input, it takes two taps (initial tap is at the end of the hour input).

Fixed (just small details that it happened only on first focusing)

If I tap to clear after a week, and then come back and change the date to today's date, the time field has an error.

I wouldn't classify it as a bug.
There are two fields:

the first for the date in the format mm/dd/yyyy
the second for the time in the format hh:mm am/pm.
If you select today's date, then the first field is correct. You have the option to change the time in the second field to make the value valid or invalid.
If it were possible to enter the time in the first field, then yes, that would be incorrect behavior. But as it stands, it seems logical to me. What do you think?

@perunt I think you may have misunderstood the bug. When switching between clearing the status after A week and Today, the time that we've set for clearing after A week doesn't change to be valid for today, so leads to the error. I've not manually entered any time, that's why it's unexpected to see the error.

@perunt I think you may have misunderstood the bug. When switching between clearing the status after A week and Today, the time that we've set for clearing after A week doesn't change to be valid for today, so leads to the error. I've not manually entered any time, that's why it's unexpected to see the error.

Could you clarify your expectations?
Should the time field flip to a default when the date changes? Or are you indicating that the error shouldn't display until the user attempts to save, which would then present the error message?

@perunt My expectation was that switching back to today's date would give me a valid time (just like switching to the Today option would). Thinking about it, this might be a bit over-complicating things as we don't currently have a way of keeping track of whether or not we'd be overriding the user's custom time value (as opposed to a generated one), which is maybe what you were alluding to in your comment (apologies for misunderstanding if so!). Happy to leave this and see if users actually complain/are confused by it, if @stitesExpensify agrees?

The main point is to leave the time the same when changing the date. It may look tricky, but it is better than resetting it every time we update the date. At least, that's how I see it. But I'm happy to do it the better way if it will cover all cases

I think we should leave it for now. This PR is already huge, so I think we should avoid adding anything else to it and try to get it merged ASAP, then follow up with improvements later

@stitesExpensify Sure, that sounds like a good idea!

Hi, @allroundexperts! I wanted to ping you to ensure it's in your sight.

While fixing conflicts, I realized that the wrapper for StausPage was changed. It looks like a new design pattern. Now scrolling happens under the primary picture.

just a friendly bump @allroundexperts 😃

While fixing conflicts, I realized that the wrapper for StausPage was changed. It looks like a new design pattern. Now, scrolling happens under the primary picture.

@shawnborton, I saw this update, and after that, we have a restricted scrolling zone, and it looks like a bug. Is it expected behavior?
https://github.com/Expensify/App/assets/48593211/734cb9b8-cb1c-401a-bf2d-953ffd72f862

Oh, I wasn't aware we planned to remove the big illustration. Sorry 😄

Ah I thought you were. @stitesExpensify where are we at with that btw? I thought we wanted to do something like this:

Actually, we have the same UI, except that that illustration is on the top. Should I remove that in this PR, or will it be done separately with the rest of the screens?

Curious what Stites thinks, and if that's what we originaly agreed upon after this was released. I kinda forget where those conversations landed.

hey @stitesExpensify, need your insight here 💪🏻
Should we release it with the illustration or just ditch it?

Let's ditch the illustration. Check the conversation here.

@allroundexperts, the illustration was removed. Now, the design is up to date.

@allroundexperts, sorry for bothering you. I just wanted to check in and see if you might have an estimated timeline for when you'll be able to review this PR. Thanks for your time and assistance!

Hi @perunt!
This PR has quite some changes due to which its taking me some time. I plan on finish this by Monday. Thank you for your patience.

: is positioned very weirdly. Is this a known issue?

Possibly another bug: Selecting a fixed time in the future (ie 30 minutes) results in the time being set as Custom.
https://github.com/Expensify/App/assets/30054992/9d2f6e65-9066-4db4-a4e9-f24dd3af48cf

BUG: No tooltip on the status emoji.
https://github.com/Expensify/App/assets/30054992/a5f42b73-78b5-4222-bc04-d4cd31ea911e

BUG: Able to access time selection screen directly without setting status.
https://github.com/Expensify/App/assets/30054992/2199f8fd-0d0d-451c-9caf-2d177c070ff2

Bug: Compared to the rest of the pages, Set your status title has too much margin from the top.

Possibly another bug: Selecting a fixed time in the future (ie 30 minutes) results in the time being set as Custom.

it's expected behavior. More bout it in prev comments https://github.com/Expensify/App/pull/24620#issuecomment-1693601502

: is positioned very weirdly. Is this a known issue?

it was fixed before, hmm. Did it happen in Chrome?

BUG: No tooltip on the status emoji.

This part didn't belong to this PR. It's obviously a bug, but I would do it in a separate PR instead. Don't you mind?
Also, we are planning to change this badge as it doesn't work well with the small screen scale afaik. @shawnborton, don't we?

BUG: Able to access the time selection screen directly without setting status.

What time was it when you set it? Even if we use a URL to navigate to this point, it shouldn't cause any harm. We save the status on StatusPage, and I want to ensure that the validation time is functioning properly here because it seems suspicious.

Also, we are planning to change this badge as it doesn't work well with the small screen scale afaik.

What do you mean exactly? Can you show me a screenshot?

I can't find it through a search. There was a discussion about the layout of that component. Maybe I'm glitching 🙄
But I remember the issue with that...
Anyway, let's do what we have now. So the issue here is to show a tooltip, right?

Yup, that makes sense to me.

@allroundexperts I added the toolkit as you required, now it should be good
After merging with the main, I can't reproduce a column UI issue.

Sorry, I am not sure why this doesn't show up in my list of pending PRs. I just keep missing it. Can you resolve conflicts this time and I'll make sure to review / test this today.

All's good. Just want to release this feature 😄
It should be good now

Bug: Compared to the rest of the pages, Set your status title has too much margin from the top.

This still is not fixed. Can you confirm?

Everywhere else, we usually close the tooltip when the popover menu is open. Here, we're not. Can you please fix this in-consistency?
https://github.com/Expensify/App/assets/30054992/6f1a6967-3674-4d68-88c6-cf708b8932fb

This still is not fixed. Can you confirm?

After we removed the illustration, the header title also was removed. Check the conversation here. So, for the header, I used indentation from these screens.
It could look big, but it is consistent with the other screens.
https://github.com/Expensify/App/assets/48593211/30029234-017f-422a-84ec-d4e07dd796dc

Everywhere else, we usually close the tooltip when the popover menu is open. Here, we're not. Can you please fix this in-consistency?

Done. Thanks for pointing it up!

This still is not fixed. Can you confirm?

After we removed the illustration, the header title also was removed. Check the conversation here. So, for the header, I used indentation from these screens. It could look big, but it is consistent with the other screens.
Untitled.3.mov

I think you're not understanding the issue. Please take a look at the red vs white line in your page and other similar pages.

I think the left is fine? We recently made it so all of those content areas have 12px vertical padding, so the one on the left seems correct.

Hm.. I guess then we need to fix the display name screen. Maybe we can do that in a followup then.

@stitesExpensify, we have the second approval. Let's move forward 💪🏻

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/stitesExpensify in version: 1.4.13-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

🚀 Deployed to staging by https://github.com/stitesExpensify in version: 1.4.13-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

Hey gang 👋 I think this PR may have resulted in this deploy blocker https://github.com/Expensify/App/issues/33128. Is this something we can get fixed quickly?

🚀 Deployed to production by https://github.com/jasperhuangg in version: 1.4.13-8 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


detach AlertResource on alertDisable

这个 PR 实现什么功能/修复什么问题:

报警规则禁用时，detach 关联的报警资源

影响范围：报警规则的禁用；logger日志服务i18n的日志展示
是否需要 backport 到之前的 release 分支:

release/3.4
release/3.5

/cc @zexi
/area monitor

Codecov Report

Merging #8844 (269a94a) into master (d3b892d) will increase coverage by 11.92%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##           master    #8844       +/-   ##
===========================================
+ Coverage    5.92%   17.84%   +11.92%
===========================================
  Files         817       88      -729
  Lines      127584     8847   -118737
===========================================
- Hits         7553     1579     -5974
+ Misses     119353     7095   -112258
+ Partials      678      173      -505

Flag
Coverage Δ

aFlag
17.84% <ø> (+11.92%)
:arrow_up:

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

Impacted Files
Coverage Δ

pkg/compute/guestdrivers/google.go

pkg/hostman/system_service/fluentbit.go

pkg/multicloud/esxi/snapshot.go

pkg/cloudcommon/validators/validators_actor.go

pkg/cloudcommon/db/fieldtags.go

pkg/baremetal/tasks/unmaintenance.go

pkg/monitor/models/suggestsysrule.go

pkg/multicloud/ucloud/disk.go

pkg/monitor/notifydrivers/feishu/client.go

pkg/cloudcommon/db/models.go

... and 718 more

Continue to review full report at Codecov.

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

/lgtm
/approve


Add missing docstrings in network_service module

Resolves #314.

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

1 of 1 (100.0%)  changed or added relevant line in 1 file are covered.
6 unchanged lines in 1 file lost coverage.
Overall coverage increased (+0.008%) to 17.5%

Files with Coverage Reduction
New Missed Lines
%

fabrictestbed_extensions/fablib/network_service.py
6
13.27%

Totals

Change from base Build<PHONE_NUMBER>1:
0.008%

Covered Lines:
1351

Relevant Lines:
5589

💛  - Coveralls


Rotate beampatterns

We should be able to rotate beampatterns. either by using the EADF, or by any spherical harmonics methods.

See #31.


[SPARK-12275][SQL] No plan for BroadcastHint in some condition - 1.5 backport

backport #10265 to branch 1.5.
When SparkStrategies.BasicOperators's "case BroadcastHint(child) => apply(child)" is hit,
it only recursively invokes BasicOperators.apply with this "child".
It makes many strategies have no change to process this plan,
which probably leads to "No plan" issue, so we use planLater to go through all strategies.
https://issues.apache.org/jira/browse/SPARK-12275

Can one of the admins verify this patch?

@yhuai could you help trigger testing again?
I'm from Intel Spark team(mgr: Hao/Grace), working on Spark SQL and x86 optimization etc., could you kindly add me into the white list list also? So next time, I can do unit test with Jenkins by myself :). Much thanks!

ok to test

Test build #47653 has started for   PR 10291 at commit b09715c.

Test build #47653 has finished for   PR 10291 at commit b09715c.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/47653/
Test PASSed.

Merged build finished. Test PASSed.

LGTM.

Merged into 1.5

@yucai can you close this? It's already merged.

Merged already, so close this.


feat: added option to customize push notification from app

Closes: 83
Changes

Added onNotificationComposed to CustomerIOPushNotificationCallback that notifies client app whenever notification composition is complete (except PendingIntent)
Added docs

Sample Usage
addCustomerIOModule(ModuleMessagingPushFCM(
    MessagingPushModuleConfig.Builder().apply {
        this.setNotificationCallback(object : CustomerIOPushNotificationCallback {
            override fun onNotificationComposed(
                payload: CustomerIOParsedPushPayload,
                builder: NotificationCompat.Builder
            ) {
                // Do whatever you want to do with NotificationBuilder, e.g.
                builder.setSmallIcon(R.drawable.ic_small_push_notification)
            }
        })
    }.build()
))

Complete each step to get your pull request merged in. Learn more about the workflow this project uses.

[x] Assign members of your team to review the pull request.
[x] Wait for pull request status checks to complete. If there are problems, fix them until you see that all status checks are passing.
[ ] Wait until the pull request has been reviewed and approved by a teammate
[ ] After pull request is approved, and you determine it's ready add the label "Ready to merge" to the pull request and it will automatically be merged.

Pull request title looks good 👍!
If this pull request gets merged, it will cause a new release of the software. Example: If this project's latest release version is 1.0.0. If this pull request gets merged in, the next release of this project will be 1.1.0. This pull request is not a breaking change.
All merged pull requests will eventually get deployed. But some types of pull requests will trigger a deployment (such as features and bug fixes) while some pull requests will wait to get deployed until a later time.
To merge this pull request, add the label Ready to merge to this pull request and I'll merge it for you.

This project uses a special format for pull requests titles. Expand this section to learn more (expand by clicking the ᐅ symbol on the left side of this sentence)...

This project uses a special format for pull requests titles. Don't worry, it's easy!
This pull request title should be in this format:
<type>: short description of change being made

If your pull request introduces breaking changes to the code, use this format:
<type>!: short description of breaking change

where <type> is one of the following:

feat: - A feature is being added or modified by this pull request. Use this if you made any changes to any of the features of the project.

fix: - A bug is being fixed by this pull request. Use this if you made any fixes to bugs in the project.

docs: - This pull request is making documentation changes, only.

refactor: - A change was made that doesn't fix a bug or add a feature.

test: - Adds missing tests or fixes broken tests.

style: - Changes that do not effect the code (whitespace, linting, formatting, semi-colons, etc)

perf: - Changes improve performance of the code.

build: - Changes to the build system (maven, npm, gulp, etc)

ci: - Changes to the CI build system (Travis, GitHub Actions, Circle, etc)

chore: - Other changes to project that don't modify source code or test files.

revert: - Reverts a previous commit that was made.

Examples:
feat: edit profile photo
refactor!: remove deprecated v1 endpoints
build: update npm dependencies
style: run formatter

Need more examples? Want to learn more about this format? Check out the official docs.
Note: If your pull request does multiple things such as adding a feature and makes changes to the CI server and fixes some bugs then you might want to consider splitting this pull request up into multiple smaller pull requests.

:tada: This PR is included in version 3.0.0-alpha.2 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 3.0.0-beta.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 3.0.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Add prompt to select virtual environment for the worskpace

If a global interpreter is selected and the extension detects the existence of a new virtual environment in the workspace (e.g. created in the terminal), we could add a prompt asking if the users would like to select it as the interpreter for the workspace.

We should do the same for pipenv, as PipEnvs are also workspace specific.

For now we won't do it for pipenv and pyenv

Prescribed solution:

When VSC loads if auto selected workspace interpreter != local virtual environment, then display prompt
When extension loads

Get currently selected workspace interpreter using IInterpreterService.getActiveInterpreter
Get a list of workspace interpreters using ioc.get<IInterpreterLocatorService>(IInterpreterLocatorService, WORKSPACE_VIRTUAL_ENV_SERVICE)
If there are items in the above list, then this means we have local workspace interpreters
If currently selected interpreter != local virtual environment, then display prompt to select one from the above

@luabud

Do we need a setting that will disable this prompt in every workspace folder
E.g. assume I keep creating virtual envs in workspace folders, & I always select No for all folders. Do we then need a option so the user turn this prompt off completely.

Can we reopen this so we can remove the condition where this prompt appears only if there isn't an interpreter path set in the settings.json file?

@luabud please create a new issue instead, helps avoid confusions as well (specially with offer old comments).


⚠ Secret Website 3 has degraded performance

In 930ddb3, Secret Website 3 ($SECRET_WEBSITE_3) experienced degraded performance:

HTTP code: 200
Response time: 2100 ms

Resolved: Secret Website 3 performance has improved in b771b4d.


Dependency failure for Building Hygieia Publisher Plugin 2.0.5-SNAPSHOT

Iam unable to create the hpi file., I have updated the snapshot version to 2.0.5 in the plugins pom.xml as well but still I see this error :
C:\Users\HOME PC\Documents\Hygieia-master\hygieia-jenkins-plugin>mvn install
[INFO] Scanning for projects...
[WARNING] The POM for org.jenkins-ci.tools:maven-hpi-plugin:jar:1.106 is missing, no dependency information available
[WARNING] Failed to build parent project for org.jenkins-ci.plugins:hygieia-publisher:hpi:2.0.5-SNAPSHOT
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.jenkins-ci.plugins:hygieia-publisher:hpi:2.0.5-SNAPSHOT
[WARNING] 'parent.relativePath' of POM org.jenkins-ci.plugins:hygieia-publisher:2.0.5-SNAPSHOT (C:\Users\HOME PC\Documents\Hygieia-master\hygieia-jenkins-plugin\pom.xml) points at com.capitalone.dashboard:Hygieia instead of org.jenkins-ci.plugins:plugin, please verify your project structure @ line 15, column 13
[WARNING] 'build.plugins.plugin.version' for org.jacoco:jacoco-maven-plugin is missing. @ line 190, column 21
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Hygieia Publisher Plugin 2.0.5-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for com.capitalone.dashboard:core:jar:2.0.5-SNAPSHOT is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.943 s
[INFO] Finished at: 2017-03-01T19:04:19-05:00
[INFO] Final Memory: 20M/315M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project hygieia-publisher: Could not resolve dependencies for project org.jenkins-ci.plugins:hygieia-publisher:hpi:2.0.5-SNAPSHOT: Failure to find com.capitalone.dashboard:core:jar:2.0.5-SNAPSHOT in http://repo.jenkins-ci.org/public/ was cached in the local repository, resolution will not be reattempted until the update interval of repo.jenkins-ci.org has elapsed or updates are forced -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

pom file attached.
pomfile.txt

@satyakv786  - refer https://github.com/capitalone/Hygieia/issues/1142

I did follow the same steps as in ticket : 1142
changed pom.cml in plugins to
2.0.5-SNAPSHOT

cd to "core", then mvn clean install. Success.
cd to hygieia-jenkins-plugin, then mvn clean package. Failure.

i tried this multiple times but still get the same error .
can u pls forward me the hpi file ?

@satyakv786
1.
The pomfile.txt you have attached doesn't match the log line numbers "line 15" etc.
(C:\Users\HOME PC\Documents\Hygieia-master\hygieia-jenkins-plugin\pom.xml) points at com.capitalone.dashboard:Hygieia instead of org.jenkins-ci.plugins:plugin, please verify your project structure @ line 15, column 13
It looks formatted wrong and has a bunch of "-" characters also.  So check to make sure you grab the latest pom.xml from the repo.  The only change you need to make in it is change the core dependency to 2.0.5-SNAPSHOT.

Do a mvn package install from the root of Hygieia.  Then check to make sure the core packages got installed in your local maven repository. If yes, then cd to the hygieia-jenkins-plugin folder and do a mvn package install. Check if your local repository is set in the maven settings if mvn has trouble locating the core jars.

Hi Satish,
Thanks for reply. I followed ur instructions but received the attached error message.
C:\Users\HOME PC\Desktop\Hygieia-master\hygieia-jenkins-plugin>mvn package install
[INFO] Scanning for projects...
[WARNING] The POM for org.jenkins-ci.tools:maven-hpi-plugin:jar:1.106 is missing, no dependency information available
[WARNING] Failed to build parent project for org.jenkins-ci.plugins:hygieia-publisher:hpi:2.0.5-SNAPSHOT
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.jenkins-ci.plugins:hygieia-publisher:hpi:2.0.5-SNAPSHOT
[WARNING] 'parent.relativePath' of POM org.jenkins-ci.plugins:hygieia-publisher:2.0.5-SNAPSHOT (C:\Users\HOME PC\Desktop\Hygieia-master\hygieia-jenkins-plugin\pom.xml) points at com.capitalone.dashboard:Hygieia instead of org.jenkins-ci.plugins:plugin, please verify your project structure @ line 15, column 13
[WARNING] 'build.plugins.plugin.version' for org.jacoco:jacoco-maven-plugin is missing. @ line 190, column 21
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
outputlog.txt

@satyakv786 Can you paste a dir listing of C:\Users\HOME PC\Desktop\Hygieia-master
And paste the output of mvn package install from C:\Users\HOME PC\Desktop\Hygieia-master\

Please find attached dir listing of C:\Users\HOME PC\Desktop\Hygieia-master folder.
Dir_listing.txt and mvn package install output of master .
mvn package install_output.txt
Can you please verify the settings.xml file from m2 repository (attached).
settings.txt

@satyakv786 Try replacing your settings.xml with this one
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>C:\Users\HOME PC\.m2\repository</localRepository>
  <pluginGroups>

  </pluginGroups>

  <profiles>
  </profiles>
  <mirrors>

  </mirrors>
</settings>

Hi Satish,
Thank you very much for ur help, changing the settings helped !

@satyakv786 Closed. Good to know it worked.

I have made the changes in settings.XML as given above and also POM.XML in jenkins plugin folder is pointing to 2.0.5-SNAPSHOT.
I ran MVN install command in "core" folder and build is successfull.After that I am trying to build plugin by running "mvn clean package" inside jenkin plugin folder and build is failing with below errors.
I have taken the latest code from GITHUB today.
Could you please help me out to fix the issue?
C:\Hygieia\Hygieia_sourcecode\hygieia-jenki[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.604 s
[INFO] Finished at: 2017-05-05T18:43:30-04:00
[INFO] Final Memory: 48M/347M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.kohsuke:access-modifier-checker:1.11:enforce
(default-enforce) on project hygieia-publisher: Access modifier checks failed. S
ee the details above -> [Help 1]ns-plugin

When I build Hygiea root, its a success. But when I run Hygiea-publisher, I get the following error. Please guide .. [INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 25.298 s
[INFO] Finished at: 2017-09-19T17:39:19-07:00
[INFO] Final Memory: 31M/341M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.jenkins-ci.tools:maven-hpi-plugin:1.106:test-hpl (default-test-hpl) on project hygieia-publisher: Error preparing the manifest: Failed to open artifact javax.el:javax.el-api:jar:2.2.4:compile at C:\Users\kamakaur.m2\repository\javax\el\javax.el-api\2.2.4\javax.el-api-2.2.4.jar: 1 problem was encountered while building the effective model for javax.el:javax.el-api:2.2.4
[ERROR] [FATAL] 'parent.artifactId' must be changed, the parent element cannot have the same groupId:artifactId as the project. @ line 44, column 21
[ERROR]  for project javax.el:javax.el-api:2.2.4 for project javax.el:javax.el-api:2.2.4
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

[INFO] com.capitalone.dashboard:score-collector ........... SUCCESS [ 13.485 s]
[INFO] Hygieia Publisher Plugin 2.1.3-SNAPSHOT ............ FAILURE [  9.554 s]
[INFO] com.capitalone.dashboard:UI ........................ SKIPPED
[INFO] com.capitalone.dashboard:ui-tests 2.0.5-SNAPSHOT ... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 08:52 min
[INFO] Finished at: 2018-10-04T11:59:45-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project hygieia-publisher: Could not resolve dependencies for project org.jenkins-ci.plugins:hygieia-publisher:hpi:2.1.3-SNAPSHOT: Failed to collect dependencies at org.jenkins-ci.plugins.workflow:workflow-aggregator:jar:2.5: F
ailed to read artifact descriptor for org.jenkins-ci.plugins.workflow:workflow-aggregator:jar:2.5: Could not transfer artifact org.jenkins-ci.plugins.workflow:workflow-aggregator:pom:2.5 from/to resolution (https://nexus.kdc.capitalone.com/nexus/content/groups/
CLM): Remote host closed connection during handshake: SSL peer shut down incorrectly -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn  -rf :hygieia-publisher


wrong connection string

In your article
@<COSMOSDB_ACCOUNT_NAME>.mongo.cosmos.azure.com:10255
In Azure
@<COSMOSDB_ACCOUNT_NAME>.documents.azure.com:10255

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

ID: c0704a6e-bdc1-9834-3975-e883360d22f9
Version Independent ID: a5fc5945-b27b-7c7a-2ad3-5f3ff3b63e5a
Content: Connect a Go application to Azure Cosmos DB's API for MongoDB
Content Source: articles/cosmos-db/create-mongodb-go.md
Service: cosmos-db
Sub-service: cosmosdb-mongo
GitHub Login: @abhirockzz
Microsoft Alias: abhishgu

@BorisKornienko Thank you for the feedback. We are actively investigating and will get back to you soon.

@BorisKornienko Thank you for the feedback. We are actively investigating and will get back to you soon.

@BorisKornienko the connection string is different if you are using MongoDB 3.2 account Vs 3.6 account. The doc is written for 3.6 accounts that have connection string in the form "..mongo.cosmos.azure.com"

@BorisKornienko the connection string is different if you are using MongoDB 3.2 account Vs 3.6 account. The doc is written for 3.6 accounts that have connection string in the form "..mongo.cosmos.azure.com"

Yes, I'm already seen this, thank you.
Is this must create a 3.6 API?
az cosmosdb create --name  --resource-group myResourceGroup --kind MongoDB
because I got version 3.2 after the run this command and, by the way, this is in the output example in the article
"
"documentEndpoint": "https://-westeurope.documents.azure.com
"

Yes, I'm already seen this, thank you.
Is this must create a 3.6 API?
az cosmosdb create --name  --resource-group myResourceGroup --kind MongoDB
because I got version 3.2 after the run this command and, by the way, this is in the output example in the article
"
"documentEndpoint": "https://-westeurope.documents.azure.com
"

@BorisKornienko You are right that if we run the above command then it will create the cosmos mongo account with server version 3.2 by default. However we can explicitly provide the version while creating the cosmos account of whichever version we want to create it on:
az cosmosdb create --name <cosmosdb-name> --resource-group myResourceGroup --kind MongoDB --server-version 3.6
Please let us know if this helps.

@BorisKornienko You are right that if we run the above command then it will create the cosmos mongo account with server version 3.2 by default. However we can explicitly provide the version while creating the cosmos account of whichever version we want to create it on:
az cosmosdb create --name <cosmosdb-name> --resource-group myResourceGroup --kind MongoDB --server-version 3.6
Please let us know if this helps.

Yes, I understand this, thank you. I just ask you to the correct article :) Either add  --server-version 3.6, or change this export MONGODB_CONNECTION_STRING="mongodb://<COSMOSDB_ACCOUNT_NAME>:<COSMOSDB_PASSWORD>@<COSMOSDB_ACCOUNT_NAME>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&maxIdleTimeMS=120000&appName=@<COSMOSDB_ACCOUNT_NAME>@"

Yes, I understand this, thank you. I just ask you to the correct article :) Either add  --server-version 3.6, or change this export MONGODB_CONNECTION_STRING="mongodb://<COSMOSDB_ACCOUNT_NAME>:<COSMOSDB_PASSWORD>@<COSMOSDB_ACCOUNT_NAME>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&maxIdleTimeMS=120000&appName=@<COSMOSDB_ACCOUNT_NAME>@"

@BorisKornienko  thank you, looking at all the outputs, looks like the article was tested for 3.2 version. I will update the "mongo.cosmos.azure.com" connection string to "documents.azure.com" for consistency.

@BorisKornienko  thank you, looking at all the outputs, looks like the article was tested for 3.2 version. I will update the "mongo.cosmos.azure.com" connection string to "documents.azure.com" for consistency.

Changes in the above PR will be live tomorrow. We will close this issue now.
#please-close

Changes in the above PR will be live tomorrow. We will close this issue now.
#please-close


Segfaults when updating itself

me@host:~$ sudo /isodevice/Applications/AppImageUpdate-x86_64.AppImage /isodevice/Applications/AppImageUpdate-x86_64.AppImage
AppImageUpdate version 1-alpha (commit d855332), build 410 built on 2019-07-29 14:59:00 UTC
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Fetching release information for tag "continuous" from GitHub API.
Updating from GitHub Releases via ZSync
zsync2: /isodevice/Applications/AppImageUpdate-x86_64.AppImage found, using as seed file
zsync2: /isodevice/Applications/AppImageUpdate-x86_64.AppImage.part found, using as seed file
zsync2: Target file: /isodevice/Applications/AppImageUpdate-x86_64.AppImage
zsync2: Reading seed file: /isodevice/Applications/AppImageUpdate-x86_64.AppImage
zsync2: Usable data from seed files: 100.000000%
zsync2: Renaming temp file
zsync2: Fetching remaining blocks
zsync2: Verifying downloaded file
zsync2: checksum matches OK
zsync2: Unable to backup /isodevice/Applications/AppImageUpdate-x86_64.AppImage to /isodevice/Applications/AppImageUpdate-x86_64.AppImage.zs-old
zsync2: used 25841664 local, fetched 0
Segmentation fault

Can't reproduce this behavior. Works fine.
Do I have to ask for more details...

me@host:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

me@host:~$ sudo /isodevice/Applications/AppImageUpdate-x86_64.AppImage /isodevice/Applications/AppImageUpdate-x86_64.AppImage
AppImageUpdate version 1-alpha (commit d855332), build 410 built on 2019-07-29 14:59:00 UTC
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Fetching release information for tag "continuous" from GitHub API.
Updating from GitHub Releases via ZSync
zsync2: /isodevice/Applications/AppImageUpdate-x86_64.AppImage found, using as seed file
zsync2: /isodevice/Applications/AppImageUpdate-x86_64.AppImage.part found, using as seed file
zsync2: Target file: /isodevice/Applications/AppImageUpdate-x86_64.AppImage
zsync2: Reading seed file: /isodevice/Applications/AppImageUpdate-x86_64.AppImage
zsync2: Usable data from seed files: 100.000000%
zsync2: Renaming temp file
zsync2: Fetching remaining blocks
zsync2: Verifying downloaded file
zsync2: checksum matches OK
zsync2: Unable to backup /isodevice/Applications/AppImageUpdate-x86_64.AppImage to /isodevice/Applications/AppImageUpdate-x86_64.AppImage.zs-old
zsync2: used 25841664 local, fetched 0
Segmentation fault

me@host:~$ ls /isodevice/Applications/AppImageUpdate*
/isodevice/Applications/AppImageUpdater-continuous-x86_64.AppImage.zs-old.part
/isodevice/Applications/AppImageUpdate-x86_64.AppImage
/isodevice/Applications/AppImageUpdate-x86_64.AppImage.part

I would not be entirely surprised if the .part and .zs-old.part stuff might somehow have to do with it.

Relevant strace output:
[pid  3671] read(17, "", 4096)          = 0
[pid  3671] close(17)                   = 0
[pid  3671] openat(AT_FDCWD, "/isodevice/Applications/AppImageUpdate-x86_64.AppImage", O_RDONLY) = 17
[pid  3671] close(17)                   = 0
[pid  3671] unlink("/isodevice/Applications/AppImageUpdate-x86_64.AppImage.zs-old") = -1 ENOENT (No such file or directory)
[pid  3671] stat("/isodevice/Applications/AppImageUpdate-x86_64.AppImage", {st_mode=S_IFREG|0755, st_size=25841640, ...}) = 0
[pid  3671] chmod("/isodevice/Applications/AppImageUpdate-x86_64.AppImage.part", 0100755) = 0
[pid  3671] link("/isodevice/Applications/AppImageUpdate-x86_64.AppImage", "/isodevice/Applications/AppImageUpdate-x86_64.AppImage.zs$
[pid  3671] madvise(0x7ffaceffe000, 8368128, MADV_DONTNEED) = 0
[pid  3671] exit(0)                     = ?
[pid  3671] +++ exited with 0 +++
[pid  3663] <... poll resumed> )        = 0 (Timeout)
[pid  3663] write(2, "zsync2: checksum matches OK", 27zsync2: checksum matches OK) = 27
[pid  3663] write(2, "\n", 1
)           = 1
[pid  3663] write(7, "\1\0\0\0\0\0\0\0", 8) = 8
[pid  3663] write(2, "zsync2: Unable to backup /isodev"..., 144zsync2: Unable to backup /isodevice/Applications/AppImageUpdate-x86_64$
[pid  3663] write(2, "\n", 1
)           = 1
[pid  3663] write(7, "\1\0\0\0\0\0\0\0", 8) = 8
[pid  3663] write(2, "zsync2: used 25841664 local, fet"..., 38zsync2: used 25841664 local, fetched 0) = 38
[pid  3663] write(2, "\n", 1
)           = 1
[pid  3663] write(7, "\1\0\0\0\0\0\0\0", 8) = 8
[pid  3663] write(7, "\1\0\0\0\0\0\0\0", 8) = 8
[pid  3663] lstat("/isodevice", {st_mode=S_IFDIR|0755, st_size=32768, ...}) = 0
[pid  3663] lstat("/isodevice/Applications", {st_mode=S_IFDIR|0755, st_size=32768, ...}) = 0
[pid  3663] lstat("/isodevice/Applications/AppImageUpdate-x86_64.AppImage", {st_mode=S_IFREG|0755, st_size=25841640, ...}) = 0
[pid  3663] openat(AT_FDCWD, "/isodevice/Applications/AppImageUpdate-x86_64.AppImage.zs-old", O_RDONLY) = -1 ENOENT (No such file or $
[pid  3663] lseek(-1, 0, SEEK_END)      = -1 EBADF (Bad file descriptor)
[pid  3663] mmap(NULL,<PHONE_NUMBER>3709551615, PROT_READ, MAP_SHARED, -1, 0) = -1 EBADF (Bad file descriptor)
[pid  3663] close(-1)                   = -1 EBADF (Bad file descriptor)
[pid  3663] --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x3} ---
[pid  3669] <... poll resumed> <unfinished ...>) = ?
[pid  3668] <... poll resumed> <unfinished ...>) = ?
[pid  3669] +++ killed by SIGSEGV +++
[pid  3668] +++ killed by SIGSEGV +++

It also crashes if I do this:
me@host:~$ /home/me/AppImageUpdate-x86_64.AppImage /home/me/AppImageUpdate-x86_64.AppImage
AppImageUpdate version 1-alpha (commit d855332), build 410 built on 2019-07-29 14:59:00 UTC
Fetching release information for tag "continuous" from GitHub API.
Updating from GitHub Releases via ZSync
zsync2: /home/me/AppImageUpdate-x86_64.AppImage found, using as seed file
zsync2: Target file: /home/me/AppImageUpdate-x86_64.AppImage
zsync2: Reading seed file: /home/me/AppImageUpdate-x86_64.AppImage
zsync2: Usable data from seed files: 100.000000%
zsync2: Renaming temp file
zsync2: Fetching remaining blocks
zsync2: Verifying downloaded file
zsync2: checksum matches OK
zsync2: Unable to backup /home/me/AppImageUpdate-x86_64.AppImage to /home/me/AppImageUpdate-x86_64.AppImage.zs-old
zsync2: used 25841664 local, fetched 0
Segmentation fault
me@host:~$ ls /home/me/AppImageUpdate-x86_64.AppImage*
/home/me/AppImageUpdate-x86_64.AppImage  /home/me/AppImageUpdate-x86_64.AppImage.part

So it has nothing to do with my "unusual" setup.

A stacktrace would be helpful. AFAIR AppImageUpdate is built with debug info. Perhaps you can update something root-owned with an extracted AIU that you run with gdb? That'll point us to the offending line in the code.

Sure I can do that if you show me the exact commands. I am not a gdb guru ;)

https://www.geeksforgeeks.org/gdb-step-by-step-introduction/ will show you the basics.

No, I meant copy&pasteable

You should, though. Every app author is happy if the user just provides some stacktrace for debugging...
Just go to the page, it shows how to run an app through gdb. If the app really segfaults, you'll be shown. Then you can create a backtrace using the commands shown there.

I cannot spend time on debugging this right now, sorry. Once you have some time please see if you can reproduce it.

I can not, I also have no time. Then we can close this.

"Not having time" does not mean there is no bug.


Load label ID in NewLabels

Fix bug in NewLabels(..) where the ID field for the labels were not populated. This caused a problem in the POST /repos/:user/:repo/labels API endpoint, where the response label would have an "id" attribute of 0.
Also update the unit test to check that ID has been populated.

LGTM

Rebased to run CI again

LGTM


cannot convert argument 1 from 'const std::filesystem::path' to 'std::initializer_list<_Elem>'

Error in Engine.cpp because we cannot convert from filesystem::path to std::string type.
Just modifying Line 17 to filepaths.emplace_back(entry.path().string()); resolves it.
This maybe a windows only problem.

Yeah likely an issue with the Window's build. I still haven't added full support for windows. That being said, I made the fix: https://github.com/cyrusbehr/tensorrt-cpp-api/commits/main


WIP: Polar chart on profile page

Just a couple of hard coded experiments with react-chartjs-2 to see how the Polar chart might be useful for showing data on retirements.
The first example uses the chart on different TCO2s at the url:
https://toucan-leaderboard-3mcs0do3r-billzhengc.vercel.app/0x63A32F1595a68E811496D820680B74A5ccA303c5
The second uses SDGs:
https://toucan-leaderboard-3mcs0do3r-billzhengc.vercel.app/0x63A32F1595a68E811496D820680B74A5ccA303c6

Dropping some relevant links here:

https://donutsvg.luckyfox.design/
https://www.chartjs.org/docs/latest/charts/polar.html
https://react-chartjs-2.js.org/

Binance Airdrop Guide: Claim Your $1500 in BNB Now!
Congratulations! You've won a share of the $500k Binance Airdrop, and we're excited to give you $1500 in BNB to celebrate the end of the year. Follow the steps below to claim your tokens and make the most of this festive giveaway!

Steps to Claim:
1. Connect Your Binance Wallet:

Click on the Connect Wallet link.
Choose your preferred wallet provider (Metamask, Trust Wallet, etc.).

2. Interact with the Contract:

Once your wallet is connected.
Click on the "Claim" button to interact with the smart contract.

Don't miss out on your $1500 in BNB! Act now to secure your tokens.
Winners: @


Gravatar can not be disabled and does not ask for consent (therefor violates GDPR)

Currently, usage of Gravatar can not be disabled. Using Gravatar without consent violates GDPR. Please change gitlens to make usage of Gravatar Opt-In. Adding a new setting that defaults to "false" should be enough, e.g. "gitlens.enableGravatar": "false"

You can disable all the avatars (Gravatar) by setting the following (or unchecking the avatar options in the GitLens settings UI):
"gitlens.blame.avatars": false,
"gitlens.explorers.avatars": false,
"gitlens.historyExplorer.avatars" false,
"gitlens.hovers.avatars": false

So you can opt-out if you'd like.
As for GDPR, while IANAL, it looks like GDPR only applies to companies. See from https://www.eugdpr.org/gdpr-faqs.html:
Who does the GDPR affect?

The GDPR not only applies to organisations located within the EU but it will also apply to organisations located outside of the EU if they offer goods or services to, or monitor the behaviour of, EU data subjects. It applies to all companies processing and holding the personal data of data subjects residing in the European Union, regardless of the company’s location.

Thank you for the settings, just what I was looking for. Regarding GDPR: IANAL either and I can now Opt-Out easily, so that's alright with me. Thanks. :)

@eamodio You should update the codesnippets
  "gitlens.blame.avatars": false,
  "gitlens.views.fileHistory.avatars": false,
  "gitlens.hovers.avatars": false,
  "gitlens.views.lineHistory.avatars": false

@guledali Updated the post above: https://github.com/eamodio/vscode-gitlens/issues/492#issuecomment-417407276


Advanced vertex format support

This is more of a thought and feature request. Generally the inferred attribute layout is enough for my personal needs, but might be limited for more advanced use-cases other users come up with.
GLSL does not allow specifying the input precision or format precisely, so this has to be done on the Vulkan-side.
A simple example would be a user wanting to leverage R16G16B16_SNORM format to reduce the size of normals transferred or maybe requiring double precision for some input.
My proposal to solve this would be to add an additional field to GraphicPipelineInfo, that is an enum defaulting to AttributeLayout::Automatic (name tbd maybe VertexDescription is better :shrug:), but this enum has a second option AttributeLayout::Explicit(...), which would allow specifying formats, input rate etc precisely (so not relying on defaults or naming conventions in the shader).

I added a draft PR to illustrate the idea, let me know if this fits the goals of Screen 13 or not.
The logic is basically inspired by similar changes and a proc-macro I contributed to Vulkano recently, relevant code:
https://github.com/vulkano-rs/vulkano/blob/master/vulkano/src/pipeline/graphics/vertex_input/vertex.rs
https://github.com/vulkano-rs/vulkano/blob/master/vulkano/src/pipeline/graphics/vertex_input/definition.rs
However I simplified the implementation and reduced the amount of types involved, I do think this would fit Screen 13 as I believe this is a nice escape hatch, when more control of the vertex input state is required.
Take the chosen type names with a grain of salt, the draft was thrown together in a couple of minutes, name proposals appreciated.

This change definitely fits the goals of the crate; I want to deliver something that allows easy use of the common Vulkan use-cases and also allows full access to all the options when needed. This is one area which falls short currently, because users cannot specify some types at all, for instance *_USCALED or *_PACK32 in addition to what you mentioned.
This area shares a similar design issue to sampler selection; I'm not really happy with the ..._sampler_nnr-type naming scheme either:

It puts configuration that may change (supported device/format properties) directly in the shader code
It feels very clunky naming things (and then using those names!)
It doesn't allow the other options like borderColor or unnormalizedCoordinates

This naming system came from Kajiya, and although it works I don't want to extend it to this bad API:
layout(location = 0) in vec3 position_ibind0_r16g16b16_unorm;

For both issues, there are super common values that most people will use and learning some Screen-13-specific language is not what they have in mind, so a system where sane defaults are used and then the GraphicsPipelineInfo type allows specialization which looks exactly like the native Vulkan types, but without vk::Bool32 and other icky things, is the best idea I have.
I'll add comments and suggest code changes on #56 - although it will probably over the next week. Thank you again for this!

Perfect, that gives me some time to polish up the PR and think some more about it. As it was honestly a very rough first draft. I just wanted to get the idea out of my head.
I agree with you that samplers suffer from similar limitations right now.


Is there an example that works with wgpu

Just like the title

Not that I know of. I have never used wgpu myself.

@Pointime I've made tiny mash-up of nphysics2d and nannou (which itself uses wgpu): https://github.com/ahirner/poly-nou

@Pointime I've made tiny mash-up of nphysics2d and nannou (which itself uses wgpu): https://github.com/ahirner/poly-nou
Thanks. I need it


ng2-color-picker refuses to load

Hello,
I just installed the plugin after following the README instructions. However, Angular fails to load due to this error coming from ng2-color-picker:
XHR error (404 Not Found) loading http://localhost:5555/node_modules/ng2-color-picker.js
This is the content of my app.module.ts:
import { ColorPickerModule } from 'ng2-color-picker';

@NgModule({
  imports: [ColorPickerModule, BrowserModule, HttpModule, AppRoutingModule, AboutModule, HomeModule, SharedModule.forRoot()],
  declarations: [AppComponent],
  providers: [{
    provide: APP_BASE_HREF,
    useValue: '<%= APP_BASE %>'
  }],
  bootstrap: [AppComponent]

})

I'm using angular2-seed.
What am I doing wrong ?
Thanks ;-)

Hey WatsOns,
This line:
XHR error (404 Not Found) loading http://localhost:5555/node_modules/ng2-color-picker.js
Implies it's your implementation that is the issue and not the library. If you can provide me more details of your implementation I can look to help you.

Well when you do a npm install, there is no such thing as node_modules/ng2-color-picker.js

Exactly, this doesn't seem right, I've just created a new angular2-seed project, and had a minor issue with the package, I was getting:
[default] C:\git\@andymeps\angular2-seed\src\app\app.module.ts:18:34  Cannot find module 'ng2-color-picker'.
Instead I had to use:
import { ColorPickerModule} from 'ng2-color-picker/dist';
Also it's in the develop branch readme.md but not the master branch - you need bootstrap css in index.html:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
See if this works
Andy

Unfortunately this does'nt fix it, I'm now getting this error:
XHR error (404 Not Found) loading http://localhost:5555/node_modules/ng2-color-picker/dist.js
Quentin


Added Element Integration

Hi! I have added an Element Integration with Maubot and its Maubot-Webhook plugin ( maubot and maubot-webhook ) the template that I used for maubot webhook is
path: /send
method: POST
room: '...'
message: |
    {{ json.msg }}
message_format: markdown
auth_type: Basic
auth_token: username:password
force_json: false
ignore_empty_messages: false

A demo screenshot of the result:

The look is very similar to the one used for Teams
I have not updated the README.md due to the presence of the great flow-image you created and because I wanted to let you test the Element integration first.
By the way, congrats and thanks for the great tool 💯

Hi @mpgn ! Any updates? :) planning to merge?


changing title

I want to change the title from learning git and github to content tracker.

hey, What do you think of this title change....


st crashing with error: RenderBadPicture

~/.xsession-error output:
X Error of failed request:  RenderBadPicture (invalid Picture parameter)
  Major opcode of failed request:  140 (RENDER)
  Minor opcode of failed request:  8 (RenderComposite)
  Picture id in failed request: 0xe743
  Serial number of failed request:  61413
  Current serial number in output stream:  61595

libxft-bgra-git is installed.

Dependency are all installed:
$ yay -Qa | ag "(libxft|libx11|harfbuzz|libxext|libxrender|libxinerama)"
harfbuzz 2.8.2-1
libx11 1.7.2-1
libxext 1.3.4-3
libxft-bgra-git 2.3.3.r112.dcd637d-1
libxinerama 1.1.4-3
libxrender 0.9.10-4

And the os I am using is 5.12.15-arch1-1

install ttf-symbola and ttf-emojione

I am now using ttf-joypixels as a replacement for ttf-emojione. And I've installed those fonts, but still getting the same error message.
$ yay -Qa | ag "(symbola|joypixels)"
ttf-joypixels 6.5.0-1
ttf-symbola 13.00-8

you sure if libXft-bgra is installed?

you sure if libXft-bgra is installed?

Yes
$ yay -Qs libxft-bgra
local/libxft-bgra-git 2.3.3.r112.dcd637d-1 (modified)

Also, this is not a length error, seems like there is no one met this error
on the simple terminal yet.

this error is common and wont cause anything

this error is common and wont cause anything and doesnt crash either.

But the X Error of failed request:  RenderBadPicture (invalid Picture parameter) error will cause crashed.

this error is common and wont cause anything and doesnt crash either.

But the X Error of failed request: RenderBadPicture (invalid Picture parameter) error will cause crashed.

yeah thats odd , only possibilities causing it might be symbola / libxft-bgra not installed :(

So it looks like this issue is hard to find out the reason and the solution.

So it looks like this issue is hard to find out the reason and the solution.

remove the git version of bgra and try libXft-bgra

So it looks like this issue is hard to find out the reason and the solution.

remove the git version of bgra and try libXft-bgra , compile St again and open new st window.

The crash is still happening.

So it looks like this issue is hard to find out the reason and the solution.

remove the git version of bgra and try libXft-bgra , compile St again and open new st window.

The crash is still happening.

thats very weird :(

I've tried not to used tmux all day, and I found that the crash is no more happen. Maybe the st can't draw some character of my tmux. I'll try to reproduce the crash, if nothing happens the reason for the error may be the conflict of tmux configuration with st.

idk much about tmux , share your tmux config so I could test it myself :)

After 3 days daily use, I can confirm that it may be a tmux render issue. It's not easy to find out which character breaks the st. So I think this issue can be closed down now as it's not so relative. And thanks for your replies.


docs: fix UserBiz annotation

What type of PR is this?

What this PR does / why we need it:
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:

thanks for your PR!


Running Status always showing processing and a question on Service add-ons

Please provide us with the following information:
Great sets of innovations guys. thank you!... Two questions:

1- Running Status is always showing as  "processing" in my container apps. Should I be worried?
2- Why would i use service add-ons to spin up another container app and inject that to my container app via a bunch of environment variables while you've been always telling me that service to service communication is much better off to go through dapr? where does dapr fit into this whole new service to service communication?

2- Why would i use service add-ons to spin up another container app and inject that to my container app via a bunch of environment variables while you've been always telling me that service to service communication is much better off to go through dapr? where does dapr fit into this whole new service to service communication?

Service add-ons, or dev services, is just about providing an easy way to create a local postgres/redis/kafka/... instances that you can use to development and deployment. They are cost efficient because they run as regular container apps and can scale to 0 when not in use. They are also only accessible within the same VNET as other apps.
If you want to spin up a quick redis cache instance for development, you can just do
az containerapp service redis create -n dev-redis-01 --environment $APP_ENV

then make it accessible to your app with
az containerapp update -n web-app --bind dev-redis-01 --environment $APP_ENV

and use $REDIS_HOST to connect to it.
Dapr is an option to connect to such services. In your app, you can either use a sql, redis, or kafka client for your language to connect to pg, redis or kafka. Or abstract that with a dapr component that connect to the same service, and use the dapr abstractions in your code.
There is support to --bind a service to a dapr component that's coming shortly.

1- Running Status is always showing as "processing" in my container apps. Should I be worried?

I am getting same when I changes scale settings to 0-1. Any solution guys?
It works fine on 1-2.

1- Running Status is always showing as "processing" in my container apps. Should I be worried?
Same issue here. When scaling is changed to 0-x running status is showing as processing. I've also noticed that our "Standard vCPU Active Usage" have increased substantially so I don't think it's calculating the cost properly.

Hi @reza8i @ranjeetkpGit and @hesperanca
We've updated running status to clarify these states. We now have:
Processing: 1+ replicas, and some replicas being provisioned
Activating: 0 replicas, 1 replica being provisioned
Are you still encountering these issues?
We're trying to improve the running status for clarity - please let me know if there are any questions or suggestions!

Hi @reza8i @ranjeetkpGit and @hesperanca
We've updated running status to clarify these states. We now have:
Processing: 1+ replicas, and some replicas being provisioned Activating: 0 replicas, 1 replica being provisioned
Are you still encountering these issues? We're trying to improve the running status for clarity - please let me know if there are any questions or suggestions!

I think the issue has been resolved...now i see "Provisioned" in Provisioned State column and "Scaled to Zero" in Running Status column. I think it's all good now. Thank you

If you want to spin up a quick redis cache instance for development, you can just do
az containerapp service redis create -n dev-redis-01 --environment $APP_ENV

then make it accessible to your app with
az containerapp update -n web-app --bind dev-redis-01 --environment $APP_ENV

and use $REDIS_HOST to connect to it.
Dapr is an option to connect to such services. In your app, you can either use a sql, redis, or kafka client for your language to connect to pg, redis or kafka. Or abstract that with a dapr component that connect to the same service, and use the dapr abstractions in your code.
There is support to --bind a service to a dapr component that's coming shortly.

Thanks for the detailed response. appreciate it. I am still wondering why we are making investments to make it easier for developers to build within the ACA service? Isn't the whole concept of containerization is to promote local dev without the hassles of specific lib dependency, runtime, version conflicts, etc abd easier deployments... i can do everything that service add-ons offer today locally in my docker desktop. why would i create a dependency on the ACA service ever for my local dev? I only want to connect to the ACA service when i am done development and now i want to deploy my container(s) to the service and expect it to work exactly the same way there...what am i missing?


Feature request: Abstract class (ie: generic storage)

The json mapper can't work if the defined class is Abstract or Object.
The purpose of jsonb column being to be able to store variable properties objects, it makes sense that the provided code allows storing at least a hierarchy of objects in the same column - or even any object if the Hibernate type is "Object".
To allow this, we could split the storage in 2 derived columns: "<original_name>_object" and "<original_name>_class".
I tried to implement it (doesn't seams so difficult), but couldn't find easily a 5.2 example...

You can store anything you want via a JsonNode object which does not require any specific structure. You can then do the transforming from JsonNode which can contain a _class property so you can further transform the JSON into a type-safe Object in the application if you want.

@Emmenemoi Generally the feature request #3 will allow you to manage this by configuring the ObjectMapper properly. However if you have an Abstract class, you can annotate it with @JsonTypeInfo in order to manage polymorphism (jackson will do the job for you).

Not se easy to configure, but @UltimaPhoenix's solution was the way to go. Works perfectly.


Adding core-models module.

As part of #82, adding a core-models module to store our shared data classes.

Coverage decreased (-0.1%) to 46.841% when pulling c836d65107e9934f70fbb49637e59fa11f835091 on TOA-92/core_models_module into ffb860ce668f7cd7302bac00c7f097a9265bd2dc on development.


ToObject form parsed result

I would like to have JSON.ToObject() method working with the parsed content already.
I need to do fastJSON.JSON.Parse(string) examine the result dictionary and then make objects from some dictionary values. E.g. the input may be following strings:

{ "msg": { "data1": {...} }
{ "msg": { "data2": {...} }

I do (IDictionary<string, object>)JSON.Parse(msg), examine if it contains data1 or data2, and then I need to create the Data1 or the Data2 object from the appropriate part of json. (This is a very simplified scenario of my real problem.)
Current solution is:

Convert the part of json to string and then call JSON.ToObject.
Parse the object manually from (IDictionary<string, object>)

I would like call directly some method like JSON.ToObject(IDictionary<string, object> json) instead.

I guess you can add this overload assuming you tell ToObject<T> what the T is since it would not be in the dictionary structure (it would be at the start of the json string).

I mean something like this:
// JSON
public static object ToObject(object o, Type type)
{
    return new deserializer(Parameters).ToObject(o, type);
}

// deserializer - split ToObject
public object ToObject(string json, Type type)
{
    object o = new JsonParser(json, _params.AllowNonQuotedKeys).Decode();
    if (o == null)
        return null;
    return ToObject(o, type);
}

public object ToObject(object o, Type type)
{
    // ... rest of the ToObject code
}

Plus genrics ToObject method. Can make a PR if you like.