Fixing orientation changes handling (responsive images)

Hi Anthony,
First, thanks for releasing react-native-image-zoom. I found it a couple days ago and it rocks, it's exactly what I was looking for. I really like the pinch-and-zoom and panning performance PhotoView and its bridge have.
However, I found a little bug. I'm working on a new RN app and I want it to work in both modes: PORTRAIT and LANDSCAPE. I have a view that shows 2 images side by side (each one fills half the screen), and when the device is rotated the width of both images gets recalculated and passed to their style.
This wasn't working correctly, so I decided to have a go at finding a fix, which honestly has been quite hard due to the lack of documentation on how to write native modules in RN.
I've recorded a couple gifs that illustrate the bug. As you can see, once the device is rotated images don't get the right size and redrawn correctly. Then when the device is rotated again back to its original position, the sizes don't match the first ones:

And the current behavior with my patch is:

The commit message has some explanation on what I've done. I've heavily inspired my solution in React Native code itself: ReactImageView and ReactImageManager
I've also moved some initialization code to two different methods, because setSource was a little big to digest.
Let me know any questions you've got, cheers
Miguel

Oh wow cool, can confirm it's working on the example app.
Thanks, nice work!

Thanks @Anthonyzou for merging this :)
Today I've found out a side effect of my patch, that I'm not sure how to fix, so I've thought that maybe if I share with you what I know, we can come up together with a solution for it.
Panning seems to be partially broken with my patch. Let me explain a specific case:

I have two images side by side vertical of my face, like in the previous gifs.
The first time they load, their scaleType=centerCrop, left and right panning doesn't work and I didn't notice before. However this used to work in version 0.27 (Panning only works if I zoom in, but only for the section of the image displayed)
Then When I rotate my device, I set scaleType=center an panning works ok
If I rotate the device again, It returns to my initial screen (as in the GIF) and scaleType=centerCrop and this time panning does work correctly.

Ok, so my guess is this and I have had a look into PhotoView code for a while without considering myself an expert. When I rotate the device and change scaleType, the display matrix of the PhotoView or some internal thing changes and that is then used for my rotation in step 4, making it right.
This works by chance in step 4, because in my PR I prevent setImageURI from being called more than once, and that method calls update on the attacher:
https://github.com/chrisbanes/PhotoView/blob/master/library/src/main/java/uk/co/senab/photoview/PhotoView.java#L169
Then I thought "ok, but why did it use to work before in step 1?". So I switched back to v0.27 and found that in step1, when setSource was called getWidth() returns 0, which affects:
https://github.com/chrisbanes/PhotoView/blob/master/library/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java#L952-L956 and I guess this affects https://github.com/chrisbanes/PhotoView/blob/master/library/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java#L775
This works the first time, but as you know after rotating the device, both images don't get calculated right (breaking responsive rotation).
I have a custom patch now that makes a mix of both approaches. onSizeChanged doesn't kick in until the first rotation (when I change scaleType) and everything works as expect, but it's not a real fix, because If I don't change the scaleType it wouldn't work.
So now, I still think onSizeChanged is the way to go, although I might be wrong. I'm not completely sure what the real fix should be, maybe setting the matrix or setting the width or padding somehow. As you are more experienced than me with PhotoView maybe you can make a guess out of all this, thanks.
Cheers,
Miguel


Issue with C style brackets in file manager

There appears to be a bug in the file manager,  or to be precise,  an oversight in its security checks.
I'm seeing an issue editing .cfg files  if they contain  C style config brackets  e.x
{
OPTION=value;
};

It seems that the file manager check the file contents and allows or disallows editing based on its contents.
The result of this is is if you try to edit/create a file with this type of content,  the panel refuses with a red error  banner which says something along the lines of
you cannot edit file type xapp/c++  in the panel
Not sure the exact error,  it disappears before i can get my screenshot app open.
This may be a known issue and may already have a fix planned for 0.70,  but i looked through the issues here and didn't see anything similar.

Those checks are based on the content of the files, so theres not really much I can do about that other than having C++ files be editable in the panel.

Hmm,  would it be possible to allow the edit only if the extension is .txt|.cfg|.conf  etc?   It's a dirty workaround but maybe?
Or is this more an laravel/plugin/library issue?

It is an issue with the fact that the C library we use to read headers thinks that file is a C file.

i see,  well it's not a absolute show stopper issue.
Though it does pose an interesting predicament for production use.
A technically minded person like us (any anyone else who installs pterodactyl / docker and/or works with linux systems)  will understand and know they can just go to sftp and edit the file manually,  although inconvenient, it's doable.
But for an average user,  this is probably not the case,  so this produces problems most definitely in the GSP space.
But it also produces problems for end users who are perhaps less technically inclined.
I'm not gonna sit here and tell you what to do, programing is a pain,  it's the one thing i never mastered (much to my regret) if i was a better coder i would probably contribute but i'm not that great, so i know the implications.
I did just want to put this out there,  as a potential problem for some users where simplicity and just plain working are key.
also,  well i like the community here,  i've spoken to you guys on discord and i like the atmosphere,  FOSS communities these days are generally rather hostile when it comes to issues and suggestions or even bug reports. I'm happy to not see much of that here.

Luckily in the next version there is an editable list of file types, so this can be resolved by the administrator pretty easily.
Would that be an okay solution for you?

Yes,  in fact i was going to suggest it,  but when you said it was a hard coded check i redacted the suggestion from my original comment.
P.S  can't wait to see 0.7.0 sounds like it'll solve a lot of headaches.

Cool, I'm going to close this then since that change is already merged.


Cannot call value of non-function type '[Observable.Type]'

Xcode 15
M1

Moya/RxSwift (15.0.0):

Moya/Core
RxSwift (~> 6.0)

private func bindingsStrongify<Event, O, WeakOwner>(_ owner: WeakOwner, _ bindings: @escaping (WeakOwner, O) -> (Bindings<Event>))
    -> (O) -> (Bindings<Event>) where WeakOwner: AnyObject {
    return { [weak owner] state -> Bindings<Event> in
        guard let strongOwner = owner else {
            return Bindings(subscriptions: [], events: [Observable<Event>]())
        }
        return bindings(strongOwner, state)
    }
}

This is a duplicate of issue https://github.com/NoTests/RxFeedback.swift/issues/66.

private func bindingsStrongify<Event, O, WeakOwner>(_ owner: WeakOwner, _ bindings: https://github.com/escaping (WeakOwner, O) -> (Bindings))
-> (O) -> (Bindings) where WeakOwner: AnyObject {
return { [weak owner] state -> Bindings in
guard let strongOwner = owner else {
        return Bindings(subscriptions: [], events:  [Observable<Event>]())
    }
    return bindings(strongOwner, state)
}

}
//Add this to Fix it
public typealias Observable = RxSwift.Observable


x1125 client—As ARA (Harriet) I want to record library amplification/dual index plate/Transfer/cycle number for visium cytassist workflows in one page, to reduce clicks and errors happening in the lab

New page Library Preparation - in Visium menu - description to state Visium "Library Amplification and Generation"
Select SGP number
Scan in source labware, stays active (drop-down list - selected by user, default as empty).
1to1 transfer the destination labware (option to scan in destination labware (already in use) or create a new 96 well plate labware) (like visium transfer operation)
Destination labware state to be select-able from dropdown list (default as empty)
Scan in Dual index plate (source side) – allocate one per well in the output labware. As per dual index plate operation, links in with the well data and tag information needed on the release file
(like dual index plate operation)
Mandatory that you scan in both source labware and scan in dual index plate for operation to complete
Be able record Cycle number (not CQ value due to new story coming - we will need to enhance this feature to allow pulling up of recorded CQ value for sample) per well on the destination plate (like visium QC - amplification operation) - only for wells you make the transfer for
Not to affect current views for billing and reporting, but will need to check when operation is on UAT

@khelwood @sabrine33 Jasmine has tested this and it works well but she did get the following message clicking ‘return home’ on the ‘operation complete’ pop up. In not sure what it thinks is unsaved.

@KatyTudor , It seems that she attempted to leave the page before clicking on the buttons in the 'operation complete' pop-up. Was she testing it on a tablet? Even an accidental swipe to the left or right may trigger it.

@sabrine33 she said she had clicked save/complete then from the "operation complete" pop up when she pressed reset or home it came up with the other pop up with unsaved changes

@KatyTudor, okay thank you for the feedback, I will have a look

@sabrine33 Harriet has also tested and there is no option to print the new destination plate(s) labels, can you add this please? thanks


Keeps one CPU thread busy

Hi,
Having a pretty large code base I observed that a CPU thread is always used. I waited for more than 10 minutes to see if the behavior disappears, but it didn't happen. Eventually I disabled the extension and opened again the solution. After 1 or 2 minutes I didn't observe anymore a significant CPU usage. Host machine: Windows 8.1 with VS 2015 Update 2.

This might be related to an issue I have. I work on https://github.com/mono/CppSharp which is a fairly large solution of 51 projects. When I make a single change and save the file, my CPU usage jumps to 50 % for at least 15 seconds. It may not seem as much but during regular work changes are saved much faster and I have seen the difference stack. There's definitely something wrong because while I understand the AST must be updated when a file is changed, this jump in CPU usage occurs even if I change the C++ part of my project which has nothing to do with the area Refactoring Essentials covers.
Note: in case you want to test with CppSharp, please have in mind that it does not contain a static solution file, it must be generated instead. Instructions to do so you can find at https://github.com/mono/CppSharp/blob/master/docs/GettingStarted.md . In case you find them confusing, all you need to do is go to build/ and run DownloadDeps.bat, then GenerateProjects.bat with selection VS 2015.

Any comment? Is this perhaps related to https://github.com/icsharpcode/RefactoringEssentials/issues/159 ?

Indeed, after opening a big solution it takes several minutes until analysis has finished. We plan to configure the analyzers to asynchronous execution (a new feature in Roslyn 1.2) and see if that decreases the time amount needed to finish the solution.
About analysis when editing C++ code: All analyzers are triggered by Roslyn and we have actually no control over the moment it happens. It will need some tests to see if the problem is on our or on Roslyn's side.

Thank you for taking measures. In case you decide to test with CppSharp and have problems generating the solution, I'll be glad to help.

I would also like to get some more insight into the way Refactoring Essentials works. To begin with, what and why does it need to analyse given that Roslyn has already constructed the AST of the project and, I assume, provides it to add-in developers?

"Analyze" means analyzing the AST generated by Roslyn. This is what a Roslyn-based diagnostic analyzer usually does.

I understand, thank you. I hope to see the optimised analysers soon.

My VS regularly stops responding while loading large solutions with RE on.Could you please provide an estimate when these optimised analysers will be complete?

Concurrent execution is already activated for all RE analyzers in development builds (see c49e79795f120654b62e342b875e1c414747cbd3) and this will be part of release 4.1, which we are about to finish today or tomorrow. Unfortunately I don't see the high CPU load going away with it completely. But please test whether the time with high CPU load will decrease, at least.


Error logging strategy

/kind feature
Describe the solution you'd like
How should we make this application debuggable? The reconcile function returns an error, it should probably have a stacktrace associated with it, but should we simply print it? Structured logging will print it for us but the usability is pretty bad since it gets escaped it's really hard to read.
A suggested strategy might be to log the stack trace and return the unwrapped error?
Anything else you would like to add:
I would like to have an approach outlined here so we can discuss if anyone has any thoughts on a good way to make this usable.
It might be that developers have to live with hard-to-read stack traces since anyone using this will surely have a real logging solution

hey @chuckha
i've created this PR a couple of days ago:
https://github.com/kubernetes/kubernetes/pull/80937
my solution was to dump stacktrace on klog's --v=5 or higher.
today in the kubeadm office hours it saw some positive comments, but it's still under review.

If we EVER return an error to the reconciler we should log a stack trace at the KubeadmBootstrapProvider reconciler.
Then the error can be returned to the controller runtime controller which will log the error without the stack.
This will improve debugability of the logs. When users see a stack trace they can know it was an unexpected error. If we are ever in an error looping state that is a serious bug and we should aim to address it and either handle the error or handle the case generating the error.
This is a good first issue and can be broken down into smaller chunks of work:

If we ever return an error from Reconcile we must log a stack trace (use fmt.Sprintf("%+v", err)).
Ensure that all calls to external libraries (stdlib included) call .WithStack(err) on the error that they are returning. If additional context is needed, such as inside a for loop, use .Wrap or Wrapf. These functions come from github.com/pkg/errors.

/good-first-issue

This also might be a good time to think about any relevant metrics that could be tracked. https://github.com/kubernetes-sigs/cluster-api/issues/1477

@wfernandes Please start a new issue to gather ideas for metrics to pay attention to. I don't want to bog down an issue marked as good-first-issue with extra details


Usage with next/link

First of all thank you so much for this library. Do you know how we can use it along with next/link? For example, clicking on a link and then checking the pathname? I somehow managed to make it work. Bit hacky for now:
// jest.setup.js

jest.mock('next/router', () => {
  const router = require('next-router-mock');
  const i18nConfig = require('./next-i18next.config');

  router.default.locales = i18nConfig.i18n.locales;
  router.default.locale = i18nConfig.i18n.defaultLocale;

  return router;
});

jest.mock('next/link', () => {
  const { cloneElement } = require('react');
  const router = require('next-router-mock');

  return ({ children, href, replace, as, shallow, locale, scroll }) => {
    const onClick = () =>
      router.default[replace ? 'replace' : 'push'](href, as, {
        shallow,
        locale,
        scroll,
      });

    return cloneElement(children, {
      href,
      onClick,
    });
  };
});

and then doing expect(router.pathname).toBe('/path/name'); in my tests.
Only problem I can see here is around resetting the pathname, query, asPath etc for router object for every test in that particular test file.

I've been looking into it, and might have found a solution...
The problem I found is that next/link doesn't import next/router, instead it imports from next/dist/client/router.  So I changed jest.mock('next/router', ...) to this:
jest.mock('next/dist/client/router', () => require('./router'));

and it seems to be working.
Can you try this solution too, and see if it works?  If so, I can probably document it and put it in the README.
Here's my complete test, which (obviously) is not comprehensive, but maybe it's a good start?
import React from 'react';
import NextLink from 'next/link';
import { fireEvent, render, screen } from '@testing-library/react';

import MockRouter from './router';

jest.mock('next/dist/client/router', () => require('./router'));

describe('next/link', () => {
  it('should render a link', () => {
    render(<NextLink href={'/example'}>Example Link</NextLink>);
    fireEvent.click(screen.getByText('Example Link'));
    expect(MockRouter.asPath).toEqual('/example');
  });
});

I added these unit tests to #8  ... I still need to update the README.
I'm also curious what other next/* modules depend on Router, and perhaps if this fix will help those scenarios.

I added these unit tests to #8 ... I still need to update the README.
I'm also curious what other next/* modules depend on Router, and perhaps if this fix will help those scenarios.

Seems like working for me too. Only error I can see is around prefetch method, where it is throwing NotImplemented error when I am running jest-axe tests.

Hi @scottrippey, thanks for writing next-router-mock. I'm trying to get clicks on next/link working in my app as well.
@pgmanutd's next/link mock in jest.setup.js works. Nice!
Calling
jest.mock('next/dist/client/router', () => require('next-router-mock'))

instead of
jest.mock('next/router', () => require('next-router-mock'))

does not work, unfortunately. It breaks my tests with the NotImplemented error.

@markplindsay Will you check if you're on the latest version, 0.2.3 ?
I think that Not Implemented error might have been coming from prefetch, which I patched in 0.2.3 to not throw anymore.

+1 to @scottrippey. Here is the PR with changes.

@scottrippey: Thanks for the latest version. It works seamlessly. All the tests are passing and I also removed next/link mocking. Here is the change if it helps anyone.

Fixed with https://github.com/scottrippey/next-router-mock/pull/8

@scottrippey, yep! I was on 0.2.2. Using 0.2.3 and mocking next/dist/client/router instead of next/router works perfectly.
Thanks again to you and @pgmanutd.


Fix platform name + better default_robot naming

platform name checked after init; adding / line to make it work
changing default to default_robot for better understandability
ps. not everyone needs to review this, just whoever has time

Looks good - I think you need to do the same change for graph_localizer_nodelet.cc as done for imu_augmentor_nodelet.cc

Marina, thank you for renaming 'default' to 'default_robot'. I think this should be done also in isaac, for consistency, as the same logic is used there. Hope it won't be too much extra work.

Looks good - I think you need to do the same change for graph_localizer_nodelet.cc as done for imu_augmentor_nodelet.cc

Good point, does the imu_aug need:
ff_common::InitFreeFlyerApplication(getMyArgv());
there too?


Support for 'with'/builder-style SETTER_FORMAT

Hi
As far as I can see, selma supports setters that starts with 'set' only; unfortunately I have a lots of classes that use setters with "with" prefix.
Is it possible to support builder-style SETTER_FORMAT (MethodWrapper class) in selma?
Something like: SETTER_FORMAT = "(set|with)(.*)"?
Looking forward to your response,
Regards,
Jan Lukasik

Hi,
with is not a valid Java bean convention. But the with syntax could be easy to support as you explained it.
I am just wondering if that is a good thing to support this because it does not respect the convention and the 'with' syntax can be used by others for something different.
Perhaps it should be accepted based on a specific configuration parameter.
What you think about it ?

Hi
I agree with you - 'with' it is not a valid Java bean convention but seems to be often used (at least in project I'm working in).
Can it be used for something else? Really don't know - let's assume yes and jump to option you propose:
a specific configuration parameter, as it sounds good to me.
Do you have any example/idea about such implementation/selma configuration for 'with' setters?
That does not seem as simple as just change of SETTER_FORMAT patern in the code. And - frankly speaking - don't know how to do that. Could you please help to sort it out?


Kernel restart when using an image loaded from PIL

Hello,
I'm returning to an old problem that was experienced when I updated Spyder. In that case (Kernel restart when creating plots with Matplotlib #16659) the problem was the kernel restarting when trying to make a plot with Matplotlib and was resolved by changing the version of freetype. It was mainly solved by @ccordoba12 .
The exact same problem has now occurred, but instead of Matplotlib being the problem it is trying to do an operation with the image that has been loading. For example, trying to convert into a numpy array or using matplotlib to display the image. The problem is with code that has always worked perfectly (several years) and still works fine on another PC (Spyder 4.0.1. and python 3.7.6).
The version of Spyder 5.1.5 and python is 3.7.4 as in the previous post.
Here is some sample code:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
test = Image.open('348.tif')
plt.imshow(test)
imarray = np.array(test)

Both plt.imshow(test) and imarray... cause the error message "Restarting kernel"
Many thanks!

Hey @classAction68, thanks for reporting. This error should be fixed in our latest version (5.3.1).
Since it's still not available in Anaconda, you have two options:

Use our Windows or Mac installer, which you can find here.

Create a new environment with conda-forge packages. For that, please close Spyder, open the Anaconda Prompt and run the following commands there:
 conda create -n spyder-cf -c conda-forge spyder
 conda activate spyder-cf
 spyder

Let us know if that works for you.

Thanks for the response. I tried solution 2, but then I lost all access to my packages (e.g. Numpy, Scipy, PIL etc.).
I can try 1 at a later time, but for now it is not a good time to be installing new things - some important other programs are running.

Thanks for the response. I tried solution 2, but then I lost all access to my packages (e.g. Numpy, Scipy, PIL etc.).

Yeah, you have to reinstall them from Conda-forge:
conda activate spyder-cf
conda install -c conda-forge pillow numpy scipy

Sorry for the inconvenience.

Hi, I finally had a chance to try solution 1 and it seems to have indeed solved the problem.
Thanks!


Remove cargo-deny exception for intel-mkl-src

As conversed about in PR #369, this PR removes the cargo-deny exclusion for intel-mkl-src introduced due to https://github.com/EmbarkStudios/krates/issues/60.
This PR should be merged as soon as https://github.com/EmbarkStudios/krates/pull/61 lands in cargo-deny-action.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (26c7d68) 90.16% compared to head (fb009aa) 90.16%.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #386   +/-   ##
=======================================
  Coverage   90.16%   90.16%
=======================================
  Files         141      141
  Lines       19679    19679
=======================================
  Hits        17744    17744
  Misses       1935     1935

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

It seems this is all complete. Should this be merged now?

It seems this is all complete. Should this be merged now?

The CI build should be rerun to confirm. If that is green it should be good to merge.

Would you mind rebasing this PR or allowing me to push to it? Thanks! :)

I can rebase in the next few days. Also, permission for maintainer to edit this PR should already be given.

Seems like cargo-deny picks up intel-mkl-src through the "examples" crates, even though those crates have "publish = false" set in their manifest and "deny.toml" has "licenses.private.ignore = true" set. If the "examples" folder is just removed from the workspace manifest members there are no license errors. I think this might not be the intended behavior for the "licenses.private.ignore" option of cargo deny. Maybe this is another bug in their implementation? I don't have the time to look closer into this right now. Maybe in the next few days, but no promises.

Thanks for the quick rebase, and thanks for digging into this. I've also had a look, and I suspect the path based dependencies are treated differently. I tried to replace them by workspace dependencies but to no avail. If you do look into this, please do not waste too much time on this annoying problem.

Also, permission for maintainer to edit this PR should already be given.

Interestingly I still cannot push to this branch.

I get no errors with cargo deny --all-features --log-level warn check licenses bans sources in a local checkout of my branch, both on windows and linux (wsl) with<EMAIL_ADDRESS>Seems to me there is something wrong with the cargo-deny-action? Seems the right version of cargo-deny is used in the workflow, but the necessary keys graph.exclude-unpublished and graph.exclude-dev are not used in the call to cargo-deny. I opened https://github.com/EmbarkStudios/cargo-deny-action/issues/81 to investigate.

Turns out I was wrong to suspect the cargo-deny-action. I just didn't see errors locally since I did run cargo update and thus my cargo.lock was different from the one generated with a fresh checkout of the branch in the workflow. It appears with updates to some crates the "Unicode-3.0" license got into the dependency graph.
According to https://www.unicode.org/policies/licensing_policy.html the license is based on the MIT license, with the difference that the Unicode-3.0 license is targeted explicitly at data and data files:

The Consortium’s software and data files are generally licensed under the OSI-approved Unicode License v3, a free, open source, highly permissive license based on the MIT License. The primary difference between the MIT License and the Unicode License is that the Unicode License expressly covers data and data files. The Unicode License v3 and its predecessors have been approved by the Open Source Initiative (OSI) since 2015.

It seems the license is very permissive. However to be sure I would follow suite with the most restrictive use of the license in all of the dependencies, which appears to be https://crates.io/crates/unicode-ident, and change the license of argmin to "(MIT OR Apache-2.0) AND Unicode-3.0". Or track down why dependencies with this license got into the dependency graph in the first place and try to prune them.


feature: additional syntax for define Macro, using LabeledStatement, …

I think this additioan syntax more hygienic

it's worked without transform (may used for debuging)
also this syntax correct wor linting

macro: {
  var FOO = function() {
    return "foo";
  };
}
macro: var FOO1 = function() {
  return "foo1";
};

@phpnode , what yout think about this feature?
If this good idea, I will continue this work

@Gvozd like it! I had very similar thoughts recently. It should also allow function declarations:
macro: function FOO () {}

for full hygienic, FunctionDeclaration in strict mode has limitations, like in native JS
(function () {
  'use strict';
  //Uncaught SyntaxError: In strict mode code, functions can only be declared at top level or immediately within another function
  macro: function FOO() {}
})();

(function () {
  'use strict';
  macro: {function FOO() {}}
  console.log(typeof FOO);//undefined because scoping
})();

But I planned support FD also
Once you agree, I will continue to work

@Gvozd this looks really great. The limitation for function declarations is a bit unfortunate but I think it's the much more natural syntax, so we should probably allow it. I can merge this now or wait if you want to work on that too? Up to you, thanks again for all your hard work on this library, you've improved it vastly.

No, not merge this PR - I not ended work
I create this PR for discussing with you, and show proto of code if you want
In few days I return to this feature, and ended work
I myself merge code, when when it is ready

OK, I allow all variants of FunctionDeclaration, but with warning notice.
I am happy to to work on this plugin)
This is a new experience for me
And I plan to use it in my library for quick search in JSON objects
Coming soon it)

Done
Actually merged to master


Add status dashboard and refactor status endpoint

Resolves L2B-2651
🤷🏻

It is not mobile-friendly - only for DX convenience


Remove duplicate scrollIntoView

What it solves
The removal of duplicate code. This may also fix the scrolling in long Safe lists.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

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

Totals

Change from base Build<PHONE_NUMBER>:
0.02%

Covered Lines:
3082

Relevant Lines:
8477

💛  - Coveralls


bug?: node extracted while merging nodes

map area:
http://preview.ideditor.com/master/#background=none&disable_features=boundaries&map=23.20/40.77057/-73.99401
Is this related to new validation? https://github.com/openstreetmap/iD/pull/6267 (very close node on road)
By the way, this validation (very close node on road) brings a lot of maybe "false positives" results for areas with high coverage density of map objects, maybe you could change the validation-check of node distance from2m to 1m?

Somewhat related: these false positives especially bad on sidewalks, where fixing all warnings will result in very bad alignments.  Could this validation for paths and sidewalks have a reduced distance to perhaps 0.3 meters instead of 2?
For most roads, though, I love this new validation!

Thanks @sun-geo and @BjornRasmussen for your feedback - we'll adjust the threshold 👍

Thanks!
Here is an example of what I was talking about: http://preview.ideditor.com/master/#background=Bing&disable_features=boundaries&id=w16545896&map=19.40/35.94239/-78.91871 and set the validation to "Everything" "In view"

Another issue that should be fixed together with this for sure is that junction nodes are merged with nearby nodes, with the resulting node having the "average" location between the two nodes.  The actual location should be on the node shared by another way so that the junction is not moved to a new inaccurate location.

Another issue: Nodes can be connected between different roads, creating invalid alignments.

I just had the extracted node happen to me during a crossing ways connection fix. There was an "entity not found" error doing async validation, so I don't think the displayed issue was with the operation itself. I think the thing to do is edit a lot and just add defensive code every time something appears to go awry.

Interesting.
Additional information: 2 days ago, when I reported this, I had a 100% reproducibility rate for that area and that action steps (see movie) to extract a node. When I try to reproduce it now (same area same action), it don't happened anymore.

Thanks for changing the threshold in https://github.com/openstreetmap/iD/issues/6292
:-)

@sun-geo We change a bunch of things since you opened this so the problem may be fixed. Let us know if you see it again anywhere!

I agree :-)


WIP: Setup a replication branch

Make some basic changes for replication so DRBD driver development
can get started.

What this PR does / why we need it:
Which issue this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close that issue when PR gets merged): fixes #
Special notes for your reviewer:
Release note:

I'm going to merge this.  @xxwjj will continue with the work.


feat(services/bos): Move services bos back

Move services bos back to go-storage

Please also update https://github.com/beyondstorage/go-storage/blob/master/.github/dependabot.yml


signal-cli: command execution failed: Sending empty message is not allowed, either a message, attachment or sticker must be given.

This is my first Issus, so please be nice :)
I updated my signal-receiver container to version 1.4.0 because, signal-cli isn't working in version 1.3.0 (I always got signal-cli error 499). With 1.4.0 signal-cli is working but I don't get any alerts in signal. So I looked at the Docker logs and got alot of this message:
"signal-cli: command execution failed: Sending empty message is not allowed, either a message, attachment or sticker must be given."
I get the same message when I use the example curl:

curl -i -d @- http://localhost:9709/alert << EOF
{
  "receiver": "default",
  "status": "firing",
  "alerts": [
    {
      "status": "firing",
      "labels": {
        "alertname": "HelloWorld",
        "instance": "localhost:1234",
        "job": "broken",
        "monitor": "world-monitor"
      },
      "annotations": {},
      "startsAt": "2016-04-07T18:08:52.804+02:00",
      "endsAt": "0001-01-01T00:00:00Z",
      "generatorURL": ""
    },
    {
      "status": "firing",
      "labels": {
        "alertname": "HelloWorld",
        "instance": "localhost:5678",
        "job": "broken",
        "monitor": "world-monitor"
      },
      "annotations": {},
      "startsAt": "2016-04-07T18:08:52.804+02:00",
      "endsAt": "0001-01-01T00:00:00Z",
      "generatorURL": ""
    }
  ],
  "groupLabels": {
    "alertname": "HelloWorld"
  },
  "commonLabels": {
    "alertname": "HelloWorld",
    "job": "broken",
    "monitor": "world-monitor"
  },
  "commonAnnotations": {},
  "externalURL": "http://localhost:9093",
  "version": "4",
  "groupKey":<PHONE_NUMBER>026785000
}
EOF
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Date: Fri, 07 Oct 2022 13:20:15 GMT
Content-Length: 147

signal-cli: command execution failed: Sending empty message is not allowed, either a message, attachment or sticker must be given.
: exit status 1

So something is not working between the alertmanager-signal-receiver and the singal-cli.
Thanks a lot

I pushed a fixed version that should solve the issue. If not please report back.


libical: fix strict deps

Description of changes
strict deps doesn't quite work for cmake as it pulls in buildInputs into the PATH. this change uses a fix for cmake https://github.com/NixOS/nixpkgs/pull/318226 so this doesn't happen and then fixes the packages that set strict deps but broke with the fixed cmake.
staging companion to: https://github.com/NixOS/nixpkgs/pull/324545

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

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

i don't see a reason to delay. all the strictDeps fixes to the various packages are ready to get merged independently of the cmake fix.


Force compiler to inline

Compiler optimisations are causing interrupt routines to call external routines.
We should prevent calls to external routines by forcing inline.
https://github.com/jmamma/MIDICtrl20_MegaCommand/issues/52

Timer interrupt. Rambank selector is not inlined 😠
00012036 <__vector_32>:
   12036:       1f 92           push    r1
   12038:       0f 92           push    r0
   1203a:       0f b6           in      r0, 0x3f        ; 63
   ...
   ...
   1206a:       00 d0           rcall   .+0             ; 0x1206c <__vector_32+0x36>
   1206c:       1f 92           push    r1
   1206e:       cd b7           in      r28, 0x3d       ; 61
   12070:       de b7           in      r29, 0x3e       ; 62
   12072:       60 e0           ldi     r22, 0x00       ; 0
   12074:       ce 01           movw    r24, r28
   12076:       04 96           adiw    r24, 0x04       ; 4
   12078:       3d df           rcall   .-390           ; 0x11ef4 <_ZN15RamBankSelectorC2Eh.lto_priv.529>
   1207a:       80 91 8b 9a     lds     r24, 0x9A8B     ; 0x809a8b <slowclock>
   1207e:       90 91 8c 9a     lds     r25, 0x9A8C     ; 0x809a8c <slowclock+0x1>

inline changes add around 22,908bytes of bloat to program size.

Firmware feels slightly snappier with this patch.
@yatli when you have a moment.
I just bought a CRO, so it might be time to actually measure ISR completion times.

I'm trying this together with the space reducing patch. Program space bounces back from 64% to 80%.
Going through the code now.

I was thinking about this earlier. Some of the inlining might be too heavy handed (MidiUartParent.hh for example).
Especially for 22KB of program space loss.

I'm trying to find the heavy hitters:
MDClass::setTrackParam 46 refs

(editing)

Done, that's all of them

What did you find ?

eliminating these heavy hitters reduce about half of the bloat, while the critical stuff (ram bank switching, clock_diff etc.) are still in place

Sorry my browser was not up to date. I see your results now.

Cool. I should be able to write inline versions of the heavy hitter and force functions executed within interrupt routine to use those instead.

Yeah, given these routines are more than just one or two cycles, the gained speed/space ratio would not be that much

especially MDClass::setTrackParam alone takes 12KB :D

before:
../../../../tools/avr/bin/avr-size main.hex
text	   data	    bss	    dec	    hex	filename
0	 180250	      0	 180250	  2c01a	main.hex
after:
../../../../tools/avr/bin/avr-size main.hex
text	   data	    bss	    dec	    hex	filename
0	 172374	      0	 172374	  2a156	main.hex

param locks not working.

text	   data	    bss	    dec	    hex	filename
0	 181258	      0	 181258	  2c40a	main.hex

A more space efficient version with more overhead, but only 800 bytes difference.
135 void MDSeqTrack::send_parameter_locks(uint8_t step) {
136   uint8_t c;
137   bool lock_mask_step = IS_BIT_SET64(lock_mask, step);
138   bool pattern_mask_step = IS_BIT_SET64(pattern_mask, step);
139
140   for (c = 0; c < 4; c++) {
141    uint8_t send_param = 255;
142     if (lock_mask_step && pattern_mask_step) {
143         if (locks[c][step] > 0) {
144           send_param = locks[c][step] - 1;
145         } else if (locks_params[c] > 0) {
146           send_param = locks_params_orig[c];
147         }
148     }
149
150     else if (lock_mask_step) {
151         if (locks[c][step] > 0) {
152           send_param = locks[c][step] - 1;
153         }
154     }
155
156     else if (pattern_mask_step) {
157
158         if (locks_params[c] > 0) {
159           send_param = locks_params_orig[c];
160       }
161     }
162     if (send_param != 255) { MD.setTrackParam_inline(track_number, locks_params[c] - 1, send_param); }
163   }
164 }


Update uri for az rest command when creating the mv-target container

Fixed an issue with the URL for creating materialised view container mv-target

@AbhinavTrips @seesharprun
Can you review the proposed changes?
When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

The changes were made already and merged - they are live now. This PR came in when the earlier changes were under review, so no need for merging this request,


Fabric support?

Description
Are there presently any plans for a Fabric port of the CommandAPI?, or what does the roadmap for this look like?

tl;dr: There are no existing plans for Fabric support for the CommandAPI in the near future (within the next year or so).
Why not?
The CommandAPI was created for Bukkit (and Spigot and Paper) because Bukkit/Spigot/Paper do not currently have an API that lets you utilize Minecraft's command UI. The command UI in Minecraft uses Brigadier and the commands use NMS (net.minecraft.server.....) classes, such as BlockPos, Level and Vec3 which are not accessible or usable in the Bukkit/Spigot/Paper API which have their own objects (e.g. Location and World).
The CommandAPI has to not only provide a front-end for Bukkit/Spigot/Paper objects (e.g. Location and Player), but it also has to provide a conversion from NMS objects to Bukkit/Spigot/Paper objects. This conversion step is not necessary for Fabric because you can use NMS objects without the need for conversion.
I recently (in the past few months) tried supporting Velocity, but it turns out that it's very likely that I'd have to rewrite the entire CommandAPI for velocity (i.e. there would be very little "shared common code" between the plugin and velocity version), so presumably porting to Fabric would be a giant task as well.
Is there a possibility of Fabric support in the future?
Yes! Despite being primarily a plugin developer, I have poked at Fabric mods in the past and fabric opens the door for the one limitation of the CommandAPI, which is custom arguments, as briefly stated in the README:

'True' custom arguments and server-side argument implementations
Through some brief testing of the regex-mod branch and my MinecraftRegexArgumentMod repository, it was discovered that 'true' custom arguments (arguments with a custom implementation of the returned type and parser) are possible with the aid of a client-sided mod. Additionally, this functionality also works without a client-sided mod, assuming this is only used server-side. This can be useful for server-only datapacks, functions and tags, as well as command blocks.

At some point in the far future, I plan to add (or at the very least, officially support) some form of fabric support, either with the CommandAPI being a fabric client-side mod for use with the server plugin version of the CommandAPI, or as a fabric port (which would be a significant amount of work).

Very good to know.
Thank you for the detailed explanation and I'm sure other people researching this topic will find it most useful.


Figure out UI Theme

We don’t currently have a UI guy, so we need to figure out a theme/color palette to run with…
I’m thinking white, blueish/purple, and a complimentary dark color… thinking “galaxy color” as the secondary color or that “blueish purple”

Tailwind config is updated with the primary color... still need to figure out a complimenting secondary color

Maybe use Chakra-ui ? UI - framework built with Tailwind by Vercel I believe


Generate unique pre-shared key for each client

Generate a unique pre-shared key for each client as per the WireGuard protocol to improve post-quantum resistance.

https://www.wireguard.com/papers/wireguard.pdf#subsection.5.2
https://wiki.archlinux.org/index.php/WireGuard#Key_generation
https://doc.turris.cz/doc/en/public/wireguard

Hi @jellemdekker thanks for our PR, however please read https://github.com/pivpn/pivpn/blob/master/CONTRIBUTING.md  and note that no PR are accepted towards Master branch.
Thank you

Apologies @4s3ti, I have updated the base branch from master to test.

Cool, for some reason I thought it worked like OpenVPN where the pre-shared key is the same for each client (tls-crypt-v2 is in the works).
For consistency, could you save the key in a file like that? wg genpsk > keys/${CLIENT_NAME}_psk Instead of saving it to a variable.

Sure thing, @orazioedoardo. Are the new changes okay?


livestream.com

Match found in https://hosts.ubuntu101.co.za/hosts:
livestream.com

Fixed by https://github.com/Ultimate-Hosts-Blacklist/whitelist/pull/15


Generation of embed.go files from repo root broken

Describe the bug
embed.go files are not updated anymore upon running make generate in repo root
Steps to reproduce
Steps to reproduce the behavior:

Change something in accounts/, settings/ or onlyoffice/ service
Run make generate in repo root

Expected behavior
Updated embed.go files in version control
Actual behavior
No updated embed.go files in version control
Quickfix
cd into the respective folders and run make embed.yml (thanks @C0rby for the hint)
EDIT: Also affects make generate inside the web/ directory, discovered it when following the web release guidelines

regression introduced in #2379 by removing GENERATE ?= $(PACKAGES).
fix in #2449


The design of color palette

The color palette is still in beta stage, some colors may be adjusted in the future.
Currently, the colors look good on my device, but may not look fine on yours. If you have any ideas or suggestions, please feel free to share them here.
Note: Since the colors display differently on different monitors, photos may be more helpful than screenshots if you want to upload images.

See more discussion here: The design of color palette #11

v1.0.0 has been released in gruvbox-material, and the colors will not be adjusted in the future.


Channel stuck opening - Pending

Background
I opened a channel today but even tho it shows as pending on TH, RTL and Umbrel dashboard, it doesn't show up in the mempool.
It just says transaction not found.
Your environment

version of lnd - 14.1
which operating system (uname -a on *Nix) - Debian - Raspberry Pi 4 - 8Gb. Umbrel 0.4.9
version of btcd, bitcoind, or other backend - Bitcoin Core 22.0

Steps to reproduce
I opened a channel today but even tho it shows as pending on TH for example, it doesn't show up in the mempool.
It just says transaction not found.
https://mempool.space/tx/3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563
lncli pending channels shows this:
lncli pendingchannels
{
"total_limbo_balance": "2367232",
"pending_open_channels": [
{
"channel": {
"remote_node_pub": "02fe80fb6a2dc0fb6e9bec49c76d048889c91355d4e900fcb026bf095665790325",
"channel_point": "3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1",
"capacity": "4500000",
"local_balance": "4496530",
"remote_balance": "0",
"local_chan_reserve_sat": "45000",
"remote_chan_reserve_sat": "45000",
"initiator": "INITIATOR_LOCAL",
"commitment_type": "ANCHORS",
"num_forwarding_packages": "0"
},
"confirmation_height": 0,
"commit_fee": "2810",
"commit_weight": "772",
"fee_per_kw": "2500"
Lnd logs show this :
2021-12-02 06:54:46.588 [INF] FNDG: Generated ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1) for pending_id(2870300d2b72be9665f7976f757b11a3e4565d02c7b30ee1c7defb1cc675520f)
2021-12-02 06:54:46.936 [INF] FNDG: Broadcasting funding tx for ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1):<PHONE_NUMBER>0103128f9da1258b8775f1e528407024c229010f0a8b0523f4fb8ea86294dd3eb76a00000000000000000092acf08ba4f60e51c1dd071afa2fd476fbfdca2894033c611e56531e39b34871000000000000000000848f94c56a63c856c6fd708f83d943cbca8739467e8001e540d6b5910fe618de0000000000000000000280310e0000000000160014456cca7b81277a871927c6cc5a05df4ae06f68a420aa4400000000002200203fd82c2c21c989d9d458b181952d3993919624df33e1fb417a94069c493a3ddc02483045022100d899c2c25c6dd1a247cb9f751338c7c5a1f38682e232b5e99028ae96cb340c0d022070348b6c9a2de9443e5efd61d7d85d707e61d8b0b6588d29e25564fc4a9e844601210380149e125cf2d81ef2e9002efe459322ddb868085865443ac6267efaa692871e02483045022100ab4d67fbbf37e1630beccf4cd4d1868d57cb6a18b57e09cbfc3fad54dc90bef302205c3619f88a232fbeb5d866f37ca559cab7603cbceca239ff81f1e5949a32594d012103b22dbe4acb219fb4cbe627b06698ad5fcbba1712953dbdc9d0fa4ae411747c7002473044022004741012b2c2d2462c7869502a87ba5dcfd0809c5c995440ed24958d0802309f0220420a6c24ead32aaaf387d59b993c1af473c4617137b92ca06f18aaa0f9fff504012102f888f116689c7a1905d5ef53be8d6b9e131a1d7fa72c18e8bec0b2f29ce9926c00000000
2021-12-02 06:54:46.936 [INF] LNWL: Inserting unconfirmed transaction 3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563
2021-12-02 06:54:46.937 [ERR] LNWL: Notifying unmined tx notification (3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563) while creating notification for blocks
2021-12-02 06:54:46.962 [ERR] FNDG: Unable to broadcast funding tx<PHONE_NUMBER>0103128f9da1258b8775f1e528407024c229010f0a8b0523f4fb8ea86294dd3eb76a00000000000000000092acf08ba4f60e51c1dd071afa2fd476fbfdca2894033c611e56531e39b34871000000000000000000848f94c56a63c856c6fd708f83d943cbca8739467e8001e540d6b5910fe618de0000000000000000000280310e0000000000160014456cca7b81277a871927c6cc5a05df4ae06f68a420aa4400000000002200203fd82c2c21c989d9d458b181952d3993919624df33e1fb417a94069c493a3ddc02483045022100d899c2c25c6dd1a247cb9f751338c7c5a1f38682e232b5e99028ae96cb340c0d022070348b6c9a2de9443e5efd61d7d85d707e61d8b0b6588d29e25564fc4a9e844601210380149e125cf2d81ef2e9002efe459322ddb868085865443ac6267efaa692871e02483045022100ab4d67fbbf37e1630beccf4cd4d1868d57cb6a18b57e09cbfc3fad54dc90bef302205c3619f88a232fbeb5d866f37ca559cab7603cbceca239ff81f1e5949a32594d012103b22dbe4acb219fb4cbe627b06698ad5fcbba1712953dbdc9d0fa4ae411747c7002473044022004741012b2c2d2462c7869502a87ba5dcfd0809c5c995440ed24958d0802309f0220420a6c24ead32aaaf387d59b993c1af473c4617137b92ca06f18aaa0f9fff504012102f888f116689c7a1905d5ef53be8d6b9e131a1d7fa72c18e8bec0b2f29ce9926c00000000 for ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1): transaction rejected: output already spent
2021-12-02 06:54:46.962 [INF] CNCT: Creating new ChannelArbitrator for ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1)
2021-12-02 06:54:46.999 [INF] CNCT: ChannelArbitrator(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1): starting state=StateDefault, trigger=chainTrigger, triggerHeight=712202
2021-12-02 06:54:47.000 [INF] NTFN: New spend subscription: spend_id=77, outpoint=3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1, script=0 3fd82c2c21c989d9d458b181952d3993919624df33e1fb417a94069c493a3ddc, height_hint=712202
2021-12-02 06:54:47.001 [INF] NTFN: Dispatching historical spend rescan for outpoint=3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1, script=0 3fd82c2c21c989d9d458b181952d3993919624df33e1fb417a94069c493a3ddc, start=712202, end=712202
2021-12-02 06:54:47.064 [INF] FNDG: Finalizing pending_id(2870300d2b72be9665f7976f757b11a3e4565d02c7b30ee1c7defb1cc675520f) over ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1), waiting for channel open on-chain
2021-12-02 06:54:47.066 [INF] NTFN: New confirmation subscription: conf_id=7, txid=3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563, num_confs=3 height_hint=712202
2021-12-02 06:54:47.067 [INF] CNCT: Close observer for ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1) active
2021-12-02 06:54:47.067 [INF] FNDG: Waiting for funding tx (3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563) to reach 3 confirmations
2021-12-02 06:54:47.116 [INF] NTFN: Historical spend dispatch finished for request outpoint=3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1, script=0 3fd82c2c21c989d9d458b181952d3993919624df33e1fb417a94069c493a3ddc (start=712202 end=712202) with details:
2021-12-02 08:46:32.642 [WRN] CHBU: Replacing disk backup for ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1) w/ newer version
2021-12-02 08:46:32.948 [WRN] CHBU: Replacing disk backup for ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1) w/ newer version
lncli wallet pendingsweeps
{
"pending_sweeps": [
{
"outpoint": "cda6066f69ba3cae2300c83b86b576a2ce1805e18a63348c94955662cea38655:1",
"witness_type": "COMMITMENT_ANCHOR",
"amount_sat": 330,
"sat_per_vbyte": 1,
"broadcast_attempts": 9,
"next_broadcast_height": 712312,
"requested_sat_per_vbyte": 1,
"requested_conf_target": 0,
"force": false
}
]
}
Expected behaviour
Channel open
Actual behaviour
Channel does not open and tx does not show in the mempool
ThunderHub shows the funds as pending under lightning
A solution to this without losing the funds would be appreciated

Your problem is: Unable to broadcast funding tx ... for ChannelPoint(3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563:1): transaction rejected: output already spent
Something is wrong with your wallet state. Try restarting lnd with reset-wallet-transactions=1 in your config file, that will re-scan your UTXOs. Once your funds are represented correctly again, you'll probably need to remove the pending channel with lncli abandonchannel since it will never open in the first place.

I see. So you suggest adding that line under applications options and restard lnd.
What would be the exact syntax of lncli abandonchannel ?.  I have looked at the --help command but am unsure.
Would this be correct or do I need to add -i too?. Thats the TxID
lncli abandonchannel 3ff9d7d37fc9cb11a250069da2a30df7f3382bbd770601c95546edea66fad563
Many thanks

I have restarted lnd with reset-wallet-transactions in the config file. It seems to be taking ages to restart properly. Keep finding this in the lnd.log
2021-12-02 16:03:30.043 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:30.057 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:30.099 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:30.099 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:31.120 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:03:31.432 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:03:31.638 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:31.647 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:31.662 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:31.702 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:31.705 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:34.845 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:34.867 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:34.867 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:34.910 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:34.910 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:41.036 [INF] RPCS: New transaction subscription
2021-12-02 16:03:41.253 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:41.279 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:41.279 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:41.321 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:41.321 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:50.980 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:03:51.740 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:03:54.063 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:54.086 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:54.090 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:54.128 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:03:54.128 [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: server is still in the process of starting
2021-12-02 16:04:07.629 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:04:07.635 [INF] RPCS: Canceling transaction subscription
2021-12-02 16:04:10.775 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:04:11.515 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:04:30.873 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:04:31.224 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:04:50.961 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:04:51.657 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:05:10.937 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
2021-12-02 16:05:11.256 [ERR] RPCS: [/lnrpc.Lightning/PendingChannels]: unable to find arbitrator
Is this normal?

sorted. Took 5 hours to reset the wallet. To abandon I used docker exec lnclo abandonchannel --funding_txid --output --i_know_what_i_am_doing

Closing as the base issue looks to be resolved, we have another issue tracking oddities with the wallet and certain unconfirmed transaction cases.

Just for anybody looking at this ticket - it seems to be correlated with this issue: https://github.com/lightningnetwork/lnd/issues/6241#issuecomment-1033738898


Adding vpasupathi as a publisher to fortify-on-demand-uploader

I am the lead dev on this plugin and need to give vpasupathi rights to publish to refactory
fortify-on-demand-uploader plugin
List the GitHub usernames of the users who should have commit permissions below:

@pvivekdev

### Release permission checklist (for submitters)
- [x] The usernames of the users added to the "developers" section in the .yml file are the same the users use to log in to [accounts.jenkins.io](https://accounts.jenkins.io/).
- [x] All users added have logged in to [Artifactory](https://repo.jenkins-ci.org/) and [Jira](https://issues.jenkins.io/) once.
- [x] I have mentioned an [existing team member](https://github.com/orgs/jenkinsci/teams) of the plugin or component team to approve this request.

I'm confused why the Jira validation keeps failing. We may have initially forgotten to do that, but I've since confirmed he has logged into Jira, closed and reopened the PR, and just now closed the original and created a new one


Google C++ style

Google C++ style place class member access specifier in 3 spaces indent, which make guess-indent set indent to 1 space. In practice this should be 4 spaces.
A simple example:
class Example {
   public:
    Example() {}
};

can we support this as a special case?

Thanks for letting me know. I'm not yet sure how to best fix this issue.
I have an idea on how I could modify the heuristic, but I'm worried that it might make it worse overall.
I created a new branch with a modified heuristic which works better with the Google C++ style, though it still tails with the example you provided (it is too short).

I don't know much lua or nvim plugin writing, can we maybe just ignore access modifiers? Let say if a C++ line matches regex "^\s*(private|public|protected)\s*:\s*$", then skip this line.

Hey @zhongsanming, a fellow C++ Google Style Guide user. I arrived here because of a different problem (in Neovim 0.8 without github.com/gpanders/editorconfig.nvim plugin, the guess-indent.nvim failed to respect my EditorConfig -- now solved), but here's a solution we happily use in our codebase:
just add an .editorconfig to your root directory of the project, with approx the following content:
# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true

[*.{h,cpp}]
indent_style = space
indent_size = 4

AND in case you are under 0.9 version of Neovim, install gpanders/editorconfig.nvim so the guess-indent understands the buffer vim.b.editorconfig variable here https://github.com/NMAC427/guess-indent.nvim/blob/b8ae749fce17aa4c267eec80a6984130b94f80b2/lua/guess-indent/init.lua#L272.
After that, the guess-indent should be good!

@agronskiy Thank you for this nice solution, I'll give it a try.


Installing dependencies

Hi, thanks for the great work.
I want to test your code, however, I'm struggling to run it. I followed your notes on installation and downloaded the pre-trained models. I'm trying to execute the following command as said in the readme:
python vectorize_u3d.py logs/pretrained-wireframe/npz/003576000 --vpdir logs/pretrained-vanishing-points/npz/000096000 57

First, I needed to figure out that I have to use python=3.7 instead of python=3.9 to resolve dependency conflicts during install.
After installation seemed fine, I'm now getting following error:
RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd
Traceback (most recent call last):
  File "vectorize_u3d.py", line 39, in <module>
    from wireframe.optimize import (
  File "/home/brakebein/PycharmProjects/shapeunity/wireframe/optimize.py", line 5, in <module>
    import cvxpy as cvx

Wenn I decrease numpy version to 1.14, I get another error:
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
Traceback (most recent call last):
  File "vectorize_u3d.py", line 39, in <module>
    from wireframe.optimize import (
  File "/home/brakebein/PycharmProjects/shapeunity/wireframe/optimize.py", line 5, in <module>
    import cvxpy as cvx

And during install I already got following message:
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
mkl-fft 1.2.0 requires numpy>=1.16, but you have numpy 1.14.6 which is incompatible.
cvxpy 1.1.17 requires numpy>=1.15, but you have numpy 1.14.6 which is incompatible.

However, increasing the numpy version to 1.16 and above throws the RuntimeError as said above.
Despite of consulting Google, stackoverflow, etc., I could not resolve this issue. So, my question is: Which dependency versions are required to successfully run your code?

It is clear that your numpy version is too old according to the first error. You should upgrade it instead of downgrade it.

Thanks. I tested each version now, and with numpy 1.20 ad 1.21 it seens to work. I was pretty sure, I tested those versions before.
Now, I'm still struggling to download this SU3 dataset. It seems like the daily download limit has always been reached (I tested it the last 3 days). Or how can I test my own images with the pre-trained model?

I have no problem downloading it manually with an Incognito tab.

For some strange reason, I wasn't able to download the dataset on Ubuntu with Firefox/Chrome (always saying that the maximum downloads per day was exceeded) or with your download script. I have now tested it on my Windows machine and the download worked without any problems.


Upgrade to latest react testing library

The latest React Testing Library updated the package name to be namespaced under @testing-library.
This PR updates the version requirements and adjusts the module path where it is referenced.

I confirmed it works locally via installing through git and building the dist.

Thanks, @kayluhb. I’ll merge this and release an update tomorrow.

Released version 1.1.0.


ntr : conditions to reflect when Temperature Shift occurred

shift to non-permissive temperature in G1
shift to non-permissive temperature in G2

I guess it is a block and release?
Do you want to specify the type of block?
eg HU block and release into G2 at non-permissive temperature

no release though....its to see how long the cells take to die when they t.s. at different time points.
bummer, can't remember which paper this was,

they must synchronize them somehow so that the  temperature block is at the specific cell cycle stage?
(if the mutant just stops dividing at a specific cell cycle phase without synchronization then it should be done as a phenotype..)

Oh yes.  IIRK, they synchronised first with a ts block and release (but this  is background).
Than, they move to the restrictive temperature for the mutant they are really testing, and see where it dies. What I wanted to capture was that the 'point of death' depended where the TS shift was administered.

you mentioned PMID:19330768 in #2590

thats the one. Will re-read tomorrow...

I have the same thing in this paper,
PMID:9808627
its
unequal mitotic sister chromatid segregation following normal mitosis
if the block is in G2,
but palin
unequal mitotic sister chromatid segregation
if the shift is in G1
(i.e needs to go through S-phase unmutated)

Hmm, I created
id: PECO:0000292
name: nitrogen starvation at normal temperature and shift to high temperature in rich medium
for the G1 synch. For G2 synch they just elutriated the cells and then shited to high temp, so you can use the already existing high temperature condition.
However, I don't think I would annotate to two different phenotype terms with different conditions based on this. I haven't properly thought about it but does something happen during G1/S that cause trouble down the line?
I don't think that's two different phenotypes observed in one population - it is the same phenotype? (i.e. cells go though G1/S, something goes wrong -> unequal chromosome seg in the following mitosis)

closing because it's ancient and hasn't had any updates in literally years
also not sure whether there was anything left to do for it ...


LiveViewCoordinator access (pushEvent)

This is a continuation of #1014, which adds the ability to receive events on a LiveSessionCoordinator but unfortunately there is still no way to push events.
Use case:
I have a SwiftUI view that combines LVN with some native interop. Specifically a native component provides a token via callback that I want to push to the server, which will then use it to make API requests on behalf of the user to retrieve resources owned by the user on the 3rd party API service.
import SwiftUI
import LiveViewNative
import Teller

struct ContentView: View {
    let userId: String
    @State var presentTellerConnect: Bool
    @StateObject var coordinator: LiveSessionCoordinator<EmptyRegistry>

    init(userId: String) {
        self.userId = userId
        self.presentTellerConnect = false

        var config = LiveSessionConfiguration()
        config.navigationMode = .enabled
        var coordinator = LiveSessionCoordinator(URL(string: "http://<IP_ADDRESS>:4000/accounts?token=\(userId)")!, config: config)
        self._coordinator = StateObject(wrappedValue: coordinator)
    }

    var body: some View {
        LiveView(session: coordinator)
            .onAppear {
                Task.init {
                    coordinator.handleEvent("present-tc", handler: { (_, payload) in
                        presentTellerConnect = true
                    })
                }
            }
            .tellerConnect(isPresented: $presentTellerConnect, config: TellerConnect.Config(
                appId: "app_oj5u9c4lklkm6epl1s000",
                environment: .sandbox,
                selectAccount: .multiple,
                completion: { event in
                    switch event {
                    case .enrollment(let authorization):
                        Task.init {
                            // I want to do a pushEvent here
                        }
                    default:
                        break
                    }
                }
            )
        )
    }
}

I thought about creating a view that inherits from LiveView, but rootCoordinator is private.
I'm either looking for guidance on what you think is the correct way to do this within the current API, or for pushEvent to be made available on LiveSessionCoordinator.

My current workaround is to force overwrite LiveSessionCoordinator in my local copy with the following two delegate functions:
public class LiveSessionCoordinator<R: RootRegistry>: ObservableObject {
    // ...

    var rootCoordinator: LiveViewCoordinator<R>!

    public func pushEvent(type: String, event: String, value: Any, target: Int? = nil) async throws {
        try await rootCoordinator.pushEvent(type: type, event: event, value: value, target: target)
    }

    // Delegate function for pushing events (for some Encodable type)
    public func pushEvent(type: String, event: String, value: some Encodable, target: Int? = nil) async throws {
        try await rootCoordinator.pushEvent(type: type, event: event, value: value, target: target)
    }

    // ...
}

I don't know what you think the correct solution is though.

Depending on the configured navigationMode, rootCoordinator may not be the presented one. A better option may be to do something like navigationPath.last?.coordinator ?? rootCoordinator. This will ensure you always send an event to the top-most LiveView in the navigation stack.
Another option would be to expand the LiveSessionCoordinator to have a property similar to presentedViewController in UIKit. Something like presentedLiveViewCoordinator, which would do that lookup automatically.


Seeding is very slow!

I ran a seed db script in another container. This container has a volume from the host. Any idea why it is so slow to seed? What output would you need to determine the cause?
Thanks.

If it's encountering any errors or limits it should show in the docker logs, also volumizing any high I/O directories would improve performance
But this is really a question for the Docker Community Forums, Docker Community Slack, or Stack Overflow


reply as func

adds to #27
allows reply to be a function without degrading performance
#27 bench:
Stat         Avg      Stdev     Max
Latency (ms) 0.13     0.36      14
Req/Sec      14002.55 782.28    14911
Bytes/Sec    2 MB     122.46 kB 2.23 MB

This PR bench:
Stat         Avg     Stdev     Max
Latency (ms) 0.13    0.36      14
Req/Sec      14344.8 656.02    14999
Bytes/Sec    2.06 MB 109.47 kB 2.23 MB

This one shows more, but it varys enough that we can call them equivalent
Propose that this PR is closed and merged into #27

Coverage remained the same at 98.876% when pulling 755c7a2dc82a86dc419922426b0af1f376d8fc78 on davidmarkclements:reply-refactor-refactor into 0f7fe69b34e9d29dd243ebae5161d0a233178253 on mcollina:reply-refactor.

forgot to say - I'm fairly certain we can do this safely - due to single threaded nature - but we need more eyes on it to make sure there isn't state conflict (@delvedor @mcollina @marcbachmann)

no, won't work. as soon as you have something async in the handler you either get a headers already sent error or some data of the previous request.
e.g.
'use strict'

const t = require('tap')
const test = t.test
const request = require('request')
const fastify = require('..')()

var nr = 0
fastify.route({
  method: 'GET',
  url: '/',
  handler: function (req, reply) {
    var reqId = nr++
    if (reqId == 0) setTimeout(function () { reply({ hello: reqId } ), 1}) // change that to 0 to get a header already sent error
    else reply(new Error('error'))
  }
})

fastify.listen(0, function (err) {
  if (err) t.error(err)
  fastify.server.unref()

  test('request timing', t => {
    t.plan(5)

    request({
      method: 'GET',
      uri: 'http://localhost:' + fastify.server.address().port
    }, (err, response, body) => {
      t.error(err)
      t.strictEqual(response.statusCode, 200)
      t.deepEqual(JSON.parse(body), { hello: 0 })
    })

    request({
      method: 'GET',
      uri: 'http://localhost:' + fastify.server.address().port
    }, (err, response, body) => {
      t.error(err)
      t.strictEqual(response.statusCode, 500, 'statusCode must be 500')
    })
  })
})

If I remember well, me and @mcollina have already discussed about this solution and we discarded it in favor to the hidden class.
However, I think that @marcbachmann is right.

Ahhhh :(
Thanks @marcbachmann for verifying
Shame it'd be nice if it could be an independent non-bound function
Even if we could get rid of header issue, @mcollina your still not be in favour?

@davidmarkclements we already experimented on that with @delvedor, and it was slower and not working (if I remember correctly)


Issue 9 merge in context jsonld to registration schema

Working on fix for #9

Oh hey sorry didn’t mean for this to be reviewed until out of draft stage.
Did you both get notifications once I add as a reviewer? I will be a little less quick off the mark next time.

But yes the plan was to provide instructions for review as well - apologies if your time feels a little wasted

Did you both get notifications once I add as a reviewer?

Yeah - I think as soon as you mention any GitHub ID, they get a notification mail.

Ok - it seems you are both victims of my cluelessness at GitHub’s UI. 🤦♂
I’ll let you know when this is ready for review.


Support aliases with trailing spaces

Aliases to special keywords like exec, builtin or sudo are normally treated like the token they expand to. This does not work when the expansion is suffixed with a space. The zshbuiltins manual page section about the alias builtin explains, why this is a reasonable thing to do.

A trailing space in value causes the next word to be checked for alias expansion.

Cross-referencing #608.


mismatch between example code and model files

I found in this repo and the huggingface model card there is a line:
# tokenizer.eos_token_id is the id of <|EOT|> token

But in tokenizer_config.py inside model repo the eos_token is set to be <｜end▁of▁sentence｜>:
"eos_token": {
    "__type": "AddedToken",
    "content": "<｜end▁of▁sentence｜>",
    "lstrip": false,
    "normalized": true,
    "rstrip": false,
    "single_word": false
  }

which is correct?

<｜end▁of▁sentence｜>


Fixed syllabus link in README.md

Or maybe we can rename the pdf and remove spaces in the file name?


Ansible cluster installation

Migrating https://github.com/Azure/ARO-RP/pull/3843 to aro-e2e. Refactored to move the roles into an Ansible collection azureredhatopenshift.cluster.
What this PR does / why we need it:
This PR leverages Ansible to automate cluster creation in predefined configurations. These configurations are intended to exercise ARO features in a repeatable manner. For example, we want to make sure that various complex cluster configurations continue to work in production:

UserDefinedRouting with blackhole route
Disk encryption at host
Disk encryption with bring-your-own-key
Bring-your-own-NSG (TODO)

Also implemented is the ability to upgrade through a sequence of versions. See ansible/inventory/upgrades.yaml and ansible/inventory/upgrades-candidate.yamlfor examples.
Refer to ansible/README.md for details how to run the Ansible playbooks via make ansible-image and make cluster targets.
For development, this also adds lint-ansible and test-ansible targets. Lint requires ansible-lint to be installed. Linting also runs as part of the container image build. test-ansible runs inside an aro-ansible container and does not need ansible installed.

/assign sudobrendan

/retest

Added code in the latest commit for https://issues.redhat.com/browse/ARO-12055, enabling MIWI support and local RP support via rp_mode=development


Experimental features (experimental branch - unpublished/unmerged)

@digitalextremist - this is so I can keep track of unmerged work and so you can pick whatever you'd like into the release (I can backport/patch/rebase).
This stuff need work before it's merged:

[ ] reimplemented (Internal)Pool (requires Reaper)
[ ] Reaper class (working proof-of-concept, requires Thread.shutdown_strategy)
[ ] Thread#shutdown_strategy - (for Reaper) works in Threaded, not available in Fibered yet (!)
[ ] Mailbox lockup prevention/fixes (works - needs review)
[ ] anti-deadlock Call::Sync timeouts (proof-of-concept)

I'll prepare these on a separate branch, since they should be merged without issues:

[ ] threaded: prevent occasional lockup under JRuby
[ ] specs: enhancement for debugging under JRuby
[ ] specs: avoid mutating task meta parameters (needed for test hardening)
[ ] specs: Probe spec fixes (to deal with failures under heavy load)
[ ] specs: StackDump race condition fixed
[ ] specs: ignore MRI timer threads in leaked threads
[ ] specs: remove traces of all flaky tests
[ ] specs: refactor - split spec into smaller files
[ ] specs: enforce mocking crash() calls + fix specs for it
[ ] specs: misc fixes
[ ] completely stub out Logger.crash in specs (proof-of-concept)

@e2 add #563 to this and use 0.17.5-experimental
... which I know is broken right now, but it's failing on two tests that ought to be clear in the next hour or two, and I'll pull an all-green prerelease into this beardwilling. Man I miss Cellubeard.

Just for reference: https://github.com/celluloid/celluloid/pull/599

:+1 for locking the thread, btw

This forever moved to abstractive/celluloid-experimental#2, and once proven each piece can be merged into celluloid/current


Failed to fetch 7TV channel emotes (unknown error)

Checklist

[X] I'm reporting a problem with Chatterino
[X] I've verified that I'm running the most recent nightly build or stable release
[X] I've looked for my problem on the wiki
[X] I've searched the issues and pull requests for similar looking reports

Describe your issue
I just get this error. Nothing else. No logs nothing.
Screenshots

OS and Chatterino Version
Nightly 7.3.4 Windows 11

Could be a few reasons, see #58
Try loading the API directly in browser. https://api.7tv.app/v2/users/therealdadbeard/emotes

It just started to work again.

I'll go ahead and close this then, it was very likely your connection to 7tv was blocked by something, if it happens again try that link I posted above and see if the link loads, but this is very unlikely a Chatterino issue.


Code completion not working

Code completion doesn't seem to work properly for me in the current version of Chrome or Firefox.  The div elements appear, but they are empty/without any text.  There are no error messages in the logged in bash console nightlight was launched from.

Can't seem to reproduce this. I downloaded your old-school-library project and it appears to work on my machine:

It looks like you're using Linux so that is one difference, but I don't know of any Linux-specific problem that might cause that. If you have any other info on your setup please let me know.

Seems to be working now.  Something must have been out of date and got updated.  No idea what though.  Thanks for checking.

No problem!

i got the same problem too with OS X 10.12.1 and Safari 10.0.1, also chromium did't work


Every time I commit changes all my data gets lost.

⚠ Please verify that this bug has NOT been raised before.

[X] I checked and didn't find similar issue

🛡 Security Policy

[X] I agree to have read this project Security Policy

📝 Describe your problem
When i made changes to code like the notifications everything gets reset and i have to create the admin account again i was wondering if there was a way to stop.
🐻 Uptime-Kuma Version
1.12.1
💻 Operating System and Arch
Ubuntu 20.04
🌐 Browser
OperaGX
🐋 Docker Version
20.10.9
🟩 NodeJS Version
16.14.2

Have you added a docker volume on which to store the database? If not then every time you restart the container it will start with a fresh database.
Make sure that you are running docker as detailed in the readme and that you have -v uptime-kuma:/app/data or similar in your docker launch configuration

Just glancing at it I am quite certain that the variables you use in the yml file are the culprit...
- ${FILE1}:/app/data
Why file? Should be a directory.


Release Google.Cloud.Batch.V1 version 1.1.0

Changes in this release:
New features

Adds named reservation to InstancePolicy (commit ad603eb)

Documentation improvements

Fix minor docstring formatting (commit 48e5d7c)
Remove "not yet implemented" for Accelerator & Refine Volume API docs (commit ad603eb)
Update the job id format requirement (commit ad603eb)
Fix minor docstring formatting (commit 2069ee9)

Created release for Google.Cloud.Batch.V1-1.1.0


Pluggable authorization middleware

Problem
Blaze does not support FHIR's authorization for resource access control.
Every deployment of Blaze may have unique authorization providers and access control protocols.
Proposed Solution
Blaze should be deployed with a free-floating jar added to the classpath during launch. The authorization jar will provide a custom middleware for handling authorization. Initialization will be managed by Integrant.
Details

The authorization jar must be added to the classpath during launch. For example, java -cp blaze.jar:my-authorization.jar blaze.core.
The fully qualified namespace must be provided with an environment variable named AUTHORIZATION_NS.
Prior to starting Integrant... If AUTHORIZATION_NS is non-nil and non-empty, try requiring-resolve on the provided path. If error, exit with informative error message without starting Integrant.

Can consider checking for the existence of the OPENID_PROVIDER_URL env var because the identity key on request will likely be required.

The provided namespace must extend ig/init-key (and ig/halt-key! where appropriate)

ig/init-key should return a ring middleware
Can consider checking for the existence of the init-key :authorization method using (keys (methods ig/init-key)) after using requiring-resolve on AUTHORIZATION_NS. This is another pre-Integrant exit point.

Other notes

The authorization service can use the provided database connection but could choose to ignore it
We could consider that the provided namespace should also expose a var whose value is the key that will be used for Integrant, for example (def key :authorization). In the beginning, I intend the key to be hardcoded to :authorization.

Pros and Cons
Pros

Custom authorization implementation for every Blaze deployment
Blaze needs to know nothing about configuration for the authorization service
Fail fast if authorization namespace cannot be found
Leverage existing Integrant + middleware architecture

Cons

Configuration of the authorization service (for example, database) will take more effort than a solution integrated directly into Blaze

Additional things to consider
We have to find a way how the plugin can define it's dependencies and config. I mean a combination of what can be found under default-config in blaze.system and the specs needed to coerce the environment variables.
There is a potential to run into Classpath problems. The additional Jar could bring a different version of a lib say buddy. With that we could have different versions of the same lib in our single Classpath leading to really nasty problems. In my opinion a real plugin architecture would need to use something like OSGi. But I never heard of someone from the Clojure community to use it. Do you have experience with plugin architectures in Clojure?
Aside from that two points using Integrant with the multimethods an Ring middleware is a super elegant way to introduce any cross cutting aspect into Blaze. If we get that working, I would even use that plugin mechanism for authentication.
Things to consider at deployment time
There could be a Docker image containing various plugin Jars which all work together. A startup script could load the plugins based on env vars. Such a "official" Docker image would somehow mitigate the Classpath problem because we could ensure compatibility between plugins.
Complete other Ideas
Introducing a real plugin system to Blaze would be a more monolithic approach rather than a micro service one. Using OSGi would be a good indicator leaving micro service territory to me. I don't say that the mirco service architecture is a good solution for everything. But we should also think about outsourcing authentication/authorization out of Blaze core. Originally I had the idea to use something like Envoy for external authentication/authorization for Blaze but haven't started to evaluate it.

 I think for almost any one this would be an advanced option and a deployment time not run time concern.  I propose documenting adding blaze to the provided profile for the authorization "plugin". We use this to much success for other projects like Apache Storm.

Using Envoy or other reverse proxies will cause a lot of duplicated work. I an not saying that is horrible, but often one has to load a resource to determine if a user has access to if for anything more sophisticated that RBAC.

I agree with you here.

I propose documenting adding blaze to the provided profile for the authorization "plugin". We use this to much success for other projects like Apache Storm.

That is a good idea. It's not a perfect solution because we'll still face versioning issues. But better than nothing.

Using Envoy or other reverse proxies will cause a lot of duplicated work. I an not saying that is horrible, but often one has to load a resource to determine if a user has access to if for anything more sophisticated that RBAC.

Can you describe that kind of authorization you will need? I currently read everything, I can find about Authorization in the FHIR Context. I will not rule out a plugin system. But perhaps we could also implement some authorization schema which is sufficient for your needs and also for many others. Although I know that Authorization is a very complex field with very special needs.

If you read through the General Considerations I would prefer the first example of an external security system which itself mimics a FHIR API and uses Blaze only as storage. It may be not possible to implement such a system with Envoy alone but I could imagine a system implemented in Clojure which can wrap any FHIR server adding just authentication/authorization and maybe audit logs. Such a system would be completely independent of Blaze and not only useful together with Blaze.

This might be also of interest: http://hl7.org/fhir/smart-app-launch/index.html

In general, I'm not against a plugin system. In particular, I would like to implement FHIR operations as plugins. Currently I implemented $evaluate-measure for CQL support already. I really would like to see it as plugin rather than in the core.
I found that Metabase has a plugin system which currently seems only to be used for drivers but they also plan to use it for other things.

https://github.com/metabase/metabase/wiki/Writing-a-Driver:-Packaging-a-Driver-&-Metabase-Plugin-Basics
https://github.com/metabase/metabase/pull/9087

They have quite some classloading stuff going on. This allows them to just load the plugins from a directory, so you don't need to specify the jars with -cp. I currently don't see whether the use of a separate Classloader will mitigate the problem of having different versions of the same jar. I'll ask that question on there gitter later today.

One thing to remember is that class loader isolation does not isolate clojure. All clojure code will be evaluated in the class loader that loaded Clojure. This would not enable different versions of clojure dependencies only the java dependencies they depend on.

Also Alex was talking about including the add-lib from tools deps to core. This would allow you to delay the loading to runtime. I know classpath isolation is possible, I don't think class path isolation is worth the complexity. Another clean option would be for plugin maintainers to collaborate to keep a deps edn file that satisfied all the plugins with each one as an alias. It could have a test sweet for all the plugins and run ci on changes. The whole project would be a deps edn file and documentation.
clj -R:plugin1:plugin2 -m start.blaze

I'm happy that you mention deps.edn. Over the weekend, I started to convert Blaze from Leiningen to deps.edn. You can see the progress in the modular branch. I have evaluated OSGi further and you are right, it doesn't work well with Clojure. I plan to cut Blaze into modules but leave them in the same repo just in different dirs. I plan to have vertical features like $evaluate-measure and horizontal things like auth in separate modules which can be enabled/disabled at deploy time like feature toggles. Currently the build artifact is an uberjar but using clj to run Blaze could be also an option. In my project I need a deploy option under Windows without Docker. So an uberjar is ideal there.
Also if Blaze is fully modular with a very thin core module at the root, it would be possible for others to pick a set of "official" modules through git references, add their own ones and put together the classpath with their own core module.
What do you think about this approach?

I really like that approach. The question left on the table is configuration and initialization/discovery. How do we inject middleware etc? I think it is sufficient for now that the core module defines them for now, but in the future it would be cool to have hooks that could modify a data structure representing the server and endpoints. On the other hand it will be hard to get much composeability other than registering new operations or overriding a resources functionality.  An example of a extensiblity goal I would have would be enabling two encoding for date one binary and one tuple based.

Another option I discussed before would be to use a vase like approach where you would read the fhir profiles build the data structure for the endpoints that composes functions from the modules. We would provide one for the base modules and people like use would just customize our own to integrate our modules. Most entirely general frameworks for module composition I haven't seen work well in java land. Interceptors and middleware work pretty well and It is likely we could make some for special case definition like matching fhir schema from datomic to json and from parameters to a datomic query fragment.

One integration point I see is a module providing an Integrant config map together with a defmethod, as you already suggested. I already tested this:
(ns blaze.breeze.authorization.core
  (:require
    [integrant.core :as ig]
    [taoensso.timbre :as log]))

(def config
  {:module.breeze.authorization/middleware
   {:database/conn (ig/ref :core/database-conn)}})

(defmethod ig/init-key :module.breeze.authorization/middleware
  [_ _]
  (log/info "Init Breeze Authorization"))

In blaze.system, we would require the namespace blaze.breeze.authorization.core dynamically and merge it's config into the core config:
(ns blaze.system
  (:require
    [clojure.spec.alpha :as s]
    [clojure.string :as str]
    [datomic.api :as d]
    [integrant.core :as ig]
    [taoensso.timbre :as log]))

(s/def :module.breeze.authorization/enable
  boolean?)

(s/def :system/config
  (s/keys
    :opt
    [:module.breeze.authorization/enable]))

(def ^:private default-config
  {:core/database-conn
   {:database/uri "datomic:mem://dev"}})

(defn- merge-module-config [config sym]
  (merge-with merge config (var-get (requiring-resolve sym))))

(s/fdef init!
  :args (s/cat :config :system/config))

(defn init!
  [{:log/keys [level] :or {level "info"} :as config}]
  (log/info "Set log level to:" (str/lower-case level))
  (log/merge-config! {:level (keyword (str/lower-case level))})
  (let [config
        (cond-> config
          (:module.breeze.authorization/enable config)
          (-> (dissoc :module.breeze.authorization/enable)
              (merge-module-config `blaze.breeze.authorization.core/config)))]
    (ig/init (merge-with merge default-config config))))

(defmethod ig/init-key :core/database-conn
  [_ {:database/keys [uri] :keys [structure-definitions]}]
  (if (d/create-database uri)
    (do
      (log/info "Created database at:" uri)
      #_(upsert-schema uri structure-definitions))
    (log/info "Use existing database at:" uri))

  (log/info "Connect with database:" uri)
  (d/connect uri))

I think, we could do that :module.breeze.authorization/enable thing without knowing the module in advance. We just have to find a way to enumerate all enable flags.

An example of a extensiblity goal I would have would be enabling two encoding for date one binary and one tuple based.

Thats a different thing for sure.
I currently build modules from the current blaze source. If we have that, the picture should look clearer. Please be aware that I might not have much time left this week as I'm actually on holiday.

If we did do the vase approach we would generate a route for each resource with the type statically in the route. That would enable attaching custom authorization interceptors on a per type and method basis. I will make a mockup of this at some point. Again no need to respond now. Enjoy your holiday!

@dspiteself I have already split everything into modules. You can see the work in progress here. It's still work in progress.
I also took inspiration from vase. My goal is to be able to run a modular Blaze with only a blaze.edn and an appropriate deps.edn. blaze.edn essentially is an Integrant config map.
Each individual module registers itself on an Integrant key which is the same as the namespace it uses. The cool thing is, that you can now use Integrants load-namespaces function to load all namespaces from all keys. That will work if deps.edn provides the right class path. The important thing is, that you don't need to write code to include a new module.
If you look at the :blaze/rest-api key, it contains a :config which specifies which interactions and operations should be included in the REST API. Here you can refer to implementations of special operations though Integrant references. The same can be done for middleware. In the blaze.rest-api namespace, I build the routes and (not done yet) the capability statement from this config. So you can specify exactly that the REST API should include. You can also specify special middleware on special resource types (not done yet). I called the config key resource-pattern instead of resource because I want to be able to use regex, collections and :default in :type. So you don't have to specify all resources you want to include.
At the end, we should think about hiding Integrant. But for now I would go with it. Integrant really brings all we need to dynamically load namespaces and wire all modules together. Integrant even has a notion of key hierarchies. You can see that at the :blaze/terminology-service key. Here I instantiate the concrete :blaze.terminology-service/extern but can refer to it under :blaze/terminology-service. With this we could realize different implementations of the DateTime schema stuff.
What do you think about my approach?

I like it! I will tell you more as I continue to look at it. #:blaze.rest-api.resource-pattern could take middle-ware right?

Yes it could hold middleware.

Yea I think this will work great for all our needs. Tell us if you want to split out any of these tasks and give them to us. In the absence of direction from you we will focus on generating blaze.edn files for our 2 extensions(authorization and additional search params).  We will do the search param work in our fork of this repo if it does not match your desires we can split the module out into another repo.

            {:type "Patient"
             :interactions
             {:search-type
              {:handler #ig/ref :blaze.interaction/search-type}
              :read
              {:handler #ig/ref :blaze.interaction/read}}}```
will need to be a little more structured to support generating a capability statement. For instance you will need to be able to see what search parameters are supported.

Yea I think this will work great for all our needs. Tell us if you want to split out any of these tasks and give them to us. In the absence of direction from you we will focus on generating blaze.edn files for our 2 extensions(authorization and additional search params).

Yes that would be good.

We will do the search param work in our fork of this repo if it does not match your desires we can split the module out into another repo.

Please keep it in the fork, because I like to have the search params as "official" Blaze module. For the authorization module, I think it depends whether it is very specific to your use-case or whether it is more generic.

Opened a pull request, so closing this issue
https://github.com/life-research/blaze/pull/96


Add dynamic and categorized test generation

The test template folder now has a 'one to one' mapping with the actual tests folder. This means users can add as many different templates for tests types as they want and can even categorize them into different subfolders (to separate unit/integration/acceptance tests for instance). Also, renamed (and recategorized) the original tests.
This change is backward compatible, the old tests will now be treated just like any other test template.

Finished.
There will be probably be a merge conflict after #44 or #49, if so, please let me know.

Fixed suggestions made by @mlantz