hold_action doest not work on mobile devices

I just noticed that hold_action are not working on my phone.
I've confirmed it on both HA's Mobile App, and in the mobile browser - same story for both. I've tested for both things like toggle lights, both also browser mod services.
hold_action are working just fine on desktop-devices.

By using the debug tool in Chrome and Firefox (to simulate a device), my right-click menu are opening, if i make the hold_action on the mobile-device-like emulation :-)

By using the debug tool in Chrome and Firefox (to simulate a device), my right-click menu are opening, if i make the hold_action on the mobile-device-like emulation :-)

same issue in v1.0.10 the hold_action doesn't work

same issue in v1.0.10 the hold_action doesn't work

Correct. It doesn't work on mobile devices right now. I've not found time to take a look at it.
1.0.10 are the first public release. There's nothing changed, compared to the last 'pre' release.

Correct. It doesn't work on mobile devices right now. I've not found time to take a look at it.
1.0.10 are the first public release. There's nothing changed, compared to the last 'pre' release.


repository is very big

The binary files that seems not to be used now (e.g. ffmpeg.exe, ffplay.exe) are very big, causing slow speed in git clone.
It is helpful to maintain the repository with reference to here 😆

They do get used.


chore(deps): update dependencies to gatsby 4.0.0

Changes proposed

This PR updates a few dependencies that we forgot to update on #109.
Additional context

Have you seen this error before @thinkybeast?
ERROR "gatsby-plugin-mdx" threw an error while running the createSchemaCustomization lifecycle:

Cannot read property 'setParserPlugins' of undefined

TypeError: Cannot read property 'setParserPlugins' of undefined

Related to https://github.com/gatsbyjs/gatsby/issues/33677
I'll take a look over the weekend.


Model definition script

The entry configuration will contain a link to a script with the model definition.
We will need to decide on the following points:

Do we allow for links only, or also for relative paths to the configuration file.
What's the format for the script? (Also depending on the framework.)

Do we require some pre-set name as entry point (like a class Model or a function get_model) or is the entry point custom (needs to be specified in the config then)?
Does the script need to be self-contained (i.e. can only depend on default libraries) or can it import from other code in its github repo (this is pretty common in network definitions for torch hub).

We should also think about compatibility with the existing model zoos: torch.hub and tensorflow-hub.

Forking off this issue from #1 to discuss in more detail.

Hi, here is what I think:

Do we allow for links only, or also for relative paths to the configuration file.

I think the model script path should be constrained to relative path only to simplify the implementation and there is no obvious benefit of allowing placing the model script elsewhere. For version control/ security purposes, we would like the script to stay with the configuration file.

What's the format for the script? (Also depending on the framework.)

Do we require some pre-set name as entry point (like a class Model or a function get_model) or is the entry point custom (needs to be specified in the config then)?
Does the script need to be self-contained (i.e. can only depend on default libraries) or can it import from other code in its github repo (this is pretty common in network definitions for torch hub).
The first one is used by Kipoi, but I think we should make it self-contained and be able to import script from the subfolders of the same github repo (relative to the root folder of the configuration file). This allows easily zip the model folder and distribute as standalone model package.

We should also think about compatibility with the existing model zoos: torch.hub and tensorflow-hub.
If the model script is self-contained, then it can easily be compatible with existing model zoos. Example below.

Forking off this issue from #1 to discuss in more detail.

Since we are going to have the model definition script in python, and allowing import network definition from other code in github repo. I think we should consider allowing implementing the training part and data loading in the same model script.
As one can imagine that describing training and data loading in YAML can hardly scale to future cases (e.g. different preprocessing for multiple inputs channels, auxiliary loss, discriminators etc., imagine a multi-tasking network doing both classification and segmentation). On the other hand, all these can be easily solved by describing the training functions and data loaders in a script rather than YAML.

Perhaps we should combine customised field in the YAML config  and use them explicitly in the model script rather than the core library. This will allowing minimize the maintenance effort of the core library, and the model script developer can decide what can be configured with YAML.
Assuming we have the following YAML configuration file:
####Required
version: 0.0.1
language: python
framework:
    pytorch>=1.1
    torchvision>=0.1.8
name: RESNET
description: ...
...
documentation: link/to/doc.md
model_script: model.py

#####Customized
model_weights:
        source: link/to/weights.torch
        hash: 42
training:
    loss: BinaryCrossEntropy

Here is the content of model.py
import torch
import torchvision
import torch.nn as nn
from bioimage import api

config = api.getConfig()

# use model zoo
model = torchvision.models.resnet18(pretrained=True)

# load the model_weights file defined in the YAML config
weight_path = api.download(config.model_weights.source, config.model_weights.hash)
model.load_state_dict(torch.load(weight_path))

# use the customized config in the YAML config
if config.training.loss == 'BinaryCrossEntropy':
    criterion = nn.BCELoss()
elif config.training.loss == 'MSE':
    criterion = nn.MSE()

def normalize(images):
    means = images.mean(dim=1, keepdim=True)
    stds = images.std(dim=1, keepdim=True)
    normalized_images = (images - means) / stds
    return normalized_images

def train(images, target):
    normalized_images = normalize(images)
    output = model(normalized_images)
    loss = criterion(output, target)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

def predict(images):
    normalized_images = normalize(images)
    output = model(images)

api.register(
     for='ilastik',
     type='model',
     input_shape=[None, 4, 256, 256],
     input_shape=[None, 1],
     train=train, # train for one step
     predict=predict # make a prediction
)

Similary we can specify data loder like this in the same model script (model.py):
def get_loader(traindir):
    train_dataset = datasets.ImageFolder(
        traindir,
        transforms.Compose([
            transforms.RandomResizedCrop(224),
            transforms.RandomHorizontalFlip(),
            transforms.ToTensor(),
            normalize,
        ]))
    return train_dataset

api.register(
     for='ilastik',
     type='dataloader',
     get_loader=get_loader
)

Importantly, the model script will allow everything provided from pytorch naturally, but introducing an extra YAML layer will increase the maintenance efforts on the core library unnecessary, since every loss type, optimizer etc. will be required to be wrapped as YAML keys.

I think the model script path should be constrained to relative path only to simplify the implementation and there is no obvious benefit of allowing placing the model script elsewhere. For version control/ security purposes, we would like the script to stay with the configuration file.

I am not sure we can get away without allowing for links here. This depends on how we actually store the configuration files for entries of the model zoo:

Store only the configuration file in our repo. In this case, we need to allow for links in the model definition script.
Store link to a github repo that must contain the configuration file in root. Then we don't need to allow for links, but we don't have the config under version control ourself.
(And there might be more options to explore here).

I think we should make it self-contained and be able to import script from the subfolders of the same github repo (relative to the root folder of the configuration file). This allows easily zip the model folder and distribute as standalone model package.

Agree, that makes sense.

Since we are going to have the model definition script in python, and allowing import network definition from other code in github repo. I think we should consider allowing implementing the training part and data loading in the same model script.
As one can imagine that describing training and data loading in YAML can hardly scale to future cases (e.g. different preprocessing for multiple inputs channels, auxiliary loss, discriminators etc., imagine a multi-tasking network doing both classification and segmentation). On the other hand, all these can be easily solved by describing the training functions and data loaders in a script rather than YAML.

Here, I see the problem that this is linking model definition with training procedure, which are two independent things. Someone might take a model and train it on different data and with a different logic then originally done.
We could still allow to provide a default training function in the script, but that should be kept optional.

I am not sure we can get away without allowing for links here. This depends on how we actually store the configuration files for entries of the model zoo:

Store only the configuration file in our repo. In this case, we need to allow for links in the model definition script.

It would be important to make it decentralised, meaning any github repo can host model configurations files.

Store link to a github repo that must contain the configuration file in root. Then we don't need to allow for links, but we don't have the config under version control ourself.

If we assume all the model should be contained within a folder and the config should be placed in the root of that folder. Then a github repo can contain many model subfolders. The relative folder can always work.
- Github repo for models
├──  other files
├── model A
|   ├── model.config.yaml
|   └── model.py
├── model B
|   ├── model.config.yaml
|   └── model.py

The nice thing is that each model folder can be distributed as a standalone zip file.
How about that?

Here, I see the problem that this is linking model definition with training procedure, which are two independent things.

Well, I think we cannot see the model definition and training procedure as independent thing, they are tightly coupled in many case. For example, a classifier, if the last layer has softmax or sigmoid activation, you need to use the corresponding loss type. Similarly the data loader also constrained by the training procedure and the model definition. Also for models with adversarial loss or perceptual loss, the model definition are tightly coupled with training.

Someone might take a model and train it on different data and with a different logic then originally done.

If we are targeting the end user, we don't need to consider training a model differently from what its originally way. Meanwhile, If a developer can always rewrite/modify the model script to provide a different training function.

Well, I think we cannot see the model definition and training procedure as independent thing, they are tightly coupled in many case. For example, a classifier, if the last layer has softmax or sigmoid activation, you need to use the corresponding loss type. Similarly the data loader also constrained by the training procedure and the model definition. Also for models with adversarial loss or perceptual loss, the model definition are tightly coupled with training.

Model and training procedure are often intertwined, however there are substantially fewer ways of training models than there are models. Separating them on an abstract level brings stability and more powerful backends, allowing for hyperparameter adjustments on the fly, etc.. We should aim higher than simple 'black box' training. If training procedures are custom, simply switching the training data becomes a non-trivial development effort. There needs to be a clear API---a standard training way.
softmax vs sigmoid etc can easily be accounted for. The config contains a valid loss anyway. Loss Criteria can be divided into groups, thus we know what kind of loss group can be applied to a given model.
Of course we will be limited in the variety of models we can train, but the core library can grow and support more and more types of models, while supporting arbitrary numbers of models that are compatible with existing training procedures without any additional development work, once the model has entered the zoo.

@FynnBe
Re Callbacks: I would place this post MVP.
Re Entry Points: Sounds like all this would work. I don't have strong feelings about this in general, but I think we should be compatible with the hubs (for torch.hub this means we would need to support a function with custom name.)
@oeway

- Github repo for models
├──  other files
├── model A
|   ├── model.config.yaml
|   └── model.py
├── model B
|   ├── model.config.yaml
|   └── model.py

The nice thing is that each model folder can be distributed as a standalone zip file.
How about that?

Yes, I think that would work.

Well, I think we cannot see the model definition and training procedure as independent thing, they are tightly coupled in many case.

Sure, the model constrains the training procedures that make sense, but there are still a lot of options.
More importantly, the model can be trained on different data, that needs a completely different data loader
(the output format of the loader needs to be the same, but data can be stored in a completely different way.)

Someone might take a model and train it on different data and with a different logic then originally done.

If we are targeting the end user, we don't need to consider training a model differently from what its originally way. Meanwhile, a developer can always rewrite/modify the model script to provide a different training function.

Training on different data, and potentially with a different training logic, is exactly the ilastik use case, so we need to support this.
For our use-case having a training function defined in the model script will not work, because we need more control for interactive training.
I see your point though, that defining more complicated training procedures, e.g. for a GAN, in the config will be very tedious. So if we want to support more complex training procedures, there should be an option to specify a training function in the script.

We could still allow to provide a default training function in the script, but that should be kept optional.

I would go even one step further. We should rather allow for adding callbacks, so that we do not loose logging, checkpointing, etc. that a given backend may rely on (display logging, restoring checkpoints, etc. )

Good idea, since the default training function is train for one step, the logging can be handled by the software itself right?
Alternatively we can also provide a set of logging api function to allow the model developer to decide when to log and make checkpoint. Something like this:
def train(images, target):
    ...
    api.log('training for one step %s', loss.cpu().numpy())
    api.progress(percentage)
    ...

Coming back to the question of an entry point.
I do not see a need for additional logic in a get_model function as we want to handle weights in the backend. Because of this I am in favor of a model class.
Interestingly, I actually think the weights should also be handled by the model script. As you will see, for network with several subnetwork(e.g. a GAN), it hard to handle the weights from the backend, we would rather provide a few download/upload api to the model script so it can initialize the network and load the weight itself. In fact, not only limited to weights, the model script can also load a config file to restore the optimizer status.

A step further, since we don't know how to exactly handle the weights/config, we may also expose api to the model script to facilitate the distribution of user trained models to Zenodo. Say, the model script can register a uploadModel function, and the software can link to a button to allow the end user to upload and publish the trained model to Zenodo. And the model script can decide how many weights files to upload and what's their naming convention, the actual upload process is handled by the api function we provide.

class Model or more realistically ```python
class SuperNewNet:
....
Model = SuperNewNet
should probably be avoided.
Specifying  a `class_name` in the config would have the benefit of being able to keep several model variations in the same file. (Something equivalent might also be achieved with specific kwargs for `get_model`, but then there would potentially be two sets of key word arguments, which might be confusing.)

I can see the advantage of using class here. However, I think the script should be self-contained, not interlinked with the yaml file. To achieve the same, I think you can add a new api function say api.registerModelClassName().

@constantinpape

Training on different data, and potentially with a different training logic, is exactly the ilastik use case, so we need to support this.
For our use-case having a training function defined in the model script will not work, because we need more control for interactive training.

I see, could you elaborate on what kind of low-level control you would like to have to support interactive training?
Ideally, would be great if you can define these as interface, so we can support that in the model script itself. You know I would be also interested in supporting that in the IlastikJoy project we discussed before.
Considering the model reproducibility, one model file should ideally have exactly the same behavior across different software. Making the model file self-contained would make the model less depedent on the software or version of software, it will greatly improve the flexibility.
Otherwise, I think we an simply expose the raw model access to Ilastik and keep the training function for other software such as ImJoy and Fiji.

Re Callbacks: I would place this post MVP.

yes, definitely

Re Entry Points: Sounds like all this would work. I don't have strong feelings about this in general, but I think we should be compatible with the hubs (for torch.hub this means we would need to support a function with custom name.)

I've again looked at some examples, and I think we should not rely on hubconf.py. Model kwargs are set in the get functions and model weights loaded. Both of these we want to achieve through the config.yaml. We should be compatible with hubconf.py in the sense of not being in the way, and our model.py and hubconf.py could share code, but they---as planned atm---will not map 1 to 1.
https://github.com/NVIDIA/DeepLearningExamples/blob/torchhub/hubconf.py
https://github.com/pytorch/fairseq/blob/master/hubconf.py

@FynnBe

Model and training procedure are often intertwined, however there are substantially fewer ways of training models than there are models. Separating them on an abstract level brings stability and more powerful backends, allowing for hyperparameter adjustments on the fly, etc.. We should aim higher than simple 'black box' training. If training procedures are custom, simply switching the training data becomes a non-trivial development effort. There needs to be a clear API---a standard training way.
softmax vs sigmoid etc can easily be accounted for. The config contains a valid loss anyway. Loss Criteria can be divided into groups, thus we know what kind of loss group can be applied to a given model.
Of course we will be limited in the variety of models we can train, but the core library can grow and support more and more types of models, while supporting arbitrary numbers of models that are compatible with existing training procedures without any additional development work, once the model has entered the zoo.

I understand, but this will require too much maintenance effort, and the design is not future proof. Say, a new loss added to Pytorch will always require us to manually added to the core library. In terms of reproducibility, since the training are totally handled by Ilastik, the results may only be reproduced with a certain version of Ilastik at some point.
If possibile, I think it will be much more maintainable and reproducible if we can define an interface for interactive training, and allow the model script itself to handle the interactive training.

ok, so specifying the training STEP function might be fine, the training loop, however needs to be controlled by the backend.
Then we need to specify what the step function needs to return (loss, raw output?) to be able to log these.
For interactive training, we control of the training and validation loops and the ability to adjust any hyperparameter on the fly (batch size, learning rate, etc.. ).
the training step would need to take model and optimizer as arguments, as well as the current batch coming from the backend's dataloader. The provided training step function would need to be compatible with these inputs. If we split whatever one wants to do in this custom training step function into two or more callbacks (before prediction, after prediction/before loss, ...) it might be easier to keep stable and contain more reusable callbacks (that might be(come) part of the core library).

Say, a new loss added to Pytorch will always require us to manually added to the core library.

All pytorch losses can easily be part of the core library as default

In terms of reproducibility, since the training are totally handled by Ilastik, the results may only be reproduced with a certain version of Ilastik at some point.

For exact reproducibility yes. This would be the same for any training procedure specified together with the model. The version of any software used should be specified.

If possibile, I think it will be much more maintainable and reproducible if we can define an interface for interactive training, and allow the model script itself to handle the interactive training.

the big downside to this is that every model will behave differently or the API is extensive and implementing the logic for a new model will be complex.
If we maintain a few methods of training that models are inherently compatible with we will not loose unmaintained models over time and can provide a consistent user experience.

ok, so specifying the training STEP function might be fine, the training loop, however needs to be controlled by the backend.
Then we need to specify what the step function needs to return (loss, raw output?) to be able to log these.
For interactive training, we control of the training and validation loops and the ability to adjust any hyperparameter on the fly (batch size, learning rate, etc.. ).
the training step would need to take model and optimizer as arguments, as well as the current batch coming from the backend's dataloader. The provided training step function would need to be compatible with these inputs. If we split whatever one wants to do in this custom training step function into two or more callbacks (before prediction, after prediction/before loss, ...) it might be easier to keep stable and contain more reusable callbacks (that might be(come) part of the core library).

Good!
As you proposed previously, I think it's a good idea to define a base interface class for interactive training (say api.InteractiveTraining), and the model script can then inherit it and define the behavior.
Then the model script can be something like this:
class SuperNewNet(api.InteractiveTraining):
    def __init__(self, model):
        self.model = model
        self.optimizer = ...
    def on_epoch_end(self, epoch):
        ...
    def train_step(self, batch):

    ...

snn = SuperNewNet()
api.register(type='model', model=snn)

the big downside to this is that every model will behave differently or the API is extensive and implementing the logic for a new model will be complex.
If we maintain a few methods of training that models are inherently compatible with we will not loose unmaintained models over time and can provide a consistent user experience.

You can think of doing this is just to allow the model script to override the default training behavior. It shouldn't be too different than you are doing right now. Say you have already a class named InteractiveTraining inside Ilastik with all the default training functions. Now what you need to do is to expose that class to allow the model script override the training functions.
For those standard models, we can still use the default training functions:
snn = api.InteractiveTraining(model=..)
api.register(type='model', model=snn)

Say, a new loss added to Pytorch will always require us to manually added to the core library.

All pytorch losses can easily be part of the core library as default

Sure, it will be naturally to support in the model script, but if we rely on the YAML config, it will be difficult to expose all future loss types as YAML keys automatically, and you also mentioned that we can define rules to group the loss functions, that's also hard without manually adding them.

@oeway
Let's back up from the detailed discussion a bit. We are discussing two fairly different design patterns here.
What the ilastik group has initially envisioned is to have a declarative (yaml) config, that only allows to define the model in code (because a framework independent model definition is too tedious).
You are suggesting to define API's for different functionalities, like InteractiveTraining etc.
There's a lot of pros and cons to this design choice and I don't have a complete overview of this.
Some of my key considerations:
Advantages of the declarative config over the API design:

Having the declarative config is more stable and easier to automatically validate (there's less custom code involved, so also less things that need to be tested for every model).
The declarative config can be fairly minimal in the beginning and then be expanded in the future (e.g. by allowing for a new key that specifies Callbacks).
If we have a central config, we don't need to implement APIs for different softwares that can work with the model zoo. There's one config that holds the information + model definition, there's some convenience functions in the core library to load it, that's it.

Advantages of API over (only) config:

Adding the API makes everything more permissive and allows to express more 'custom' use-cases, e.g. GANs, multiple losses etc. and generally makes interaction with custom code easier.
It allows different sofwares to express functionality in a similar way, having more reproducibility between them.
It allows parts of the definitions / config in code, which can be easier to generate (but can also be a disadvantage, because it makes configs harder to validate).

I think that from the ilastik side, we really want to have stable and easy to maintain model definitions that can be shipped to users who don't have any deep learning experience, which is why we favor the declarative config. Also, in the beginning we will only support segmentation tasks.
I can see that not being able to express more custom use cases might be a big issue in general.
@FynnBe and I, think that it's not a good time to make this design decision already, because we would like to have something working first to and be more informed then.
Would you be ok with sticking with only the config for now (which means only supporting simple use cases like classification and segmentation in the MVP). We can then discuss this more at the hackathon and see what we will need post MVP.

@constantinpape
Thanks for the nice summary!
Yes, we need to make the decision on the design pattern before going into details.
I would like to add also for the API pattern, the model script can define test functions to allow validate the models( Kipoi also support test apis). Another advantage of doing it in API over config is that you can use your code editor to do autocompletion during development.
I can completely understand Ilastik prefer declarative approach since you have a well defined scope on the model types. And as you see that the config approach may not fit well for Fiji and ImJoy.
Meanwhile I think we can figure out a way to allow the two patterns co-exist. If we provide a set of predefined model scripts in the core library, then we can use declarative config file and used with a default model script for Ilastik.
Coming back to the discussion about the link to the model script before, if we allow http link to model script, then default Ilastik specific model scripts can be hosted from the Ilastik project repo, and you can manage the model script, all the models configurations hosted elsewhere can just refer to that link, and declear all the training/data options in YAML only. It also allow you to upgrade easily, say, to avoid breaking existing model config files, you can add new version of model scripts, and new model config files can refer to the new ones.
How about that?

Thanks for the nice summary!
Yes, we need to make the decision on the design pattern before going into details.

Sorry, I should have probably put the last paragraph in the beginning, but I would argue not to make this decision right now. My logic is the following: we will need some basic yaml config in any case and we can just start from that using it as our declarative config.
Once we have a few initial models (segmentation and classification) that works with this, we have a better basis for discussion already and can see how to build on this.

@constantinpape @FynnBe Thanks for the demo you have made in the current repo.
Based on the use case you made in this repo, me and @MartinHjelmare will try to work on a prototype model engine which works for both the API pattern and the declarative style.
For a better discussion basis, we will try to explore:

making use of the Jupyter project in order to benefit from existing infrastructure (Binder/Google Colab etc.)
potentially support Java/Fiji and R or other languages through Jupyter
support ImJoy, potentially drop our plugin engine and use only the generalized model engine
optionally, solve pip/conda dependencies and support virtual environments

The model engine will be run either with the same python runtime as the software (e.g. for Ilastik), or a standalone python runtime (for ImJoy and Fiji).
To support declarative style, you just need to provide a model script which parses the options in yaml.

This discussion got super-seeded by the discussions at the hackathon, closing it for now.


Order of operations is wrong - delete user should not be first

[Enter feedback here]
As the title says - following the order of events on the page is literally not possible as deleting the used prevents most of the following steps from working.

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

ID: 4e366b9c-0d35-83c6-f509-1774dd351504
Version Independent ID: 702f2dc1-46f8-508a-68bc-b5d033c56a9a
Content: Remove a former employee - Overview - Microsoft 365 admin
Content Source: microsoft-365/admin/add-users/remove-former-employee.md
Service: o365-administration
GitHub Login: @KwekuA
Microsoft Alias: kwekua

@SCJDigital Thank you for your feedback.
Step 1 - Prevent a former employee from logging in and block access to Microsoft 365 services
Step 2 - Save the contents of a former employee's mailbox
Step 3 - Wipe and block a former employee's mobile device
Step 4 - Forward a former employee's email to another employee or convert it to a shared mailbox
Step 5 - Give another employee access to OneDrive and Outlook data
Step 6 - Remove and delete the Microsoft 365 license from a former employee
Step 7 - Delete a former employee's user account
Although we've numbered the steps in this solution and you don't have to complete the solution using the exact order, we do recommend doing the steps this way.
Thanks
Sri

@msbemba Thank you very much for the contribution and sharing this explanation. @SCJDigital if you have any feedback or recommendation please feel free to reopen this issue . We proceed here to close it. Thanks for taking out some time to open the issue. Appreciate and encourage you to do the same in future also.

Hi, thanks for the recommended order of events @msbemba.
@yogkumgit the page https://docs.microsoft.com/en-us/microsoft-365/admin/add-users/remove-former-employee?view=o365-worldwide still has the original misleading event sequence issue: Step 1 & 2, a video and the "Before You Begin" all suggest "Delete a User" before operations that will no longer be possible after deleting a user, so I would not call this solved.

@SCJDigital This document is an overview and talks about things you could do before you delete a user (video).
"When an employee leaves the company, you'll need to remove them from Microsoft 365 for business.
The steps are mentioned in the recommended order.
Thanks
Sri

@SCJDigital Thank you for your response. I have moved the delete user section to the bottom of the screen (after the steps) so that it reduces ambiguity.
This change can be tracked via PR# https://github.com/MicrosoftDocs/microsoft-365-docs/pull/7874
Once the author approves, the changes will be live.
Thanks
Sri

@msbemba Thank you very much for the contribution and updating the documentation with PR. @SCJDigital Hope this update is helpful for you. Thanks for taking out some time to open the issue. Appreciate and encourage you to do the same in future also.

Will Step 3 work if you do step 1.
Step 1 - Prevent a former employee from logging in and block access to Microsoft 365 services
Step 3 - Wipe and block a former employee's mobile device


Text Label Enhancements

I think there are some areas where labels and label position could be improved:
For one, overlap handling: Axis labels should not overlap with the tick numbers. For "overlap" handling, the label should probably have priority
Mathematica (in default) doesn't perspectively scale tick numbers / labels and just places them in 2D next to the tick, ie.

I also found the following example, where the labels are attached to the axis in 3D space:

I think both have the advantage that there will not be any overlap, so that they'll be better readable.
Unfortunately I don't know how hard this is to implement, but in my opinion this will be a nice improvement.

Btw this is what R has:
x <- seq(-10, 10, length= 60); y <- x
f <- function(x, y) { r <- sqrt(x^2+y^2); sin(r)/r }
z <- outer(x, y, f)
persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "#009caa");


Feature/pb 181 implement new rules for autolayout

New rules were already implemented, but there was some mistakes on how they were handle.
Now new rules should be correctly represented
also changed positioned & container to better match the rules

I noticed that when scaling vertically on CityDisplayViewScreen, the following happens:

Here's the code:

Here's the figma constraints on the frame:

You can see that the constraints are PIN TOP and BOTTOM, while the vertical sizing is FIXED. However, we are exporting a scaling height. We might need to check, but I believe that if PIN TOP and BOTTOM are true, we should not generate a height at all since the Positioned is already being created.

LogIn screen issue:

As you can see, the login screen does not center.
Here's the code:

Unique Value Propsition - View More issue:

Code (dev branch on the left):

Figma constraints:

We are super close. This is the only bug I noticed regarding AutoLayout-related constraints

In the frame depicted above, the image on the right moves towards the image on the left as the window scrolls down. However, in Figma, they space between them is always constant:


Update deprecated mlab connection guide for the new MongoDB Atlas

[X] I have read freeCodeCamp's contribution guidelines.
[X] My pull request has a descriptive title (not a vague title like Update index.md)
[X] My pull request targets the master branch of freeCodeCamp.
[X] None of my changes are plagiarized from another source without proper attribution.
[X] All the files I changed are in the same world language (for example: only English changes, or only Chinese changes, etc.)
[x] My changes do not use shortened URLs or affiliate links.

Closes #35587
More detailed explanation
mLab was recently acquired by MongoDB, Inc. As of March 2019, new mlab accounts can not be created and therefore the instructions provided here are no longer valid.
Following the updated instructions in this PR will enable the creation of a new MonogDB Atlas connection URI that is necessary to continue with the lessons.

I'll defer to @scissorsneedfoodtoo for making the changes to the production learn.

@RandellDawson Please merge this PR is this is ready.

@RandellDawson, yes, let's update the instructions here since this could block campers working through the curriculum now. I also went through the instructions and made an account.
Thank you for updating these intructions @Dereje1! Everything LGTM.

@Dereje1 Congrats on your first pull request (PR)! 🎉
Thank you for your contribution to the page! 👍
We're happy to accept these changes, and look forward to future contributions. 📝

@scissorsneedfoodtoo Everything should be ready to go into production.

Thank you for all of your hard work @Dereje1! Looking forward to seeing this on the live site. And thank you for the heads up, @ojeytonwilliams. We'll get this out soon.

@scissorsneedfoodtoo How long before we see these instructions appear on the production site?

@RandellDawson, I can't say for sure, but hopefully within the next week.

@scissorsneedfoodtoo I was thinking for critical updates (like this one), is there not a way to update the legacy production?


Update docs?

Hi
The readme mentions that
https://github.com/irobot-ros/events-executor/blob/6f4343fc1e7d7719cabe0f14059c897b9698cf5a/README.md?plain=1#L27
Now that https://github.com/ros2/rmw_fastrtps/pull/619 is merged in, is this not an issue anymore?

Yes! Thanks for pointing it out.
I will update the docs accordingly.

Hi, we just updated the instructions in the README!
https://github.com/irobot-ros/events-executor
I'm closing this issue


Functional test failures in the sys.config tests

The functional test to save the config for the sys organizing collection is failing as shown below. The module with the issue is likely: f5/bigip/tm/sys/config
Here's the error:
=========================================================== test session starts ============================================================
platform linux2 -- Python 2.7.6, pytest-2.9.1, py-1.4.31, pluggy-0.3.1
rootdir: /root/common, inifile:
plugins: symbols-0.1.0-a3, cov-2.2.1
collected 1 items
test_config.py F
================================================================= FAILURES =================================================================
___________________________________________________________ TestConfig.test_save ___________________________________________________________
self = <test.functional.tm.sys.test_config.TestConfig object at 0x7fe5f1f23050>, bigip = <f5.bigip.BigIP object at 0x7fe5f1f230d0>
def test_save(self, bigip):
    c = bigip.sys.config

  c.save()

test_config.py:20:

container = <f5.bigip.tm.sys.config.Config object at 0x7fe5f1f23650>, name = 'save'
def __getattr__(container, name):
    # ensure this object supports lazy attrs.
    cls_name = container.__class__.__name__
    if 'allowed_lazy_attributes' not in container._meta_data:
        error_message = ('"allowed_lazy_attributes" not in',
                         'container._meta_data for class %s' % cls_name)
        raise LazyAttributesRequired(error_message)

    # ensure the requested attr is present
    lower_attr_names =\
        [la.__name__.lower() for la in
            container._meta_data['allowed_lazy_attributes']]
    if name not in lower_attr_names:
        error_message = "'%s' object has no attribute '%s'"\
            % (container.__class__, name)

      raise AttributeError(error_message)

E           AttributeError: '<class 'f5.bigip.tm.sys.config.Config'>' object has no attribute 'save'
../../../../f5/bigip/mixins.py:95: AttributeError
========================================================= 1 failed in 0.04 seconds =========================================================
root@836b3b0120ae:~/common/test/functional/tm/sys#

Hmmm...

@pjbreaux i noticed the same

Sorry that output sucks. Does anyone know how to paste it with no formatting?

@pjbreaux here's the potato

@zancas
Since we changed command mixin now the method of calling config save/load will look like this:
bigip.tm.sys.config.exec_command('save')
bigip.tm.sys.config.exec_command('load')

@pjbreaux I had to remove 'load' options due some unexpected problems, was getting 503 error responses from MCP. Save works fine as far as I can see.

The config element needs some rework later, in conjunction with other improvements of doing BIGIP backups via REST. Another thing on to do list i guess

Oh yeah, we should also think having unit tests to sniff out these simple oversight bugs. Then they would be caught by a build failure when you create the PR. Although they are not substitutes for a good functional test. It's up to you how to balance that. There are some good examples of both.

fixed in 0.1.7


Failed to create machine: create 'centos': make rootfs: unexpected EOF

Describe the bug
A clear and concise description of what the bug is.

vmgr.log
console.log
Can't delete  machine after fail to create

To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Logs
If applicable, attach log files by opening the OrbStack menu and clicking “Show Logs”, or email them for privacy.
Info report

<paste here>

Additional context
Add any other context about the problem here.

This indicates a network issue while downloading the CentOS machine image. Maybe you need a proxy? If so, see #2.
Inability to delete the partially-created machine has been fixed for the next version, and download error descriptions have been improved.

Proxy support added in v0.6.0.


chore(deps): update dependency cypress to v4.2.0

This PR contains the following updates:

Package
Type
Update
Change

cypress
devDependencies
minor
4.1.0 -> 4.2.0

Release Notes

cypress-io/cypress
v4.2.0
Compare Source
Released 3/16/2020
Features:

Videos can now be recorded when running Electron in --headed mode. Addresses #1767.
cypress cache list now prints the last time the cached binary was accessed for each version present. Addresses #6682.

Bugfixes:

We fixed a regression in 3.8.3  where HTTPS requests could experience slowdown. Fixes #6659.
We now detect some installations of Firefox that were previously undetected. Fixes #6669.
We fixed a race condition where an asynchronous error could fail to be caught when running the plugins file process. Fixes #6570.
We now more thoroughly ensure the parent of an element exists when recursively calling actionability checks in order to prevent some maximum call stack errors. Fixes #6707.
Specfiles containing & or % characters now correctly run instead of erroring. Fixes #4210.
We added support for running tests on Jira plugins even when Jira scripts were not minified. Fixes #1436.
We fixed a bug causing specs to hang after rerunning tests during cypress open when there was an exception if thrown in an after hook. Fixes #6619.
cypress verify no longer incorrectly prints messaging about this being the first time using that Cypress version. Fixes #6607.
Screenshots no longer fail to be taken in Electron when Cypress DEBUG logs are enabled. Fixes #6662.

Misc:

A warning is now printed when setting the reserved key CYPRESS_INTERNAL_ENV to a non-production value. Addresses #6436.
When DEBUG logs are printed from cypress:launcher, they now print a clearer log during browser detection for easier reading. Addresses #6700.
The Test Runner now renders ANSI colors when there is a syntax error in the spec file. Addresses #6533.
The Test Runner now has an icon indicating whether the specs list parent folder is collapsed.  Addresses #6277.
There's better type information for .click, .dblclick, and .rightclick command's position argument. Addresses #6341.
There's a more robust type signature for .its() and .invoke(). Addresses #6431.
Using Cypress.dom.isDetached no longer throws a type error in TypeScript projects. Addresses #4408.
Using cy.clearLocalStorage({ log:false }) no longer throws a type error in TypeScript projects. Addresses #6615.
We added types for Cypress.sinon. Addresses #6720.
We've added the foundational work required to support experimental features in the Test Runner. Addresses #6257.

Dependency Updates

Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 78 to 80. Addressed in #6555.
Upgraded electron from 7.1.13 to 8.1.1. This bumps the bundled Chromium to 80.0.3987.141 and the bundled Node to 12.13.0. Addressed in #6555.
Upgraded @ffmpeg-installer/ffmpeg from 1.0.19 to 1.0.20. Addressed in #6686.
Upgraded minimist from 1.2.0 to 1.2.2. Addressed in #6726.
Replaced deprecated request with cypress-io/request. Addressed in #6679.

Renovate configuration
:date: Schedule: At any time (no schedule defined).
:vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.
:recycle: Rebasing: Whenever PR becomes conflicted, or if you modify the PR title to begin with "rebase!".
:no_bell: Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box

Available now for Enterprise: Renovate Pro with real-time webhook handling and priority job queue.

PR has been edited
:construction_worker: This PR has received other commits, so Renovate will stop updating it to avoid conflicts or other problems. If you wish to abandon your changes and have Renovate start over you may click the "rebase" checkbox in the PR body/description.


Uncaught errors are not captured on React Native

When using Raven in ReactNative, any error that is thrown outside of a try-catch block is not captured. It looks like there was an attempt to capture by calling ErrorUtils.setGlobalHandler. Unfortunately, in production the errors are never captured because the app crashes before the request is complete.
One option is to skip the defaultHandler, which is what causes the app to crash. However, the best behaviour is application-specific.
Perhaps the best solution is to avoid attempting calling ErrorUtils.setGlobalHandler at all in the React Native plugin, and instead to provide documentation for users to do it themselves?

I have the same problem, in production no errors are logged.
I don't understand your workaround to get this working.

@Kerumen . Sorry. My description was a suggestion for how to fix the library, rather than a workaround for users, which is why it was confusing.
To understand how to change the behaviour yourself, I'd recommend reading through this library's React Native plugin: https://github.com/getsentry/raven-js/blob/master/plugins/react-native.js#L59 . You'll see where it calls ErrorUtils.setGlobalHandler and passes the error along to Raven.captureException. You can override this in your own code, and avoid calling defaultHandler.apply. Then the error will be reported, but the app won't crash.
To restart the app when there is an error, I used CodePush which already has a utility CodePush.reloadApp. If you aren't using CodePush you'll likely be able to reimplement that functionality, or find a library to do it for you.

Thanks. I still have some troubles with CodePush and Sentry.
Can you help me? I reached you on Twitter :) Thanks!

This will likely be addressed by #626

Hey,
Check out our official client for react-native -> https://github.com/getsentry/react-native-sentry
Closing this here since it's obsolete.
If you're still having troubles, please create an issue there.
Thanks


Can not find jni.h file android ndk

Hi All I am getting error in c file and can not find jni.h file

the file is part of NDK, in
your-ndk-path/platforms/$your-android-version/$arch-type/usr/include/jni.h
one for each ABI and each android version, so you should see a lot of this file inside your ndk
by guessing, I would:

check you have the file in your ndk
your gradle/android studio is configured to the right ndk

you may uses android studio's import sample option to import hello-jni into your android studio, and check the thing out there. ndk path is set inside IDE and finally saved into local.properties.
it is a guess. if still have problem, maybe load more info?  thanks

If you're using AS 2.0 or 2.1 on Windows, there are good chances you're hit by this issue: https://code.google.com/p/android/issues/detail?id=195483

may you kindly remind us whether there is any change on your end?  thanks

Hi,
resolved the errors in JNI files but did not get generated the .so file
Regards,
Irfan
On Fri, May 6, 2016 at 3:33 AM, Gerry<EMAIL_ADDRESS>wrote:

may you kindly remind us whether there is any change on your end? thanks
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/android-ndk/issues/171#issuecomment-217292927

Oh, no errors? moduleName is there in your build.gradle, I believe

maybe share your 2 build.gradle files:
$project/build.gradle
$project/app/build.gradle
we could sync-up with that? thanks

$project/build.gradle
// Top-level build file where you can add configuration options common
to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.7.0-alpha1'
}
}
allprojects {
repositories {
jcenter()
}
}
*AND *
$project/app/build.gradle
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
    defaultConfig.with {
        applicationId = "com.example.hellojni"
        minSdkVersion.apiLevel = 4
        targetSdkVersion.apiLevel = 23
    }

}

/*
 * native build settings
 */
android.ndk {
    moduleName = "hello-jni"
    toolchain "clang"
    stl = "stlport_shared"
    cppFlags.add("-std=c++11")

}
android.buildTypes {
    release {
        minifyEnabled = false
        proguardFiles.add(file('proguard-rules.txt'))
    }
}

android.productFlavors {
    // for detailed abiFilter descriptions, refer to "Supported ABIs" @
    // https://developer.android.com/ndk/guides/abis.html#sa

    create("arm8") {
        ndk.abiFilters.add("arm64-v8a")
    }
    create("x86") {
        ndk.abiFilters.add("x86")
    }
    create("x86-64") {
        ndk.abiFilters.add("x86_64")
    }

    // To include all cpu architectures, leaves abiFilters empty
    create("all")
}

}
On Fri, May 6, 2016 at 10:13 AM, Gerry<EMAIL_ADDRESS>wrote:

maybe share your 2 build.gradle files:
$project/build.gradle
$project/app/build.gradle
we could sync-up with that? thanks
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/android-ndk/issues/171#issuecomment-217347294

also getting error is
Error:error: argument to '-x' is missing (expected 1 value)
On Fri, May 6, 2016 at 10:32 AM, Mohd Irfan<EMAIL_ADDRESS>wrote:

$project/build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.7.0-alpha1'
}
}
allprojects {
repositories {
jcenter()
}
}
*AND *
$project/app/build.gradle
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
    defaultConfig.with {
        applicationId = "com.example.hellojni"
        minSdkVersion.apiLevel = 4
        targetSdkVersion.apiLevel = 23
    }

}

/*
 * native build settings
 */
android.ndk {
    moduleName = "hello-jni"
    toolchain "clang"
    stl = "stlport_shared"
    cppFlags.add("-std=c++11")

}
android.buildTypes {
    release {
        minifyEnabled = false
        proguardFiles.add(file('proguard-rules.txt'))
    }
}

android.productFlavors {
    // for detailed abiFilter descriptions, refer to "Supported ABIs" @
    // https://developer.android.com/ndk/guides/abis.html#sa

    create("arm8") {
        ndk.abiFilters.add("arm64-v8a")
    }
    create("x86") {
        ndk.abiFilters.add("x86")
    }
    create("x86-64") {
        ndk.abiFilters.add("x86_64")
    }

    // To include all cpu architectures, leaves abiFilters empty
    create("all")
}

}
On Fri, May 6, 2016 at 10:13 AM, Gerry<EMAIL_ADDRESS>wrote:

maybe share your 2 build.gradle files:
$project/build.gradle
$project/app/build.gradle
we could sync-up with that? thanks
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/android-ndk/issues/171#issuecomment-217347294

this error:

Error:error: argument to '-x' is missing (expected 1 value)
is because an earlier bug in plugin,  change, inside $project/build.gradle
0.7.0-alpha1  to 0.7.0
it should be fixed.  please try it out,  thank you

also  change stl = "stlport_shared"  to
stl = "gnustl_static"
it should not matter now, but I was told gnustl_static/shared is the most stable ones right now

Thank you very much Gerry.
Problem gets resolved and gets .so file.
One more thing is that, Is it possible to debug ndk c\c++ file. in android
studio.
Thanks & Regards,
Irfan
On Fri, May 6, 2016 at 12:11 PM, Gerry<EMAIL_ADDRESS>wrote:

also change stl = "stlport_shared" to
stl = "gnustl_static"
it should not matter now, but I was told gnustl_static/shared is the most
stable ones right now
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/android-ndk/issues/171#issuecomment-217359958

Hi Gerry,
Thank you
I have done both switch from GDB to LLDB and vice-versa
On Fri, May 6, 2016 at 12:49 PM, Mohd Irfan<EMAIL_ADDRESS>wrote:

Thank you very much Gerry.
Problem gets resolved and gets .so file.
One more thing is that, Is it possible to debug ndk c\c++ file. in android
studio.
Thanks & Regards,
Irfan
On Fri, May 6, 2016 at 12:11 PM, Gerry<EMAIL_ADDRESS>wrote:

also change stl = "stlport_shared" to
stl = "gnustl_static"
it should not matter now, but I was told gnustl_static/shared is the most
stable ones right now
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/android-ndk/issues/171#issuecomment-217359958

Great!   debugging portion still works:  you could trace code inside JNI: it is one of the major benefits to use android studio for native code development.  In this codelab:
https://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?index=..%2F..%2Findex#0
step 5,  you could see how to trace code.  The tracing from JAVA into jni code [step into a jni function from Java side ] should still work too.

Thank You Gerry, I really appreciate your kind help
On 6 May 2016 19:54, "Gerry"<EMAIL_ADDRESS>wrote:

Great! debugging portion still works: you could trace code inside JNI: it
is one of the major benefits to use android studio for native code
development. In this codelab:
https://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?index=..%2F..%2Findex#0
step 5, you could see how to trace code. The tracing from JAVA into jni
code [step into a jni function from Java side ] should still work too.
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/android-ndk/issues/171#issuecomment-217453737

glad info here are useful to you  :-).  Come back to make it more useful when you have some free cycles too :-)!  I will close this one for now, thank!

Hi Gerry,
I want to link the c++ 's static library "libcurl.a" in android gradle. I
dont know the process .please help me .
Regards,
Irfan
On Sat, May 7, 2016 at 7:06 AM, Gerry<EMAIL_ADDRESS>wrote:

Closed #171 https://github.com/googlesamples/android-ndk/issues/171.
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/android-ndk/issues/171#event-653309825

The lib was built by someone for android platform already? if that is the case, you will have one ( or more ) header files, and one libcurl.a file.  Please look at the hello-libs sample, it is for this purpose. Basically 3 steps:

you copy the libs & headers to somewhere on your local system
In your application, tell gradle where your lib and header are with "PrebuiltLibraries"
in your application, tell gradle that your jni code depends on the prebuiltLibraries with jni.dependencies{}

the sample is for shared lib, but you could follow gperf's comment to get a working static lib case. One more thing, do not put your lib under main.jniLibs{} anymore since it is static lib, no need to pack into apk.
That should get it going. The other sample is inside branch "static-lib-showcase": look at the "endless-tunnel" in that branch, the nativeactivity is used as a static lib in that sample.
please try it out and let us know how it goes: Lib management is important for any native proj development, hope it could work for you. thanks


Iterable.any and Future.any are inconsistent/confusing

See this example:
import 'dart:async';

main() async {
  var syncValues = [1, 2, 3, 4];
  print(syncValues.any((v) => v == 2)); // prints `true`

  var asyncValues = syncValues.map((v)=> new Future.value(v));
  print(await Future.any(asyncValues.map((v) async => await v == 2))); // prints `false`
}

The second one prints false because it returns the first completed future, which is the result of 1 == 2.
I recently ran into this when converting some sync code to async code, I saw that Future.any was a thing and assumed it worked the same. It should be easy and consistent to convert between async and sync code.
I understand changing the name or behavior here would be a large breaking change, so it may not be possible, but could possibly be considered for Dart 2.x, or 3.x etc? Another option could be deprecating Future.any and renaming it to Future.firstCompleted or something along those lines. Then users would see a deprecation notice pointing them to the new name which is more clear about what it does, and it wouldn't break existing users.

Fwiw, this method does not appear to be well known or often used, only 100 results in all public github repositories, including false positives https://github.com/search?utf8=✓&q="Future.any"+extension%3A.dart&type=Code.

Agreed.
The Future.any function should have a different name.


There's been an error running Reason's parser on a file.

Got this error:
[1/6] Building client/rocket_chat/admin_log_in/client_rc_admin_log_in_form.mlast
FAILED: client/rocket_chat/admin_log_in/client_rc_admin_log_in_form.mlast
/Users/donut/RTM/webinar/app/node_modules/bs-platform/lib/bsc.exe  -w -30-40+6+7+27+32..39+44+45+101 -warn-error +101 -pp "/Users/donut/RTM/webinar/app/node_modules/bs-platform/lib/refmt.exe --print binary" -bs-jsx 3 -bs-super-errors -color always -c -o client/rocket_chat/admin_log_in/client_rc_admin_log_in_form.mlast -bs-syntax-only -bs-binary-ast -impl /Users/donut/RTM/webinar/app/client/rocket_chat/admin_log_in/client_rc_admin_log_in_form.re
File "/Users/donut/RTM/webinar/app/client/rocket_chat/admin_log_in/client_rc_admin_log_in_form.re", line 4, characters 2-765:
Error: SyntaxError in block

  We've found a bug for you!
  /Users/donut/RTM/webinar/app/client/rocket_chat/admin_log_in/client_rc_admin_log_in_form.re

  There's been an error running Reason's parser on a file.
  The error location should be slightly above this message.
  Please file an issue on github.com/facebook/reason. Thanks!

With this file:

<EMAIL_ADDRESS>let make (~root_node) = {
  let email_id = "rtm-webinar-admin-log-in-form-email";
  let password_id = "rtm-webinar-admin-log-in-form-password";

  open React;
  open Belt.Result
  open Common_infix;
  open Client_util;

  let (email, set_email) = useState(() => "");
  let (password, set_password) = useState(() => "");
  let (status, set_status) = useState(() => None);

  let onSubmit (e) = {
    ReactEvent.Form.preventDefault(e);
    set_status((_) => Some(Ok("Logging in...")));

    Meteor.login_with_password
      ( ~user=email
      , ~pass=password
      , ~callback=fun
        | Some(error) =>  {
          let e = Some(Error(Meteor.Error.message(error)));
          set_error((_) => e)
        }
        | None => ReactDOMRe.unmountComponentAtNode(root_node)
      , () )
  };

  let status_message =
    switch (status) {
      | None => <> </>
      | Ok msg =>
 {rs(msg)}

      | Error msg =>
 {rs(msg)}

    };

  <form onSubmit>

    {status_message}

     {rs("Email address")}
    <input id=email_id type_="email" required=true
      value=(email) placeholder="Email address"
      onChange={e => set_email(event_target_value(e))} />

     {rs("Password")}
    <input id=password_id type_="password" required=true
      value=(password) placeholder="Password"
      onChange={e => set_password(event_target_value(e))} />

    <button type_="submit"> {rs("Log in")} </button>

  </form>
}

Problem is missing parentheses around the payload of the patterns in the switch statement:
  let status_message =
    switch (status) {
      | None => <> </>
      | Ok msg =>
 {rs(msg)}

      | Error msg =>
 {rs(msg)}

    };

Unrelated errors: those patterns should also be wrapped in Some().


SolidJS Integration For Auto Animate

Greetings!
Thanks for this amazing library!
I have created a SolidJ integration for autoAnimate that will let us easily use autoAnimate with SolidJS.
Methods of use
This integration provides two methods for users to implement autoAnimate in their SolidJS app.
Primitive
Developers can use  the createAutoAnimate primitive function that returns a tuple of the parentRef setter function and the setEnabled function similar to the autoAnimate react hook. The behavior is exactly same as the react hook. Here is an example of usage.
import { createAutoAnimate } from '@formkit/auto-animate/solid'

const App: Component = () => {
  const [parentRef, setEnabled] = createAutoAnimate({ duration: 1000 })

  return (

      <button onClick={() => setEnabled(false)} >Stop Animation</button>

  )
}

Directive
Solid JS also allows placing directives in JSX similar to the Svelte implementation of auto-animate
import { createAutoAnimateDirective } from '@formkit/auto-animate/solid'

const App: Component = () => {
  const autoAnimate = createAutoAnimateDirective()

  return (

  )
}

I have also created a live example in Stackblitz with both methods in action over here
https://stackblitz.com/edit/vitejs-vite-8kuq8f?file=src%2FautoAnimateSolid.ts
https://user-images.githubusercontent.com/45807386/187337794-6b1bc73f-4a25-4d45-906d-c9500b4ee3aa.mov
Please let me know if you would like me to make any changes and I will try to incorporate them ASAP.
Hope you have a great week!
Thanks,
Aryan

This looks great! I'd love it if you were able to add a documentation section and hero example (at the top of the page). I don't "speak" solid myself, so your contribution would be valuable.
If you do tackle adding an example, one thing to note is we are looking for unique examples — in other words — not the same examples that already exist on the page, but some new concept to help people see a variety of ways to use it.

Awesome! Yeah I would love to add documentation. I'll try to think of some unique examples. Do you have any spefic animation use case in mind? If there is already something you would like to see auto-animate do then I caan implement that :D Also, thanks for the quick response!

I have some ideas for examples that do not have in the documentation yet, you could take inspiration on those.

Youtube style menu with subitems.
Modal opening and closing from x place on the screen.
Progress bar ( radial or normal )

I have some ideas for examples that do not have in the documentation yet, you could take inspiration on those.

Youtube style menu with subitems.

Modal opening and closing from x place on the screen.

Progress bar ( radial or normal )

Yeah these are all interesting ideas! For the first YouTube menu example, what functionality would you like to see? Could you share a screen recording of the animation effect you are thinking of?

Just opening as a drawer, I do not have any screen recorder right now, but opening youtube you can see the hamburguer menu icon, just clicking it would give the example its quite a simple animation of slide in and slide out from the left.

Hey @justin-schroeder please dont forget about this PR

Haven't forgotten — waiting for someone to write docs for it (with unique examples)

Sorry about this. Got busy with other projects. I will add examples sometime later this week 😄  Apologies for the delay here

@ardeora any further progress on this?

Closing this in favor of https://github.com/formkit/auto-animate/pull/117


作者您好，请教您一个问题

Dear author, I want to ask you a question. Your method uses Z-core normalization in the data processing stage. This normalization method and the method you proposed are used at the same time. What is the difference between your method and this normalization method? Is the difference between two more learnable affine parameters? Are these two parameter values equal to the mean and the variance mentioned in your paper?

The original Z-score normalization utilizes the statistics of the "training dataset."
RevIN, on the other hand, normalizes the input sequence using the statistics of each individual instance of the "input sequence."
Furthermore, RevIN can be employed as a middle layer within the model. This implies that the statistics used by RevIN can be extracted from the hidden vector sequences.


Yin - Working on Issue #12

Add the In-browserExecution.md file under the docs/ directory, which contains our CS 590 project info.
edit the main's README.md file to add a link to our In-browserExecution.md file

@ashimapanjwani I changed again, may you check?

@maemre I have made changes based on Ashima's suggestion, how do you think my changes on both files?


this.$refs.to.showDayCalendar() does not work on watch

I'm trying to automatically open the 2nd datepicker when value is selected on first datepicker.
this command does not work
watch: {
  	'highlighted.from' (value) {
  		this.highlighted.to = null
  		if (value != null) {
	  		this.$refs.to.showDayCalendar()
  		}
  	}
  }

But it works on mounted
mounted () {
   this.$refs.to.showDayCalendar()
}

Tried it on click method still doesn't work

this behaviour is not supported


Remove organization and update version

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


Develop

Closes: https://github.com/OAButton/backend/issues/84
Not auto merging because I'm concerned about differences between develop and master, @GrantRVD has also flagged this in an email to me - especially in Nav
@markmacgillivray can you:

[ ] merge this if it won't break stuff
[ ] Put info about keeping develop and master aligned in the read me or here and then I'll do it (simple bullets would be good)

Just checking in on this branch to see if there's anything more the two of you would like from me on the issues I merged into Develop. @JosephMcArthur @markmacgillivray
I've confirmed on the test site that the changes look satisfactory - the updates to the Blog landing page definitely seem to have worked. It looks like a more recent commit changed the highlight color for the buttons from light blue to dark orange, but otherwise it looks like everything else is in working order.


Bug: "Field.Select" options do not accept "selected"/"default" prop

What
Field.Select options do not render as selected with the respective prop supplied to <option>.
Why
Has something to do with how the initial value of Field.Select is grabbed.

Update

Turns out, having <option selected> is not advised by React. Therefore, this is left as is.
Added a safe fallback to children[0].value

Merged under #76. Closing.


[bug] Pick specific trigger for specific contariner: It does not work

This feature seems to be not working
I have the following trriger:
    - WUD_TRIGGER_PUSHOVER_CGM1_MODE=batch

and then in my service:
services:
syncthing:
image: syncthing/syncthing:1.27.1
labels:
- wud.trigger.exclude=pushover.cgm1
But the trigger is still associated after a complete remove and recreation of wud

The complete trigger json:
[{"id":"pushover.cgm1","type":"pushover","name":"cgm1","configuration":{"token":"ah","device":"OnePlus10","user":"uz","mode":"batch","once":false,"batchtitle":"${count} updates available","simplebody":"${name} can be updated from version ${local} to version ${remote}","html":0,"sound":"pushover","priority":0,"threshold":"all","simpletitle":"New ${kind} found for container ${name}"}}]
Originally posted by @carmatana in https://github.com/getwud/wud/issues/502#issuecomment-2563263046

Hi,
You're right 👍
A global change about entity ids broke this feature 😞 .
I found the issue; the fix will be released very soon along with other features currently in progress.


Remove caching of results in RuntimeJob

Summary
Removed the RuntimeJob._results member, and don't store the results every time they are retrieved. Instead, retrieve the results from the server every time.
Also fixed several related tests.
Noticed job_tags was not passed as a parameter when creating a new RuntimeJob, so added it.
Details and comments
Fixes #1159

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

11 of 12 (91.67%)  changed or added relevant lines in 2 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.02%) to 55.955%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

qiskit_ibm_runtime/utils/utils.py
1
2
50.0%

Totals

Change from base Build<PHONE_NUMBER>:
-0.02%

Covered Lines:
2462

Relevant Lines:
4400

💛  - Coveralls


Pastebin4J is not present in the repository

Hi,
The pastebin4J lib isn't present in the repo, so when cloning it, it creates broken paths and the plugin can't be built.
Could you add your lib folder in the repository or provide a way to get it easily?
Sincerely,

Hi @Kendos-Kenlen,
very weird, IntelliJ should download it automatically, since it's available in maven central, anyway, pastebin4j is another project mine, you can checkout it here pastebin4j.


fixing cap_mos pcells drc issues and adding its patterns

Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

drc testing results for pcells patterns :

cap_nmos

cap_nmos_b

cap_pmos

cap_pmos_b

@FaragElsayed2 , ready for testing and review


Hashi vault

This PR is adding the option of using a Hashicorp Vault to store the private signing key. The private signing key is stored as a secret and is base64 encoded.

Executing "ethsigner hashicorp-signer -h" did not show the help - should it?


S3 Uploads doesn't recognize .env values

Describe the bug
in bluelibs collections  have an file like FileLibs.ts
import { collection, field, relation, shortcuts } from "../utils";
// import { Adhesion } from "./sharedEnums/Adhesion";
// import { Speed } from "./sharedEnums/Speed";
// import { Support } from "./sharedEnums/Support";
//import { PrinterState } from "./sharedEnums/PrinterState";
// import { MediaTypes } from "./sharedEnums/MediaTypes";
// import { I18NField } from "./sharedEnums/Translations";
export const Filelibrary = collection({
id: "Filelibrary",
representedBy: "name",
behaviors: {
blameable: true,
softdeletable: true,
timestampable: true,
},
mock: {
count: 5,
},
//  representedBy: "translatedName",
fields: [
field.string("name", {
isRequired: true,
}),
field({
id: "technicalName",
type: field.types.STRING,
}),
/*
field({
id: "speed",
type: field.types.ENUM,
model: () => Speed,
}),
field({
id: "support",
type: field.types.ENUM,
model: () => Support ,
}),
field({
id: "adhesion",
type: field.types.ENUM,
model: () => Adhesion,
}),
*/
field({
id: "infill",
type: field.types.INTEGER,
}),
field({
id: "time",
type: field.types.FLOAT,
}),
field({
id: "machine_depth",
type: field.types.INTEGER,
}),
field({
id: "machine_width",
type: field.types.INTEGER,
}),
field.object("filterinfo", {
isArray: true,
subfields: [
field.string("ownerName"),
],
}),
field({
id: "toolhead",
type: field.types.INTEGER,
}),
field.string("modelStatus"),
field.string("status"),
field.boolean("selected"),
...shortcuts.fields.blameable(),
...shortcuts.fields.timestampable(),

],
relations: [
shortcuts.relation.file("modelFile", { isRequired: false }),
/*    relation({
id: "modelFile",
to: "AppFiles",
isMany: false, // you can also have multiple uploads
/*      field: s.field({
id: ${id}Id,
type: s.field.types.OBJECT_ID,
  }),

  ui: {
    create: true,
    edit: true,
    list: true,
    listFilters: false,
    view: true,
  },

//      ...override,
}),
*/
shortcuts.relation.file("gFileUrl", { isRequired: false }),
/*    relation({
id: "materialtype",
to: "MaterialType",
}),
relation({
id: "printertype",
to: "PrinterType",
}),
relation({
id: "colortype",
to: "ColorType",
}),
/
/    shortcuts.relation.user({
id: "owner",
unique: true,
}),
*/
...shortcuts.relations.blameable(),
],
});
To Reproduce
Steps to reproduce the behavior:

Have the file Filelibs in collection
npm i
npm run blueprint:generate
set mongo and S3 Values in .env
npm run start:api
npm run start:admin
login and ry upload

Expected behavior
File gets uploaded to S3 Bucket
Screenshots
error  {
"message": "The AWS Access Key Id you provided does not exist in our records.",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"AppFileUpload"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"message": "The AWS Access Key Id you provided does not exist in our records.",
"code": "InvalidAccessKeyId",
"region": null,
"time": "2023-02-23T07:48:42.127Z",
"requestId": "PCF0R35RC0J9Y8S7",
"extendedRequestId": "vv8lLSfhFGrpUTLQ53empkOSneLepTWwX4d+V/XvkE5wExtY27XjLDqa9gDHI6dvXmAZcExKVV0=",
"statusCode": 403,
"retryable": false,
"retryDelay": 53.22251742300297,
"stacktrace": [
"InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.",
"    at Request.extractError (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/services/s3.js:711:35)",
"    at Request.callListeners (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/sequential_executor.js:106:20)",
"    at Request.emit (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/sequential_executor.js:78:10)",
"    at Request.emit (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:686:14)",
"    at Request.transition (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:22:10)",
"    at AcceptorStateMachine.runTo (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/state_machine.js:14:12)",
"    at /Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/state_machine.js:26:10",
"    at Request. (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:38:9)",
"    at Request. (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:688:12)",
"    at Request.callListeners (/Users/thomaskamsker/Documents/Atom/Newmake3d/neumake3d/microservices/api/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"
]
Desktop (please complete the following information):

OS: Linux ,OSX Node 18,

Additional context
It seems that application is using mongo url from .env but not AWS S3 Parameters aka forgets them

Can you show me your .env file , and your kernel.ts file @tkamsker ?

hi thank you her eis .env of microservices/api  and microservices/api/startup here the .env file (i changed the values of S3) APP_URL="http://localhost:3000"
ROOT_URL="http://localhost:4000"
ROOT_PORT=4000
MONGO_URL="mongodb://localhost:27017/test123"
AWS_ACCESS_KEY_ID=yyy
AWS_SECRET_ACCESS_KEY=zzz
AWS_BUCKET=yyy
kernel.ts.zip
AWS_REGION=eu-west-1
AWS_ENDPOINT=xxx
and the kernel as zip file thank you

Can you log the secrets you get when you are in the kernel.ts file? Just
log the env ? Maybe you don't load the right .env variable somehow.
On Mon, Feb 27, 2023 at 12:05 PM Thomas Kamsker @.***>
wrote:

hi thank you her eis .env of microservices/api and
microservices/api/startup here the .env file (i changed the values of S3)
APP_URL="http://localhost:3000"
ROOT_URL="http://localhost:4000"
ROOT_PORT=4000
MONGO_URL="mongodb://localhost:27017/test123"
AWS_ACCESS_KEY_ID=yyy
AWS_SECRET_ACCESS_KEY=zzz
AWS_BUCKET=yyy
kernel.ts.zip
https://github.com/bluelibs/bluelibs/files/10838404/kernel.ts.zip
AWS_REGION=eu-west-1
AWS_ENDPOINT=xxx
and the kernel as zip file thank you
—
Reply to this email directly, view it on GitHub
https://github.com/bluelibs/bluelibs/issues/329#issuecomment-1446041790,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAN3CT2NN6WDMA6APVIUDO3WZR36FANCNFSM6AAAAAAVFKV4Q4
.
You are receiving this because you commented.Message ID:
@.***>

Hi i started api from vscode terminal to debug it ,.. and that is why i wrote the ticket it seems that the new x (compared to version in summer ) is "forgetting" the values
so here is the log file
thomaskamsker@ThomasAir-9 neumake3d % cd microservices/api
thomaskamsker@ThomasAir-9 api % npm run start:dev
Debugger listening on ws://<IP_ADDRESS>:59981/17d3130d-dcae-456f-837a-c524aba58148
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.

<EMAIL_ADDRESS>start:dev
tsnd --respawn -r tsconfig-paths/register src/startup/index.ts

Debugger listening on ws://<IP_ADDRESS>:59983/557c6bc4-1d14-4d87-b472-152a1ba30a5d
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
[INFO] 11:42:16 ts-node-dev ver. 1.1.8 (using ts-node ver. 9.1.1, typescript ver. 4.4.4)
Debugger listening on ws://<IP_ADDRESS>:59985/112f4b99-ee9c-44d3-90b6-f4ec8312fdf4
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
---kernel
xxxxxxx      xxxxxxx
x:::::x    x:::::x
x:::::x  x:::::x
x:::::xx:::::x
x::::::::::x
x::::::::x     X-Framework Server by BlueLibs
x::::::::x     You are in control.
x::::::::::x
x:::::xx:::::x
x:::::x  x:::::x
x:::::x    x:::::x
xxxxxxx      xxxxxxx
info  Connecting to MongoDB database...
(node:95791) NOTE: The AWS SDK for JavaScript (v2) will be put into maintenance mode in 2023.
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check the migration guide at https://a.co/7PzMCcy
(Use node --trace-warnings ... to show where the warning was created)
info  Connected to the database.
(node:95791) [MONGODB DRIVER] Warning: cursor.count is deprecated and will be removed in the next major version, please use collection.estimatedDocumentCount or collection.countDocuments instead
info  HTTP Server listening on port: 4000
info  GraphQL endpoint ready: http://localhost:4000/graphql
Running app fixtures.
Added fixtures for colorType
Added fixtures for filelibrary
Added fixtures for material
Added fixtures for materialType
Added fixtures for printerType
Added fixtures for printer
Added fixtures for users
Created new login user-0@bluelibs.com:bluelibs
Created new login user-1@bluelibs.com:bluelibs
Created new login user-2@bluelibs.com:bluelibs
Created new login user-3@bluelibs.com:bluelibs
Created new login user-4@bluelibs.com:bluelibs
Created new login user-5@bluelibs.com:bluelibs
Created new login user-6@bluelibs.com:bluelibs
Created new login user-7@bluelibs.com:bluelibs
Created new login user-8@bluelibs.com:bluelibs
Created new login user-9@bluelibs.com:bluelibs
Completed app fixtures.
^CWaiting for the debugger to disconnect...
Waiting for the debugger to disconnect...
thomaskamsker@ThomasAir-9 api % npm run start:dev
Debugger listening on ws://<IP_ADDRESS>:60029/ed445a33-70c0-4f9f-9140-102b12cd1114
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.

<EMAIL_ADDRESS>start:dev
tsnd --respawn -r tsconfig-paths/register src/startup/index.ts

Debugger listening on ws://<IP_ADDRESS>:60031/449ea167-be71-499e-b9a4-41ff89d797f7
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
[INFO] 11:45:08 ts-node-dev ver. 1.1.8 (using ts-node ver. 9.1.1, typescript ver. 4.4.4)
Debugger listening on ws://<IP_ADDRESS>:60033/9afeb730-ef9a-4b95-8800-8b771e407862
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
---kernel
{
APP_URL: 'http://localhost:3000',
ROOT_URL: 'http://localhost:4000',
ROOT_PORT: 4000,
MONGO_URL: 'mongodb://localhost:27017/test123',
CONTEXT: 'development',
AWS_ACCESS_KEY_ID: 'EXOee841d69b42d8902716276e1',
AWS_SECRET_ACCESS_KEY: 'QGqvWsXhbtu6unLWugKy4MgFLhhrxpbO_nM2Ky7UCzQ',
AWS_BUCKET: 'dev-neumake3d',
AWS_REGION: 'eu-west-1',
AWS_ENDPOINT: 'https://sos-at-vie-1.exo.io'
}
[class XS3Bundle extends Bundle]
xxxxxxx      xxxxxxx
x:::::x    x:::::x
x:::::x  x:::::x
x:::::xx:::::x
x::::::::::x
x::::::::x     X-Framework Server by BlueLibs
x::::::::x     You are in control.
x::::::::::x
x:::::xx:::::x
x:::::x  x:::::x
x:::::x    x:::::x
xxxxxxx      xxxxxxx
info  Connecting to MongoDB database...
(node:96153) NOTE: The AWS SDK for JavaScript (v2) will be put into maintenance mode in 2023.
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check the migration guide at https://a.co/7PzMCcy
(Use node --trace-warnings ... to show where the warning was created)
info  Connected to the database.
(node:96153) [MONGODB DRIVER] Warning: cursor.count is deprecated and will be removed in the next major version, please use collection.estimatedDocumentCount or collection.countDocuments instead
info  HTTP Server listening on port: 4000
info  GraphQL endpoint ready: http://localhost:4000/graphql
error  Error was found when creating context:
Context:  ApolloInvalidTokenException: (INVALID_TOKEN) Invalid token
at contextReducers (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/@bluelibs/apollo-security-bundle/src/ApolloSecurityBundle.ts:101:19)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at ApolloBundle.applyContextReducers (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/@bluelibs/apollo-bundle/src/ApolloBundle.ts:343:19)
at ApolloServer.contextHandler [as context] (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/@bluelibs/apollo-bundle/src/ApolloBundle.ts:293:14)
at ApolloServer.graphQLServerOptions (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/apollo-server-core/src/ApolloServer.ts:947:13)
at resolveGraphqlOptions (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/apollo-server-core/src/graphqlOptions.ts:95:12)
at runHttpQuery (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/apollo-server-core/src/runHttpQuery.ts:217:15) {
data: {
token: 'FBiWfPuepNJ9UsYYMFZoOAGaBLw4RshsgPTkNkOTCYNJEqB1qr9XhSUaM9wPNV4Z'
}
}
error  {
"message": "Context creation failed: (INVALID_TOKEN) Invalid token",
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"stacktrace": [
"ApolloInvalidTokenException: (INVALID_TOKEN) Invalid token",
"    at contextReducers (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/@bluelibs/apollo-security-bundle/src/ApolloSecurityBundle.ts:101:19)",
"    at processTicksAndRejections (node:internal/process/task_queues:95:5)",
"    at ApolloBundle.applyContextReducers (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/@bluelibs/apollo-bundle/src/ApolloBundle.ts:343:19)",
"    at ApolloServer.contextHandler [as context] (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/@bluelibs/apollo-bundle/src/ApolloBundle.ts:293:14)",
"    at ApolloServer.graphQLServerOptions (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/apollo-server-core/src/ApolloServer.ts:947:13)",
"    at resolveGraphqlOptions (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/apollo-server-core/src/graphqlOptions.ts:95:12)",
"    at runHttpQuery (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/apollo-server-core/src/runHttpQuery.ts:217:15)"
]
}
}
}
error  {
"message": "The AWS Access Key Id you provided does not exist in our records.",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"AppFileUpload"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"message": "The AWS Access Key Id you provided does not exist in our records.",
"code": "InvalidAccessKeyId",
"region": null,
"time": "2023-02-27T10:48:19.238Z",
"requestId": "AGA0EJ08MSEEBN6Q",
"extendedRequestId": "FdQPwwkOs0Whwx6v7igdesMvxmDbZGAb0M3LWWjAX0so5yRniWWn47jHaVYay/clKAsy5Ju83tI=",
"statusCode": 403,
"retryable": false,
"retryDelay": 69.73436988147913,
"stacktrace": [
"InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.",
"    at Request.extractError (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/services/s3.js:711:35)",
"    at Request.callListeners (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/sequential_executor.js:106:20)",
"    at Request.emit (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/sequential_executor.js:78:10)",
"    at Request.emit (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:686:14)",
"    at Request.transition (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:22:10)",
"    at AcceptorStateMachine.runTo (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/state_machine.js:14:12)",
thomaskamsker@ThomasAir-9 api %
thomaskamsker@ThomasAir-9 api %
thomaskamsker@ThomasAir-9 api %
thomaskamsker@ThomasAir-9 api % npm run start:dev
Debugger listening on ws://<IP_ADDRESS>:60156/76738cd7-3b41-48a1-b82a-e4b933f4405f
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.

<EMAIL_ADDRESS>start:dev
tsnd --respawn -r tsconfig-paths/register src/startup/index.ts

Debugger listening on ws://<IP_ADDRESS>:60158/3b1fa96a-a992-4d8c-8b8d-b34acb4ba0b5
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
[INFO] 11:49:52 ts-node-dev ver. 1.1.8 (using ts-node ver. 9.1.1, typescript ver. 4.4.4)
Debugger listening on ws://<IP_ADDRESS>:60160/eae2fb76-f86e-4c15-8810-7773d696a5ae
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
---kernel
{
APP_URL: 'http://localhost:3000',
ROOT_URL: 'http://localhost:4000',
ROOT_PORT: 4000,
MONGO_URL: 'mongodb://localhost:27017/test123',
CONTEXT: 'development',
AWS_ACCESS_KEY_ID: 'EXOee841d69b42d8902716276e1',
AWS_SECRET_ACCESS_KEY: 'QGqvWsXhbtu6unLWugKy4MgFLhhrxpbO_nM2Ky7UCzQ',
AWS_BUCKET: 'dev-neumake3d',
AWS_REGION: 'eu-west-1',
AWS_ENDPOINT: 'https://sos-at-vie-1.exo.io'
}
[class XS3Bundle extends Bundle]
xxxxxxx      xxxxxxx
x:::::x    x:::::x
x:::::x  x:::::x
x:::::xx:::::x
x::::::::::x
x::::::::x     X-Framework Server by BlueLibs
x::::::::x     You are in control.
x::::::::::x
x:::::xx:::::x
x:::::x  x:::::x
x:::::x    x:::::x
xxxxxxx      xxxxxxx
info  Connecting to MongoDB database...
(node:96805) NOTE: The AWS SDK for JavaScript (v2) will be put into maintenance mode in 2023.
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check the migration guide at https://a.co/7PzMCcy
(Use node --trace-warnings ... to show where the warning was created)
info  Connected to the database.
(node:96805) [MONGODB DRIVER] Warning: cursor.count is deprecated and will be removed in the next major version, please use collection.estimatedDocumentCount or collection.countDocuments instead
info  HTTP Server listening on port: 4000
info  GraphQL endpoint ready: http://localhost:4000/graphql
error  {
"message": "The AWS Access Key Id you provided does not exist in our records.",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"AppFileUpload"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"message": "The AWS Access Key Id you provided does not exist in our records.",
"code": "InvalidAccessKeyId",
"region": null,
"time": "2023-02-27T10:51:34.256Z",
"requestId": "0GK844V5YZJWV2E9",
"extendedRequestId": "YUZ/iMpzHvlbuWFV3ZPsxGmqsP6CMfXvh78ZLIpW0zys/ZCobAUSjuyhdl4ve5lSx4//082tPD18dIVgx6pUNQ==",
"statusCode": 403,
"retryable": false,
"retryDelay": 53.22943752859442,
"stacktrace": [
"InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.",
"    at Request.extractError (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/services/s3.js:711:35)",
"    at Request.callListeners (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/sequential_executor.js:106:20)",
"    at Request.emit (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/sequential_executor.js:78:10)",
"    at Request.emit (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:686:14)",
"    at Request.transition (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:22:10)",
"    at AcceptorStateMachine.runTo (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/state_machine.js:14:12)",
"    at /Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/state_machine.js:26:10",
"    at Request. (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:38:9)",
"    at Request. (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/request.js:688:12)",
"    at Request.callListeners (/Users/thomaskamsker/Documents/Atom/2023/neumake3d/microservices/api/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"
]
}
}
}
when i access in admin Edit Filelibrary where i have 2 uploads relations in blueprint collection similar to
relations: [
shortcuts.relation.file("modelFile", { isRequired: false }),
So it seems where was s3 is called the variables are gone

This problem was related to improper check of configs. Follow the latest readme and it will work.


Use fallback for optional when decoding explicit nulls

Created in response to http://stackoverflow.com/questions/38461472/expecting-something-custom-error

This change would be good for apps that don't care about the difference between null and a missing property, but could be bad for apps that do care about that distinction.
Apps that do care about the distinction may be relying on the current behavior and could be broken by this change, especially since the type of optional remains the same so it would be easy for users of the library not to notice the change.
If this is merged, then I'd suggest a major version bump, along with a clear warning in the release notes.

Definitely would be a breaking change, so a major version bump seems wise. 😄

If you did care about it and wanted to decode as a maybe it wouldn't be so bad to do
|> optional "something" (map Just int) Nothing

LGTM!

Okay, doing it!

Thanks @freakingawesome!

Released as 2.0.0! Thanks @freakingawesome @jamesmacaulay


API to extract files

@ajnavarro I'm a bit confused, do you remember, what it stands for?
May be adding a small description to this issue is worth doing, to avoid confusion

Closing for now, please feel free to re-open if that is still relevant


Downloading album : clean and flush before send zip file to avoid 500 error

When I downloading album, I always have 500 error.
After search, I found a fix, two instructions for cleaning before the download.
Without those instructions, I can't use the feature.

This PR will be closed because I'm not actively working on Lychee anymore. The repository of Lychee will stay available, but the main development continues under the Lychee Organisation. A fork maintained by the community.


Points: add support for negative han

Support for -1 or -2 han can be added very easily and this is what this issue is about.
Bonus points: if we are feeling adventurous enough, we can even go further, but it'll be a bit difficult to do (especially while maintaining BigInt support), as it will require a support for some sort of decimal/floating point for negative powers. Or maybe simple division will do?

Fixed by f5f66d60796f414f459b313004cd76e6b0c14048.


Question: representation of very big int

For very big numbers, for example<PHONE_NUMBER>000000000000000 it is more convenient to represent that number as value with mantissa and exponent: 4.87e+24. I managed to do this as follows (https://github.com/rkudryashov/async-graphql-reproducer/blob/master/some-service/src/graphql.rs):
#[derive(Clone)]
struct CustomBigInt(BigInt);

#[Scalar(name = "BigInt")]
impl ScalarType for CustomBigInt {

    fn to_value(&self) -> Value {
        self.0.to_f64()
            .and_then(|value| async_graphql::Number::from_f64(value))
            .map(|value| Value::Number(value))
            .expect("Can't convert BigInt")
    }
}

{
  "data": {
    "someQuery": {
      "testInt": 4.87e+24
    }
  }
}

But I didn't manage to get rid of using f64: the following is compiled but fails at runtime:
    fn to_value(&self) -> Value {
        self.0.to_i64()
            .and_then(|value| Some(async_graphql::Number::from(value)))
            .map(|value| Value::Number(value))
            .expect("Can't convert BigInt")
    }

Representation as String:
Value::String(self.0.to_string())

is not suitable for my case, because in this way the value will be represented as follows:
{
  "data": {
    "someQuery": {
      "testInt": "4870000000000000000000000"
    }
  }
}

Perhaps my question is not directly related to async-graphql. The question is about how to replace BigInt.to_f64() with to_i64 (just because it looks strange to use to_f64 for BigInt) or something other and maybe other your thoughts on the subject.

You can easily convert your large integer to a string with exponential/scientific notation by using format!("{:e}", n) or format!("{:E}", n) in fact this works for all types implementing std::fmt::LowerExp or std::fmt::UpperExp accordingly. I think with that you could easily create a custom Scalar eg. ScientificInt.

Thanks, I'll try it