Toast message is displayed multiple times in during login and signup

Actual Behaviour
When you try to login using wrong email or password, the error is showed only once if you click the button only once. Now if you click the login button again the error message is shown more than once. Similar issue can be seen in for sign up too, the error in sign up toast is shown multiple times.
Expected Behaviour
The message should be displayed only once for each button click.
Would you like to work on the issue?
Yes.

@raj10071997  Oh!, I understood the cause here. Have you understood the root cause of it ? If yes, then how do you propose to solve it ?

@srv-twry Sorry for not attaching a screenshot. Actually if you see the toast message is called only once for the first time when we click the login button but not afterwards. It is because MutableLivedata object(loginResponse in LoginActivityViewModel.java) is still getting changed even after INVALID response and every time we press the login button, the object loginResponse is changed due to which the observer of loginActivityViewModel(in loginActivity.java) counts it as a change and toasts the message multiple times. So I just replace the line
        loginResponse.setValue(new LoginResponse(INVALID, ""));

with:
try{
if(loginResponse.getValue().response!=INVALID)
loginResponse.setValue(new LoginResponse(INVALID, ""));
}catch (NullPointerException e){
loginResponse.setValue(new LoginResponse(INVALID, ""));
}
preventing the loginResponse from calling the method setValue if the loginResponse is not null. And now the observer observe no change in the object and executes the toast message only once. This is solution that I can think of now. Can you please tell if there is anything wrong with this solution?

I think you're kind of in the right direction for the problem but not quite. IMO the problem is not because it is being changed multiple times(It isn't IMO). It is because of the asynchronous nature of this operation. Here is the case which causes the issue:

You enter bad credentials for login. The MutableLiveData is set to "INVALID" and toast is displayed and everything is good till now.

Now you enter the credentials again. This time the correct one.

compositeDisposable.add(APIClient.getOpenEventAPI().login(new Login(email, password))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(response -> {
                            Timber.d("Saved token and logged in successfully");
                            loginResponse.setValue(new LoginResponse(VALID, response.getAccessToken()));
                        }, throwable -> {
                            Timber.e(throwable.toString());
                            loginResponse.setValue(new LoginResponse(INVALID, ""));
                        }));
        return loginResponse;

The above process takes time and works on the io thread and hence the main thread continues to work and returns the MutableLiveData loginResponse(Even before the login process is done) with the previously saved value i.e. INVALID due to which the Activity shows the toast without realising that it is the value from the previous attempt and this current attempt is still in progress. After the login process is done, it sets the value to VALID and you're logged in.
Understood ?
I have a solution for it but i think you should try and find a solution for it first :smile: . In case you can't then i will tell you :+1:

@srv-twry  Actually if you enter the wrong credential again then you will see that the toast message is displayed multiples times. I understand that I need to find a way to synchronize the io thread and the main thread so that the loginResponse object contains the updated value. But if you enter the wrong credential again the toast message is displayed sometimes for three times or four times. Also if you enter the wrong credential twice or thrice and now enter the right credential, the toast message "successfully logged in" message is displayed for thrice or quadraple times despite the function returns only once with the previous value and as soon as the work of the io thread is over, it updates the loginResponse object which is observed by the observer of loginActivityViewModel. So if we consider only the asynchronous nature of the operation, the toast message should be displayed twice (when you enter the wrong credential twice), once with the previous value and then when the io thread updates the loginResponse object. But this doesn't happen, the message is displayed more than twice. What can be the reason for this? :smile:

I understand that I need to find a way to synchronize the io thread and the main thread

No, how and why would you even do that ?

if you enter the wrong credential again the toast message is displayed sometimes for three times or four times

Can you attach a gif ? i am only getting it once.

Have you tried printing the log messages in INVALID case, you will find that the toast message line is being called 3 to 4 times. Below is the Gif of the issue when you enter the wrong credentials twice :
1234 is wrong password. When the button is pressed again the toast message is displayed thrice instead of twice.

Actually I said it wrong, I meant that if we want to do the work in background and then update the loginResponse and after that the function should return, so there is no need of notifying it in the main thread. Actually if the function returns only when the loginResponse is updated, then this issue might not even occur. So I meant that it will be better that the function return only when loginResponse is updated, and that's what I meant by synchronizing the background thread.

Yes, it is very very weird. Infact it is increasing by one everytime the login button is clicked.
 And if you make the changes as I have mentioned in the above comments, the toast message is displayed only once.

uh okay! , in your proposed solution, why are you catching the NPE ?

@srv-twry  The best solution till now I could find is to initialize the MutableLiveData loginResponse every time a call to loginUser(String email, String password) method is made in LoginActivityViewModel.java. And also in my view it is good solution because since we are always keeping a memory reference after initializing loginResponse, there is no harm in initializing it again as the previous memory reference will be garbage collected. Though this solution has a little disadvantage of time lagging. Plus I have also tried using a third flag IN_PROGRESS with VALID and INVALID. Since the function returns first before the execution of the background thread, I thought having a third condition which does nothing will be good, but I have found once the loginReponse object is returned by the function, the ViewModel observes the data at every stage and keeps on executing the switch case, same case as you have mentioned with the logcat. But having returned a new loginResponse object which contains no data, so there can be no change in data and the switch case will be executed only once.

@iamareebjamal  this is the best i could find for this issue. Can you suggest any other solution if you have or should I make a PR with this solution?

@iamareebjamal Please reply it's been few days.

The problem is about a new task/observable is created each time the button is clicked. Simply dispose the previous observale when button is clicked.

@iamareebjamal  I am removing the obsevers when the button is clicked but the behavior is still the same. I made these changes -
private void loginUser(String password) {
 loginActivityViewModel.loginUser(email, password).removeObservers(this);
 loginActivityViewModel.loginUser(email, password).observe(this, loginResponse -> {

loginUser() method is called every time the user press the login button. So I am removing every observer first and then again creating a new observer, but still the behavior is same. Am I doing anything wrong here?

Problem is in Observable and not the LiveData

@iamareebjamal  I have made the following changes to dispose the observables every time the button is clicked.
        if (compositeDisposable.size()!=0)
             compositeDisposable.dispose();

        compositeDisposable.add(APIClient.getOpenEventAPI().login(new Login(email, password))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(response -> {
                            Timber.d("Saved token and logged in successfully");
                            loginResponse.setValue(new LoginResponse(VALID, response.getAccessToken()));
                        }, throwable -> {
                            Timber.e(throwable.toString());
                            loginResponse.setValue(new LoginResponse(INVALID, ""));
                        }));

But the problem with this is that although it solves the problem of the toast message getting displayed multiple times. But it doesn't solve the problem which is if the user try to login with wrong credential first and then try to login with right credential, the user can't login. It always shows "Authentication failed" toast message. But if the user try to login with correct credential the user is logged in at the first try. How can I solve this problem.

You don't have to dispose the composite disposable, that means you are ending the process of storing any observable in it. You have to store a disposable just for logging in and disposing it when logging in

@iamareebjamal  I am disposing any observable which is already stored so that I can stop listening to previous observables and start with a new one. Because initially the size of composite disposable will be zero and then one observable will be subscribed by the composite disposable. So  we when click the button again the size won't be zero this time now and I will dispose the previous observable and subscribe to a new one. What if I dispose the observable inside, after setting the loginResponse.setValue(). In that way when the value has been set, we are simply disposing the previous observable as we are not interest in previous data because when we press the button again we will be creating a new disposable.

@iamareebjamal  Sorry you are right I am ending the process of storing any observable.

@iamareebjamal I used clear() instead of dispose()  and changed the code to this.
 if(compositeDisposable.size()!=0)
            compositeDisposable.clear();

        compositeDisposable.add(APIClient.getOpenEventAPI().login(new Login(email, password))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(response -> {
                            Timber.d("Saved token and logged in successfully");
                            loginResponse.setValue(new LoginResponse(VALID, response.getAccessToken()));
                        }, throwable -> {
                            Timber.e(throwable.toString());
                            loginResponse.setValue(new LoginResponse(INVALID, ""));
                        }));

        Log.d("dhanraj", String.valueOf(compositeDisposable.size()));

I am always getting the size = 1 and even changed the code to this
 compositeDisposable.add(APIClient.getOpenEventAPI().login(new Login(email, password))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(response -> {
                            Timber.d("Saved token and logged in successfully");
                            loginResponse.setValue(new LoginResponse(VALID, response.getAccessToken()));
                            compositeDisposable.clear();
                        }, throwable -> {
                            Timber.e(throwable.toString());
                            loginResponse.setValue(new LoginResponse(INVALID, ""));
                           compositeDisposable.clear();
                        }));

Which means I am clearing all the disposable from compositeDisposable as soon as the loginResponse.setValue() method completes and the observer in the loginActivity will be notified of the changes. But still the behavior is same. Am I thinking right as I thought this is equivalent to storing only one disposable and when the response from the observable source comes we can do our required task and dispose the disposable?

you don't have to clear or touch composite disposable at all.

You have to store a disposable just for logging in and disposing it when logging in

if (this.loginDisposable != null)
    this.loginDisposable.dispose();

this.loginDisposable = APIClient.getOpenEventAPI().login(...);
compositeDisposable.add(this.loginDisposable);

@iamareebjamal  Sorry for the late reply.
I have tried this code using your suggested changes but still the behavior is same.
 private MutableLiveData<LoginResponse> loginResponse;
    private final CompositeDisposable compositeDisposable = new CompositeDisposable();
    private Disposable loginDisposable;

    public LiveData<LoginResponse> loginUser(String email, String password) {
        if (loginResponse == null) {
            loginResponse = new MutableLiveData<>();
        }

        if(loginDisposable!=null)
            this.loginDisposable.dispose();

        this.loginDisposable = APIClient.getOpenEventAPI().login(new Login(email, password))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(response -> {
                    Timber.d("Saved token and logged in successfully");
                    loginResponse.setValue(new LoginResponse(VALID, response.getAccessToken()));
                }, throwable -> {
                    Timber.e(throwable.toString());
                    loginResponse.setValue(new LoginResponse(INVALID, ""));
                });

        compositeDisposable.add(loginDisposable);

        Log.d("dhanraj", String.valueOf(compositeDisposable.size()));

        return loginResponse;
    }

I'll see to what's the issue


⚠ Bofrost.lu has degraded performance

In ac38168, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 1670 ms

Resolved: Bofrost.lu performance has improved in deee3e7 after 13 minutes.


ProcessDefinitionKeyIn is missing in HistoricProcessInstanceQuery

I am missing the query parameter ProcessDefinitionKeyIn in the HistoryProcessInstanceQuery.
The parameter ProcessDefinitionKeyNotIn is existing though.
According to https://docs.camunda.org/manual/7.18/reference/rest/history/process-instance/get-process-instance-query, there should be a parameter ProcessDefinitionKeyIn present.

This repo ist dead. Please go to https://github.com/komsa-ag/Camunda.Api.Client


Change SnapshotStore Interface

Travis failed

Coverage remained the same at 100.0% when pulling b8f67c201425776b17868274b3354d5acf568f87 on sandrokeil:feature/change-snapshot-store-interface into 6ea6831fd8402945c2c53f0e8b326a831596d877 on prooph:master.


Add working/business days to a date

Add the ability to calculate business days.
Ie 'Expect your parcel to arrive in 7 business days'
$sevenBusinessDays = Yasumi::addWorkingDays('USA', 7, new \DateTime('2016-07-01', new \DateTimeZone('America/New_York')))
$sevenBusinessDays->format('Y-m-d');

@brucealdridge Thanks for this one! I like it :) If I understand correctly this feature returns the first coming business in the next ## days, right? In that case, I prefer the function name to represent what it returns rather than the action ('adding days').
For completeness sake, we should also then have the possibility to look at past business days. Can't think of a use case right now, however would be good to have too.

An example would be customer service.
Instead of
echo "We will get back to you within 2 business days";

echo "We will get back to you by ".
  Yasumi::addWorkingDays(
      'USA',
      2,
      new \DateTime('2016-07-01', new \DateTimeZone('America/New_York'))
   )->format('Y-m-d');

Fairly trivial to add removeBusinessDays, nextWorkingDay and previousWorkingDay but I see less of a use case for those

Yes, that makes sense. I was talking more semantically as for the function names. I think 'nextWorkingDay' and 'previousWorkingDay' make more sense. The functions then return either the next or previous working day based on the number of days given (as you coded). The default could be 1 day.

Sounds good, I'll adjust the naming


Update getting_started.md

убран лишний текст

I've prepared a stage to preview changes. Open stage or view logs.

:+1:


fix: correct total block value in publish block log

Description
consensusBlockValue should be in wei and not gwei. Previous PR #6286 fixed the unit but forgot to change the unit when calculating the total block value (totalBlockValue) in the publish block log which this PR aims to fix.

Closes #6316

:tada: This PR is included in v1.15.0 :tada:


Cannot replace a named section with a piece longer than 32Kb.

Rewrite method for replacing named sections not using REGEXP_REPLACE. Use partial CLOB concatenation via DBMS_LOB package methods.

Done.
Rewritten with REGEXP_INSTR and explicit CLOB copy/concat.


Suggestion: Annoymous Upload and Captcha

I just uploaded a torrent annoymously by mistake and there is no way to correct that. Why allow annoymous upload in the first place? Without annoymous, maybe you can remove the annoying captcha. Nyaa hardly had any spam.
Maybe remove the annoymous upload (and with it the Captcha) as it is uncessary.
Thank you

If you uploaded without being logged in. You have to reclaim the torrent by contacting someone in the staff in IRC for example.
Anon uploads have always been a thing on nyaa and many people don't like to have an account for uploading.
If you have an account, you can also upload as anon by checking the checkbox in the upload form "Upload Anonymously" when uploading. This can be reverted by editing your torrent and unchecking the checkbox.
Finally, we are unfortunately sorry to say this, but we had some issues with people which supposedly didn't like our alternatives and spammed our torrents with "Mein Kampf" fake torrents.  It might be removed someday when things calm down, but for now it's a feature. If you have an account, you can ask to be made a trusted user. Those users don't have the captcha and have their torrents marked as trusted torrents. For that you need to ask someone in the staff by using IRC.
Closing this issue for now, hoping I've answered your questions ;)

Thank you for much for the details explanation.  I will try the IRC channel. See if I can reclaim them.


Globbing patterns can be really hard to debug

From @victorhurdugaci on Monday, March 23, 2015 10:06:21 AM
If you have this in project.json you'll notice that the whatever you have in compileExclude doesn't work.
"compile": "../OldCsharp/*.cs",
"compileExclude": "../OldCSharp/*.Designer.cs"

Can you figure out why the Designer.cs is not excluded? It took me and @troydai 10 minutes.
Still couldn't figure it out?
Look at the two strings OldCsharp and OldCSharp. Figured it out?
If the two patterns don't have the same case-ing, they don't work.
Copied from original issue: aspnet/FileSystem#86

Thanks for your feedback. We appreciate your letting us know about the problem you've encountered or suggestion but we are not planning to take further action on this issue because our focus has been on issues with significantly higher customer interest and issues impacting a broad number of customers.


Unexpected changes in spp counts for source metrics in November'20 release

Unexpected changes in spp counts in untouched GSDs (figures taken from https://preview.catalogue.life/data/contributing-datasets.html):
2020-11-03 (key=2030) vs 2020-11-21 (key=2239)
FLOW extinct spp 356 vs 361 +5
LepIndex 134818 vs 135004 +186
World Ferns 13372 vs 13376 +4
World Plants 189494 vs 189687 +193
Source metrics counts are aggregated counts based on sector import metrics

@yroskov The metrics are exactly the same. I cannot reproduce your observation.


[BEAM-3156] Fix BigTableIO to use non-deprecated Futures.addCallback function

Follow this checklist to help us incorporate your contribution quickly and easily:

[ x] Make sure there is a JIRA issue filed for the change (usually before you start working on it).  Trivial changes like typos do not require a JIRA issue.  Your pull request should address just this issue, without pulling in other changes.
[ x] Each commit in the pull request should have a meaningful subject line and body.
[ x] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue.
[x ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[x ] Run mvn clean verify to make sure basic checks pass. A more thorough check will be performed on your pull request automatically.
[x ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

Jira issue: https://issues.apache.org/jira/browse/BEAM-3156
This PR changes which Futures.addCallback() overload we call. This is because the overload we're using is being deprecated.

lgtm

LGTM. I'll merge.
Thanks.

Run Java PreCommit.

Run Java PreCommit

Run Java PreCommit

It looks like the failed test was a timeout -- mind taking a look at this again?

Looks like Jenkins  is stable now. I'll wait for the current run.


Problem with libssl on arm64 devices

The formuale has some problem on arm64 (M-Chips) on macOS. It won't use the libssl installed by Homebrew. If you link to it, it says that it wants a different architecture, x86_64 instead of the installed arm64.
This is the error when running mint after symlinking manually to libssl:
dyld[16130]: Library not loaded<EMAIL_ADDRESS>  Referenced from: <75F1BB04-1DDA-3A98-BEEB-CB460C23A096> /opt/homebrew/Cellar/mint-lang/0.18.0/bin/mint
  Reason: tried<EMAIL_ADDRESS>(mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'<EMAIL_ADDRESS>(no such file<EMAIL_ADDRESS>(mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/libssl.1.1.dylib' (no such file), '/usr/lib/libssl.1.1.dylib' (no such file, not in dyld cache<EMAIL_ADDRESS>(mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'<EMAIL_ADDRESS>(no such file<EMAIL_ADDRESS>(mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/libssl.1.1.dylib' (no such file), '/usr/lib/libssl.1.1.dylib' (no such file, not in dyld cache)
[1]    16130 abort      mint

Looking at the formulae, it doesn't seem to account for arm64 at all which is most likely the problem.

Currently it's a bit of a pain to build ARM binaries of Mint as sort of described in this article:

Building for ARM in GitHub Actions is not easy now. You can’t just add an ARM runner because the crystal-lang/install-crystal GitHub Action doesn’t support ARM runners (at least in v1.8.0). Also, you can’t build a binary inside a container as ARM containers weren’t provided by Crystal’s developers. So, the only current option is cross-compilation.

I believe it works fine if you are able to compile from source, otherwise it would require a bit of effort for someone to update the main Mint Github workflows to cross-compile for ARM (?)


[SDK 0.68.2] Build from source doesn't work. Could not find the hermes-engine npm package

Description
If you try to build from source using Docker the build fails with the following message:
FAILURE: Build completed with 2 failures.

1: Task failed with an exception.
-----------
* Where:
Build file '/pwd/ReactAndroid/build.gradle' line: 132

* What went wrong:
Could not find the hermes-engine npm package

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
==============================================================================

2: Task failed with an exception.
-----------
* What went wrong:
A problem occurred configuring project ':ReactAndroid'.
> compileSdkVersion is not specified. Please add it to build.gradle

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
==============================================================================

Version
0.68.2
Output of npx react-native info
System:
    OS: macOS 12.4
    CPU: (8) arm64 Apple M1
    Memory: 144.81 MB / 16.00 GB
    Shell: 5.8.1 - /bin/zsh
  Binaries:
    Node: 16.15.1 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 8.11.0 - /usr/local/bin/npm
    Watchman: 4.9.0 - /opt/homebrew/bin/watchman
  Managers:
    CocoaPods: 1.11.3 - /usr/local/bin/pod
  SDKs:
    iOS SDK:
      Platforms: DriverKit 21.4, iOS 15.5, macOS 12.3, tvOS 15.4, watchOS 8.5
    Android SDK: Not Found
  IDEs:
    Android Studio: 2021.2 AI-212.5712.43.2112.8609683
    Xcode: 13.4.1/13F100 - /usr/bin/xcodebuild
  Languages:
    Java: <IP_ADDRESS> - /usr/bin/javac
  npmPackages:
    @react-native-community/cli: ^7.0.3 => 7.0.3
    react: 17.0.2 => 17.0.2
    react-native: Not Found
    react-native-macos: Not Found
  npmGlobalPackages:
    *react-native*: Not Found

Steps to reproduce

git clone https://github.com/facebook/react-native
cd react-native
git checkout 0.68-stable
docker run --rm --name rn-build -v $PWD:/pwd -w /pwd reactnativecommunity/react-native-android /bin/sh -c "./gradlew installArchives"
Build fails with the following message:

FAILURE: Build completed with 2 failures.

1: Task failed with an exception.
-----------
* Where:
Build file '/pwd/ReactAndroid/build.gradle' line: 132

* What went wrong:
Could not find the hermes-engine npm package

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
==============================================================================

2: Task failed with an exception.
-----------
* What went wrong:
A problem occurred configuring project ':ReactAndroid'.
> compileSdkVersion is not specified. Please add it to build.gradle

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
==============================================================================

Snack, code example, screenshot, or link to a repository
Steps to reproduce described above

@janicduplessis @RodolfoGS @brentvatne @Simek @mikehardy @mikehardy @janicduplessis

Fixed, I'm missed a step (npm install) after clone the repo, this step is not mentioned in the documentation.
To someone with the same issue, the steps are:

git clone https://github.com/facebook/react-native
cd react-native
git checkout 0.68-stable
npm install
docker run --rm --name rn-build -v $PWD:/pwd -w /pwd reactnativecommunity/react-native-android /bin/sh -c "./gradlew installArchives"

Fixed, I missed a step (npm install) after clone the repo, this step is not mentioned in the documentation.

Thanks for spotting it. Don't you mind sending a PR to edit this page? :)
https://github.com/facebook/react-native-website/blob/main/website/contributing/how-to-build-from-source.md


Ouroboros fails to detect custom tag in private repository

Hi all
Ouroboros fails to detect the branch-tag that we use on our GitLab.
Things were working perfectly fine before adding:
      - LABELS_ONLY=true
      - LABEL_ENABLE=true

Here are the Ouroboros logs:
2020-03-05 16:05:26 : ERROR : dockerclient : Issue detecting **redacted** image tag. Skipping...

Here is my Ouroboros docker-compose config:
services:
  ouroboros:
    image: pyouroboros/ouroboros:latest
    container_name: ouroboros
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      #- INTERVAL=300 # Checks every 5 minutes - value in seconds
      #- RUN_ONCE=true # Testing environment requires manual trigger
      - LOG_LEVEL=info
      - SELF_UPDATE=true
      - CLEANUP=true # Deletes the old image after a successful update
      - TZ=Europe/Zurich
      - LABELS_ONLY=true # Ouroborus has to be explicitly enabled or disabled on a container
      - LABEL_ENABLE=true # If a container has a com.ouroboros.enable label, only watch it if it is set to true.
      - NOTIFIERS=https://hooks.slack.com/services/****

A sample app:
services:
  app1:
    image: registry.gitlab.com/***:development
    env_file:
      - ***
    networks:
      - traefik_proxy
    labels:
      ### Ouroboros config
      - com.ouroboros.enable=true
    restart: always

I am having this problem as well.
Labels or not labels.
Could this be related to https://github.com/docker/docker-py/issues/2225 which was fixed in their version 4?


Examples need to be chedked

At least for the first example, it seems it's not relevant to the explanation that goes after it.  There is no Span<T> in the code, and no Clear() method is called.

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

ID: 4819512e-1044-1c57-0de1-447164220fd5
Version Independent ID: d6cf8d26-fb2f-7138-f0c7-ab529a5b9cde
Content: Memory<T> and Span<T> usage guidelines
Content Source: docs/standard/memory-and-spans/memory-t-usage-guidelines.md
Product: dotnet
GitHub Login: @tdykstra
Microsoft Alias: dotnetcontent

@maziarrezaei Thanks for pointing that out.  The problem was already pointed out by @svick in the PR that created the article (here and here), but those comments somehow were overlooked. I'm labeling this as a doc bug and we'll correct it as soon as resources are available to work on it.


Would it be possible to get a new release soon?

Depends on the definition of "soon"? ;-) I am really swamped, a release won't take that long I guess, but there are several pending PRs that would ideally be reviewed first. Is there a specific fix you're wanting in the release?

v1.3.2 has been released and artifacts are in repositories.
https://github.com/typesafehub/config/blob/master/NEWS.md#132-october-6-2017


Update third party lib info and remove (not-used) jaxb-api

Update/add Third Party library licensing info and removed jaxb-api; seems it is not used any more.
Signed-off-by: Ljupcho Palashevski<EMAIL_ADDRESS>

Right. Somehow I missed this one in the dependency tree -- reverting.


Fix upstream polynomial canonicalization rules

Only apply if there is no coefficient modulus, otherwise we need arith_ext

If I understand it correctly, is https://github.com/llvm/llvm-project/blob/30f5a3ca150e98d482abc6a4d0e3fe6c12f77695/mlir/lib/Dialect/Polynomial/IR/PolynomialCanonicalization.td#L29-L33 the only issue here?

I think the ones introducing arith ops (https://github.com/llvm/llvm-project/blob/30f5a3ca150e98d482abc6a4d0e3fe6c12f77695/mlir/lib/Dialect/Polynomial/IR/PolynomialCanonicalization.td#L59-L64, and the corresponding sub one) are also incorrect in the case where there's a modulus or the coefficients might wrap around the underlying data type. For example, converting poly.add(intt(p), intt(q)) to intt(arith.add(p, q)) would be incorrect if arith.add(p, q) will overflow mod q or mod the data type, since arith.add doesn't take the modulus into account.
@AlexanderViand has this nice doc! https://docs.google.com/document/d/1aS-rSZP3GJvzemoeAG8ingAyyLUNq2IB5Rgqksilbdk/edit
I think the upstream passes would need to fail to apply when there is a modulus or wrap around, and i suppose we can write our HEIR internal canonicalization with mod_arith in this repo

After careful inspection, I now think the canonicalization rule SubAsAdd is OK with modulus ; I was thinking that coefficients should in range [0, +mod) (which means -1 needs to be mod-1 instead of 2^32-1), but now I understand it is in (-mod, +mod), so directly polynomial.mul_scalar -1 is OK and won't overflow; given that the semantic of polynomial.mul_scalar is correct.
Checking the lowering of polynomial.mul_scalar confused me; It may result in wrong result; it emits arith.muli then arith.remsi; arith.muli may overflow if the scalar is large enough; remsi fortunately avoids the issue in #928. I again think these lowering should be handled in mod_arith.

Only apply if there is no coefficient modulus, otherwise we need arith_ext

However, for the case of NTT/iNTT, there must be coefficientModulus otherwise primitiveRoot wont exist, so the fix proposed in https://github.com/llvm/llvm-project/pull/110318 is removing them for now in the upstream.

Closing this as the upstream PR was merged (and now we've got polynomial "downstream" again anyway).


1 duplicate symbol for architecture arm64(ios构建报错)

duplicate symbol _distance in:
/Users/user/Library/Developer/Xcode/DerivedData/weight-dcsrolxzvuztosdzfondrtqizpws/Build/Products/Debug-iphoneos/libRNSVG.a(UIBezierPath+Util.o)
/Users/user/project/newWeightApp2.0/vlcKit/MobileVLCKit.framework/MobileVLCKit(tools.c.o)
ld: 1 duplicate symbol for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I got same error.

duplicate symbol '_distance' in:
/Users/namtran/Library/Developer/Xcode/DerivedData/factorynowreact-cnkfbfmejgwnrgdjwcktivwklalt/Build/Products/Debug-iphonesimulator/RNSVG/libRNSVG.a(RNSVGPathMeasure.o)
/Users/namtran/Desktop/factorynowreact/ios/Pods/MobileVLCKit-unstable/MobileVLCKit-binary/MobileVLCKit.framework/MobileVLCKit(tools.c.o)
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I got same error.

duplicate symbol '_distance' in:
/Users/namtran/Library/Developer/Xcode/DerivedData/xxxxx-cnkfbfmejgwnrgdjwcktivwklalt/Build/Products/Debug-iphonesimulator/RNSVG/libRNSVG.a(RNSVGPathMeasure.o)
/Users/namtran/Desktop/factorynowreact/ios/Pods/MobileVLCKit/MobileVLCKit-binary/MobileVLCKit.framework/MobileVLCKit(tools.c.o)
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I uninstall 'react-native-svg' to fix the above error,
But this is not good solution.


Installation issue under linux

Hello,
stlink installation under Linux (Debian 9) is broken since modifications for #695: libstlink.so (and others) installs in /usr/local/lib/lib instead of /usr/local/lib
It seems that the error comes from these instructions:
if(IS_DIRECTORY CMAKE_LIBRARY_PATH)
else()
set(CMAKE_LIBRARY_PATH "lib")
endif()
If I change it to
if(IS_DIRECTORY CMAKE_LIBRARY_PATH)
else()
set(CMAKE_LIBRARY_PATH "")
endif()
then it works again.
I can create a PR if you want, but I cannot test the modification under other OS.

I can confirm.
Also hardcode path to "lib" breake x86_64 with /usr/lib64 folder.

Hi guys, I agree with your both. We must find a working solution for all cases (with less cmake code).

In my defence, I would say that I encounter a situation when CMAKE_LIBRARY_PATH is a list of paths. That broke all install command completely.
In my opinion, we should remove CMAKE_LIBRARY_PATH  from all install commands.

I encountered the same issue

@Cheng-SG please try #701 fix


💯 Emoji RB Support

Adding emoji kills the reportback submission

submitting that returns a 404 for me.
I think this will require us to not use UTF-8 encoding in the db.
https://dosomethingorg1.zendesk.com/agent/tickets/149465
http://www.jeffgeerling.com/blogs/jeff-geerling/solving-emoji-problem-drupal-7

@angaither Adding this in case (and I think we should for sanity of mind), change to actual UTF8 (i.e. utf8mb4) across the :globe_with_meridians:
https://mathiasbynens.be/notes/mysql-utf8mb4

[ ] edit Thor DB structure
[ ] edit Thor web app
[ ] edit prod DB structure
[ ] deploy
[ ] change data warehouse to ensure slave replication process still continues to work
[ ] edit quantum DB

https://www.dosomething.org/admin/reportback/128124 -- dunno what those recycling signs are (emojis?), but interesting they show up in back end and in the caption on the front end...

closing because we can hope for better days in repo https://github.com/DoSomething/guardian

@angaither does it make sense to move this issue to the Quasar repo?

hi @angaither -- @hbghidey and i were just talkinga bout this today! hannah was recreated this issue on mobile (full thread here: https://trello.com/c/vfFRBOiT/1602-users-hitting-404-page) but essentially, when someone submits a RB w/ an emoji over mobile, they get a 404 page and then when they hit back, they see the reportback gallery but then the submission button is gone

is there anything we can do to accept emojis (makes a lot of sense for mobile reporting back, especially), or should we add text in there that tells the user that they can't submit emojis?

yup, it's not just mobile, it's anytime emoji is submitted the reportback doesn't go through.
but I'm not sure it makes sense to prioritize this issue in phoenix since we want to move reportbacks to rogue.

 Users hitting 404 page

Would we be able to accept emojis in rogue? Thinking about how this is throwing off our 'pending' reportbacks count.

Thinking about how this is throwing off our 'pending' reportbacks count.

these reportbacks wouldn't be pending this is the problem where the reportback id exisits, and there's no file #6765

yah -- no need to prioritize, but if that's the case -- i'll sync w/ @hbghidey to include that in the tech macro for the time being to help the member submit w/o emojis (sorrrrrriiieee, no fun emojis 🤑 for youuuuu!!!) thanks!

 As a user, I would like to be able to submit an emoji with my reportback so that I can express myself without words (also so the system doesn't break).

We have emoji support in Phoenix-Next and Rogue. We will not be supporting emoji's in Phoenix-Ashes. We already are stripping out emojis from reportbacks per #7014.


lang: Program errors should automatically be logged.

When using the #[error] macro, the error should be logged via msg! transparently on program exit.

Addressed by #158.


Migrate Rely to Cram tests

fixes #15

The tests look great although they are a bit overwhelming. Too many changes in one file I think. Can we test different files in different cram tests? I.e. cat <*>.mli in a different file than cat <*>.ml ?

The tests look great although they are a bit overwhelming. Too many changes in one file I think. Can we test different files in different cram tests? I.e. cat <*>.mli in a different file than cat <*>.ml ?

I thought about this same thing when implementing this, and I had a bit of a dilemma (thought there would be too many files).
I had a stab at it here (it fixes #20 at the same time). Let me know what you think, and if that's what you had in mind.

@naartjie you can use run.t in directory tests:
https://github.com/ocaml/dune/tree/main/example/hello_world.t
It's a bit confusing but  basically you create a  directory ending with .t and then you create run.t inside that directory.
Then all files generated by that command can be simply committed to that directory. It's quite cool.

you can use run.t in directory tests

@wokalski how do you want to use directory tests? Should each directory in ./test/ become a mini dune project, where we use run.t to invoke the tests? Or are you thinking in some other direction?

@wokalski this is ready for review again. I have split up all the cramtests into separate files


No comprehensive tutorial

Hello,
I'm trying to understand if UAA could be used in my company, without CloudFoundry.
I've been trying to grasp the basics of UAA for days now.
I've been trying to use the sample UAA + App + API in order to get a practical approach. The only documentation I could find about it is that one: https://docs.cloudfoundry.org/concepts/architecture/uaa.html#demo-local . And it's totally not helpful. Good, I've made the first curl, and then cf-uaac is used, which is of zero use to me since I don't want a command line tool, but an API understanding so that I can integrate UAA with our services. And even without that tool, it stops when you got the token; nothing beside authenticating a pre-registered user has been done, and the tutorial stops here. I mean, really?
Here is a non exhaustive list of questions that are still left unanswered despite my ctrl+f, greps, and various other wanders and dabblings:

Where is the user marissa created?
Where are the apps API and App added to UAA? Their secrets key and various configs?
Where is the configuration file for the sample code?
How do I change the scopes marissa has access to? I can't use most of the API because that user doesn't have the needed accesses.
What is the basic workflow to integrate another app / api / service with UAA so that it requires authentication?

Basically, the documentation needs a "Getting Started with UAA in 30 minutes", based for potential user scenarios.
Documentation like this ( https://docs.cloudfoundry.org/api/uaa/#authorization-code-grant ) is massively useless if you don't have a big picture understanding of UAA. So is the documentation in docs/ that covers only parts of various items and details.
For reference, https://getkong.org/docs/ is a user oriented documentation that allows you to get your basic needs fulfilled in less that an hour.
I'm willing to contribute that missing documentation if I finally can understand that product by whichever mean.
Best regards,

@Vermeille We will be publishing a guide soon. Its under review.

Many thanks!
May I be part of (or spectate) the review process?
I'd be glad to contribute and an early access to this guide would be of immense value to me.

Is the documentation published yet please ?

We will be publishing a guide soon. Its under review.

That was more than a year ago - and I couldn't see anything like a guide????????

Has there been an update on this?


[WIP] v2.0.0

Hello guys, find an additional - in tools/docker/04_psw.sh which will break the dockerfile build.
libsgx-ae-id-enclave-=$SGX_DCAP_VERSION

Thanks for reporting this issue.

Cancle this PR


Support using a subdirectory for git thunks

... which should allow us to deploy the skeleton directly.
cf.
$ ob deploy init --ssh-key ...  --hostname ...
✔ Running nix-build on ./.obelisk/impl [command]
Project root /home/srid/code/obelisk/skeleton is not a git repository or valid thunk

Closing this due to age. If it's still an issue, please reopen and provide a little more detail.


Typo in the --help message

-t is threads and timeout in the help message banner

Patched waiting for Merge into Main Pipeline


Rename Fog.dll functions according to names from D2CMPd.dll

Current names for fog functions are not good (especially memory allocations functions are named with client/server, instead of D2Alloc(Pool). (Fog.#10042 and and Fog.#10045)

There are still functions that need to be renamed, but most now have the correct name.

It seems PerfCount* do not exist in release builds.
Here are the names that are currently not reflected / confirmed


Way to manage iterations? Want to disable mouseWheelZoom

interactions: props.noDefaultInteractions ? [] : undefined,

is there any reason to manage iterations in this way - either empty or nothing. there is no way to set your own value

You can add interactions one by one by including the component in the RMap


Repo file list layout & misc fixes

This patch improves experience, making Octicons and repo file list look better.

Ensure Octicons are used with 16px font size
UI: Mark top menu icons blue only when non-zero
UI: Gray SHA1 next to message, file list collapse

I can understand that changing SHA1 label color to gray may be arguable, but I believe that this make the whole UI more balanced and less aggressive-looking. I believe that colorful labels should be reserved either for tags or issue types.
Before changes (current devel)

After changes

Looking great!

Thanks your PR!
But as documented, please re-PR to develop.
Also, is it possible to use green label?

PS: can you show the UI results for super long commit message (can be completely random)

@Unknwon Ahh damn, a while ago actually develop == master so even I was instructing Git to rebase always to develop it was effectively on master too, then I made PR and didn't notice it's master. Sorry, I need to close that because GitHub constantly denies acknowledging that changing base for PR is a desired feature: https://github.com/isaacs/github/issues/18

Haha, No problem. Just close and recreate one should work.

Is it still possible to use a green label? I prefer a green.


Hierarchical learning with KAN

I did some experimenting with KAN over the last few days, and I found it difficult to adjust the hyperparameters when fitting some multi-level functions, such as when composing multiplication with other operations. This is the function that I want to fit. Obviously the smallest structure is [2,2,2,1]. Do the first operation and then do the multiplication. Now I have a situation where I get a good fit numerically (as shown), but the functional expression is wrong, even if I use the strategy of pruning the larger network.

In order to solve this problem, my idea is hierarchical learning, which is the opposite of pruning, I first use a [2,2,1] network to learn the first operation, and then add neurons to the network to learn the second operation. I think this is achievable because KAN is good at continuous learning. I thought it would be easier to express multiple layers of complex functions, but I didn't have an idea. If anyone has ideas, please discuss them with me, thank you!

Please confront #123

请面对 #123

I think Your overview is comprehensive.


Question: How to get the hash of a ACI without fetching it?

I want to be able to get the hash of a ACI without the need of fetching and storing it in the local image store.
My usecase is to build ACI's and corresponding Pod-Manifests in our continous delivery pipeline. Therefore I first build my aci's and then want to know the hash of them to insert it into the id field of the pod-manifest. Our build-runners are docker only, and it would be kind of strange to run rkt in docker just to fetch the images to get the ID (but this works, you can not "rkt run" inside docker, but "rkt fetch" works).
Unfortunately the hash doesn't seem to be the hash of the aci file.
Is there a simple way (short shellscript or something) to get the ID?

How do you build your aci? If it is done via acbuild, we should probably augment end or write to spit out the hash. If you are going via docker2aci conversion, I don't see any easy way of doing this and right now even the conversion+hashing process is not symmetrical, see https://github.com/appc/docker2aci/issues/245.

Unfortunately the hash doesn't seem to be the hash of the aci file.

The image-id should be the digest of the uncompressed tarball, see https://github.com/appc/spec/blob/master/spec/aci.md#image-id.

Ok, so 'gzip -d $aci | sha512sum -' should do the job, perfect :)
Yes I use acbuild. If end or write could output the hash, there would be no
need to decompress the aci. I'll look how to implement this.
Luca Bruno<EMAIL_ADDRESS>schrieb am Fr., 28. Apr. 2017, 14:06:

How do you build your aci? If it is done via acbuild, we should probably
augment end or write to spit out the hash. If you are going via
docker2aci conversion, I don't see any easy way of doing this and right now
even the conversion+hashing process is not symmetrical, see
appc/docker2aci#245 https://github.com/appc/docker2aci/issues/245.
Unfortunately the hash doesn't seem to be the hash of the aci file.
The image-id should be the digest of the uncompressed tarball, see
https://github.com/appc/spec/blob/master/spec/aci.md#image-id.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/rkt/rkt/issues/3667#issuecomment-297981274, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AC3Lqav029ovu2ZB7OTWl0c91odmhHKHks5r0dZegaJpZM4NLZJ6
.

@trusch great! Mind opening a ticket there to track it? So I can assign it to you and let @dgonyeo have a look at it (perhaps he already implemented a similar feature and I just don't know about it).

PR to acbuild is here acbuild-pull-request
(just for reference)


Remove resolved issue in docs + update class path on sample

This makes the following two changes:

Issue [BEAM-7885] has been resolved, so removing from the list of known issues.
Updating the path beam.window.GlobalWindow to the new path beam.transforms.window.GlobalWindow.

R: @aaltay

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

LGTM. Please ping me or another committer once tests pass.

@davidcavazos - Do we have the same comment in one of the notebooks too?

Thanks! Yes, I forgot to update the notebook as well. #17021 should handle that.


LidarIdwInterpolation multiple inputs

Is there a way to have multiple defined las files as input for the LidarIdwInterpolation tool? I've tried several options to have 2 files as input, but can't get it working. When I use only 1 as input it does work.
I would like to use 1 big main las file as input and add another one with only corner points (offsetted) of the theoretical lidar box to force the corner of the pixels of the output at coordinates that are dividable by the grid cell size, as this doesn't seem to be a standard in LidarIdwInterpolation of WBT.

The user manual states,

"The user must specify the grid resolution of the output raster (--resolution), and optionally, the name of the input LiDAR file (--input) and output raster (--output). Note that if an input LiDAR file (--input) is not specified by the user, the tool will search for all valid LiDAR (*.las, *.zlidar) contained within the current working directory. This feature can be very useful when you need to interpolate a DEM for a large number of LiDAR files. Not only does this batch processing mode enable the tool to run in a more optimized parallel manner, but it will also allow the tool to include a small buffer of points extending into adjacent tiles when interpolating an individual file. This can significantly reduce edge-effects when the output tiles are later mosaicked together. When run in this batch mode, the output file (--output) also need not be specified; the tool will instead create an output file with the same name as each input LiDAR file, but with the .tif extension. This can provide a very efficient means for processing extremely large LiDAR data sets."

So to put it simply, all you need to do is to locate all the LiDAR files that you want to interpolate within a single directory, then set the working directory for WBT and run the tool without specifying either the input or output file parameters. It will then interpolate all of the files contained within the working directory. All of the LiDAR tools operate in this same batch mode.


EventedList does not support assignment to an item by lookup

🐛 Bug
EventedList does not support assignment to an item when using a custom lookup, though does support access to that element through the same lookup. For example, TransformChain is an EventedList that has lookup based on the name of the transform. As described in #3045 transform['physical2world'].affine_matrix = ... works, but transform['physical2world'] = ... does not.
To Reproduce
Here's a simple test case that currently fails at HEAD.
def test_transform_chain_assignment_by_name():
    scale_2 = Affine(scale=(2, 2), name='scale')
    scale_3 = Affine(scale=(3, 3), name='scale')
    chain = TransformChain([scale_2])

    chain['scale'] = scale_3

    assert chain['scale'] == scale_3

Expected behavior
I would expect both __getitem__ and __setitem__ to support indexing by lookup or neither.
Environment
napari: 0.4.9rc1.dev70+g5fe37b47.d20210709
Platform: macOS-11.3.1-x86_64-i386-64bit
System: MacOS 11.3.1
Python: 3.9.4 | packaged by conda-forge | (default, May 10 2021, 22:13:15) [Clang 11.1.0 ]
Qt: 5.15.2
PyQt5: 5.15.4
NumPy: 1.19.5
SciPy: 1.6.3
Dask: 2021.04.1
VisPy: 0.6.6
OpenGL:

GL version: 2.1 INTEL-16.2.16
MAX_TEXTURE_SIZE: 16384

Screens:

screen 1: resolution 2560x1440, scale 1.0

Plugins:

brainglobe-io: 0.0.2
brainreg-standard: 0.0.2
cellfinder: 0.0.10
console: 0.0.3
napari-demo: 0.0.2
napari-properties-plotter: 0.1.0
napari-properties-viewer: 0.0.2
napari-skimage-regionprops: 0.1.0
ndtiffs: 0.1.1
scikit-image: 0.4.9rc1.dev70+g5fe37b47.d20210709
svg: 0.1.5

to be honest, I've never liked that "feature".  I feel like that's a mutable mapping... not a mutable sequence.  I do see that the asymmetry is probably stranger... but I'd rather see remove the ability to get/set on a key rather than double down on it.
I know we'd need to "grandfather in" the layerlist... but there too, the fact that the name key has to be unique makes for a lot of unfortunate one-of special casing that would have been avoided if it was just an ordered dict.
Can you refactor TransformChain to either not use the keys for lookup, or perhaps use an evented dict?  Or, even better... if you know you have 3 or 4 specific transforms that are always part of the model, make a Pydantic model with each of them as a field?

i think this discussion is relevant too here: https://github.com/napari/napari/pull/2793#discussion_r646144451

Removing the behavior is good with me, as I agree the custom key mapping for a list is unexpected.
Like you mentioned LayerList also shares this behavior, so the test below fails too, but I don't think we depend on that behavior anywhere in our implementation and it probably isn't a high priority for users either (though accessing by layer names is!).
def test_assignment_by_name():
    layers = LayerList()
    image1 = Image(np.random.random((10, 10)), name='image')
    layers.append(image1)

    image2 = Image(np.random.random((10, 10)), name='image')
    layers['image'] = image2

    assert layers['image'] == image2

Agreed that named fields in TransformChain is a straightforward solution to avoid this buggy behavior for that class in particular, but I think it's worth keeping this open to resolve the asymmetry in EventedList and to work out what to do with LayersList.
If we wanted to use an EventedDict (for either TransformChain or LayersList) can we rely on the insertion order being maintained? I think this might reduce to whether we only support Python 3.7 and above, but unsure.

Like you mentioned LayerList also shares this behavior, so the test below fails too

yep, and given the hurdles we already jump through to make layers['name'] work (i.e renaming the layer if necessary) I think layer['name'] = Image(... name='other name') probably should continue to be an error...  Basically, it's just a list with (unfortunately) a custom accessor... but not a dict.
Happy to hear what others have to say here; but I doubt anyone wants to remove the layer['name'] accessor any time soon (I'd be in support of it though!)... and I'd definitely try to sway us away from supporting "appending" a layer with __setitem__.

If we wanted to use an EventedDict (for either TransformChain or LayersList) can we rely on the insertion order being maintained?

yep, the underlying data store is just a regular python dict, which will be ordered for all versions of python we support.
That said... i'd strongly prefer that we not use EventedDict when the keys are known ahead of time.  Pydantic models are definitely preferred there.

Removing the behavior is good with me, as I agree the custom key mapping for a list is unexpected.

fine with me too remove in general/ and in transform chain - but

Happy to hear what others have to say here; but I doubt anyone wants to remove the layers['name'] accessor any time soon (I'd be in support of it though!)... and I'd definitely try to sway us away from supporting "appending" a layer with setitem.

it might be nice to keep this at least for a while longer - I do use it quite a lot, and think others do too, but I get the concerns here too ...

I'm going to relabel this as refactor instead of bug.


DOF - Discovery on overlapping footprints

For footprints that overlap more than one geography (like more than one census tract) - how would they want us to handle this? Show up in both, assign to one or the other dependent on some decisioning (like which its more in)?

@ian-r-rose - no rush on this, but when you do have something figured out, I think this would be a fun thing to walk through with the full data services and engineering team.

@ian-r-rose - no rush on this, but when you do have something figured out, I think this would be a fun thing to walk through with the full data services and engineering team.

Yeah! I have some prototypes in Python, but it will be fun to do in Snowflake. My intuition about how snowflake works suggests that the naive way of doing it would be quite slow, but some careful reasoning about partitioning can solve it. But that isn't necessarily true, and it will be fun to test.

This is linked to #175


Overhaul project summary page

@Steffengreiner thank you for your Review!
Regarding the loading times: i think you have tested two different projects, and the one you showed with the new design has tons of experiments, that need to be loaded to create the experiment design overview. So i think this comparison is not reflecting an issue based on the implementation change.
I will look into the other found issues though.

A.) Experiment creation on the project page is currently broken with the following error message:
2024-11-11 17:29:16,368 ERROR [http-nio-8080-exec-10] l.q.d.e.UiExceptionHandler: Missing level info for experiment.created.success. java.lang.RuntimeException: Missing level info for experiment.created.success. at life.qbic.datamanager.views.notifications.MessageSourceNotificationFactory.parseLevel(MessageSourceNotificationFactory.java:156)

I dont see how this is related to my PR, since I worked on the project summary use case. If you can prove me wrong, go ahead, otherwise I kindly ask you to create a separate issue for it.

Heya @sven1103, you're right! I investigated the issues and can confirm that the experiment creation was already broken before this PR. I created an issue
Concerning the load times, you're also correct that this overhaul did not change it and it's due to the number of experiments within a project. I think this also has to be tackled seperately since the ACL mechanism seems to be the reason for this loading time.
Finally i also created a seperate issue for the dialogs not closing if the user navigates via the browser buttons.


Update Addon|Knobs|All knobs story to reflect updated addon-knobs

Issue:
Current vue-kitchen-sink example knob updates don't update the story.
What I did
Fixed 'Addon|Knobs|All knobs' story to reflect updated addon-knobs (#4773), as per my suggestion in #4947.
How to test

Run vue-kitchen-sink example storybook
Navigate to Addon|Knobs|All knobs
Knobs now update props of story, unlike the current vue-kitchen-sink example

@nickdandakis sorry for the late reply, I see some merge conflicts, can you verify this PR is still relevant?

@ndelangen, nope, this PR is no longer relevant. @backbone87 fixed the addon-knobs vue story with #5057 (specifically, this commit). Was just trying to be proactive since I came across issue #4947 and noticed the documentation was stale.


rowSelectionChanged should trigger on batch also

Currently when the check in the header is clicked, only the rowSelectionChangedBatch event is triggered. intuitively it seems that using rowSelectionChanged, I should be able to capture any time a row is selected.  Would it be too much of a performance hit to trigger both events?

I think there's an option to turn off the batch event.

Thanks @PaulL1. I read the docs too quickly.


@bindable with default value of {} fails to bind properly

See code here.
In this example, the "my-element-form" custom component has an attribute called "mydata" which is bound to an object that looks like:
{
  one: { value: "test1" },
  two: { value: "test2" }
}

When the attribute definition omits a default value, this works fine and you can see that the list to the right lists two entries "one" and "two" respectively. When the attribute definition specifies @bindable mydata = {} the list is always empty.

I think we've got this fixed now in master. Will push out an update this evening.


Update license file names

I think we should rename the files so that it is clear which file contains which license:

LICENSE.txt -> LICENSE-ASL.txt
LICENSE-JSR371.txt -> LICENSE-JCP.txt

What do you think?

I found it much more specific what each one does.


Problem with CSS being applied?

It seems when this gets created as a PDF some of the CSS I've set in a style at in the page head isn't being applied.
One thing that's happening is I have some elements rendered on the page and I set their width and height to hard inch values but when the PDF comes through to the page they are rendering much larger than that on their pages.
Is there something I need to know about how CSS is rendered?

This package is just a wrapper around phantomjs.
It manages how many phantomjs are being used for printing, but the printing it self is done by phantomjs.
I recommend to search phantomjs repisotory for the solution.


Required field

First of all, thank you for your work :)
Describe the bug
I'm not sure if this a bug or I'm just missing something. But is it possible that vue-next-select fields can't handle the required property? I haven't found it in the api reference, and setting a vue-next-select field to required will not trigger html5 validation.
Expected behavior
Trigger html5 validation

The required is not not yet implemented.
I will fix this weekend.
Ref: https://html.spec.whatwg.org/multipage/form-elements.html#attr-select-required
Thanks for the feedback 👍 .

@ilyen85
Since vue-next-select is not implemented base on native select, there is a trade-off between supporting html validation and a lot of other features (e.g., styling select, Object options).
Instead of use native html required attribute I would first recommend you to use vuelidate to do validation, I have create an example for this: https://github.com/iendeavor/vue-next-select/blob/develop/examples/src/views/Vuelidate.vue .
Hope this helps you!

Hi!
Thank you for the example, yes I have managed to solve it with some JS validation, its just a nice to have feature ;) should I close this issue?
Thank you!


Added CaseIterable for getting categories array

Added CaseIterable for getting all categories easily. Also that way, if needed, we can get all emojis with a basic for loop.

Thank you @onurgenes !


Nested structs cause an error, internal sizing issues, but this thing is amazing!

A struct within a struct causes a crash and backtrace is required to decipher nested structs do not work.
That said, nested enums, etc... work
The other issue is internal sizing, as you mentioned:

I think scaling the size of label is more important than the 'input', and unless something changed in FLTK you need to calculate text width by yourself.  I've done it in the past based on the font size, but did not find the best solution.
All in all this is great!!!   What an easy way to make a GUI for entering info!!!  I can now build a GUI prefilled with values and switch between files with hardly any coding!  This is so amazing!!
To sub nest a struct, the only possible way i can think is to return an Fl_Tab, with a Group for each extra struct as a tab.
If every internal struct became a tab, it could potentially create a ton of tabs, and tabs within Tabs.  But AFAIK this should nest correctly and look okay.
This has me wanting to get into macros, you are really good at this stuff!!  Thanks so much!

Hi
I've tried to go with some saner defaults for the sizes, and also added a way to rename properties.
Regarding nested structs, data carrying-enums, structs with unnamed fields, those would be too complex to design unfortunately, logic-wise and gui-wise. (nested structs no longer cause a compile error though)

:smile_cat: You are great at this!
Ok now I have a Vec<Enum> that causes errors after those have been fixed.  Does this work for Vec in any form yet?  Is there a way you can simply ignore all things that are not covered?

I suppose to support more things would require functions to show them.  For instance, to actually implement nested things, opening a "sub-window" would be the way to actually do it in a program interface.  But that would mean creating a container group, with all of them sub groups (like tabs) but replacing the entire visible group with a different group.
This is probably not possible to pass the switch view functions in generate?

That would be difficult. I've added an implementation for vectors, which should work for any Vec where T implements FltkForm. The problem remains (like with tuple like structs and structs with unnamed fields), there is no way to fetch back the choices since vectors don't have named fields.
I'm also considering adding a Form widget which is instantiated like any widget, but which also takes data and shows as a form.
I've added more examples of those.

I think the previous internal formatting was more intuitive, but I see what you were going for in this iteration.

The vector of enum  does not render the way I'd  expect.  It is rendering the enum::Variant in the same way the enum::{variants} is rendered itself.  I hope that last part made sense to you.  look at the "specials" below.  It is:
specials:vec![Special::Tackle, Special::Tackle, Special::Tackle, Special::Tackle, Special::Tackle],
I suppose each variant is a MenuItem I'd expect the entire list in the Menu, but the variant MenuItem as the text displayed in the Box.
not sure waht needs to change in the impl for it.  Your coding style is great, I think I can learn a lot from how you implemented this idea.  Thanks for thinking of bool that is very sensible.
All in all I think for most people looking to make a really fast GUI for most reasonable use cases can basically build a struct, use serde and fltk-form.  I know my edge case (in-game configuration) is small, but for anyone needing a custom struct to GUI this will be the easiest, smallest solution.  It could be used as the primary UI on an embedded system, right?

A possible solution for:
enum MyEnum {
  This,
  That(Thing),
}

Would be to just display the Debug of Thing inside of That({:?}), and require they implement Debug.  Is this possible, or is this the issue?

I started using packs instead of Flex widgets, this should fix the issues with vecs.
Setting and getting the choice value requires integral indices, which data-carrying enums can't be cast/converted into.

@MoAlyousef That works great!  The only issue arises when I have a lot of things.
The Scroll Box would fix those and any other issues with internal width/height display and would offer the best UX, I think.  It does not display scrollbars if you do not need it, but if the window is too small everything fits.  I used this as a base widget for most of my old C++ app windows.  It fixed issues on old displays/small screens.

@MoAlyousef Yeah this works perfectly now, it might be better to make the example have:
//..
let mut grp = group::Scroll::default()//....
//..

I am closing the issue!  Thanks!

@MoAlyousef Question about the fltk::group::ScrollType.
How do I set it for the fltk::group::Scroll, in the C++ there was a function for it.... I didn't find it in Rust though

You can use set_type() or with_type().
let scroll = fltk::group::Scroll::default().with_type(fltk::group::ScrollType::BothAlways);

That might be a good default for the example code for fltk-form, so all things will work in the most expected way when copy + paste coders code it aka things in the future like copilot :
let mut grp = group::Scroll::default()
        .with_size(300, 200)
        .with_type(fltk::group::ScrollType::BothAlways)
        .center_of_parent();

I did see the with_type but was unsure if it worked for everything everywhere.  Thanks!
This way if it has a bunch of items in the struct it will all be accessible through the UI.


Fix GH-127 add support for HATEOAS

Fix GH-127, Add support for HATEOAS

@blackleg Please sign the Contributor License Agreement!
Click here to manually synchronize the status of this Pull Request.
See the FAQ for frequently asked questions.

Looking good! Tests will be important.

Codecov Report

Merging #140 into master will increase coverage by 0.2%.
The diff coverage is 93.75%.

@@             Coverage Diff             @@
##             master     #140     +/-   ##
===========================================
+ Coverage     76.05%   76.26%   +0.2%
- Complexity      325      327      +2
===========================================
  Files            40       41      +1
  Lines          1370     1386     +16
  Branches        198      199      +1
===========================================
+ Hits           1042     1057     +15
  Misses          243      243
- Partials         85       86      +1

Impacted Files
Coverage Δ
Complexity Δ

...d/openfeign/hateoas/FeignHalAutoConfiguration.java
93.75% <93.75%> (ø)
2 <2> (?)

@blackleg Thank you for signing the Contributor License Agreement!

@ryanjbaxter I added some documentation about how enable Hateoas support. Could you review that?

@ryanjbaxter I rewrited the documentation. It isn't more elaborate because I don't known it in depth.

It doesn't look like the actual functionality is tested via feign, just that things are registered.

@spencergibb @ryanjbaxter I added some tests to test the functionality.


Tabs or Spaces?

What indentation style are we going to be using? tablesort.js uses 2-spaces per indent, while src/sorts/*.js uses a single tab.
(I prefer 2-spaces, but that's just my opinion.)

Nevermind, I just saw the .editorconfig.


Dev Home: when signing into GitHub we open the browser and it opened 20 browser tabs

Dev Home version
No response
Windows build number
No response
Other software
No response
Steps to reproduce the bug
Expected result
No response
Actual result
No response
Included System Information
No response
Included Extensions Information
No response

This is a symptom of #472


Add search/issues endpoint

It looks like the rest of the Search API is supported but the search/issues endpoint isn't, it would be great to have that support :)

Perhaps the issue can be closed, since #149 implements the search?

Yes!  Thank you!


OS-37 ElasticSearch poc work

Please check the code changes.

This wasn't meant to be taken in then. Closing now (re-take later).


OIDC simple client

feedback:

https://github.com/ulrikstrid/ocaml-oidc/pull/8/files#diff-10f4f7b2c698ca2feab209b8b497ab9babef77a03cf2f43c6051b8dde8f1be71R81

Should take a token response and not a result type

Fix discovery_uri to account for a URI that already has a path component
Implement pp_hum functions
UserInfo.ml has copyright section as documentation

Going to merge this since I've been using it in production for a while now. I'll move the last outstanding comment to a separate issue.


Allow ApplicationInstallation config field to be blank

When it's not blank, when we run full_clean on an ApplicationInstallation which doesn't have any config fields (i.e. no config form), we get an error:
ValidationError: {'config': ['This field cannot be blank.']}

I believe there is no need to update the field, currently we already have integrations installed with an empty config

I'm not sure why Django admin lets the models be saved, but running full_clean() fails on them.

I believe there is no need to update the field, currently we already have integrations installed with an empty config

I'm not sure why Django admin lets the models be saved, but running full_clean() fails on them.


Facebook Starting Mass broke (edit: has nothing to do with the bot I think)

EDIT: sorry, nevermind, just tried it in a browser without any extensions/scripts, it doesn't seem to work at all.
Used to work a couple hours ago with the latest commit. Suddenly stopped spawning with FB-mass.
What I have tried:

Deleting Facebook and Agar.io Cookies (re-logging and connecting agar with FB)
die after spawning and/or hit ESC as it usually works
restarting browser

Using Chrome/Tampermonkey - AposBot 3.565

The Facebook Starting Mass thing might be broken once again...
Zeach will have to look into this in order to fix this problem...

Yes it is an agar issue. People on Reddit are complaining aswell.
https://www.reddit.com/r/Agario/comments/3hyeoq/no_more_starting_mass_bonuses/


Use Puppet String data type to check if the variable is a string

The purpose of this PR is to get rid of this warning:
Warning: This method is deprecated, please use match expressions with Stdlib::Compat::String instead. They are described at https://docs.puppet.com/puppet/latest/reference/lang_data_type.html#match-expressions. at ["/etc/puppetlabs/code/e
nvironments/production/modules/ca_cert/manifests/ca.pp", 47]:
(at /etc/puppetlabs/code/environments/production/modules/stdlib/lib/puppet/functions/deprecation.rb:28:in `deprecation')

Rather than changing the logic, I think we can remove this check entirely since the arguments for the defined type require that ca_text be either unset or a string.
Thoughts?

I fully agree, I'll update the PR!

Is it possible to get this merged and released to the forge?

I'll create a new release, but it may not be until next week. Thanks for the bump on this - It had gotten buried and forgotten.

I've released this in 2.1.5. Thanks again for the bump.


How to get shap values on new samples?

Hi Scott,
i have a question regarding the usage of the package in following scenario:

Model has been trained, deployed and is available for predictions on new data
After a new sample is sent to the model, i'd like to return the prediction alongside an explanation of the prediction result via shap.

What is the correct way to accomplish this?
I can think of two ways:
1.
explainer = shap.TreeExplainer(deployed_model)
shap_values = explainer.shap_values(X_new_sample)
or
2.
explainer = shap.TreeExplainer(deployed_model)
shap_values = explainer.shap_values(X_training_samples_and_new_sample)
thanks in advance
Alex

It seems like the only relevant difference is what you do with 'shap_values' afterwards. If you inspect / plot the row of the new sample you are accomplishing your #2 use. If you plot the whole, you are looking at the population (say the feature importance or the dependence plot) for the model (+ 1 single new sample).

As @BrianMiner mentioned if you are just explaining a single new prediction then you should probably use the first approach (1). Then take the SHAP values for that prediction and use them how you like (for example passing them to shap.force_plot)


Video Planning- Mirabelle, Arshia, Prajna, Zoe, Sanya, Claire

We alll have differnet assignment and things to take care of for the video.
collarbartion review and program design and developmet - sanya, zoe, claire
Program Function and Purpose, Identyfing and Correct Errors- arshia, mirabelle, prajna

### Claire's part
Big Idea 1.3 Program Design and Development - video notes progress
Frontend and Backend Integration

Ensure the frontend is user-friendly and visually appealing - mostly done

accomplished: inserted images for each country on home.md files, setup correct nav for subpages and main pages, all fonts selected and styled
goals: maps for all countries

Develop a robust backend to support frontend functionalities - in progress

accomplshed: created and altered student.py for our team, tested apis in postman for student.py and app.py
goals: add data for our team, connect apis to the review submission form

Improving Applications

Enhance applications by incorporating ideas and feedback from earlier projects (e.g., reviews of Flocker). - mostly done

accomplished: incorporated concept of ratings from rate_and_relate flavor fusion, restaurant concept from dnhs cafe
goals: include likes and comments from sanya's group

Design Documentation

Use tools like draw.io, UML diagrams, and flowcharts to capture and document design. - mostly done

accomplished: kanban board, figma
goals: flowchart documentation

Code Comments and Style

Follow PEP 8 style guidelines for writing clean and maintainable code.
Use comments to document code implementation and logic. - to do

accomplished: to do
goals: incorporate pep 8 style comments into apis for better organization


CLI backlight

Hi just to mention,
I wrote a cli interface to this keyboard API.
I you were intersted to use it.
https://github.com/Kwaadpepper/msi-keyboard-CLI

Send a PR to add the link to the readme file :smile:

Just added https://github.com/wearefractal/msi-keyboard/pull/27


fix invalid anchor link on documentation

Some anchor link in documentation were broken on gitbook, so I fixed it

This is because of the difference on how GitBook and GitHub handle auto generated header links. Consider,

Header
GitBook
GitHub

git_branch
git-branch-gitbranch
git-branch-git_branch

git_status
git-status-gitstatus
git-status-git_status

hg_branch
mercurial-branch-hgbranch
mercurial-branch-hg_branch

hg_status
mercurial-status-hgstatus
mercurial-status-hg_status

exec_time
execution-time-exectime
execution-time-exec_time

vi_mode
vi-mode-vimode
vi-mode-vi_mode

exit_code
exit-code-exitcode
exit-code-exit_code

Since we're promoting GitBook version as primary doc, It's better prefer it everywhere.

Let's postpone it.
Many users comes to the repo and they won't be able to jump to the right section. GitBook seems abandoned, I've even seen warnings that they aren't going to support gitbook-cli anymore and force people to use their services.


Enable migrate.py to do other dbmate-esque things, deprecate dbmate

We want to be able to do dbmate migrations that include python code as well, see #165 for example. Ideally, we could use migrate.py as a script to handle this. It would want to emulate the following from DBMate:

up
down
status
create
Ex: bazel run //sematic/db/migrate_bin -- status

Usage of dbmate has beed deprecated; this issue has been implemented.


added a arg to yml file

fixed the error which was cause due to --bin type_buddy not being passed

hey rust_grammers
rust is the better than the rest


Evening delivery isn't shown in order details

When 'levervenster' is 0 days, evening delivery isn't shown in the order details.

When 'levervenster' is 1 day or more, evening delivery is shown in the order details.

(Screenshots show the same order, but with the different settings activated)
Would like to see the delivery option for 'levervenster = 0' the same as 'levervenster > 1'

00725846

We will solve this option with version 4.0.0


TabBar Disappears after return to the app

When the TabBar is hidden, I press home, the app enters the background.
After I go back to the app, The TabBar is gone.

Duplicate of #313
Literally the latest issue, btw.


Fix Post List image on Part 3 of Essentials Tutorial

name: "\U0001F4DD Documentation Fix"
about: Fixing a problem in an existing docs page
Checklist

[ ] Is there an existing issue for this PR?

Issue

[ ] Have the files been linted and formatted?

No linting necessary, only repointed a link in markdown and added a png file.

What docs page needs to be fixed?

Redux Essentials Tutorial:
Part 3:

What is the problem?
The image that should show the working posts list is actually showing an image with the completed navbar and notifications feature.
What changes does this PR make to fix the problem?
This PR does the following:

adds working_post_list.png to website/static/img/tutorials/essentials
pointed the part-3-data-flow.md's img src to point at the added image mentioned above.

Looks like there's a formatting issue with the Markdown file.  Can you reformat with Prettier and push?

Looks like there's a formatting issue with the Markdown file. Can you reformat with Prettier and push?

I checked the file with --check part-3-data-flow.md and it said it was formatted correctly. I went ahead and issued --write part-3-data-flow.md to hopefully force some change, but the file didn't change in response to the command. Is there another linter I should try running it through? I would commit the prettier-formatted file but Git doesn't recognize any changes so I can't push.

Eh, let's go ahead and put this in, then.

Okay. I scrolled through the updated page on the deployed documentation just to be safe and didn't see any formatting issues. Have a great day!


How to resolve org.apache.http.conn.ConnectionPoolTimeoutException?

Hi,
When I run one of my crawlers, I get a lot of errors like:
ERROR [AbstractCrawler] MyCrawler: Could not process document:  (org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool)
Whereas  is perfectly accessible.
Do you have any idea how I can resolve this?
Thanks in advance

I cannot reproduce.  This exception usually indicates a leak in the connection pool.  That is, connections are allocated but they are never released so the pool is running out of connections to allocate.  You indicated in another ticket you wrote your own document fetcher.  Is it possible you forget to release a connection there?  If you can reproduce without using custom code, (e.g. using GenericDocumentFetcher), please attach your config.

Hi
Thanks again for your prompt reply and your kind help.
You were indeed right again: as I'm not an expert with all the Apache http tools, I copied some code from the internet:
http://www.mkyong.com/java/apache-httpclient-examples/
and didn't realized they didn't close the connection...
Thanks to your remark, I went to your own (GenericDocumentFetcher) code and realized that I was lacking the following part:
} finally {
if (method != null) {
method.releaseConnection();
}
Thanks a lot!


RCTExceptionsManager.reportFatalException was called with 2 arguments, but expects 3

Hey guys,
I'm a fresh new member of react native community. I started a project using Xcode, everything was working well until I imported react-native-location library. I didn't get any errors but my Views weren't displaying.. So, I decided to start from scratch, create a new project, then pasting my old classes. However, since, I have this error just after doing a : react-native init AwesomeProject

I've restarted my project, Xcode and event my computer but I still have this error.
Does someone have an idea on what's going on ?
Let me know if you need more informations. Thanks you for time/help.
Gozu.

Hey guys, week-end is over and I seriously need your help on this one, at least something, a lead ?
I set-up a new project, removed old projets, empty the trash, restarted my computer, Xcode, everything.. still get this error :s


RFC Cache inherited permissions

Applies to assets + cms modules.
Inherited permissions are calculated and cached on a per-request basis, with all cached results stored in a protected variable which is rebuilt on each request.
It would be more prudent to cache this and persist across requests, flushing when models are modified.
Acceptance criteria:

On a cache-hit, no DB queries are required
File / Page modification flushes the cache

Suggested implementation

InheritedPermissions takes a CacheInterface dependency, which it uses to cache and restore permissions. Each key would be cached by class and ID, as well as SSViewer.global_key config arg.

cc @chillu for review

Agreed, but too late for 4.0 stable. In particular since this stuff tends to have high impact side effects and regressions. Removing milestone.

Affect of this issue is minified slightly by https://github.com/silverstripe/silverstripe-assets/pull/83. Shall we merge this smaller change instead?

The real challenge here will be cache-invalidation; When we modify a page, is it possible to flush the cache for only itself and it's children?

Another concern on cache busting is something I noted in https://github.com/silverstripe/silverstripe-cms/issues/1977 - custom implementations of permission methods (e.g. ->canCreate(...)) which rely on unknown external factors. Also, when it comes to caching, file system is fast, database is faster and memory is (by far) the fastest. I'm more concerned about constant repeated hits to a particular method than I am hits to the DB (unless it's hits to variations of the method, in which case the DB has to be avoided since every query will be unique). At that point, caching should probably happen at multiple levels:

Low level: Very granular keys to ensure busted at parent/child level on modification. Propagate cache-busting up to parents when child is modified (if needed).

Why: On the level itself, this is already understood (above), notwithstanding the details I've added on children/propagation.

High level: A single cached data structure retaining all calculated permissions thus far (so that is loaded once into memory).

Why: Due to granularity of the above, going to fetch a cached value from [insert caching system here] for each specific permission will likely cause about as much overhead as calculation of the original value itself anyway.

The high level (monolithic?) would be useful for me as well given I have a clustered system of multiple servers and SilverStripe's default cache mechanism is via file system (which the servers do not sure), meaning I'd have to use a database or some other TCP/IP-based cache anyway.

Actually, re-analyzing the stack, I suppose the "custom implementations" issue pointed out first above may not be as much of a problem, since the caching happens inside of the method and not prior to calling the method (so caching would be self-consistent and encapsulated). i.e. Calls to parent::canCreate($member, ...) would return the same result anyway, just faster, even if my custom implementation depends on other factors. At that point, caching is up to me.

:thinking: Actually.... both is happening, never mind.
(Bear with me, like I said, still wrapping my head around it)

Ran out of time looking at this, but diving even further, it's not actually propagating permission checks on nested objects by utilizing the ->can*() methods (from what I can tell); instead this only gets invoked after a call to a ->can*() method. So I guess the issue still stands (but maybe for a different issue/RFC) on how InheritedPermissions checks (and also caches) permissions when a SiteTree object (which really this is what it's for) has an overridden implementation of one of those ->can(...) methods.
As a case in point: I originally was going to use SilverStripe's built-in permission model, but realized that while it was capable of granular permissions (e.g. via Permission::checkMember($member, 'CUST_PERM')) and capable of inheriting permissions (e.g. this), it is not capable of inheriting granular permissions, e.g. does $member have permission to access CUST_PERM in the context of this particular SiteTree instance?

I've added a few ACs:

Member, Group or Permission modification flushes the cache
The same cache is shared between members
If new member permissions are checked, they're added to the existing shared cache
The cache supports multi-server setups without creating inconsistencies
Loading a 1000+ page tree (with three levels of nesting) with CMS_ACCESS_CMSMAIN permissions loads demonstrably faster than before

Regarding disk vs. memory caching, the DefaultCacheFactory already uses a memory cache if possible (APC, PHP files which are accelerated via Zend Opcache, and only then falling back to standard filesystem). @patricknelson If you needed a cross-server cache to avoid redoing that computation on multiple servers, that should be pluggable.

@unclecheese and @tractorcow to work through performance value of this card, moving into blocked for now

All core changes merged other than CMS and assets module. Almost there!


Import External BOMs

Description
If the root BOM imports other BOMs, import those and all BOMs they import.

Codecov Report
Patch coverage: 3.12% and project coverage change: -10.18% :warning:

Comparison is base (6ef8bd4) 28.84% compared to head (e3b5756) 18.67%.

Additional details and impacted files
@@              Coverage Diff              @@
##               main      #13       +/-   ##
=============================================
- Coverage     28.84%   18.67%   -10.18%
  Complexity        8        8
=============================================
  Files             5        5
  Lines           104      166       +62
  Branches         16       26       +10
=============================================
+ Hits             30       31        +1
- Misses           65      125       +60
- Partials          9       10        +1

Files Changed
Coverage Δ

...dev/aga/gradle/plugin/versioncatalogs/Generator.kt
0.00% <0.00%> (ø)

...radle/plugin/versioncatalogs/service/POMFetcher.kt
0.00% <0.00%> (ø)

...a/gradle/plugin/versioncatalogs/GeneratorConfig.kt
52.38% <42.85%> (-10.12%)
:arrow_down:

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