First ai reviewd branch

@CodiumAI-Agent /review

PR Analysis

🎯 Main theme: Adding AI Code Reviewer workflow and updating project version
📝 PR summary: This PR introduces an AI Code Reviewer workflow to the project and updates the project version in the pom.xml file.
📌 Type of PR: Enhancement
🧪 Relevant tests added: No
⏱ Estimated effort to review [1-5]: 2, because the changes are straightforward and involve adding a new workflow and updating a version number.
🔒 Security concerns: Yes, the workflow uses secrets for the GITHUB_TOKEN and OPENAI_API_KEY. It's important to ensure these are securely stored and not exposed.

PR Feedback

💡 General suggestions: The PR looks good overall. The AI Code Reviewer workflow is a good addition to automate the code review process. However, it's important to ensure that the secrets used in the workflow are securely stored and not exposed.

 🤖 Code feedback:

relevant file: .github/workflows/codereviewer.yaml
suggestion: Consider adding a failure step in the workflow to handle any errors that may occur during the execution of the AI Code Reviewer. This can help in debugging if the workflow fails. [medium]
relevant line: uses: thankthemaker/ai-code-reviewer@main

relevant file: pom.xml
suggestion: Ensure that the version update is compatible with the rest of the project and that all dependencies are still working as expected. [medium]
relevant line: 3.2.0-SNAPSHOT

How to use

Tag me in a comment '@CodiumAI-Agent' and add one of the following commands:
/review [-i]: Request a review of your Pull Request. For an incremental review, which only considers changes since the last review, include the '-i' option.
/describe: Modify the PR title and description based on the contents of the PR.
/improve [--extended]: Suggest improvements to the code in the PR. Extended mode employs several calls, and provides a more thorough feedback.
/ask <QUESTION>: Pose a question about the PR.
/update_changelog: Update the changelog based on the PR's contents.

To edit any configuration parameter from configuration.toml, add --config_path=new_value
For example: /review --pr_reviewer.extra_instructions="focus on the file: ..."
To list the possible configuration parameters, use the /config command.


Whiteboards don't appear on macOS M1

Info:

OS: macOS 14.2 (Apple M1 Pro)

Logseq ver: 0.10.1

Plugin ver: Awesome UI 2.4.0

Theme name: Awesome Styler Bear

[x] ⚠ Do i have issue with DISABLED my custom.css?
Issue gets resolved if I turn off the plugin

Description:
Whiteboards appear empty when clicked. Issue only with my mac M1 chip, works fine on my mac with Intel chip. See this following issue: https://github.com/logseq/logseq/issues/10712
To Reproduce:

Click on Whiteboard on the sidebar
From the list of All whiteboards, click on one of the file
Empty page appears!

Expected behavior:
Should have all the drawings as expected.
Screenshots

Confirming the issue and presenting detailed problem/solution. Used Developer tools to find the problematic css, which appears to be this line:
.cp__sidebar-main-content>div {
position: relative;
}
If I comment out the position:relative the whiteboard returns. Here's a screenshot showing the issue resolved:

@rowsof
Were you able to fix this by adding something in the custom.css file? If so, can you please share?

yeah, try:
.cp__sidebar-main-content>div { position: inherit !important; }

yeah, try: .cp__sidebar-main-content>div { position: inherit !important; }

Works well. Thank you :)

yeah, try: .cp__sidebar-main-content>div { position: inherit !important; }

⬆ breaks the toolbar on mobile. This should work better for now:
.cp__sidebar-main-content > div:has(.whiteboard-page) {
    position: inherit;
}


stayOnTop not doing the same thing on every os

stayOnTop is inconsistent across operating systems. On macOS it lets a window stay onTop of the parent window, but on linux and windows it pins a window at the top position of the z-stack, at least as far as I know

I didn't test linux functionality, but Windows stayOnTop functions similar to macOS.
stayOnTop(true) makes window to stay on top of other app windows.
stayOnTop(false) enables other apps to be on top of ours.


Prototype: JPX encoding via emscripten

Example how to add JPEG2000 image decoder. The emscripten converted openjpeg library does not work in all cases.

http://simonster.com/S2.pdf <-- no white background
http://www.nsa.gov/ia/_files/app/pdf_risks.pdf <-- almost, except for smask and disappearing text

Do we have any JPX content in our test PDFs? Let's see! :)
@pdfjsbot test

This pull is just a reference how to implement long running image decoders (JPEG and JPEG2000). If this has any value, we might consider to merge that.

That's a cool hack.
I'm not very eager to land that but that definitively show that someone could write it's own implementation in JS.
Trying http://www.syntensity.com/static/openjpeg.html it looks a bit slow.
Also I'm a bit afraid that if we land something like this, nobody will ever write some clean code :/

100% agree.. closing or keeping for some time?

I would vote to keep it opened a bit and tries to gather more input.

Hi everyone,
I did the original openjpeg-emscripten demo. I just tested it on 1 file back then (the one in the demo ;) so I am not surprised it is buggy. But if there is interest in doing this sort of thing for pdf.js, I can look into those bugs and fix them (assuming they are in the translation process, and not the original library).

@kripken,
I had an issue with _lrintf is not defined (see https://github.com/andreasgal/pdf.js/pull/634/files#L1R16).
The images are inside the PDF files.
Thank you.

@notmasteryet:
Ah, if it is just missing lrintf, then it might be fixed by just adding
function _lrintf(x) { return Math.floor(x) }
(note the initial "_"). That might not be good enough if the rounding direction matters, though.

That's what I did. I'm not sure if that helped. The emscripten has some code for lrintf, not sure why it's not using that.

Are you using the existing code from the demo? (It's possible it was built before we added lrintf.)

yes. where we can download latest openjpeg-emscripten (if it exsits) ?

I''l make a new build. Actually I think I'll create a github repo for it, openjpeg.js or something like that. I'll post an update when I have it.

I updated the j2k.js API to make it as simple as possible to use (see readme there). Should be very very easy now to add j2k support to pdf.js.

What's the state of this? Should we use the j2k.js library? Is there somewhere a already build/compressed version of j2k.js that easy to include?

Yes, I recommend using j2k.js. As the README says there, openjpeg.js is a compressed build that is easy to include and use. A complete explanation of how to use it is also in the README.

We do have an external/ dir now that we can use for this.

@notmasteryet Any updates here? If you push your jpx1 branch to our mozilla repo I can try to help land it.

@arturadib, can you check jpx3 i'm not sure what i'm doing wrong

Will do asap.

Cross-linking to discussion in kripken/j2k.js#1.

Closing in favor of #927


Fix disabled button colors

Inconsistency between our disabled primary1 color and using our buttonColorHoverMixin. Updated so default disabled button color is the same as primary + disabled button color.
Before:

After:

Ah ha, specific to the desired output color Bethany wants for our disabled buttons (from the primary blue).
Button primary:
colorName primary = #0044e4 = hsl(222.11, 100.0%, 44.71%);
Button disabled:
colorName primary2 = #bfd0f8 = hsl(222.11, 80.28%, 86.08%);
Button primary + disabled (using buttonColorHoverMixin value):
colorName primary = #0044e4 = hsl(222.11, 100.0%, 44.71%);
lighten 0.4137 $ desaturate 0.1972 $ value
=> hsl(222.11, 80.28%, 86.08%); (desired primary2 value)


ci: Any bash linting tool appropriate to be integrated into our CI?

@redbaron Hi, thank you as always for your continuous efforts on the project.
I'm asking about this topic firstly to you because I assume you are the CBO(Chief Bash Officer) of kube-aws, who writes best bash in the project 😉
Please forward this to anyone you'd think appropriate if necessary.
I'd like to integrate something like a bash linting tool into our CI so that we can effectively ensure everyone writes "good" enough bash scripts.
Doing so would save time consumed by reviewing/fixing bash scripts on both side of the contribution - the author and the reviewer.
Would you mind advising me on the idea?

Any tool you would recommend? (Honestly I'm aware of none)
Any requirement(s) you'd want for the tool?
Which lint rules should be activated?

func/variable names?
comments?
shell options? (pipefail shouldn't be enabled?)
idioms?

Many companies, including Google it seems, recommend using something else if the scripts are anything more than basic wrappers. For instance see https://google.github.io/styleguide/shell.xml, specifically the section on when to use shell. There they call out anything doing work with arrays or over 100 lines.
So while not directly solving this issue I might suggest we write in something like Python for more complex scripts. Those are also easier to write unit tests for using the built in test framework.

@c-knowles Thanks for the suggestion!
I think I basically agree with you.
Speaking more concretely, I don't like introducing too many programming languages & DSLs as we already have too many IMHO 😉
So, I'd rather like to reimplement the huge script etcdadm in golang.
For smaller scripts like node drainer, I'd like to leave them as-is because doing so would allow users to fix them in place by running kubectl edit.
WDYT?

I agree, I don't mind even combining some things for example etcdadm into the same binary. For small scripts we'll need to judge whether we want users to edit without recompile etc. Then if the remaining bash scripts are still complex there's an argument to choose another scripting language and try to ensure we only use one.
https://carlosbecker.com/posts/lint-shell-scripts/ seems helpful for anything we need to do with bash.

Best shell linter is https://www.shellcheck.net/ which is also available as a standalone tool

shellcheck is the best linter, https://github.com/koalaman/shellcheck/wiki/TravisCI

Thanks everyone - I'll go ahead with shellcheck


Unify needle overloads of std.algorithm.searching.find

First step at allowing partial instantiation of find (I will try to keep the PRs small) - more work to follow soon.
This PR groups three overloads into one overload. As discussed so often - a user shouldn't need to know about internal performance optimization, so this should be valuable regardless.
See: https://github.com/dlang/phobos/pull/5497#issuecomment-310289207
CC @CyberShadow @andralex

Thanks for working on this!
Here's some use cases / examples / unit tests I wrote:
///
@safe unittest
{
    import std.functional : not;
    import std.ascii : isWhite;

    // Skip whitespace at the front of a string
    alias skipWhitespace = find!(not!isWhite);
    assert("  Hello".skipWhitespace == "Hello");
}

///
@safe unittest
{
    import std.uni : toLower;
    alias ifind = find!((a, b) => toLower(a) == toLower(b));
    assert(ifind("Hello World", "OR") == "orld");
}

Here's some use cases / examples / unit tests I wrote

Thanks - I will keep them in mind, but I think I am still two or three PRs away from the eponymous conversion of find. Well, let's see and go step by step :)

Well, let's see and go step by step

Urgh - I just realized that I have done this before: https://github.com/dlang/phobos/pull/5150 :/


fix problem waiting for candidates

Observed that if the candidate was missing the experiment did not start when it became available.

@kimikowang I would like your feedback on this solution. I found that detectTargets() was returning err when the targets were missing. In response, syncKubernetes() would end the experiment (via endRequest()). I modified the return values so that it could requue the request instead.
I then found that validateDetectedRules() would fail because it expected label iter8-tools/role to be progressing or stable. However, when the targets have not yet been identified this label had not been set on the dr. I introduced a new value initializing that could be set earlier and modified the validation.

I've marked this as work in progress while we discuss this approach. If you think the approach is ok, I will mark it ready for review and we can proceed.

@kimikowang I would like your feedback on this solution. I found that detectTargets() was returning err when the targets were missing. In response, syncKubernetes() would end the experiment (via endRequest()). I modified the return values so that it could requue the request instead.
I then found that validateDetectedRules() would fail because it expected label iter8-tools/role to be progressing or stable. However, when the targets have not yet been identified this label had not been set on the dr. I introduced a new value initializing that could be set earlier and modified the validation.

What is the purpose of requeue the request if targets are missing?

What is the purpose of requeue the request if targets are missing?

Maybe my misunderstanding about how the controller is triggered. I see that it works with just and endRequest Looks like the status message is wrong however. Let me fix.

@kimikowang I've addressed your concern above. Thanks.

@kimikowang I've added those changes to support this line: https://github.com/kalantar/iter8-controller/blob/missingCandidate/pkg/controller/experiment/kubernetes.go#L42 which requires both err and found. When there is an error, found may differ. I think the code changes are needed.

@kimikowang: Is this ready to be merged?

Oh I see the extra parameter is not what I thought; I will fix asap.

removed the extra parameter

@kimikowang: Your two remaining comments seem to have been addressed by the last 2 sets of changes.

@kimikowang: Your two remaining comments seem to have been addressed by the last 2 sets of changes and explanation.

Let's merge it as you approved it. LGTM as well.


minor issue - elapsed time runs during hold

Feature or bug?  I don't know.

Feature? Depends on what the elapsed time is used for, if for calculating charge for customer it should run? I decided it should run, can be changed - or perhaps make the behaviour configurable? I dont't know either...

I have thought a bit more about this since posting it.
Why leave it running? Biggest reason is to know entire length of the job include fussing with fixtures and such.
Why pause the timer during hold?  Knowing actual job running time. If I pause a job to walk away from the machine for a while (run an errand, attend to an interruption, ...) I would prefer to have the timer pause as well.
Does the timer pause during tool change? I haven't tested that out but I'd guess it doesn't.  What do motion controllers like Mach and UCCNC do?
The safest route is a configuration option (or app setting).
This also brings up a separate question on the GRBL side about accumulated machine running time but I will leave that for another day.
Hope you are staying safe. Things are getting pretty harsh around here.

I think I will add this as an option to app settings. It does run during a tool change, and it should continue to do so regardless? I will have to check what Mach 3 does - I haven't even noticed any timer when using that but can see from web images that is has one.
Accumulated machine time would require (IMO) FRAM for non-volatile storage - to be updated on transitions to Idle state?
This far everything is ok for me, I am lucky to live in the countryside and work from home anyway. Easy for me to take the neccessary precautions.


Closing a tab results in a blank screen

Duplicate of https://github.com/vercel/hyper/issues/8032
Basically this is a major crash on canary.

I did some digging @corneliusroemer and found that this bug was introduced in This appears to be new since 632a110effeb2d236a76ec83fb232b1f0d7c9531 by upgrading xterm. The next minor version of xterm has a fix so it should be as simple as upgrading xterm again.


Sign up page , login page issue

Description
The sign up page looks very bad it has multiple cards and images.
The login page looks not very attractive .
The continue with google , Github  and twitter option can be added.
The account already having means sign in and don't have account can take to sign up page .
Screenshots

Any additional information?
I already have an experience in working this page . can you assign this issue to me
@be
What browser are you seeing the problem on?
Chrome
Checklist

[X] I have checked the existing issues
[X] I have read the Contributing Guidelines
[X] I'm a GSSoC'24-Extd contributor
[X] I'm a Hacktoberfest'24 contributor
[X] I am willing to work on this issue (optional)

I want to fix this bug.


[Golang] feat: should use os.UserHomeDir() to get home dir for log

Change-Id: I495c930949474418529e30538851a98e132243f4

Which Issue(s) This PR Fixes

Fixes #871
Brief Description
Fix under some OS (mac or linux), the logs can not write to the home dir by default.
How Did You Test This Change?

ping @drpmma


Notebook: Ensembles

See the spreadsheet for details

Content
Programming

AO
AO

Ideas/prereqs:
Direct link
https://jupyter.olney.ai/hub/user-redirect/git-pull?repo=https%3A%2F%2Fgithub.com%2Fmemphis-iis%2Fdatawhys-content-notebooks&subPath=Ensembles.ipynb&app=lab

Think I might make this more about cross validation and grid search. We've already done bagging and boosting, so ensembles here would be heterogeneous ensembles, and I think grid search and cross validation are more important.

Closing to clear the board with https://github.com/memphis-iis/datawhys-content-notebooks/commit/a5f47811dd6116e539c416b5040930e3f1f1ebe7


Item inside UIDropDownMenu should auto scroll to and selected when in expanded state

Is your feature request related to a problem? Please describe.
If UIDropDownMenu has many items, whenever I click the expand button, it just shows item start from index 0 of options_list whatever the item I have chosen.
Describe the solution you'd like
the UIExpandedDropDownState should find the right item of selected_option, then focus/select it, if it is not in visible area, auto scroll to right pos.
Describe alternatives you've considered
None
Additional context
can be observed on pygame_gui_examples/general_ui_test_app.py , test_drop_down_menu, expand it, choice item 28, close it , expand again, just show item1~item7

Thanks for the idea.
think it makes sense for most use cases to scroll the options to include the last selected item if it's not already visible.

For better user experience, the last selected item in visible area should got selected automatic.
It's great if UIDropDownMenu could support select()/unselect().
Meanwhile, I am work with a tiny lcd without mouse/keyboard, only a few gpio buttons, with or without touch input, I want to emulate focus in/out effect to implement navigation GUI, I have to trace down the lowest UIButton element, and call select()/unselect() on it.


Handle 0 session length unit costs when generating statements

At the moment this is causing zero divisions.

Ready for review.

One small question, otherwise looks good.

:+1:


changelog: correct changelog

Accidentally put the --model-family changes in the wrong section of the changelog.

Closed in favour of #65


Could not use global variables in other modules

Code to reproduce:
import "std/os/os" as os;

f<int> main() {
    printf("Os: %s", os.OS_NAME);
}

The problem seems to be, that the module is destroyed after the generator of the imported file finished running. That means that the memory address of the global variable is now a dangling pointer.

Fixed with v0.7.4


Reading Out Markdown

When the model is reading back the results to speech and it encounters the markdown characters for a heading or title (###), it explicitly says "hashtag hashtag hashtag." Can we address this by ignoring it or using another method?
Maybe get the model to return plaintext only?

I am curious, what prompt/use case was generating markdown for you? Have you updated the repository recently? I thought our prompt is pretty strict at making sure there isn't markdown formatting unless it is requested.
Assuming this is an issue though, there are some heuristics that can be done
Let me know if you have any other opinions about the text to speech functionality

Okay my bad I had the system prompt setup in settings without the markdown removal request.

The best use case so far with some programming code selected:
Model Explain To Speech
I'm not sure if this is possible but can you cancel once the speaking starts?

Sight free talon has a function called
actions.user.cancel_current_speaker()
Assuming you have it installed you can call this or define a new talon command to call it to stop speech.
Perhaps model stop speech would be a good command to add. If you try this and feel is works feel free to submit a PR, should be quite simple


@nuxt/icon conflicting with @nuxt/ui (and probably with others UI framework which uses "Icon" component)

This Warn appears when some other modules uses component with name "Icon" (for ex with @iconify or @nuxt/ui)
" WARN  Overriding Icon component. You can specify a priority option when calling addComponent to avoid this warning. "
I supposed it happens somewhere inside nuxt's autoimports behind the scene. Even if i don't use any NuxtUi icons anywhere.
If i comment @nuxt/icon (or @nuxt/ui) module in nuxt.config.ts - problem dissapears
Probably for @nuxt/icon would need  some prefix or ability to make some prefix when there are several modules with Icon components
and other thing - this warning doesn't give understanding what should i do exactly ) where i need to "specify a priority option" cuz i don't "calling addComponent" anywhere directly ))) more questions and no answers )

I'm using Polaris Vue which has already an Icon component
https://ownego.github.io/polaris-vue/components/Icon
I'm getting the "[Vue warn]: Component "Icon" has already been registered in target app" message in console.
It would be really great if there is an option to change the Component name with a custom one globally via the nuxt.config file.

You can change the component name with:
export default defineNuxtConfig({
  icon: {
    componentName: 'NuxtIcon'
  }
})

Sorry for my ignorance, I went over the docs but it seems I missed this one.
Thank you so much!

I set it up this way but it doesn't seem to have any effect, as mentioned also here https://github.com/nuxt/icon/issues/180

Sorry my bad, it works perfectly.

 In the latest nuxt/ui it should already include this module and set the rename to it

I'll try to do it
But i think overriding happens because of that

Simple screencast of problem
https://github.com/user-attachments/assets/c967b005-723b-4d4f-b163-5b67e4a076e8

Simple screencast of problem
@nuxt/ui 2.17.0 @nuxt/icon 1.0.0
When running with commented module @nuxt/icon - there are no complains When uncomment module @nuxt/icon - there are warnings with overriding "Icon" component
Screencast.mp4

Updated @nuxt/icon to 1.1.1  - same warnings

You can change the component name with:

I can confirm, that changing componentName solves warnings with both modules active!
But default behaviour still gives warning with overriding component


Add sponsors section

Ideally, we should add a sponsors section either on the README or in the docs section. I would like to discuss what should be the best approach to this.
Thoughts @selfuryon @brianmcgee ?

I'm closing this issue as is not longer relevant for now.


Please consider fixing issues detected by repository checker

Notification from ioBroker Check and Service Bot
Dear adapter developer,
I'm the ioBroker Check and Service Bot. I'm an automated tool processing routine tasks for the ioBroker infrastructure. I have recently checked the repository for your adapter intex for common errors and appropiate suggestions to keep this adapter up to date.
Please see the result of the check below.
ioBroker.intex
   -

:thumbsup: No errors found
WARNINGS:

[ ] :eyes: [W513] "gulpfile.js" found in repo! Think about migrating to @iobroker/adapter-dev package
[ ] :eyes: [W522] Please consider migrating to admin 5 UI (jsonConfig).

Please review issues reported and consider fixing them as soon as appropiate.
Warnings reported by repository checker should be reviewed. While some warnings can be considered as a suggestion and be ignored due to good reasons or a dedicated decision of the developer, most warnings should be fixed as soon as appropiate.
You may start a new check at any time by adding the following comment to this issue:
@iobroker-bot recheck
Please note that I (and the server at GitHub) have always plenty of work to do. So it may last up to 30 minutes until you see a reaction. I will drop a comment here as soon as I start processing.
Feel free to contact me (@iobroker-bot) if you have any questions or feel that an issue is incorrectly flagged.
And THANKS A LOT for maintaining this adapter from me and all users.
Let's work together for the best user experience.
your
ioBroker Check and Service Bot
Note: This issue replaces issue #21
@mcm1957 for evidence

This issue has been replaced by new isse #23
This issue can be closed.
your
ioBroker Check and Service Bot


Implemented extensibility system for Avalonia

This PR adds a way for automatically initializing 3rd party libraries and for automatically loading the best windowing and rendering subsystems available for the current OS platform.
3rd Party -- AvaloniaModules
An AvalonaModule is a class that sets up any services or styles needed at startup. For example, if a library provides a templated control with default styles, an AvaloniaModule can load those modules into the IGlobalStyles collection. For some more examples, registering services for controls that have custom backends (like a SharpDX native one and a Skia native one) or adding new property accessors or validation plugins.
Add an attribute to an assembly as follows:
[assembly: ExportAvaloniaModuleAttribute("ModuleName", typeof(ModuleType))]

Additionally, you can have a module depend on a specific windowing or rendering subsystem. You can have multiple modules with the same name with varying requirements on windowing and rendering subsystems. The one with the most dependencies fulfilled will be loaded. Like the following:
[assembly: ExportAvaloniaModule("RenderingModule", typeof(Direct2DModule), RequiredRenderingSubsystem = "Direct2D1")]
[assembly: ExportAvaloniaModule("RenderingModule", typeof(SkiaModule), RequiredRenderingSubsystem = "Skia")]
[assembly: ExportAvaloniaModule("RenderingModule", typeof(DefaultRenderingModule))]

Windowing and Rendering Subsystems
These function very similar (registered via assembly attributes). And a rendering subsystem can depend on a windowing subsystem (like how Cairo depends on GTK). Windowing and Rendering subsystems depend on operating systems. For example, Win32, Cairo and GTK are registered as follows:
[assembly: ExportWindowingSubsystem(OperatingSystemType.WinNT, 1, "Win32", typeof(Win32Platform), nameof(Win32Platform.Initialize))]

[assembly: ExportRenderingSubsystem(OperatingSystemType.WinNT, 2, "Cairo", typeof(CairoPlatform), nameof(CairoPlatform.Initialize), RequiresWindowingSubsystem = "GTK")]
[assembly: ExportRenderingSubsystem(OperatingSystemType.Linux, 1, "Cairo", typeof(CairoPlatform), nameof(CairoPlatform.Initialize), RequiresWindowingSubsystem = "GTK")]
[assembly: ExportRenderingSubsystem(OperatingSystemType.OSX, 2, "Cairo", typeof(CairoPlatform), nameof(CairoPlatform.Initialize), RequiresWindowingSubsystem = "GTK")]

[assembly: ExportWindowingSubsystem(OperatingSystemType.WinNT, 2, "GTK", typeof(GtkPlatform), nameof(GtkPlatform.Initialize))]
[assembly: ExportWindowingSubsystem(OperatingSystemType.Linux, 1, "GTK", typeof(GtkPlatform), nameof(GtkPlatform.Initialize))]
[assembly: ExportWindowingSubsystem(OperatingSystemType.OSX, 2, "GTK", typeof(GtkPlatform), nameof(GtkPlatform.Initialize))]

Hey @grokys and @kekekeks I took a stab at applying your feedback. Let me know what you think of my changes and if there's anything else you want!

This looks good to me now - the documentation really clears things up!
@kekekeks any comments or should I merge this?

Ok, not heard anything more, so going to merge. Thanks @jkoritzinsky !


Integrate new generated DTO dataclasses with API fetching

The API fetching is somewhat set up (?) via the tubeulator.fetch interface. These next need to be connected up to the DTOs which consume the response they receive.
For example, the /Line/Meta/Modes endpoint can be accessed via tubeulator.fetch.line.meta_modes (fetch is a generic object of interfaces, i.e. EndpointInfo objects from tubeulator.api.interface, and the 'routes' on the endpoint are each a Request object from tubeulator.api.request with overriden call dunder method) and the info about the endpoint is stored in the path attribute
>>> type(tubeulator.fetch.line)
<class 'tubeulator.api.interface.EndpointInfo'>
>>> type(tubeulator.fetch.line.meta_modes)
<class 'tubeulator.api.request.Request'>
>>> tubeulator.fetch.line.meta_modes.path.endpoint.name
'LINE'
>>> tubeulator.fetch.line.meta_modes.path.endpoint.value
'Line'
>>> tubeulator.fetch.line.meta_modes.path.route.value
'/Meta/Modes'

So we have the:

schema name (tubeulator.fetch.line.meta_modes.path.endpoint.value)
route name (tubeulator.fetch.line.meta_modes.path.route.value)

Therefore we can retrieve the return type from our schema:

Get the schema by schema name (load_endpoint_schema)
Get the route from the schema's routes (under the "paths" key)

>>> schema = tubeulator.utils.paths.load_endpoint_schema("Line")
>>> schema["paths"]["/Meta/Modes"]
{'get': {'tags': ['Line'],
         'summary': 'Gets a list of valid modes',
         'description': 'Gets a list of valid modes',
         'operationId': 'Line_MetaModes',
         'responses': {'200': {'description': 'OK',
                               'content': {'application/json': {'schema': {'$ref': '#/components/schemas/MetaModesGet200ApplicationJsonResponse'},
                                                                'example': [{'isTflService': True,
                                                                             'isFarePaying': True,
                                                                             'isScheduledService': True,
                                                                             'modeName': 'string'}]},
...

Note that I already established we always use GET so we can hardcode that assumption.
>>> route_info = schema["paths"]["/Meta/Modes"]
>>> response_info = route_info["get"]["responses"]["200"]["content"]["application/json"]
{'schema': {'$ref': '#/components/schemas/MetaModesGet200ApplicationJsonResponse'},
 'example': [{'isTflService': True,
              'isFarePaying': True,
              'isScheduledService': True,
              'modeName': 'string'}]}

From this we can extract both a schema and a sample of the JSON we should expect to be able to parse (i.e. the form but not the content). It's therefore testable offline.

Implemented a way to do it using an enum and some string handling to ensure a Python enum friendly key is used:
>>> from tubeulator.codegen import load_test
>>> component_name = "MetaModesGet200ApplicationJsonResponse"
>>> deserialiser = load_test.Line.Deserialisers.select_component(component_name).value
>>> deserialiser
<class 'tubeulator.generated.Line.MetaModesGet200ApplicationJsonResponse'>

This may not have been a great choice to demo because... it has no attributes

Now it's been shown that, in one simple case (presumably in all), we can integrate the fetching and DTO parsing.
The site of retrieval is the place (the neat fetch setup) is where we want to add the connectivity through to the DTOs.
This means that we want to:

add a parse method to be run after fetch (so that we return internal DTO types not the raw unparsed JSON)
connect the parse method to the appropriate DTO by retrieving the return type of the endpoint route

potentially parse directly with from_dict for an object type response
potentially parse by reference using the $ref component's DTO for an array-type response

I considered putting the parsing directly in with the Request but I think that's incorrect structure
--- a/src/tubeulator/api/request.py
+++ b/src/tubeulator/api/request.py
@@ -7,6 +7,7 @@ from urllib.parse import urlencode
 import httpx

 from ..db.store_creds import check_creds
+from ..utils.paths import SchemaPath
 from .endpoint.names import EndpointNames
 from .endpoint.routes.types import AnyEndpointRouteEnum

@@ -93,13 +94,20 @@ class Request:
     path: Path

     def __call__(self, *args, **kwargs):
-        return self.send(*args, **kwargs)
+        result = self.send(*args, **kwargs)
+        return result

     def send(self, *args, **kwargs):
         url = self.path.build_url(*args, **kwargs)
         response = GET(url=url)
         response.raise_for_status()
-        return response.json()
+        return response.content
+
+    # def parse(self, json: str):
+    #     component_schema = find_schema_by_name
+    #     dto_ref = SchemaPath(component_schema)
+    #     parsed = dto.from_json(json)
+    #     return parsed

The reason I went to put it there is because of the central role of the Request object. In fact we probably want to build on top of the Request object rather than making it a 'god class'.

Very close but the validation raises
>>> tubeulator.fetch.line.meta_modes()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/louis/dev/tubeulator/src/tubeulator/api/request.py", line 99, in __call__
    parsed = self.parse(result.content)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/louis/dev/tubeulator/src/tubeulator/api/request.py", line 125, in parse
    parsed = dto.from_json(json)
             ^^^^^^^^^^^^^^^^^^^
  File "/home/louis/miniconda3/envs/tubeulator/lib/python3.11/site-packages/dataclass_wizard/serial_json.py", line 48, in from_json
    return fromdict(cls, o) if isinstance(o, dict) else fromlist(cls, o)
                                                        ^^^^^^^^^^^^^^^^
  File "/home/louis/miniconda3/envs/tubeulator/lib/python3.11/site-packages/dataclass_wizard/loaders.py", line 552, in fromlist
    return [load(d) for d in list_of_dict]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/louis/miniconda3/envs/tubeulator/lib/python3.11/site-packages/dataclass_wizard/loaders.py", line 552, in <listcomp>
    return [load(d) for d in list_of_dict]
            ^^^^^^^
  File "/home/louis/miniconda3/envs/tubeulator/lib/python3.11/site-packages/dataclass_wizard/loaders.py", line 611, in cls_fromdict
    field_name = lookup_field_for_json_key(o, json_key)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/louis/miniconda3/envs/tubeulator/lib/python3.11/site-packages/dataclass_wizard/loaders.py", line 705, in lookup_field_for_json_key
    raise e from None
dataclass_wizard.errors.UnknownJSONKey: A JSON key is missing from the dataclass schema for class `MetaModesGet200ApplicationJsonResponse`.
  unknown key: '$type'
  dataclass fields: ['_source_schema_name', '_component_schema_name']
  input JSON object: {"$type": "Tfl.Api.Presentation.Entities.Mode, Tfl.Api.Presentation.Entities", "isTflService": true, "isFarePaying": true, "isScheduledService": true, "modeName": "bus"}

I tried commenting out the raise_on_unknown_json_key and the resulting example call gave a bunch of non-results...
>>> tubeulator.fetch.line.meta_modes()[1]
MetaModesGet200ApplicationJsonResponse(_source_schema_name='Line', _component_schema_name='MetaModesGet200ApplicationJsonResponse')

There's no info in these, just the default values from the DTO classdef

This now reproduces
>>> import tubeulator
>>> resp = tubeulator.fetch.line.meta_modes()

>>>
>>> from pprint import pprint
>>> pprint(resp)
[Mode(IsTflService=True,
      IsFarePaying=True,
      IsScheduledService=True,
      ModeName='bus',
      _source_schema_name='Line',
      _component_schema_name='Tfl'),
 Mode(IsTflService=True,
      IsFarePaying=True,
      IsScheduledService=True,
      ModeName='cable-car',
      _source_schema_name='Line',
      _component_schema_name='Tfl'),
 Mode(IsTflService=False,
      IsFarePaying=True,
      IsScheduledService=True,
      ModeName='coach',
      _source_schema_name='Line',
      _component_schema_name='Tfl'),
...

DTOs now parse after fetching but the appearance of Any implicitly in dict types is due to not specifying nested structure.
For instance, for passengerFlows in Tfl-5 in StopPoint
            "Tfl-5": {
                "type": "object",
                "properties": {
                    "passengerFlows": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Tfl-3"
                        },
                        "description": "Busiest times at a station (static information)"
                    },
                    "trainLoadings": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Tfl-4"
                        },
                        "description": "Train Loading on a scale 1-6, 1 being \"Very quiet\" and 6 being \"Exceptionally busy\" (static information)"
                    }
                }
            },


How handled selectors by id?

The function find handles how to get the elements?
function find ( selector, context = doc ) {

  return classRe.test ( selector )
           ? context.getElementsByClassName ( selector.slice ( 1 ) )
           : tagRe.test ( selector )
             ? context.getElementsByTagName ( selector )
             : context.querySelectorAll ( selector );

}

How handled elements by id? I missing getElementById? So it should handled by querySelectorAll()? Shouldn't bei getElementById better for performance to get an element by id?

Example function I've found.
   /*
     * improved query function
     * http://ryanmorr.com/abstract-away-the-performance-faults-of-queryselectorall/
     * selector = a css selector to get an array of elements
     */
    function querySwitch(selector) {
        // debugging info
        //console.log("[query] selector: " + selector);

        // Redirect simple selectors to the more performant function
        if (/^(#?[\w-]+|\.[\w-.]+)$/.test(selector)) {
            switch (selector.charAt(0)) {
                case '#':
                    // debugging info
                    //console.log("[query] --> case: getElementById");

                    // Handle ID-based selectors
                    return [document.getElementById(selector.substr(1))];
                case '.':
                    // debugging info
                    //console.log("[query] --> case: getElementsByClassName");

                    // Handle class-based selectors
                    // Query by multiple classes by converting the selector
                    // string into single spaced class names
                    var classes = selector.substr(1).replace(/\./g, ' ');
                    return [].slice.call(document.getElementsByClassName(classes));
                default:
                    // debugging info
                    //console.log("[query] --> case: getElementsByTagName");

                    // Handle tag-based selectors
                    return [].slice.call(document.getElementsByTagName(selector));
            }
        }

        // debugging info
        //console.log("[query] --> case: querySelectorAll");

        // Default to `querySelectorAll`
        return [].slice.call(document.querySelectorAll(selector));
    }

We are handling selection by id here:
https://github.com/kenwheeler/cash/blob/9096ba8d5c658eaf63006595757e5b4ccfd68ed5/src/core/cash.js#L17-L18
We could handle it inside the find function, but then we would be paying the cost of the regex for checking if we're actually passing some html instead of a selector.
Basically we are optimizing for $('#myid') instead of $(document).find('#myid').
Zepto allows you to override its find/qsa function so they are putting getElementById inside of it, but our approach is faster.

@fabiospampinato
Fine! So it's handled with performance in mind which should be best way :)


Added a readme.md and made minor updates to the assessment model

Purpose

...

Does this introduce a breaking change?

[ ] Yes
[ ] No

Pull Request Type
What kind of change does this Pull Request introduce?

[ ] Bugfix
[ ] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Documentation content changes
[ ] Other... Please describe:

How to Test

Get the code

git clone [repo-address]
cd [repo-name]
git checkout [branch-name]
npm install

Test the code

What to Check
Verify that the following are valid

...

Other Information

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: kaushalyjain sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


What about the other Dockerfile instructions?

One of the weirdest integrations for Dockerfile and Windows is how to reference ARGs.  You don't include and information in this documentation.  Adding this would be extremely helpful.

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

ID: af1a6bea-cfcc-f9d3-25ee-f95f567378cf
Version Independent ID: 91a0dfac-9427-6999-e7b5-a1005a04395e
Content: Dockerfile and Windows Containers
Content Source: virtualization/windowscontainers/manage-docker/manage-windows-dockerfile.md
Service: windows-containers
Product: windows-containers
GitHub Login: @PatrickLang

We hugely appreciate your contribution, feedback, and support to our technical documentation.
We’ve phased out GitHub Issues on this repository as the feedback mechanism for content and have replaced it with a new feedback system. For more information see, Content User Feedback. As part of this rollout, we are migrating your issue where our team will use your comments to improve the documentation experience. Unfortunately, this does mean you won't be able to access this issue after the migration is complete.
All issues will be migrated by Thursday 29th August 2024.
Once again, thank you for your valuable feedback, we hope you’ll continue to contribute using our new feedback system.


Refactor the doc, add socat forking example

LGTM.  Don't expect this to get pulled, though.  @avleen hasn't been to active on this project (last commit a couple years ago).

@joshcartwright so which is the most active branch as of now?

I actually only just saw this and would be happy to merge pull requests :)
On Fri, Feb 13, 2015, 10:32 Nemesis Fixx<EMAIL_ADDRESS>wrote:

Closed #30 https://github.com/avleen/bashttpd/pull/30.
--
Reply to this email directly or view it on GitHub
https://github.com/avleen/bashttpd/pull/30#event-235450392.

@avleen awesome!


Add support to have sample driver profile ebpf programs

Add support to have sample driver profile ebpf programs
Resolves: #462
Signed-off-by: Alan Jowett<EMAIL_ADDRESS>

If the plan is for performance test to load a sample program of sample_ext type and invoke it, please add such a test case.

If the plan is for performance test to load a sample program of sample_ext type and invoke it, please add that support as part of this PR.

I was planning on adding that as a separate PR to keep the size of PR's manageable.

Filed #594 to track updating performance tests to use this.


Model the env200 in URDF

Create a URDF model for the StreetDrone Nissan ENV200
For reference there is a StreetDrone Twizy model here

[x] see if there is an online CAD model we can use to convert to URDF
[x] contact StreetDrone to see if they have a URDF model for the van
[x] look into alternatives if there are no pre-existing CAD files online or from SD

[x] look into 3d scanning the van
[ ] look into using a generic minivan cad model, and converting it to URDF

[ ] test the URDF model with the sensors in the correct position with Gazebo / Autoware

See this doc for more info on URDF
If you need to test Autoware with a simulator, read here.

I've come across a few CAD models of the Nissan e-NV200, but it seems the pricing is not suitable for our current needs.
https://sketchfab.com/3d-models/nissan-e-nv200-van-2022-db60a9a208e846a09c849f4411739cbb
https://3dmodels.org/3d-models/nissan-e-nv200-van-2014/
https://www.cgtrader.com/3d-models/car/suv/nissan-e-nv200-van-2014
also Found a free 3d obj of  Nissan nv 200 dhl van, which looks similar to an env200. could use this if we can't find other CAD files to convert.
https://grabcad.com/library/nissan-nv200-dhl-van-1

The last one seems promising (unless Streetdrone doesn't have one already)

Have we contacted or found out if Streetdrone has a URDF model already? I see that checkbox has been marked off

I believe @suey147 has made a post on the zendesk. Here is a guide on how to access the zendesk.

I don't have much experience on URDF but I'm studying up on the link of more info on URDF and will prepare to work on this from tomorrow onwards

It might be good if you and @suey147 organise a working session to create a URDF from this model: https://grabcad.com/library/nissan-nv200-dhl-van-1

I have accessed the zendesk but I'm not sure the post is here?

Suey did make the post but it was made on a different account. We posted it on the MCAV account now.
We are now working on creating a URDF of aforementioned model

https://www.cgtrader.com/free-3d-models/car/car/nissan-e-nv200

@suey147
StreetDrone has replied to us with an attachment of files that include the e-NV200 URDF model! No need to convert anything to URDF anymore :)

Closing this issue ^


How to change the soft Min and Max position Limits of the hip roll joints

Hi @DanielePucci, We are working on iCubLausanne02, where we are testing a walking algorithm. However, we noticed that the hip roll joints positions are limited within a range of [0-90] (even in the yarpmotorgui) and all commands value less than 0 are truncated, while their kinematics say that their range is from [-119  +17].  How could we change those limits (essentially the Min limits)?
Thanks in advance.

@MichaelBombile, more generally, most of configuration files associated with your robot is available at
https://github.com/robotology/robots-configuration/tree/master/iCubLausanne02
To modify joint limits, and specifically the hip joints, you have to change the first two columns of the tags jntPosMax and jntPosMin in
https://github.com/robotology/robots-configuration/blob/master/iCubLausanne02/hardware/motorControl/right_upper_leg-ems8-mc.xml#L15
and
https://github.com/robotology/robots-configuration/blob/master/iCubLausanne02/hardware/motorControl/left_upper_leg-ems6-mc.xml#L14
The first two columns associated with the above tags correspond to the roll and pitch hip joints
(see e.g. http://wiki.icub.org/wiki/ICub_joints#Left_leg). I strongly suggest you not to modify source files, but to create  a .local directory after importing the configuration files by means of yarp-config command, e.g. by typing
$ yarp-config robot --import $YARP_ROBOT_NAME

Thanks very much @DanielePucci, I will try it and I will let you know.

Hi  @DanielePucci, I configured the files as you suggested and it worked.
Thanks again.


journal plagued with log lines

I've found that systemd is full of lines like that when I issue journalctl -f

jul 09 21:13:47 newhope.belkin.home docker[1430]:
time="2015-07-09T21:13:47-03:00" level=info msg="GET
/v1.11/containers/35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810/json"
jul 09 21:13:47 newhope.belkin.home docker[1430]:
time="2015-07-09T21:13:47-03:00" level=info msg="+job
container_inspect(35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810)"
jul 09 21:13:47 newhope.belkin.home docker[1430]:
time="2015-07-09T21:13:47-03:00" level=info msg="-job
container_inspect(35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810)
= OK (0)" jul 09 21:13:48 newhope.belkin.home docker[1430]: time="2015-07-09T21:13:48-03:00" level=info msg="GET
/v1.11/containers/35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810/json"
jul 09 21:13:48 newhope.belkin.home docker[1430]:
time="2015-07-09T21:13:48-03:00" level=info msg="+job
container_inspect(35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810)"
jul 09 21:13:48 newhope.belkin.home docker[1430]:
time="2015-07-09T21:13:48-03:00" level=info msg="-job
container_inspect(35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810)
= OK (0)" jul 09 21:13:49 newhope.belkin.home docker[1430]: time="2015-07-09T21:13:49-03:00" level=info msg="GET
/v1.11/containers/35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810/json"
jul 09 21:13:49 newhope.belkin.home docker[1430]:
time="2015-07-09T21:13:49-03:00" level=info msg="+job
container_inspect(35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810)"
jul 09 21:13:49 newhope.belkin.home docker[1430]:
time="2015-07-09T21:13:49-03:00" level=info msg="-job
container_inspect(35f101d97881e543d40370ee4242216dfb88103f2947c0446ad0ad03a1bcd810)
= OK (0)

I have a configuration as follows:
# cat /etc/systemd/system/kanboard.service
[Unit]
Description=kanboard
After=docker.service
Requires=docker.service
`
[Service]
ExecStart=/opt/bin/systemd-docker --cgroups name=systemd --cgroups=cpu run --rm -p <IP_ADDRESS>:443:443    --volumes-from  data  --name %n sebelk/https
Restart=always
RestartSec=10s
Type=notify
NotifyAccess=all
TimeoutStartSec=120
TimeoutStopSec=15

[Install]
WantedBy=multi-user.target

I've noted no error in running docker, any idea?
Thanks in advance

That is the docker daemon logging to stdout and being captured by the systemd journal, not from your container or systemd-docker.
try adding the option --log-level=warn to the docker daemon (not your kanboard.service), but you might miss useful info

I definitely recommend bumping the log level, if you have a few containers running this will otherwise cause your journal to rotate constantly. I believe that --log-level was introduced relatively recently (Docker 1.4 or 1.5) so you might have to upgrade.


can click the harvest button an arbitrary amount of times

The harvest button needs to be disabled after clicking it once, otherwise it let's me add a bunch of identical transactions into the decree panel. Apart from disabling the button, I think the decree panel should never even accept a transaction that it already contains.

ill fix this

#371


🐛 [Mealie] 502 Bad Gateway

Description
Running on Home Assistant Yellow.
Since the update, I get a 502 Bad Gateway error from Mealie.
See the log below - those last two lines continue infinitely.
When trying to load the UI, this also appears (I masked out my duckdns hostname)
2024/01/22 12:05:23 [error] 352#352: *1 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: db21ed7f-mealie, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:9925/", host: "xxx:9090"
[22/Jan/2024:12:05:23 +0100] 502 -(<IP_ADDRESS>) GET / HTTP/1.1 (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36 Edg/<IP_ADDRESS>)
usermod: no changes
2024/01/22 12:05:23 [error] 352#352: *1 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: db21ed7f-mealie, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:9925/", host: "xxx:9090"
[22/Jan/2024:12:05:23 +0100] 502 -(<IP_ADDRESS>) GET / HTTP/1.1 (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36 Edg/<IP_ADDRESS>)
Switching to dedicated user
usermod: no changes
2024/01/22 12:05:23 [error] 352#352: *1 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: db21ed7f-mealie, request: "GET /favicon.ico HTTP/1.1", upstream: "http://<IP_ADDRESS>:9925/favicon.ico", host: "xxx:9090", referrer: "https://xxx:9090/"
[22/Jan/2024:12:05:23 +0100] 502 -(<IP_ADDRESS>) GET /favicon.ico HTTP/1.1 (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36 Edg/<IP_ADDRESS>)

Reproduction steps
1. Start the addon
2. Click "Open UI"
3. See error

Addon Logs
/etc/cont-init.d/00-banner.sh: executing
-----------------------------------------------------------

 Add-on: Mealie (Omni):
 Mealie is a self hosted recipe manager and meal planner built in Vue
-----------------------------------------------------------
 Add-on version: v1.0.0
 You are running the latest version of this add-on.
 System: Home Assistant OS 11.4  (aarch64 / yellow)
 Home Assistant Core: 2024.1.5
 Home Assistant Supervisor: 2023.12.1
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums
-----------------------------------------------------------
 Provided by: https://github.com/alexbelgium/hassio-addons
-----------------------------------------------------------
 Defining permissions for main user :
User UID: 0
User GID : 0
-----------------------------------------------------------
/etc/cont-init.d/00-global_var.sh: executing
ALLOW_SIGNUP='false'
PGID='0'
PUID='0'
certfile='fullchain.pem'
keyfile='privkey.pem'
ssl='true'
Timezone set from Etc/UTC to Europe/Vienna
/etc/cont-init.d/01-config_yaml.sh: executing
Setting permissions for the config.yaml directory

Load environment variables from /config/addons_config/mealie/config.yaml if existing
If accessing the file with filebrowser it should be mapped to /homeassistant/addons_config/mealie/config.yaml
---------------------------------------------------------

Wiki here on how to use : github.com/alexbelgium/hassio-addons/wiki/Add‐ons-feature-:-add-env-variables
... no env variables found, exiting
/etc/cont-init.d/01-custom_script.sh: executing
Execute /homeassistant/addons_config/mealie/mealie.sh if existing
Wiki here : github.com/alexbelgium/hassio-addons/wiki/Add-ons-feature-:-customisation
/etc/cont-init.d/31-nginx.sh: executing
[12:04:13] INFO: Exporting variables
ALLOW_SIGNUP=false
PGID=0
PUID=0
certfile=fullchain.pem
keyfile=privkey.pem
ssl=true
[12:04:15] INFO: config.yaml found in /config/addons_config/mealie/config.yaml, exporting variables
Permissions adapted
[12:04:15] INFO: Starting nginx
[12:04:15] INFO: Starting app
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes
Switching to dedicated user
usermod: no changes

Architecture
aarch64
OS
HAos

Just encountered the same issue. I used another PGID/PUID and it worked again.

Same for me too

Probably 0 isn't supported anymore i'll switch default to 1000

Maybe you have the same problem as me: #1198

Maybe you have the same problem as me: #1198

If you enter a portnr for the API then it is this portnr that gave me WEB access (not the one defined under Web access....)

Thanks i'll look to adapt when i'll have some time!

Seems the port of Mealie Web UI changed from 3000 to 9000
This workes for me for now

What did you set the other one too? :9090 does give me the login window but nothing works, and when I hit F5, I get an SSL error.

Seems the port of Mealie Web UI changed from 3000 to 9000
This workes for me for now

What did you set the other one too? :9090 does give me the login window but nothing works, and when I hit F5, I get an SSL error.

The other one I put to :9091

Ok, if I set API to 9090 and the other to 9091, I can go to 9090, but not log in or do anything else. Going to 9090 gives the original 502 error. I'll wait for the next version.

Hi all, I made the request to update to the latest version but it appears I failed in fully testing the new version. Probably best to revert to v1.0.0-RC1.1 and have someone who knows what they are doing push v1.0.0

The issue is that the code changed to launch the front-end between the omni and this version ; i'll check how to solve it it's not difficult it's just I need to find some time

Hi, confirmed to start on my system - please be sure to check that you have kept all data ! I've also added an automatic conversion of users from 0:0 to 1000:1000

So can someone please confirm exactly what port should be used? Is it 9090 or 9091 for the web interface field?
The field for the API port has now disappeared for me so I can't configure that anymore. I tried a few ports for the web interface and I can login and view the recipes, but SSL doesn't work now and i get a security error when using HTTPS saying the site doesn't have a certificate, if i change the protocol to HTTP it works.

Hi, 9090 (mapped to 9000) is the web interface ; 9091 ( mapped to 9001) is the https web interface available only if ssl is enabled ; when looking at the docker compose from the 1.0.0 image I don't see anymore an API port referenced

Thanks for the reply. I think there is something wrong with the SSL bit. I have it configured as you describe but SSL/HTTPS just will not work :( HTTP does work.

Ssl is not supported by Mealie actually (I think) so it's managed through an additional layer of nginx proxy (that's why there is a different port). I'll check how to adapt

Thanks, but I'm afraid it doesn't work for me at all now :( tried with ssl enabled and disabled, https and http, and port 9001 and 9000.

Maybe I should add here that it workes for me because I'm using a reverse proxy for my ssl. So I'm not sure about the internal ssl stuff. Http works fine though.
In the newest official mealie docker file I only saw one port exposed which is 9000 using an Environment Variable which is APP_PORT I think. I have to recheck on that later.

Thanks, but I'm afraid it doesn't work for me at all now :( tried with ssl enabled and disabled, https and http, and port 9001 and 9000.

Ahh my bad. I missed updating a port forwarding rule with all the port changes. Ssl does now work for me with the latest version using https://url:9090. Thanks!

Indeed sorry for the changes but I think in the long term it will be easier for users. Tested with both http and https (once ssl option is activated) and it seems to work!

Yup, now it works again. Thank you!

Sorry to reopen this but since the update i have not been able to hit this externally.
Using port 9001 in config
Nginx proxy manager routing externalurl to internal ip:9001
SSL enabled.
What am i missing? internal IP works fine, cant hit it from external url
Thanks


Accept-Encoding request header is not respected

After troubleshooting why fetching a file via curl or wget was corrupted, I realized it was merely gzipped.  The current behavior blindly gzips always.
Instead, it should only gzip when the client advertises support via an Accept-Encoding header.

Due to one built-in features which enables gzip by default. But it would be fine as well to support Accept-Encoding checking.

Looks like a relatively simple matter to check the Request object in GzipMiddleware and skip it if Accept-Encoding: gzip isn't set?  Maybe it's deceptively simple. :)
BTW, does this compress the entire file in memory at once?  i.e. if you wanted to serve up a 2G file, would it require several GB of RAM to process?

Looks like a relatively simple matter to check the Request object in GzipMiddleware and skip it if Accept-Encoding: gzip isn't set? Maybe it's deceptively simple. :)

Yes, it's a matter of just prepend one condition.

BTW, does this compress the entire file in memory at once? i.e. if you wanted to serve up a 2G file, would it require several GB of RAM to process?

Gzip middleware is stream deflate-based compression. So your 2GB file size should be served in stream mode.

A RC v1.5.0-rc1 will happen very soon in order to test the changes.

v1.5.0 released as well the Docker images.

Tested (via Docker image) and confirmed fixed, as is #11.
Thanks very much, José!

You're welcome. :+1:
Don't hesitate to contribute with feedback or PRs.


Post-Create or Post-* Hooks

I'd love to have some hooks to call scripts after a new org or space is created.
I would use the hooks to create other stuff inside spaces, etc. I'm thinking of creating log drains, services I want in every space, etc.
I can accomplish the same thing by looping through the orgs/spaces every time the pipeline runs but it's a lot more code ... since cf-mgmt already logs when it is creating a new org/space, it would be nice if it could somehow emit that via hook as well.

Have you considered wiring up a little app which listens to webhooks emitted from github during file changes and performs work based on the event type emitted (file additions, modifications, etc.) & file path?
Another idea would be to use all the orgs/spaces defined in cf-mgmt and leverage it in a script which generates a Concourse pipeline that stamps out default service instance deployments in every space. That way you get tighter control over the generated pipeline, and it would presumably be better suited to handle change (what do you do when you need to change the syslog drain target url? A script triggered via post-* hook would only trigger the script once)
In general though something tells me a more robust system would be defining "expected state" for things like log drains / service deployments within an org/space in a system like Spinnaker? It would probably be better suited to handle changes & remediate differences between "expected" and "current" (e.g. what happens when you delete the log drain in an org/space?)... Or maybe some kind of general standardized "cloud foundry event bus" that components like cloud controller would emit events onto & apps could subscribe to / consume event payloads off of and react accordingly. Smarter people than I would have to decide whether or not that's a good idea + that would be a pretty big undertaking.
But if I were in your shoes & I needed to stamp out service instances to all spaces, I'd either investigate Spinnaker, or slap together a script which uses the org/space schema definitions to generate a Concourse pipeline that ensures the service exists in all the right places?

Thank you for the comment and thank you Aaron for the well thought-out work around. I see a few others in support of the original request and that this has been opened for quite some time. Over the next month I'll ensure this issue is actioned on (properly labelling or prioritization in the backlog).

Closing. Won't implement


Create README.md for go plugin

This adds a new README.md for the go plugin, which explains to the user that the go plugin is a duplicate of the golang plugin and now symlinks there.
For #7175

I just used a deprecation notice, we don't want users to use it since we'll remove it eventually. Thanks for the contribution!


Use shorter path when displaying Microsoft Store Python envs when using native locator

Testing microsoft/vscode-python#23848
when using the js locator, it used to find two versions of my Microsoft Store Python 3.9 environment:

The native finder shows only one, which is awesome! But it seems to prefer the one with the "longer" path: \AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\python.exe

Ideally, it'd display this one: \AppData\Local\Microsoft\WindowsApps\python.exe

Fixed with https://github.com/microsoft/python-environment-tools/pull/133

@luabud Please can you re-test this with the latest version.

Verification steps

Install Python extension on windows
Install Python from Windows Store
Ensure the path to the exe displayed for Windows Store python is .../WindowsApp/Python3.x.exe
Ensure there are no duplicates (in the old version we'd display duplicates as per the original issue)


introduce 'previewwidth' option or a similar solution

Is your feature request about something that is currently impossible or hard to do? Please describe the problem.
Currently there seems to be only a 'previewheight' option for the classic preview window, but no 'previewwidth' option.
I noticed it when I used :vert pedit filename and tried to find ways to set the width of the preview window.
Describe the solution you'd like
I have 3 ideas that could be done, which are in no particular order ...

introduce 'previewwidth'
replace 'previewheight' with 'previewdimensions' to allow setting width and height similar to the preview popup
add [N] value to :pedit/:ptag like it's done for :[N]vsplit/:[N]split

Describe alternatives you've considered
I tried to combine :pedit with the resizing command, e.g. +vert\ res\ 20 or  | vert res 20, but I failed. I guess it's possible somehow, but it's anyway just some trickery to get it done, and I think it should be consistent for height and width anyway.
Additional context
in my opinion this topic is a matter of consistency of features. And in the age of widescreen monitors it is more likely that windows are split vertically, simply to fit more text on the screen. Cause what else should I do with all that empty space on the right side and maybe not enough lines when split horizontally? So vertical splits make more sense nowadays.

step1: create a vertical split with given width, then mark it as a preview window and jump back
:40vs | set previewwindow | wincmd p

step2: use pedit to display what you want:
:pedit ~/.bashrc

The 'previewheight' option works if you mainly have horizontal splits.  A 'previewwidth' option would be difficult to implement, because when setting the width of the preview window, other windows will have to change size too.  It could work if there are mainly vertical splits, but I don't think anybody uses that.  I have seen people using two vertical splits, thus three columns of windows.  Then creating a preview window in one of those columns can respect 'previewheight', but a 'previewwidth' would change the width of the whole column.

@brammool , I am using windo + winsaveview before :vs and windo + winrestview after :vs to prevent changing other columns' width. suddenly, it works.

step1: create a vertical split with given width, then mark it as a preview window and jump back
:40vs | set previewwindow | wincmd p

step2: use pedit to display what you want:
:pedit ~/.bashrc

thanks for the workaround, but that's brutal, isn't it?

The 'previewheight' option works if you mainly have horizontal splits. A 'previewwidth' option would be difficult to implement, because when setting the width of the preview window, other windows will have to change size too. It could work if there are mainly vertical splits, but I don't think anybody uses that. I have seen people using two vertical splits, thus three columns of windows. Then creating a preview window in one of those columns can respect 'previewheight', but a 'previewwidth' would change the width of the whole column.

so I rarely use splits, but if I do then mostly vertical splits e.g. for diffing, because wide-screen. And if I diff then I probably don't need the preview window. From your answer I can't really tell if you are interested in getting the consistency or if you find it mostly useless, but I extremely appreciate that you reacted at all. thank you.

and just to mention it, this is definitely not a  blocking topic or super important. with the answers of @skywind3000 (thanks buddy) I can work my way around if necessary. @brammool if you don't like this idea feel free to close this issue. Thanks again.

maybe the preview window should always remember the window layout and restore when the preview windows is closed? what @skywind3000 does manually

so I rarely use splits, but if I do then mostly vertical splits e.g. for diffing, because wide-screen

Agree,
Vim is designed in early 90s, the display aspect ratio in that time was 4:3, the default split behavior was horizontal split, that made sense. But today, everyone got a 16:9 wide-screen and many people prefer vertical split in the first place.
Maybe we can take a little care of wide-screen displays scenario in the future.


[Bug] render duplicate dom

Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:

make useEditor update depends options, and update options very soon ,like my demo code, update once in useEffect
render twice

export const Milkdown: React.FC<{ value: string }> = ({ value }) => {
    const ref = React.useRef({} as EditorRef);
    const [options, setOptions] = useState({});
    useEffect(() => {
        setOptions({});
    }, []);
    const editor = useEditor(
        (root, renderReact) => {
            const nodes = commonmark
                .configure(paragraph, { view: renderReact(Paragraph) })
                .configure(blockquote, { view: renderReact(Blockquote, { as: 'section' }) })
                .configure(image, { view: renderReact(Image) })
                .configure(link, { view: renderReact(Link) });

            return Editor.make()
                .config((ctx) => {
                    ctx.set(rootCtx, root);
                    ctx.set(defaultValueCtx, value);
                })
                .use(nord)
                .use(nodes);
        },
        [options],
    );

    return <ReactEditor ref={ref} editor={editor} />;
};

Expected behavior
Screenshots

Desktop (please complete the following information):

OS: [e.g. iOS]
Browser [e.g. chrome, safari]
Version [e.g. 22]

Smartphone (please complete the following information):

Device: [e.g. iPhone6]
OS: [e.g. iOS8.1]
Browser [e.g. stock browser, safari]
Version [e.g. 22]

Additional context

It's an old bug and has been fixed in v6.0. It's in beta version now and wil be released soon.

It's an old bug and has been fixed in v6.0. It's in beta version now and wil be released soon.

But I just find it in this main branch with 6.0.0.next.1 😢

It's caused by you create the second editor before first editor initialize finished. You can check it before creation like following example:
export const Milkdown: React.FC<{ value: string }> = ({ value }) => {
    const ref = React.useRef({} as EditorRef);
    const [options, setOptions] = useState({});

    const isEditorReady = useCallback(() => ref.current.get() != null, []);

    useEffect(() => {
        if (isEditorReady()) {
            setOptions({});
        }
    }, [isEditorReady]);

    const editor = useEditor(
        (root, renderReact) => {
          //...
        },
        [options],
    );

    return <ReactEditor ref={ref} editor={editor} />;
};

Ok ,thanks

I had similar situation. For my case it was React.StrictMode invoke useEffect multiple time and the component didn't get destroy. My work around is:
export const MilkdownEditor = () => {
  const ref = useRef(null);

  useEffect(() => {
    Editor.make()
      .config((ctx) => {
        const node = document.createElement('div');
        ref.current.appendChild(node)
        ctx.set(rootCtx, node);
        ctx.set(defaultValueCtx, "# test");

      .use(nord)
      .use(commonmark)
      .create();

      return () => ref.current.removeChild(ref.current.children[0]);
  }, []);

  return

;
};

https://github.com/Saul-Mirone/milkdown/blob/main/packages/react/src/Editor.tsx#L40
You need to call view.destroy

I had similar situation. For my case it was React.StrictMode invoke useEffect multiple time and the component didn't get destroy. My work around is:
export const MilkdownEditor = () => {
  const ref = useRef(null);

  useEffect(() => {
    Editor.make()
      .config((ctx) => {
        const node = document.createElement('div');
        ref.current.appendChild(node)
        ctx.set(rootCtx, node);
        ctx.set(defaultValueCtx, "# test");

      .use(nord)
      .use(commonmark)
      .create();

      return () => ref.current.removeChild(ref.current.children[0]);
  }, []);

  return

;
};

https://github.com/Saul-Mirone/milkdown/blob/main/packages/react/src/Editor.tsx#L40
You need to call view.destroy

How to fix this problem with the latest version?
In my case, I hide and re-show the editor.

Seeing the same with HMR (not react 18). I have a cleanup hook
  // Cleanup editor on unmount
  useEffect(() => {
    return () => {
      get()?.destroy();

      if (linkObserver) {
        linkObserver.disconnect();
      }
    };
  }, []);

I'm assuming the old one isn't unmounted. Do I need to do memo for useEditor? Any examples in v7?


XmlNode replacement

This is my alternative to the Foundation XMLNode classes. I implemented these for iOS as the Foundation classes are not available on iOS.
Given the flakiness of the XML Foundation classes on Linux, we could use these in the main project as well. What are your thoughts?

Whoa, it's not on iOS? I see XMLNode looks like it's macOS only from the Foundation docs... 😮
I looked at XMLParser but that looks like it's largely getting you the data as it moves through the document, which is quite unwieldy from my view.
Ideally we leverage Foundation for this (or make Foundation better) but can't think of a way to better support iOS 🤔
What if we stuck with Foundation for this, and put this into the apple fork of the core? I'm not opposed to including this here, but would prefer not to maintain it if possible.

@Yasumoto Not sure what you mean about XMLParser, I use it to build the XMLNode tree, but that is the only place it is used.

Sorry about that, I meant to say something along the lines of "I see that we have access to XMLParser on iOS, macOS, and Linux, so I see why you used it. The tradeoff is we need to provide our own XML implementation (the XML.swift file)."
I think as much as we can use the same codepath across platforms the better, so if @adam-fowler you have a clear need for iOS then I'm in favor here. Thanks for the test coverage too!

iOS was something I said I was happy to support. If that means the XML code as well I am happy to do that. And yes it would be preferable that we have one solution across all the platforms.
But that isn't the only reason I was suggesting using our own XML library. The main reason was my confidence in the XML implementation in the Linux version of Swift is pretty low. I have had to implement workarounds in the aws-sdk-swift codebase to get around crash bugs in the library. Also the Linux version produces different output from the Darwin version, specifically in the xml document header.

🎊


Added Maruti specific fonts

Please always provide the GitHub issue(s) your PR is for, as well as test URLs where your change can be observed (before and after):
Fix #
Test URLs:

Before: https://main--maruti-playground--buuhuu.hlx.live/
After: https://fonts--maruti-playground--buuhuu.hlx.live/

@sneharora1  IMO we should update global variable as well https://github.com/buuhuu/maruti-playground/blob/main/styles/styles.css#L23 here

@sneharora1 IMO we might not this change at all , Since MSIL has already done this in their repos


Responsive layout

does this package will create a responsive UI? or I have to do some extra work?

https://github.com/kherel/pixel_perfect/issues/1

@kherel why did u close this issue brother?

The purpose of this package is to help compare exported image and you layout.
So export image in same resolution as you emulator.

but it would be great if it become responsive as well.
you can take this as a feature request

I'll think about it.
I'm closing for now your issue. But If you have other questions or ideas feel free to leave comments below.


Close button invisible on iPhone

Tried with iOS 10.2
Though close button looks fine on iPad.

overflow: visible for .tingle-modal seems to solve the issue.
.tingle-modal {
  overflow: visible;
}

Be careful when using overflow: visible as it might prevent you from scrolling. So if your modal content exceeds the size of your screen you won't be able to scroll.

This is not only related to iOS Safari but to Safari in general.
To fix this, I moved the scrolling to the content box:
@media (max-width : 540px) {
  .tingle-modal {
    overflow: visible;
  }

  .tingle-modal--overflow {
    height: calc(100% - 60px);
  }

  .tingle-modal-box {
    height: 100%;
  }

  .tingle-modal-box__content {
    height: 100%;
    overflow-y: scroll;
  }
}


Conditionally hide some chat buttons using data-visibility

plus kill the jquery

I have a slight personal preference to continuing to show the variant buttons (but disabled), but its not worth the extra effort to do that.


Some YouTube links are reported as 401 Unauthorized error due to oembed API limitation

Hi! I didn't understand why https://www.youtube.com/watch?v=MCs5OvhV9S4 is reported as 401 instead of 200 :confused: The same for https://www.youtube.com/watch?v=iHVs_HkjdmI
$ curl -I https://www.youtube.com/watch?v=MCs5OvhV9S4
HTTP/2 200
content-type: text/html; charset=utf-8
x-content-type-options: nosniff
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: Mon, 01 Jan 1990 00:00:00 GMT
date: Sun, 11 Apr 2021 20:15:08 GMT
content-length: 435464
x-frame-options: SAMEORIGIN
strict-transport-security: max-age=31536000
p3p: CP="This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl=pt-BR for more info."
server: ESF
x-xss-protection: 0

steps to reproduce
$ echo "https://www.youtube.com/watch?v=MCs5OvhV9S4" > foo
$ lychee --no-progress foo
✗ https://www.youtube.com/watch?v=MCs5OvhV9S4 (401 Unauthorized)
📝 Summary
---------------------
🔍 Total............1
✅ Successful.......0
⏳ Timeouts.........0
🔀 Redirected.......0
👻 Excluded.........0
🚫 Errors...........1

Errors in foo
✗ https://www.youtube.com/watch?v=MCs5OvhV9S4 (401 Unauthorized)

edit:
related to https://github.com/humhub/humhub/issues/2501

Hi, guess it's because the YouTube video in question is not embeddable.
https://stackoverflow.com/a/5655148/270334.
This is a bug indeed, but we'd have to find a way to check these as neither oembed nor the YouTube link directly returns a proper status code.

These links could be skipped a la https://github.com/humhub/humhub/pull/2502/files, but maybe there is another way to check them.

you're right because curl -I https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=MCs5OvhV9S4 do return 401.
https://github.com/lycheeverse/lychee/blob/33e952b428c165aa55f3eee133555c9d53b469aa/src/quirks/mod.rs#L50
What I didn't is why lycheeverse can't just do a "normal" request (a direct to the target URL) http request as a fallback (or "retry") to 401 responses to YouTube links. Would you mind explaining it for me (a non-rust user)?

Normal requests to non-existing videos don't return the expected status code.
curl -I 'https://www.youtube.com/watch?v=thatsnotavalidvideo'
HTTP/2 200

The page exists, but the video does not. Nevertheless it returns a 200 OK.
I'd bet that most link checkers get this wrong.

Two alternatives I found on https://stackoverflow.com/questions/1383073/how-do-i-check-if-a-video-exists-on-youtube-using-php:
We could use the new V3 of the YouTube API:
https://www.googleapis.com/youtube/v3/videos?id={the_id_of_the_video}&key={your_api_key}&part={parts}

This requires an API key, though, which not every user will have.
Alternatively, we can check for the video thumbnail:
curl -I 'https://img.youtube.com/vi/iHVs_HkjdmI/0.jpg'
HTTP/2 200

I don't know if there will be cases where a video thumbnail doesn't exist, though. Otherwise that sounds like a fine alternative to oembed for me.
@pawroman any objections to using that?

thanks @mre! The second one sounds good to me. Since youtube is all about thumbnails, I'm pretty sure that this approach can be used.
When you release an alfta version let me know (by closing this issue) so then I will test it with this repo: https://github.com/jwasham/coding-interview-university (there's a ton of youtube videos in there)

just to summarise what I've tested:

video visibility
https://www.youtube.com/oembed returns
https://img.youtube.com/vi/{video_id}/0.jpg returns

public
200 but 401 if isn't embeddable
200

unlisted
200 but 401 if isn't embeddable
200

private
404 but 401 if isn't embeddable
404

partially blocked video
200 but 401 if isn't embeddable
200

age-restricted
200 but 401 if isn't embeddable
200

Alrighty. Thanks for the investigation. I can't see any downside from using the thumbnails then. 😀

You might want to link your research from the StackOverflow post here

This should be fixed in master now.

I can't see any downside from using the thumbnails then.

Compared to the oembed method with json format, checking for the thumbnail needs much more bandwidth and of course a little bit more time.
Example:
https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=U0u3-2CGOMQ&format=json (884 Byte)
https://img.youtube.com/vi/U0u3-2CGOMQ/0.jpg (44,46 KByte)
I check about 150 videos per day and currently only 2 of them returns a 401 status with the oembed method.
If we calculate with an average bandwidth of 35 KByte for the thumbnail method and 900 Bytes for the oembed method in my case I have 5.25 MByte compared to 135 KByte.
For most users this may not be important, but may be for some it is.
So the best of both would be to check first with the oembed method and if it returns 401 check with thumbnail method again.

We don't download the image (the request body) but stop after the response headers. So the overhead should be minimal.


NC breaks radiation from Mekanism

The value on the dosimeter from Mekanism does not increase. The player does not receive damage. The Geiger counter (with Mekanism) shows the correct value. The radiation exposure on the screen is 305mSv because I turned on the modpack for a while without NC

Mods:
cc-tweaked-1.20.1-forge-1.109.4
Mekanism-1.20.1-<IP_ADDRESS>
MekanismGenerators-1.20.1-<IP_ADDRESS>
NuclearCraft-1.20.1-1.0.0-beta.2
forge - 47.2.19
mc - 1.20.1

Have you tried on NC 1.19? It has to work on increasing radiation. Not decreasing

I created a modpack on the fly to test 1.19. Same problem:


UIImage.averageColor

Calculates the average color for an entire UIImage. This is useful for determining whether an image is light or dark, among other things. See #879.
Checklist

[x] I checked the Contributing Guidelines before creating this request.
[x] New extensions are written in Swift 5.0.
[x] New extensions support iOS 10.0+ / tvOS 9.0+ / macOS 10.10+ / watchOS 2.0+, or use @available if not.
[x] I have added tests for new extensions, and they passed.
[x] All extensions have a clear comments explaining their functionality, all parameters and return type in English.
[x] All extensions are declared as public.
[x] I have added a changelog entry describing my changes.

          4 Messages

:book:
Thank you for submitting a pull request to SwifterSwift. The team will review your submission as soon as possible.

:book:
iOS: Executed 688 tests, with 0 failures (0 unexpected) in 27.295 (29.492) seconds

:book:
tvOS: Executed 650 tests, with 0 failures (0 unexpected) in 5.379 (6.251) seconds

:book:
macOS: Executed 512 tests, with 0 failures (0 unexpected) in 3.842 (4.044) seconds

  Generated by :no_entry_sign: Danger

Sure, not a problem

Let me know if you'd like me to take further action here. Not sure who's in charge, or maybe if that's me now :)

We now have some conflicts, can you please resolve then? :)

Certainly, done.

@gurgeous @guykogus what is missing on this one?

@gurgeous you can now use the new colour tests 😃

Thanks for adding the color test - this is done.
Looks like the build failed installing danger-swiftlint. I'm not familiar with this stuff, but it looks like that gem was deprecated a while back. https://github.com/ashfurrow/danger-swiftlint. Maybe it finally rotted?

🎂


Add logic to handle Github Action Workflow dependencies on releases

What would you like to be added:
Add logic to handle Github Action Workflow dependencies on releases
Why is this needed:
Currently the release flow executes e2e tests prior to the new container image build because the same flow is used for PR/push to master. Need to make sure image build happens before e2e tests for release prep (push to master). This may require pre-release image builds or refactoring the Github Action workflows overall.

👀

I think I have a working solution for this.

Build images based on current commit (PR or Push to master), but don't push to DockerHub
Modify version in Makefile to reference new image
Modify image pull policy in deployment to ifNotPresent
Update single-manifest
Build KinD cluster
Load new images directly into kind nodes (kind load docker-image)
Install MagTape
Run e2e tests


panic error

@luomai @marwage , when run early bert demo, when update from one peers to 8 peers, panic happens, configuration is the same as the run.sh, error as follows:
updating to 1 peers: <IP_ADDRESS>:13006
[I] updated to 1 peers: <IP_ADDRESS>:13006
OK
[I] arrived at v11, new np=1, local: +0/-6, global: -0/14
[<IP_ADDRESS>.13000::stderr] INFO:tensorflow:Saving checkpoints for 1047 into /cache/output/<IP_ADDRESS>-13000/model.ckpt.
[<IP_ADDRESS>.13003::stderr] INFO:tensorflow:Saving checkpoints for 1047 into /cache/output/<IP_ADDRESS>-13003/model.ckpt.
[<IP_ADDRESS>.13001::stderr] INFO:tensorflow:Saving checkpoints for 1047 into /cache/output/<IP_ADDRESS>-13001/model.ckpt.
[<IP_ADDRESS>.13002::stderr] INFO:tensorflow:Saving checkpoints for 1047 into /cache/output/<IP_ADDRESS>-13002/model.ckpt.
[<IP_ADDRESS>.13006::stdout] sync offset 153320 -> 153320 on step 605
[<IP_ADDRESS>.13004::stderr] INFO:tensorflow:Saving checkpoints for 1047 into /cache/output/<IP_ADDRESS>-13004/model.ckpt.
[<IP_ADDRESS>.13007::stderr] INFO:tensorflow:Saving checkpoints for 1047 into /cache/output/<IP_ADDRESS>-13007/model.ckpt.
[<IP_ADDRESS>.13007::stderr] WARNING:tensorflow:From /home/work/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.
[<IP_ADDRESS>.13007::stderr] Instructions for updating:
[<IP_ADDRESS>.13007::stderr] Use standard file APIs to delete files with this prefix.
[<IP_ADDRESS>.13003::stdout] stopped after trained 153320 samples in 138 steps due to change cluster
[<IP_ADDRESS>.13001::stdout] stopped after trained 153320 samples in 138 steps due to change cluster
[<IP_ADDRESS>.13004::stdout] stopped after trained 153320 samples in 138 steps due to change cluster
[<IP_ADDRESS>.13002::stdout] stopped after trained 153320 samples in 138 steps due to change cluster
[<IP_ADDRESS>.13000::stdout] stopped after trained 153320 samples in 138 steps due to change cluster
[<IP_ADDRESS>.13007::stdout] stopped after trained 153320 samples in 138 steps due to change cluster
[<IP_ADDRESS>.13003::stderr] INFO:tensorflow:Loss for final step: 1.1395919.
[<IP_ADDRESS>.13003::stderr] INFO:tensorflow:training_loop marked as finished
[<IP_ADDRESS>.13003::stderr] INFO:tensorflow:Training end time 2020-03-13 12:45:42.733748
[<IP_ADDRESS>.13001::stderr] INFO:tensorflow:Loss for final step: 1.4893956.
[<IP_ADDRESS>.13001::stderr] INFO:tensorflow:training_loop marked as finished
[<IP_ADDRESS>.13001::stderr] INFO:tensorflow:Training end time 2020-03-13 12:45:42.850651
[<IP_ADDRESS>.13004::stderr] INFO:tensorflow:Loss for final step: 1.357612.
[<IP_ADDRESS>.13004::stderr] INFO:tensorflow:training_loop marked as finished
[<IP_ADDRESS>.13004::stderr] INFO:tensorflow:Training end time 2020-03-13 12:45:42.928306
[<IP_ADDRESS>.13002::stderr] INFO:tensorflow:Loss for final step: 1.4187098.
[<IP_ADDRESS>.13002::stderr] INFO:tensorflow:training_loop marked as finished
[<IP_ADDRESS>.13002::stderr] INFO:tensorflow:Training end time 2020-03-13 12:45:43.183136
[<IP_ADDRESS>.13000::stderr] INFO:tensorflow:Loss for final step: 1.1474836.
[<IP_ADDRESS>.13000::stderr] INFO:tensorflow:training_loop marked as finished
[<IP_ADDRESS>.13000::stderr] INFO:tensorflow:Training end time 2020-03-13 12:45:43.285399
[<IP_ADDRESS>.13007::stderr] INFO:tensorflow:Loss for final step: 2.2803762.
[<IP_ADDRESS>.13007::stderr] INFO:tensorflow:training_loop marked as finished
[<IP_ADDRESS>.13007::stderr] INFO:tensorflow:Training end time 2020-03-13 12:45:43.593442
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:global_step/sec: 0.469528
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:examples/sec: 3.75623
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:global_step/sec: 3.41049
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:examples/sec: 27.2839
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:global_step/sec: 3.41522
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:examples/sec: 27.3218
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:Saving checkpoints for 1390 into /cache/output/<IP_ADDRESS>-13006/model.ckpt.
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:global_step/sec: 3.1294
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:examples/sec: 25.0352
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:global_step/sec: 3.41119
[<IP_ADDRESS>.13006::stderr] INFO:tensorflow:examples/sec: 27.2895
updating to 8 peers: <IP_ADDRESS>:13002,<IP_ADDRESS>:13006,<IP_ADDRESS>:13005,<IP_ADDRESS>:13001,<IP_ADDRESS>:13002,<IP_ADDRESS>:13001,<IP_ADDRESS>:13000,<IP_ADDRESS>:13005
[I] updated to 8 peers: <IP_ADDRESS>:13002,<IP_ADDRESS>:13006,<IP_ADDRESS>:13005,<IP_ADDRESS>:13001,<IP_ADDRESS>:13002,<IP_ADDRESS>:13001,<IP_ADDRESS>:13000,<IP_ADDRESS>:13005
OK
[E] full update detected: [1@2]{<IP_ADDRESS>:13006}@{<IP_ADDRESS>:38080,<IP_ADDRESS>:38080} -> [8@2]{<IP_ADDRESS>:13002,<IP_ADDRESS>:13006,<IP_ADDRESS>:13005,<IP_ADDRESS>:13001,<IP_ADDRESS>:13002,<IP_ADDRESS>:13001,<IP_ADDRESS>:13000,<IP_ADDRESS>:13005}@{<IP_ADDRESS>:38080,<IP_ADDRESS>:38080}
[I] arrived at v12, new np=8, local: +3/-1, global: -8/1
[<IP_ADDRESS>.13006::stderr] panic: runtime error: invalid memory address or nil pointer dereference
[<IP_ADDRESS>.13006::stderr] [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x7fab3df583c5]
[<IP_ADDRESS>.13006::stderr]
[<IP_ADDRESS>.13006::stderr] goroutine 2706338 [running]:
[<IP_ADDRESS>.13006::stderr] encoding/binary.Write(0x0, 0x0, 0x7fab3e4a5300, 0x7fab3e6c5900, 0x7fab3e4166e0, 0xc0007fa548, 0x6, 0xc0007fa540)
[<IP_ADDRESS>.13006::stderr] 	/usr/local/go/src/encoding/binary/binary.go:342 +0x145
[<IP_ADDRESS>.13006::stderr] github.com/lsds/KungFu/srcs/go/rchannel.(*messageHeader).WriteTo(0xc0b92adda8, 0x0, 0x0, 0x0, 0x0)
[<IP_ADDRESS>.13006::stderr] 	/tmp/pip-req-build-3r6z01fr/srcs/go/rchannel/message.go:84 +0x78
[<IP_ADDRESS>.13006::stderr] github.com/lsds/KungFu/srcs/go/rchannel.(*tcpConnection).Send(0xc0006bccf0, 0x7fab3e10338a, 0x6, 0x17d, 0xc000320000, 0x17d, 0x17d, 0x0, 0x7fab00000000, 0x0, ...)
[<IP_ADDRESS>.13006::stderr] 	/tmp/pip-req-build-3r6z01fr/srcs/go/rchannel/connection.go:106 +0x16b
[<IP_ADDRESS>.13006::stderr] github.com/lsds/KungFu/srcs/go/rchannel.(*Router).send(0xc000174db0, 0x94c0a9fe8072, 0x7fab3e10338a, 0x6, 0x17d, 0xc000320000, 0x17d, 0x17d, 0x0, 0x1, ...)
[<IP_ADDRESS>.13006::stderr] 	/tmp/pip-req-build-3r6z01fr/srcs/go/rchannel/router.go:53 +0xc0
[<IP_ADDRESS>.13006::stderr] github.com/lsds/KungFu/srcs/go/rchannel.(*Router).Send(0xc000174db0, 0x94c0a9fe8072, 0x7fab3e10338a, 0x6, 0xc000320000, 0x17d, 0x17d, 0x320001, 0x17d, 0x17d)
[<IP_ADDRESS>.13006::stderr] 	/tmp/pip-req-build-3r6z01fr/srcs/go/rchannel/router.go:44 +0xeb
[<IP_ADDRESS>.13006::stderr] github.com/lsds/KungFu/srcs/go/kungfu.(*Kungfu).propose.func1(0x94c0a9fe8072, 0x5a, 0x5a)
[<IP_ADDRESS>.13006::stderr] 	/tmp/pip-req-build-3r6z01fr/srcs/go/kungfu/kungfu.go:204 +0xfc
[<IP_ADDRESS>.13006::stderr] github.com/lsds/KungFu/srcs/go/kungfu.par.func1(0xc00022c0f0, 0xc0002500c0, 0x2, 0x2, 0xc00031e230, 0x1, 0x94c0a9fe8072)
[<IP_ADDRESS>.13006::stderr] 	/tmp/pip-req-build-3r6z01fr/srcs/go/kungfu/kungfu.go:171 +0x3e
[<IP_ADDRESS>.13006::stderr] created by github.com/lsds/KungFu/srcs/go/kungfu.par
[<IP_ADDRESS>.13006::stderr] 	/tmp/pip-req-build-3r6z01fr/srcs/go/kungfu/kungfu.go:170 +0x10f
[I] <IP_ADDRESS>.13006 finished with error: signal: aborted (core dumped)
exit on error: signal: aborted (core dumped)

@lgarithm

@rankeey you are not using the default port range. Did you specify the -port-range flag?

I think this is due to error not checked in
https://github.com/lsds/KungFu/blob/ef468345570a31968ec03454b0424085483cfd5c/srcs/go/rchannel/connection.go#L84


Automated build

Creating the automated build for this project.  It appears that the config.yml must exist in the master branch.  Why can't you specific a branch in Circle CI?  Anyway, I'll merge this right away as I can't do any testing in a branch.

Sorry, wrong repository for this pull request.  Please ignore.


Improve jest-worker (up to 4x)

This PR modifies the way internal worker queues are managed, passing from an array to a linked-list, improving a 10% the current benchmark, and 400% over a new benchmark.
How come this wasn't noticed before?
When jest-worker was initially benchmarked, it was done by using not so many jobs (~10k), but very heavy in time. While this is the usual approach (few jobs, lots of time per job), sometimes you have the opposite (i.e. lots of jobs, but each of them very fast). This is actually what jest-haste-map does.
Since the internal queue was an array, re-indexing the queue is a O(n) operation, which becomes especially relevant on the second scenario. Switching to a linked list means that all operations for advancing the queue become O(1), no matter its length. This results in massive speed improvements on really long queues.
Some benchmarks
Using the extended performance test, the empty function, called 100,000 times results in:
---------------------------------------------------------------------------
jest-worker: { globalTime: 11102, processingTime: 11058 }
worker-farm: { globalTime: 9713, processingTime: 9685 }
---------------------------------------------------------------------------
jest-worker: { globalTime: 10790, processingTime: 10762 }
worker-farm: { globalTime: 10453, processingTime: 10432 }
---------------------------------------------------------------------------
jest-worker: { globalTime: 11111, processingTime: 11079 }
worker-farm: { globalTime: 10133, processingTime: 10112 }
---------------------------------------------------------------------------

Now, with the change, it results in:
---------------------------------------------------------------------------
jest-worker: { globalTime: 2634, processingTime: 2594 }
worker-farm: { globalTime: 10165, processingTime: 10141 }
---------------------------------------------------------------------------
jest-worker: { globalTime: 2780, processingTime: 2756 }
worker-farm: { globalTime: 10132, processingTime: 10110 }
---------------------------------------------------------------------------
jest-worker: { globalTime: 2608, processingTime: 2581 }
worker-farm: { globalTime: 10295, processingTime: 10272 }
---------------------------------------------------------------------------

What about the existing metrics?
The previous metric (which we initially used for benchmarking, loadTest called 10,000 times), has also improved, but only slightly, since that one was already optimized:
---------------------------------------------------------------------------
jest-worker: { globalTime: 726, processingTime: 690 }
worker-farm: { globalTime: 769, processingTime: 748 }
---------------------------------------------------------------------------
jest-worker: { globalTime: 719, processingTime: 693 }
worker-farm: { globalTime: 784, processingTime: 765 }
---------------------------------------------------------------------------
jest-worker: { globalTime: 703, processingTime: 673 }
worker-farm: { globalTime: 748, processingTime: 731 }
---------------------------------------------------------------------------

Tests
I ensured all tests pass, but I also added some slight modifications into the __performance__tests__ so that you can pass an arbitrary worker method as well as an arbitrary number of iterations. This allowed me to test the other scenario.
On a personal note: this is actually WHY algorithms and data structures knowledge ARE important for a frontend developer! 🙂

This is really fantastic. Thanks @mjesun, great work!

Beauty!!


[bump] build-tools: 0.5.0 => 0.6.0 (minor)

Bumped build-tools from 0.5.0 to 0.6.0.

Thanks @CraigMacomber!


[Linux] Undefined symbols error

Possible duplicate of #76.
if(@available(iOS 13, *)) causes the following error for both arm64 and arm64e:
Undefined symbols for architecture arm64e:
  "___isOSVersionAtLeast", referenced from:
      __ZL66_logos_method$Widgets_13$WGWidgetHostingViewController$viewDidLoadP29WGWidgetHostingViewControllerP13objc_selector in Tweak.xm.mm.o

Example usage: here
Note: swapping out the contents of iPhoneOS.sdk in ~/.dragon/sdks/ with another patched sdk does not resolve the issue, at least for me.

closed as duplicate of #76


'warning' is not defined in beta1 build of Route component.

warning is never imported in the Route component. Seems like this one snuck through in the beta1 release.

thanks, its there now though https://github.com/rackt/react-router/commit/4f4e991774a076a865ceb321f28ab70b3f033bfd


Safari  16.0 with default Apple Safari Private Relay ignoring maza rules

Thanks for the awesome tool... just done some testing and it seems pretty good blocking in Chromium browsers, Opera and Edge (still see some googleads.g.doubleclick.net ads in Edge sites).
Safari seems to completely disregard any rules, is there no way to handle the Safari issue which i am guessing is a side-effect of enabling Private Relay in the iCloud features
Cache cleared multiple times, maza updated stopped and restarted but no luck!
thanks

I completely ignore how the new iCloud privacy system works. There should be no problem if you use a custom DNS server with Dnsmasq and configure your internet connection to use it. Otherwise they are already issues of the operating system itself that Maza can not enter, nor any other software.
Best regards


Feature Request: Tabs should be color of server group

Suggestions; when opening a query tab (or any tab for that matter) for a connection that's part of a server group that has a color, the tab and border of the selected tab would had the same color as the server group.

This is in progress now. The work is being tracked in https://github.com/Microsoft/sqlopsstudio/issues/327


[Bug] Enhancement : User readable error messages for @NotNull validation annotations

Reference: https://www.baeldung.com/spring-validation-message-interpolation
This ensures that all validation annotations have human readable messages being returned to the client.

Closing this as a duplicate of #604