pull request for e2e test at 01/30/2017 09:45:12

:white_check_mark: Validation status: passed
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


⚠ Bofrost.be has degraded performance

In 4badd73, Bofrost.be (https://www.bofrost.be) experienced degraded performance:

HTTP code: 200
Response time: 1188 ms

Resolved: Bofrost.be performance has improved in 5876b79.


Pometheus

What is this change?
updated script that substitute public IP EC2 instance into prometheus.yml
Why is this important?
server monitoring infrastructure automatization
How this has been tested?
manually
How can this be rolled back?
Rollback can be performed by reverting these changes in source control and redeploying via standard deployment mechanisms. This change is safe to roll back.
Are there any security risks introduced by this change?

Why you decide to swith script into Jenkins?

I decided to switch the script to Jenkinsfile because Jenkins didn`t run it correctly and I used Pipeline Syntax to modify the script for Jenkins, and now it works well.

I decided to switch the script to Jenkinsfile because Jenkins didn`t run it correctly and I used Pipeline Syntax to modify the script for Jenkins, and now it works well.

Why it is not working with a script?

When I ran the script in the terminal, it worked well.  In Jenkinsfile output was like on the screenshot.

Hello, @PavloTarnovetskyi.
What does it mean ?
No such file or directory

I think it will be better to resolve this error for using the script for this step

Hello, @PavloTarnovetskyi. What does it mean ?
No such file or directory

I think it will be better to resolve this error for using the script for this step

Yep, fully agree. The better way is to use script in this case instead of copying code to the pipeline


Unable to move the robot

Please provide the following information:

OS: Ubuntu 22.04
ROS 2 Distro: Humble
Built from source or installed: Installed
Package version: Version: 1.0.0-1jammy.20241128.090538

Expected behaviour
Robot being controlled by the telop panel in gazebo
Actual behaviour
The robot can be initiated but can't move
To Reproduce
Provide the steps to reproduce:

Launch the simulator

ros2 launch clearpath_gz simulation.launch.py setup_path:=$HOME/clearpath

Edit the topic name according to the namespace in robot yaml.

serial_number: a200-0000
version: 0
system:
  hosts:
    - hostname: cpr-a200-0000
      ip: <IP_ADDRESS>
  ros2:
    namespace: a200_0000
platform:
  attachments:
    - name: front_bumper
      type: a200.bumper
      parent: front_bumper_mount
    - name: rear_bumper
      type: a200.bumper
      parent: rear_bumper_mount
    - name: top_plate
      type: a200.top_plate
manipulators:
  arms:
    - model: kinova_gen3_lite
      parent: top_plate_default_mount
      xyz: [0.0, 0.0, 0.0]
      rpy: [0.0, 0.0, 0.0]
      ip: <IP_ADDRESS>
      port: 10000
      gripper:
        model: kinova_2f_lite

Recevied the twist msg from ros2 topic echo
Errors when launch the simulation

[generate_launch-5] Generated launch file: /home/huanyu/clearpath/manipulators/launch/manipulators-service.launch.py
[generate_launch-5] Generated launch file: /home/huanyu/clearpath/sensors/launch/sensors-service.launch.py
[generate_launch-5] Generated launch file: /home/huanyu/clearpath/platform/launch/platform-service.launch.py
[INFO] [generate_launch-5]: process has finished cleanly [pid 380]
[INFO] [generate_param-6]: process started with pid [382]
[generate_param-6] Generated config: /home/huanyu/clearpath/platform/config/control.yaml
[generate_param-6] Traceback (most recent call last):
[generate_param-6]   File "/opt/ros/humble/lib/python3.10/site-packages/ament_index_python/packages.py", line 58, in get_package_prefix
[generate_param-6]     content, package_prefix = get_resource('packages', package_name)
[generate_param-6]   File "/opt/ros/humble/lib/python3.10/site-packages/ament_index_python/resources.py", line 86, in get_resource
[generate_param-6]     raise LookupError(
[generate_param-6] LookupError: Could not find the resource 'clearpath_sensors' of type 'packages'
[generate_param-6]
[generate_param-6] During handling of the above exception, another exception occurred:
[generate_param-6]
[generate_param-6] Traceback (most recent call last):
[generate_param-6]   File "/opt/ros/humble/lib/clearpath_generator_gz/generate_param", line 46, in <module>
[generate_param-6]     main()
[generate_param-6]   File "/opt/ros/humble/lib/clearpath_generator_gz/generate_param", line 42, in main
[generate_param-6]     gpg.generate()
[generate_param-6]   File "/dev_ws/install/local/lib/python3.10/dist-packages/clearpath_generator_common/param/generator.py", line 70, in generate
[generate_param-6]     self.generate_platform()
[generate_param-6]   File "/opt/ros/humble/local/lib/python3.10/dist-packages/clearpath_generator_gz/param/generator.py", line 70, in generate_platform
[generate_param-6]     platform_param.generate_parameters(use_sim_time=True)
[generate_param-6]   File "/dev_ws/install/local/lib/python3.10/dist-packages/clearpath_generator_common/param/platform.py", line 107, in generate_parameters
[generate_param-6]     self.default_param_file.read()
[generate_param-6]   File "/dev_ws/install/local/lib/python3.10/dist-packages/clearpath_generator_common/common.py", line 193, in read
[generate_param-6]     file_contents = read_yaml(self.full_path)
[generate_param-6]   File "/dev_ws/install/local/lib/python3.10/dist-packages/clearpath_generator_common/common.py", line 176, in full_path
[generate_param-6]     get_package_share_directory(self.package.name), self.path, self.file)
[generate_param-6]   File "/opt/ros/humble/lib/python3.10/site-packages/ament_index_python/packages.py", line 80, in get_package_share_directory
[generate_param-6]     path = os.path.join(get_package_prefix(package_name), 'share', package_name)
[generate_param-6]   File "/opt/ros/humble/lib/python3.10/site-packages/ament_index_python/packages.py", line 60, in get_package_prefix
[generate_param-6]     raise PackageNotFoundError(
[generate_param-6] ament_index_python.packages.PackageNotFoundError: "package 'clearpath_sensors' not found, searching: ['/dev_ws/install', '/opt/ros/humble']"
[ERROR] [generate_param-6]: process has died [pid 382, exit code 1, cmd '/opt/ros/humble/lib/clearpath_generator_gz/generate_param -s /home/huanyu/clearpath --ros-args -r __node:=generate_launch'].
[WARNING] [launch_ros.actions.node]: Parameter file path is not a file: /home/huanyu/clearpath/platform/config/localization.yaml
[WARNING] [launch_ros.actions.node]: Parameter file path is not a file: /home/huanyu/clearpath/platform/config/teleop_interactive_markers.yaml
[WARNING] [launch_ros.actions.node]: Parameter file path is not a file: /home/huanyu/clearpath/platform/config/twist_mux.yaml
[WARNING] [launch_ros.actions.node]: Parameter file path is not a file: /home/huanyu/clearpath/platform/config/teleop_joy.yaml

Other notes
Tried both build from source and install but receive the same errors. The simulation works when I switch the clearpath_common and clearpath_config back to commit 0.3.4

Thanks for letting us know! It looks like clearpath_generator_common is missing a dependency on clearpath_sensors, which is included in the clearpath_robot repository.
You should be able to manually install the missing dependency by either running sudo apt-get install ros-humble-clearpath-sensors or cloning https://github.com/clearpathrobotics/clearpath_robot into your workspace.

Having the same issue, the packages ros-humble-clearpath-sensors or ros-humble-clearpath-robot don't seem to exist?  Cloning and building the clearpath_sensors repository did work though, thanks.

clearpath_sensors isn't (currently) available through OSRF's package servers, but it is available through Clearpath Robotocs: https://packages.clearpathrobotics.com/stable/ubuntu/pool/main/r/ros-humble-clearpath-sensors/
See http://packages.clearpathrobotics.com for instructions on how to add Clearpath's package servers to your apt sources.
That said, after looking into this issue more, we're likely going to be doing some restructuring to move the dependencies out of clearpath_senors and into a package inside the clearpath_common project.  clearpath_sensors is intended to provide the launch files for physical sensors, and therefore depends on a lot of additional driver packages you don't necessarily want/need if all you're doing is using the simulator.
I'll update this issue once the fix is officially implemented & released.


Title bar

Has props which allow you to change link and open in current tab or new tab.
Adjusted position of logo, so it's more centred.

Hey Robert,
I have noticed that the xData and yData props in basic plotly do not update the graph. I am not sure how important this is. If the basic plotly component is just serving as a non-reactive example, then it is probably alright but its still cool to get it fixed!

very nice,
minor issue when the disabled toggled it checked on the drop down components the lists are still show, dont really see a situation in which the user would be able to access the disabled button though so dont worry

Two little niggles and then you'll be good to go, i'd make the CSS pointer property to make the mouse cursor do the link handy thingy when you hover over the image link to make it clear that this is clickable.
Also the BasicPlot.vue file is still attached to this commit, preferably remove that file from this branch before merge.

Done both!


Improve clarity of values to be updated in examples

Description
In the examples, sometimes addresses or IDs need to be changed to run successfully. Currently those are "magic values" provided directly to the function calls. We probably should change that to be clearly named variables near the top of the example for clarity.
Are you planning to do it yourself in a pull request?
No.

After agreement of Alex, assigned to him as I will be out of office for a while.


Remove the Send bound from FutureService

This builds on #92 (so it should be reviewed after it).
A few changes are included in this PR. The first listed is the main change and the others are necessary consequences of the first:

Removes the Send bound from FutureService. The Send bound is still required for SyncService, since clones are sent to new threads for each request. (This is more fodder for the argument that there should be a distinct Options struct for each combination of async/sync and client/server.)
Makes specifying a reactor handle mandatory for server options; it no longer defaults to the tarpc global REMOTE because that would require services to be Send.
Adds the ability to specify a reactor::Core (instead of Remote or Handle) on client::Options. This is important because with just #92 it's not possible to drive other futures with a SyncClient. (Not sure how frequently that's needed in real code, but combined with change 1., it's hard to write examples without it.).
Makes FutureService::listen return an io::Resultrather than a Future; the future was never actually necessary and had the unintended consequence of making SyncService::listen deadlock when the options specified a handle (because that means the reactor driving the service lives on the same thread that SyncService is waiting on).

Additionally, this PR renames the client connect traits to ClientExt and adds the missing try_clone to the renamed client::sync::ClientExt.
Fixes #95

Fixed merge conflicts.

Regarding 1

I'm not sure what the cons of this approach are
The obvious con is that you'd need significantly more boilerplate for example code. You'd have to spin up a thread to drive the services because it wouldn't be possible to drive the server on the same thread as the sync client if it doesn't share a reactor. You'd also have to consider how to actually drive the reactor, which typically means running a future that never resolves or something like loop { reactor.run_once(); }.

Regarding 2

People should only use this feature At Their Own Risk™
Can you elaborate on what the risks are? You're worried that they'll use different reactors to drive the service and client, but by removing this capability that only makes that problem more pronounced, no?

As a general point, using tarpc at this point requires knowledge of tokio regardless of whether you use the sync or future client,

Here's the disconnect I guess. I think it makes more sense if users didn't need to learn about tokio or how to use it in order to figure out how to use the tarpc sync API. The point of the sync API is to allow users to write blocking code to call and expose tarpc services. I'd like the sync API to be designed with that as the driving goal, regardless of what the implementation is underneath.
If this means that we wrap the FutureService in some Server type which exposes a run() method, that sounds fine to me. We could also have another abstraction which holds the reactor and allows users to register multiple services with it. So you'd write code like this in your actual server:
fn main() {
  let server = tarpc::Server::new();
  server.bind(HelloService::new(), "localhost:1");
  server.bind(GoodByeService::new(), "localhost:2");

  // Blocks until something catastrophic happens. Underneath this runs the reactor.
  server.run().unwrap();
}

This is just brainstorming. This PR may not be the right place to come to a conclusion about this stuff. On that note, if you want to sidestep this issue, we could do something like remove the existing sync API until we've (mostly I, perhaps) had a chance to flesh out the details. I think these concerns are worth fleshing out, but maybe it's better if I do it as a side thing rather than blocking every PR you send because it affects the sync API and we don't have a design that we've agreed on guiding our way. What do you think?

Can you elaborate on what the risks are? You're worried that they'll use different reactors to drive the server and client, but by removing this capability that only makes that problem more pronounced, no (they'd have no choice but to use different reactors to drive the server and client!)?

It's fine to have the ability to use different reactors to drive servers and clients. My objection stems from the fact that I don't see a real use case for having the client drive the execution of a reactor with non-client futures running on it. I'd prefer to not include features that aren't driven by real use cases.
Beyond that, I can try to elaborate on risks, but without an example of how it's even supposed to be used, the things I come up with are crazy:
let reactor = Core::new();
// Maybe used for health checking
let ping_service = PingService::new();
ping_service.listen("localhost:1", reactor.handle());
let hello_service = HelloService::new();
hello_service.listen("localhost:2", reactor.handle());
client = tarpc::sync::Client::new("localhost:2", reactor);
loop {
  thread::sleep(Duration::from_secs(10));
  println!("{}", client.hello());
}

I feel silly just writing that down. Why do we even have that lever?  If someone new to tarpc and tokio comes along, they might wonder why ping_service only responds sometimes.
A separate meta point is that when I look at the examples as they are, I think they're not very practical. I think we should have examples that are short and sweet, but they should also be a reasonable starting point for someone trying to actually use tarpc. Most people trying to actually use tarpc would have a client and server binary, and have the two communicate. The server binary is going to have to block the main thread forever while the server handles connections, and the examples don't show how to do that. I noticed this while looking at the 'client runs the server's reactor core' code, and sort of took a step back and realized the disconnect here. This could also be addressed as another PR.

Here's the disconnect I guess. I think it makes more sense if users didn't need to learn about tokio or how to use it in order to figure out how to use the tarpc sync API.

That's not possible unless you don't want to allow users to run multiple sync servers on a single thread.

A special sync server construct that provides a thin abstraction on top of the reactor seems pointless to me, personally. It's literally a reactor by a different name?

This is just brainstorming. This PR may not be the right place to come to a conclusion about this stuff. On that note, if you want to sidestep this issue, we could do something like remove the existing sync API until we've (mostly I, perhaps) had a chance to flesh out the details.

This leaves me conflicted. On the one hand, I think you're probably more motivated than me to find a good sync API, so removing it until the story is agreed upon is reasonable in that regard. On the other hand, people are using the sync API now and I don't think it's fair to leave them hanging indefinitely.

The server binary is going to have to block the main thread forever while the server handles connections, and the examples don't show how to do that.

This is a concern specific to sync APIs, because in tokio world you just run the reactor in a loop.

That's not possible unless you don't want to allow users to run multiple sync servers on a single thread.

So, I actually think this is exactly what Sync should do. The server should have its own internal reactor that is never exposed to the user (i.e., it is cooked up by ::new(), not passed in), and listen should block indefinitely waiting for new requests. Similarly, SyncClient should have a separate internal reactor, which again is never exposed externally (it is created by ::new()). Every call to SyncClient will block (as it is supposed to), and will internally drive that client's reactor until completion.
This provides a very straightforward API for simple use-cases, is easy to understand, and is decently performant for common-case uses (each server and client is run entirely by its own thread). For users that need more flexibility, such as wanting to multiplex services onto a single thread, or wanting server and client to be driven by the same thread, they should be directed to FutureService and FutureClient.

I mostly agree, except listen can't block indefinitely because it needs to return the SocketAddr. I think it's fine if listen spawns a new thread that the server runs on.

Either that, or have listen return a tuple of (SocketAddr, ServerRunner), where ServerRunner is #[must_use], and has only a single method, run, that consumes self and never returns. Obviously ServerRunner is not a great name, but you get the idea.

A special sync server construct that provides a thin abstraction on top of the reactor seems pointless to me, personally. It's literally a reactor by a different name?

Sure, there's some validity to that claim, but it's much simpler than a reactor from an API perspective. There's no context about tokio that needs to be known. It just has a few methods which have well defined behavior as laid out by the API. There

So, I actually think this is exactly what Sync should do. The server should have its own internal reactor that is never exposed to the user (i.e., it is cooked up by ::new(), not passed in), and listen should block indefinitely waiting for new requests. Similarly, SyncClient should have a separate internal reactor, which again is never exposed externally (it is created by ::new()). Every call to SyncClient will block (as it is supposed to), and will internally drive that client's reactor until completion.
This provides a very straightforward API for simple use-cases, is easy to understand, and is decently performant for common-case uses (each server and client is run entirely by its own thread). For users that need more flexibility, such as wanting to multiplex services onto a single thread, or wanting server and client to be driven by the same thread, they should be directed to FutureService and FutureClient.

Yeah, I agree that this is a good place for the sync API to be for now. If people really want to stay on sync and fix some performance issue, we can address it then.

Either that, or have listen return a tuple of (SocketAddr, ServerRunner), where ServerRunner is #[must_use], and has only a single method, run, that consumes self and never returns. Obviously ServerRunner is not a great name, but you get the idea.

This sounds similar to the Server idea I mentioned above. server.bind(service, addr) could return the bound socket addr.

I would personally prefer it if listen didn't spawn a new thread, but instead (as @shaladdle also proposed) give the caller a way to first bind (and not block), and then listen (and block forever).

I think that's the agreed on plan. It was decided it didn't need to block this PR, as the design still needs to be fleshed out and the current solution should suffice in the interim.

The main thing I want to enable via a sync server builder is running multiple heterogeneous servers on one thread. But making that work seems non-trivial due to coherence issues: they'd need to impl a common Bind trait, but the macro can't impl the trait for all T: SyncService because neither the trait nor the impl type is defined in the macro-calling crate.

Hmm.. Do you think that's actually a common use-case? I feel like it would be perfectly fine to require users to use FutureService for that.

If the only thing anyone else cares about is a simple way to block the main thread (why not just use loop{}?), that can be accomplished more easily.

Do you think that's actually a common use-case?

I think it depends a lot on who's using tarpc. In my experience,  rpc frameworks are commonly used in situations where servers are exposing many services. And if that's the case, it's best not to expend resources more than necessary. As you've said though, they can always just use futures, so maybe it's not worth spending too much time on it.

I would say that by far the most common use-case for RPC is to expose only a single service.  And I think that's the use-case that SyncClient and SyncService should be written for. Multi-service seems like an advanced use-case.


Fix double query string

Some authorities may advertise their endpoints with query strings. Currently if this happens MSAL adds another '?' character when appending its own query parameters because it assumes endpoints do not contain query strings. This PR fixes this behavior.
Fixes #3574

A very quick test revealed that this is not working for logout endpoint if it already has "?". For authorize and token endpoint, this fix works.

@nilact Apologies for missing this but thanks for letting me know. I will address this before the next release


Loading Trained Models

Hello,
I followed the given tutorials and manged to train a model on a custom dataset.
The training seemed to work but I can't figure out how to use the trained model.
I tried building the model as follows:
import yaml
from vissl.utils.hydra_config import AttrDict
cfg = yaml.load(open("path_to_config_yaml"), loaded=yaml.FullLoader)["config"]
cfg = AttrDict(cfg)

from vissl.model import build_model
model = build_model(cfg.MODL, cfg.OPTIMIZER)

Where path_to_config_yaml is the path to the same config as the one used in training (configs/config/quick_1gpu_resnet50_simclr.yaml).
The following error accord:
AttributeError: AttrDict object has no attribute FEATURE_EVAL_SETTINGS.

Any ideas on how to solve this? Otherwise, is there a tutorial which explains how to load trained models? I have read How to Load Pretrained Models but couldn't really understand.
If more information is needed, please comment and I'll provide it
Thanks!

Thank you for reaching out. You can refer to tutorials https://colab.research.google.com/drive/1m1LUa-3vIR-rxwcm0QCrefc5S6PAY874?usp=sharing for example on how we load torchvision resnet model.
For the error that you mention , it seems like the config file is not loaded/parsed correctly. Can you try the VISSL provided function https://github.com/facebookresearch/vissl/blob/master/vissl/utils/hydra_config.py#L89 ? Otherwise can you share what the output of print(cfg.MODEL) in your case looks like?

Hello, Thank you very much for your response.
It seems like the colab notebook you linked is loading model weights for finetuing. This is not what I am looking for.
I want to know how to load a model I trained and use it for inference. I need something as follows:
model = troch.load("path_to_some_model")
image = plt.imread("path_to_some_image")
pred = model(image)

So after I trained a SimCLR on a custom dataset, how do I use the trained model for inference?
Regarding the function convert_to_attrdict, I tried using it as follows:
import yaml
from vissl.utils.hydra_config import AttrDict, convert_to_attrdict

cfg = yaml.load(open("/content/configs/config/quick_1gpu_resnet50_simclr.yaml"), Loader=yaml.FullLoader)["config"]
cfg = convert_to_attrdict(cfg)

And I got this error:
--> 440         assert isinstance(cfg, Container)
    441         # noinspection PyProtectedMember
    442         return BaseContainer._to_content(cfg, resolve=resolve, enum_to_str=enum_to_str)

AssertionError:

The print I get from python print(cfg.MODEL) is:
{
   "TRUNK":{
      "NAME":"resnet",
      "RESNETS":{
         "DEPTH":50
      }
   },
   "HEAD":{
      "PARAMS":[
         [
            "mlp",
            {
               "dims":[
                  2048,
                  2048
               ],
               "use_relu":true
            }
         ],
         [
            "mlp",
            {
               "dims":[
                  2048,
                  128
               ]
            }
         ]
      ]
   },
   "SYNC_BN_CONFIG":{
      "CONVERT_BN_TO_SYNC_BN":true,
      "SYNC_BN_TYPE":"pytorch"
   },
   "AMP_PARAMS":{
      "USE_AMP":false,
      "AMP_ARGS":{
         "opt_level":"O3",
         "keep_batchnorm_fp32":true,
         "master_weights":true,
         "loss_scale":"dynamic"
      }
   }
}

After loading it as mentioned in my original question.
Any Ideas?
Thank you very much!!

thank you for sharing the info above. I think we should try to figure out why the convert_to_attrdict doesn't work for you. Can you try following https://github.com/facebookresearch/vissl/blob/master/tools/run_distributed_engines.py#L31-L33 for loading a config file? we use hydra for our config management and have neither tried simple yaml.load nor is supported.

Hey,
I manged to make it work and use my trained model for inference.
The problem was with my config file. I was missing values because it was the wrong config for the task.
Thank very much for your help.
If I may, I would suggest converting the way models are used and loaded to a more "detectron2ish" way. I think it's very intuitive and will help new users. I would also consider rewriting some of the README files, they do not give enough emphasis on the fact that the config files are the ones which determine what run_distributed_engines.py would do. I thought They were only used for training and it took me some time to understand they are used for inference as well.
I do not have a lot of experience with any of the things I mentioned above, but if I can contribute in any way, I'd love to try.
Thanks again for the help!

Hi @ItamarSafriel , really awesome to hear that.
Thank you also for your feedback on the readme files. Please go ahead and propose a PR. It will certainly help more users as well :)
For the loading of model in "detectron2ish" way, can you share what the difference is currently with VISSL loading and what  is the part that's inconvenient? I do think think that we should to improve this if there's an opportunity :)

Hi @prigoyal, thanks a lot for awesome job and repository!
Following your discussion and advises I was able to build the model. Several additions to config file were necessary as well. Nevertheless, I have difficulties with loading pre-trained weights from the checkpoint. As far as I understand from the final part of this tutorial model's state_dict is located under classy_state_dict key. However when I try to load weights using classical torch functions, e.g.
weights = torch.load("weights_path")
model.load_state_dict(weights["classy_state_dict"])

I've got an error saying Unexpected key(s) in state_dict: "train", "base_model", "meters", "optimizer", "phase_idx", "train_phase_idx", "num_updates", "losses", "hooks", "loss"
So my questions are:

Is there any convenient way to load pre-trained weights?
What should I change in config, build_model function etc. to load only trunk weights?

Thanks in advance!

Hi @glebss , thank you ! I'd recommend to follow our documentation https://vissl.readthedocs.io/en/latest/evaluations/load_models.html + the tutorial https://colab.research.google.com/drive/1m1LUa-3vIR-rxwcm0QCrefc5S6PAY874?usp=sharing#scrollTo=YaUMDwMdzYHN where we directly load a torchvision ResNet50 model (not trained by VISSL). Hope that helps.

@ItamarSafriel can you share more details about how you successfully load the model and did the inference?
@prigoyal I think we do need a more clean and clear documentation on how to use the trained model to do inference. None of the "tutorials" you mentioned about feature extraction or doing inference are easy to follow. (And none of them works after I spent hours on them) Maybe the instructions are out of date. There are multiple versions of config files, and some are for training, some for eval with some customization. But there is lacking a single up-to-date, clear, step-by-step guide about how to use the trained models to extract features or do prediction with 1 image as input. Hope to see that soon. Thank you.

Hi @guan-ai , thank you and I really appreciate your feedback. For feature extraction, the tutorial is https://vissl.ai/tutorials/Feature_Extraction . Please note that VISSL is evolving and for that reason we have marked "stable" version of everything. Please consider using the stable version.
We would also be able to help you further if you can share what doesn't work: can you open separate issues for the errors you are encountering and we can help then?
For step-by-step guide on feature extraction, please see https://vissl.readthedocs.io/en/latest/flowcharts/extract_workflow.html and https://vissl.readthedocs.io/en/latest/evaluations/feature_extraction.html
Beyond that , please let us know what parts are unclear or what would you like to see. We certainly look forward to improving VISSL docs and would appreciate more details from you. Thank you!

Hey @prigoyal sorry for the late response.
It seems that in order to train/inference a model you need to change a given config file. This is very counter-intuitive. When using detectron2 this is usually done as follows:
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("<path_to_config>"))
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("<path_to_config>")
.
.
.
trainer = DefaultTrainer(cfg)
trainer.resume_or_load(resume=False)
trainer.train()

And then after the training is finished, you can just do:
cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = <some threshold>
predictor = DefaultPredictor(cfg)

This syntax is what makes detectron2 very easy to learn and use. I think VISSL should aim for this.
I have never contributed to any open source projects, but if the syntax change is something you are open to and can provide some guidance I would love to help.

@prigoyal Thanks for your amazing work and clarifications. Let me share what I found when using the custom trained model, and hopefully that will help improving the project for the ease of use.

I got the 'extract_resnet_in1k_8gpu' config from the tutorial, and added
FEATURE_EVAL_SETTINGS:    EVAL_MODE_ON: True    FREEZE_TRUNK_ONLY: True    EXTRACT_TRUNK_FEATURES_ONLY: True    SHOULD_FLATTEN_FEATS: False
under the 'MODEL' section.

I registered my custom data folder inside configs/config/dataset_catalog.json. (The 'save_data' function under vissl.utils.io would give a wrong format to the dataset_catalog.json file, but if you just type it in there manually it would work).

my script for feature extraction looks like this.  \  config.MODEL.WEIGHTS_INIT.STATE_DICT_KEY_NAME=""
Questions & problems.

The above steps got vissl running on the feature extraction (although I'm not so sure). It always got killed because OOM error. Even I reduced my images to be only a few, it would run out of the 16GB memory on my machine.  The last part of the log looks like INFO 2021-03-22 08:24:21,839 trainer_main.py: 367: Model set to eval mode during feature extraction... /usr/lib/python3.8/multiprocessing/resource_tracker.py:216: UserWarning: resource_tracker: There appear to be 23 leaked semaphore objects to clean up at shutdown warnings.warn('resource_tracker: There appear to be %d ' Killed
The code can take a lot more images when training, and finish the long-lasting training job. On inference, I couldn't get it work on a few images.

Is my feature extraction command even correct? If I ignore any of those config options
config.DATA.TRAIN.DATASET_NAMES=[imagenet1k_folder] \  config.DATA.TRAIN.DATA_SOURCES=[disk_folder] \  config.DATA.TRAIN.DATA_PATHS=["/my/img/path"] \  config.DATA.TEST.DATASET_NAMES=[imagenet1k_folder] \  config.DATA.TEST.DATA_SOURCES=[disk_folder] \  config.DATA.TEST.DATA_PATHS=["/my/img/path"] \ it would either say "training is done" or "data is not found", which is contradicting the "feature extraction tutorial".

While understanding all the knobs in the config file and how to get things run is fun, there is lacking of a demo program about how to load a model and extract feature from simply 1 image . Like @ItamarSafriel mentioned in previous post, such demo is really really helpful for folks just got started.

I also saw someone mentioned document clarity. I agree with that. The biggest problem I faced was that the tutorials are not self-contained, meaning that by following 1 tutorial you hardly get things work. When you look at other tutorials to put things together, it's not intuitive.

For example, in this tutorial (https://vissl.readthedocs.io/en/latest/evaluations/feature_extraction.html), at least we can add how to set up your data folder and what to expect when you run that command of python tools/run_distributed_engines.py \     config=feature_extraction/extract_resnet_in1k_8gpu \     +config/feature_extraction/trunk_only=rn50_layers \     config.MODEL.WEIGHTS_INIT.PARAMS_FILE=<my_weights.torch> In fact, this command doesn't work out of box. There are bits and pieces scattered in a few other places, and it's hard to put things together when you have combinations of choices.
Again, thanks for the work and I believe it has great potential. That's why I'm trying to get it to work although as of now it is harder to use than many other popular options. Thanks for your work and I'm looking forward to your support.

@ItamarSafriel it seems you got the inference part working for the 1-image feature extraction? If so, would you please share that? Thanks!

thank you for the detailed feedback @deeptek012 and @ItamarSafriel . We will work on remediation and to start, it's clear that we need to provide a 1-stop-shop documentation for the use case that's common here in the thread (feature extraction, full finetuning). We will work on that as the immediate step.

Hi everyone,
I will try to provide here some basic recipes that will hopefully help dealing with loading models / using them for feature extractions / inference, which (if you find them useful) might end up in a documentation.
I will concentrate on loading a model pre-trained via SimCLR, but this is portable to any another pre-training methods (all of this has been tested on a jupyter notebook).
First, we have to read the configuration of the model used by SimCLR to train the model:
from omegaconf import OmegaConf
from vissl.utils.hydra_config import AttrDict

config = OmegaConf.load("vissl/configs/config/pretrain/simclr/simclr_8node_resnet.yaml")
default_config = OmegaConf.load("vissl/vissl/config/defaults.yaml")
cfg = OmegaConf.merge(config, default_config)

We can then transform the configuration to AttrDict edit the configuration to specify the features we want to extract, and provide the path to the weights output by SimCLR:
cfg = AttrDict(cfg)
cfg.config.MODEL.WEIGHTS_INIT = "path/to/model_final_checkpoint_phase999.torch"
cfg.config.MODEL.FEATURE_EVAL_SETTINGS.EVAL_MODE_ON = True
cfg.config.MODEL.FEATURE_EVAL_SETTINGS.FREEZE_TRUNK_ONLY = True
cfg.config.MODEL.FEATURE_EVAL_SETTINGS.EXTRACT_TRUNK_FEATURES_ONLY = True
cfg.config.MODEL.FEATURE_EVAL_SETTINGS.SHOULD_FLATTEN_FEATS = False
cfg.config.MODEL.FEATURE_EVAL_SETTINGS.LINEAR_EVAL_FEAT_POOL_OPS_MAP = [["res5avg", ["Identity", []]]]

Then we can build our model:
model = build_model(cfg.config.MODEL, cfg.config.OPTIMIZER)

Now, we can load an image and feed it through our encoder:
from PIL import Image
import torchvision.transforms as transforms

image = Image.open("/checkpoint/qduval/datasets/food101_vissl/test/apple_pie/1011328.jpg")
pipeline = transforms.Compose([
    transforms.CenterCrop(224),
    transforms.ToTensor(),
])
x = pipeline(image)
features = model(x.unsqueeze(0))

The output should be a list with as many entries as features we want to extract (here we just want to extract one, because LINEAR_EVAL_FEAT_POOL_OPS_MAP had length one) and each element of the list will contain the features extracted from this level:
assert features[0].shape == torch.Size([1, 2048, 1, 1])

@QuentinDuval Thanks for the details! They are really helpful. Only one thing confused me is that I found even the cfg.config.MODEL.WEIGHTS_INIT points to some non-existing path & weight file, the code still runs and you can get the feature embeddings. No "file not found error" ever reported. And I looked at the defaults.yaml or simclr_8node_resnet.yaml, none of them specified default weight files. So I feel really strange here.
One more comment on the OOM issue. Could we flush out the features as we do inference, rather than holding everything in memory?
@prigoyal Thanks for the response and looking forward to the new docs and demos.

@QuentinDuval I also found that the embedding of the same image will change every time we load the same model. Is this a normal behavior?

@QuentinDuval Thanks for the details! They are really helpful. Only one thing confused me is that I found even the cfg.config.MODEL.WEIGHTS_INIT points to some non-existing path & weight file, the code still runs and you can get the feature embeddings. No "file not found error" ever reported. And I looked at the defaults.yaml or simclr_8node_resnet.yaml, none of them specified default weight files. So I feel really strange here.

This shouldn't be the case as we specifically check in VISSL that if user has specified a weights_init file, then the file must exist otherwise we throw errors and stop the workflow. See https://github.com/facebookresearch/vissl/blob/master/vissl/trainer/train_task.py#L450-L463
Can you please debug if these checks are working for you? If not, can you please share more details on what the WEIGHTS_INIT is set to and what are you observing? We have very recently noticed an issue with a fvcore version that the PathManager.exists() check might not be working as expected and for that reason, we are updating the checks in VISSL.

One more comment on the OOM issue. Could we flush out the features as we do inference, rather than holding everything in memory?

Yes, we will do this however, please note that this is not a high-pri for us. Almost all use cases I have encountered with different dataset sizes and models work well and the features are normally extracted for the last layer. With that said, the current code allows good scalability (>6 million images). Please let me know if you have a use case in mind where this becomes non-scalable and we will certainly look into prioritizing this request further.

@prigoyal Thanks for the response and looking forward to the new docs and demos.

Great! I am curios for your feedback if the answer that Quentin shared above resonates with you on what you expected to be a good demo or docs? if it's missing some information, let us know.

@QuentinDuval I also found that the embedding of the same image will change every time we load the same model. Is this a normal behavior?

No. It seems like to me that there is some variability in your model: are you initializing the full model or are there some uninitialized layers?
Also, please note that we can help you debug better if you share more information with us. A single issue can arise due to many reasons and for that reason, we've created templates to gather necessary information. Please follow our templates https://github.com/facebookresearch/vissl/issues/new/choose to open a separate issue and provide as much information as possible.

@QuentinDuval I also found that the embedding of the same image will change every time we load the same model. Is this a normal behavior?

This is the result of the weights not being correctly initialised in the model: as you saw, the WEIGHTS_INIT.PARAMS_FILE is not being used in build_model (my bad, I am still new to this code base).
I fixed my example to include the following part, which handles the loading of the model weights:
from classy_vision.generic.util import load_checkpoint
from vissl.utils.checkpoint import init_model_from_weights

weights = load_checkpoint(checkpoint_path="/checkpoint/qduval/vissl/model_final_checkpoint_phase999.torch")

init_model_from_weights(
    config=cfg.config,
    model=model,
    state_dict=weights,
    state_dict_key_name="classy_state_dict",
    skip_layers=[],  # Use this if you do not want to load all layers
)

@prigoyal I think we can package it in a more straightforward manner (by for instance adding a method in BaseSSLMultiInputOutputModel or in the vissl.util.checkpoint module).

Thanks @QuentinDuval, it works! The previous problem is that the model was not initialized. So some random weights got assigned every time. With proper initialization steps, the same model will encode an identical image to the same embedding. And the initialization steps is the one that checks weight file existence.

Thanks @QuentinDuval, it works! The previous problem is that the model was not initialized. So some random weights got assigned every time. With proper initialization steps, the same model will encode an identical image to the same embedding. And the initialization steps is the one that checks weight file existence.

Excellent! I will create a tutorial for this specific question and we will also look at making it more straightforward in the future.

closing this issue and @QuentinDuval provided a tutorial. feel free to reach out in case of any follow-ups. Thank you :)

model = build_model(cfg.config.MODEL, cfg.config.OPTIMIZER)
model.eval() # Add this line and should correctly


Dynamic list visited pages

I am believe using something like http://lcamtuf.coredump.cx/cachetime/ or http://samy.pl/csshack/ to list pages which person have ever seen can make 2FA more popular.

How would that make it more popular?
If anything, it will confuse users how the heck that site knows which sites they go to.

It make more popular due easier set up. I do not think, section "Suggested" induce excessive confusing.

I think I hate when sites when websites use my browser data to try and do things for me without my permission...

Same here


MP3 Playback and Media Display

Not an issue, more of an exploratory request - SoundBox is able to play audio files and display still images simultaneously. Is it possible to make OnlyM do something similar? It currently takes control of the media display when playing audio files which seems unnecessary to me, although I can understand if it's just a blanket policy for all files for the sake of simplicity.
Thanks in advance

@Blann - done. Audio and Image items can now be played simultaneously,


Fix broken note tag.

Change Summary
Fix broken note tag under https://docs.pydantic.dev/dev/api/functional_validators/#pydantic.functional_validators.PlainValidator.

Related issue number

Checklist

[x] The pull request title is a good summary of the changes - it will be used in the changelog
[ ] Unit tests for the changes exist
[x] Tests pass on CI
[ ] Documentation reflects the changes where applicable
[x] My PR is ready to review, please add a comment including the phrase "please review" to assign reviewers

please review


Rebase upstream

🐋
Specifically some changes upstream were made to enable support for the new Lambda nodejs10.x runtime. This PR is to enable support for that runtime.

Running the ansible task now, will test the new layer once finished.

Successfully built a new version of Chromium and have now updated out AWS Lambda Layer by following steps outlined in the official docs 🎉

What's the normal process with forks and master, should they be kept in sync or is master just the version that we will be using

@wbowling good catch! I actually intended to merge this branch into proprietary-codecs!

With regard to what we should do with master, I'm open to possibilities. But am happy to just make proprietary-codecs the default branch for our fork, and fingers crossed this lands https://github.com/alixaxel/chrome-aws-lambda/pull/68 then we can just nuke this fork altogether.

Oh... I see you've submitted the above PR as a merge request against Biteable:proprietary-codecs, in that case we might want to leave it and target master with this PR... why is nothing straight forward? ;P

OK. merging this into master preserving proprietary-codecs for https://github.com/alixaxel/chrome-aws-lambda/pull/68. Sorry for the run around!


feat: VCVerification API support ARRAY or OBJECT as Credential Sc…

https://input-output.atlassian.net/browse/ATL-7765

coverage: 48.988% (+0.1%) from 48.864%
when pulling 45ce4f3f85bce4768437acd5a83da3eea8c587ec on ATL-7765
into 948e3149466b327686273825ce7858adaf8d7555 on main.

the VcVerificationService handles multiple schemas. The test doesn't check if both schemas were validated. I might be reading it incorrectly.

@mattklepp the test parses both Schemas, validates them, then validates the JWT against both schemas. If either, fail the test will fails. I know this for a fact because I set "additionalProperties": true in the Schemas them self since both schema check for different properties.


Adding a footer to the website

Feature:
The website wouldn't be complete without the footer section. Hence, the footer section has to be added to enhance the website.
Solution:
Adding an footer with good css.
Please assign this issue to me under GSSOC '24

This issue will be resolved by #70
Contribute to others issues, good luck.
closing this issue


viewportchecker/ClassToAdd not working on google chrome

Hello Guys. For my candidacy to an enterprise i made an own portfolio-website.
Specially for this i made a jquery animated schedule for my knowledge in the different facultys of my job.
i made it with divs and in Firefox everything worked quite great. The Problem is, that when i going to run the file in Chrome, these divs are hidden. I used a code snippet which i modified after. My jquery is going to hide all the div elements, till they are in the viewport. If they are, they got other classes added with ClassToAdd. These classes make the content visible. But sadly not in Google Chrome. I want to fix it, because Google Chrome is very important. Im a beginner with jquery which makes it hard fixin problems like this by myself.
HTML

Adobe InDesign: 76%

						76%

						76%

JQUERY

I have the same problem... Uncaught TypeError: jQuery(...).addClass(...).viewportChecker is not a function...
Chrome version 66.0.3359.181

I've just ran a few tests in different Chrome browsers, but everything seems to work fine.
Please make sure to check if you're loading the code correctly and if no errors are appearing in your console. Feel free to comment with your browser version and console errors if it's still not working.


transformers require using extension in require() invocations

This is awful.
I enjoy having the freedom of writing in CoffeeScript or JavaScript, and making use of the require() hack in node to load .coffee files automagically.  Or, if I want, compile to JS.  Code works either way.
If I want to use transformers, now I need to reference CoffeeScript modules with a ".coffee" extension in the require() parameter, which means compiling to JS won't work anymore.
Seems like what needs to happen is:

transformers should indicate extensions they consider valid module source
those extensions should be taken into account when resolving modules

@pmuellr it sounds like you're suggesting the following command
npm install coffeeify --save --extension .coffee --transform coffeeify

which does yields the following error:
npm ERR! addLocal Could not install /Users/deadlyicon/Work/progwiki.com/.coffee

Can you be more clean?
Thanks!

This is what I needed to do to get require sans .coffee to work
web.get '/app.js', (req, res) ->
  res.setHeader('content-type', 'application/javascript')
  b = browserify(__dirname + '/app/index')
  b._extensions.push('.coffee')
  b = b.transform('coffeeify').bundle()
  b.on('error', console.error)
  b.pipe(res)

note the b._extensions.push('.coffee')

@deadlyicon, I think you've combined the npm install with a browserify invocation, in the 2nd most comment.  My reading is

install coffeeify via npm install coffeeify
when you invoke browserify, use the --extension .coffee --transform coffeeify options.

I've not used browserify dynamically, as your previous comment suggests, so can't offer any help there.

Thank you @pmuellr


⚠ Bofrost.lu has degraded performance

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

HTTP code: 200
Response time: 2117 ms

Resolved: Bofrost.lu performance has improved in c52f764 after 14 minutes.


Notify read error if udp.listener.readloop exit

Notify read error if udp.listener.readloop exit,
also fix #238
Description
If listener.readloop encounter an error and exit, the accept will never return as no connection is created.
Reference issue
Fixes #...

Oh no, I was to slow to review this :(
I have a question regarding the change. Why do we need the sync.Pool here. It seems like the readLoop Goroutine could simply allocate the buffer as a local variable. This would simplify the code a lot.

Yeah great point there @stv0g


Add optional encoding parameter to load and dump functions

An optional encoding parameter has been added to the dump and load functions to provide more flexibility in specifying encoding, rather than always using the system default.

After several hours of struggling with my machine with a GIT Bash problem, I present the final PR including the encoding parameter to the dump and load functions. Although I had initially set utf-8 as the default for enconding, it seemed that some tests were using different encodings, so I considered leaving it at None and letting the user set the required encoding.

PS: Apologies for the number of failed or cancelled PRs. Several of them were not correct or had late commits due to the problem with my GIT Bash that I mentioned.

@bobfang1992 Awaiting review. Everything should now be in order.

Thanks, will merge if all CI passes


API for plugins to consult if stats collection is enabled

Passes plugin to the method, so Sponge can include each plugin separately in the config (updating as it gets new plugins), for per-plugin as well as global settings.
Code possible suggestions:
Sponge.getStatsManager().isStatsEnabled(plugin);
Sponge.getPluginManager().isStatsEnabled(plugin);
Sponge.getPluginManager().getStats().isEnabled(plugin);

Example usage
if (Sponge.getPluginManager().isStatsEnabled(this)) {
    Metrics metrics = new Metrics();
    // Stuff here
}

Config examples:
{
  "stats": {
    "global-status": "disable",
    "per-plugin-enable": {
      "craftirc": false,
      "specatastic": false
    }
  }
}

{
  "stats": {
    "global-status": "enable",
    "per-plugin-enable": {
      "craftirc": false,
      "specatastic": false
    }
  }
}

{
  "stats": {
    "global-status": "per-plugin",
    "per-plugin-enable": {
      "craftirc": true,
      "spectastic": false
    }
  }
}

Other thoughts

Plugin devs will want a way to allow easy enabling

Proposal: General Sponge command. /sponge stats <enable/disable> <plugin>

This way, plugins could say (once, preferably) "Please consider enabling stats, run /sponge stats enable craftirc"

There has been discussion of making a full stats service API. This could be part one of that.

FYI this feature is mainly added for ore. The major issue with the feature is that it is almost completely useless outside of the ore environment.

This does not seem to be a problem. If you don't want to use it then don't use it. You will just be rejected from Ore which is okay if you don't want to post your plugin on Ore.

@ST-DDT This is based on discussion of how to better enable server operators to control which of their plugins send stats data to external services (mcstats, bstats, etc.). At present there is no plan for Sponge to operate our own stats service. Though it would be awesome, we don't presently have the resources (in particular our web-based dev resources are pointed strongly at Ore right now).
@Yeregorix Here's a neat fact from the survey we ran. While 35% of responding operators would enable stats collection if disabled by default in individual plugins, 60% of responding operators would take advantage of a centralized config to either enable (20%) or selectively enable (40%) stats collection (and 30% would immediately fully disable while 10% would ignore the feature). It looks like a centralized system would actually benefit plugin devs who like collecting data on their users.
@liach With Ore being the intended central source of plugins, I'm not too concerned about it not being useful outside that. :)

liach - Today at 12:23 PM
@mbaxter if that becomes a config, in china or places where people do not grab from ore (or for premium plugins), server owners might think this config option to disable stats work but it actually doesn't.

With Ore being the intended central source of plugins

This is not quite the case. Ore places many restrictions on the plugins, one of them is that plugins must be free. Of course, there are premium plugins in sponge as in spigot. If one such stat manager exists, we need to figure out a way to make premium plugins respect this rule.
A better solution is to let spongepowered (?!) host a stats collection site and offer the stats access in the api. Meanwhile, we can wrap the stats access in the suggested stats manager in order to grant users better controls over the stats of sponge plugins, etc.

Since the official stance of sponge is that sponge cannot afford another stats site, sponge might consider adding bstats, etc. natively and control their usage through the newly added hook.

Yeah no. Not depending on yet another third party library that is going to get outdated and bug fix maintained poorly like Timings has already been done with sponge.

This is not quite the case. Ore places many restrictions on the plugins, one of them is that plugins must be free. Of course, there are premium plugins in sponge as in spigot. If one such stat manager exists, we need to figure out a way to make premium plugins respect this rule.

Since when has this been a conversation about plugins distributed outside of Ore? Premium plugins not respecting the rule is not our job, let alone a worry for us as the server administrator has, at that point, accepted literally all responsibility by paying for a plugin from a third party from a third party distribution system (media fire, forum pm's, whatever). Why would we say "oh, let's cow tow to centralizing stats collection and raise awareness for premium plugins of which we have no presence or validation from us as an organization." The answer is, we won't. I don't care what the use case to make a plugin premium, Ore is just a standardized central repository that is maintained, cultivated, and managed by the organization. We're not policing things that we have literally no control over.
To put my heavily biased opinion, I'm voting to provide the simple config check where there's the following:
Sponge.getStatsConfig().areStatsEnabled() and Sponge.getStatsConfig().areStatsEnabled(PluginContainer) or (object) depending on how you want to write it.
As far as validating that a plugin is not obeying stats config is to be policed by the community if it is not distributed through Ore. It's that simple.

Agree. I would support a simple approach like this given the authority of ore once it is published.

Yes, all this proposes is that we expose whether a server admin has enabled metrics collection, either globally or on a per-plugin basis. It does not provide a service for stats plugins to implement (like economy or permissions) and does not perform any data collection itself. It is purely a central way to determine if a server owner has given permission for these activities.

Here is a config example that looks slightly simpler and clearer IMO:
{
	"stats": {
		# Determines whether a plugin that is not yet on the list below should be enabled or disabled when added to the list.
		"enabled-by-default": false,
		# Determines which plugins have statistics collection enabled or disabled.
		"plugins": {
		"craftirc": true,
		"specatastic": false
		}
	}
}

Maybe an additional comment there saying you can wipe the plugins section entirely to reset all plugins to the new default state.

I like the idea of having a simple, global configuration for this.

Oh, I had something for this, but didn't end up pushing it. Let me put it up quickly, I'll set up the PR in a bit, then a discussion can occur. I'm sure it'll need to be tweaked.
Note it's based on a simple config check that auto-populates plugins. It's not an intercepting check, if that's what we really want, then we'll need a different approach.


Bug report: Caskroom reports existing directory found, but deletes it (oxygen-xml-editor)

Description of issue
When installing oxygen-xml-editor over an existing installation (i.e., a manual download from oxygenxml.com), Homebrew reports that the target directory was found and that installation is not needed -- but it still deletes the original directory, leaving the program uninstalled.
Steps to reproduce:

Download oXygen XML Editor from http://oxygenxml.com/xml_editor/download_oxygenxml_editor.html

Drag the "oXygen XML Editor" application folder from the disk image to /Applications, so you have "/Applications/oXygen XML Editor".

Run the following script in Terminal. It should return Exists:
 test -d "/Applications/Oxygen XML Editor" && echo Exists || echo Does not exist

Run brew cask install oxygen-xml-editor --verbose (see output below)

The script from step 3 returns Does not exist.

I've never seen this before. Does this suggest that the behavior of "suite" is broken?
Output of `brew cask install oxygen-xml-editor --verbose`
==> Downloading http://mirror.oxygenxml.com/InstData/Editor/MacOSX/VM/oxygen.dmg
/usr/bin/curl --remote-time --location --user-agent Homebrew/1.1.6-45-g9cce3414fb (Macintosh; Intel macOS 10.12.2) curl/7.51.0 --fail http://mirror.oxygenxml.com/InstData/Editor/MacOSX/VM/oxygen.dmg -C 0 -o /Users/joe/Library/Caches/Homebrew/Cask/oxygen-xml-editor--latest.dmg.incomplete
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  232M  100  232M    0     0  5735k      0  0:00:41  0:00:41 --:--:-- 6290k
==> No checksum defined for Cask oxygen-xml-editor, skipping verification
==> Removing App Suite: '/Applications/Oxygen XML Editor'
Error: It seems there is already an App Suite at '/Applications/Oxygen XML Editor'.
Error: nothing to install
Error: Kernel.exit

Output of `brew doctor`
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected dylibs:
  /usr/local/lib/libwkhtmltox.0.12.3.dylib

Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Yes, it looks identical to that issue. I've now subscribed to that issue, so I will close this for now.

Just noticed that the referenced issue, https://github.com/Homebrew/brew/issues/1785, is in the main homebrew repo but is actually about caskroom, so perhaps this should serve as caskroom's main issue for this problem?

HB and HBC have merged. This repo is now more about the casks definitions and documentation. It’s fine to have the issue there, since this pertains to the core. Made a note of this there.

Ah, I understand now. Thanks @vitorgalvao.


Revert "chore: improve smokeTests environment validation and logging"

Reverts ai16z/eliza#1046
https://github.com/ai16z/eliza/pull/1046#issuecomment-2542433565

No need to revert this. That test is failing on several PRs due to no fault of the PRs themselves. I'd like to close this.

sure @odilitime


Call to a member function stream() on null

Hello,
I am getting this error when performing conversions. I've set everything up as per the docs, but cannot work out why this is happening.
Error Call to a member function stream() on null
Optix\Media\ImageManipulator::manipulate vendor/optix/media/src/ImageManipulator.php:64
In my AppServiceProvider:
public function boot()
{
   Conversion::register("thumb", function (Image $image) {
       $image->fit(100, 100);
   });
}

My model:
public function registerMediaGroups()
{
   $this->addMediaGroup('gallery')->performConversions('thumb');
}

My controller: (using UploadedFile class to manipulate an uploaded file)
$file = new UploadedFile(
            public_path("images/test-image.jpg"),
            "test-image.jpg",
            "test-image.jpg"
);
$media = MediaUploader::fromFile($file)->upload();
$page = Page::find(1);
$page->attachMedia($media, 'gallery');

OR
$page = Page::find(1);
$media = Media::find(1);
$page->attachMedia($media, 'gallery');

Any help appreciated.

Doesn't matter which disk I use. Even if I use the default "public" disk, it's still throwing the error.

Hi @getupkid,
Sorry for just getting back to you on this.
Make sure you return the Intervention\Image\Image instance once you've applied the manipulations:
Conversion::register('thumb', function (Image $image) {
    return $image->fit(100, 100);
});


128 UUID Characteristic not working

I am trying to create a characteristic with a 128 bit UUID, instead of 16 bit. If I use "2A37" from your example everything works correctly. When I change the characteristic to use a 128 bit UUID instead, I get the following error:
dbus_next.errors.DBusError: Failed to create entry in database
  File "/usr/lib/python3.9/site-packages/bluez_peripheral/gatt/service.py", line 126, in register
    await self._collection.register(bus, path, adapter)
  File "/usr/lib/python3.9/site-packages/bluez_peripheral/gatt/service.py", line 248, in register
    await manager.call_register_application(self._path, {})
  File "/usr/lib/python3.9/site-packages/dbus_next/aio/proxy_object.py", line 92, in method_fn
    BaseProxyInterface._check_method_return(msg, intr_method.out_signature)
  File "/usr/lib/python3.9/site-packages/dbus_next/proxy_object.py", line 62, in _check_method_return
    raise DBusError._from_message(msg)

Am I doing something wrong and is this suppose to work with this library? I know it should be possible as I am already using the same characteristic UUID on an iPhone and Android app.

Hello, Unfortunatly I'm not going to be able to look into this thoroughly for a couple of days. In the mean time could you post your modified version of the @characteristic decorator.

No worries, I'll be debugging a bit more, hopefully figuring it out by myself.
This is the code I am using, I'm passing a random UUID (e.g. 51E4D20E-23A1-409E-BCBE-16FDAECF4BD4).
async def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--uuid", type=UUID, required=True)
    parser.add_argument("--data", type=base64.b64decode, required=True)
    parser.add_argument("--duration", type=int, required=True)
    args = parser.parse_args()

    service_uuid: UUID = args.uuid
    data: bytes = args.data
    duration: int = args.duration

    @characteristic(service_uuid.hex)
    def read_characteristic(
        service, options: CharacteristicReadOptions  # pylint: disable=unused-argument
    ) -> bytes:
        return data

    bus = await bluez_peripheral_util.get_message_bus()

    service = Service(uuid=service_uuid.hex)
    service.add_characteristic(read_characteristic)
    await service.register(bus=bus)

    adapter = await bluez_peripheral_util.Adapter.get_first(bus)

    advertisement = Advertisement(
        localName="SecureIdSim",
        serviceUUIDs=[service_uuid.hex],
        appearance=0x0010,
        timeout=duration,
    )
    await advertisement.register(bus, adapter)

    await asyncio.sleep(duration)

    await service.unregister()
    bus.disconnect()

It works perfectly fine (I tested reading the characteristic), using @characteristic("2A37").

Ok, it does seem to work if I use an instance of BTUUID directly, instead of using the UUID hex property.
There seems to be a bug in the init of characteristic, it has if uuid is str, instead of if type(uuid) is str. If fixed it in #13


add fr FR

I am planning to use the toolbar and will extend config assets and i18n for a fr-FR i18n, if that's usefull here is it.

Hi @collaer
Thanks for submitting the PR with the new translation.
I created a new repo for translation-files. https://github.com/qulle/oltb-language-files
Please submit the PR there.
BR
Daniel


CREATE_FAILED Resource is not in the state stackUpdateComplete

Describe the bug
I'm trying to run amplify push however, I get the following:
CREATE_FAILED amplify-appbackend-prod-42222-apiAppBackendApi-RX30SCWXXXX1-Outlet-JNS0XXXXUBJ9 AWS::CloudFormation::Stack Sun May 17 2020 15:00:15 GMT+0000 (GMT) Export with name pgd43evqgvdgfkkfjdsffspsna:GetAtt:OutletDataSource:Name is already exported by stack amplify-appbackend-prod-42222-apiAppBackendApi-RX30SCWXXXX1-Outlet

⠧ Updating resources in the cloud. This may take a few minutes...

CREATE_FAILED Outlet AWS::CloudFormation::Stack Sun May 17 2020 15:00:23 GMT+0000 (GMT) Embedded stack arn:aws:cloudformation:eu-west-2:1439849382:stack/amplify-appbackend-prod-235245-apiAppBackendApi-RX30SCWXXXX1-Outlet-JDJS032832932/393cnnff-39nf-33kk-bb1c-03jcnfnndbd was not successfully created: Export with name pgd43evqgvdgfkkfjdsffspsna:GetAtt:OutletDataSource:Name is already exported by stack amplify-appbackend-prod-42222-apiAppBackendApi-RX30SCWXXXX1-Outlet

UPDATE_FAILED Table1 AWS::CloudFormation::Stack Sun May 17 2020 15:00:34 GMT+0000 (GMT) Resource update cancelled
UPDATE_FAILED Table2  AWS::CloudFormation::Stack Sun May 17 2020 15:00:34 GMT+0000 (GMT) Resource update cancelled

UPDATE_FAILED               apiAppBackendApi               AWS::CloudFormation::Stack Sun May 17 2020 15:00:49 GMT+0000 (GMT) Embedded stack arn:aws:cloudformation:eu-west-2:389209302:stack/amplify-appbackend-prod-42222-apiAppBackendApi-RQ30SCWYBLT1/393cnnff-39nf-33kk-bb1c-03jcnfnndbd  was not successfully updated. Currently in UPDATE_ROLLBACK_IN_PROGRESS with reason: The following resource(s) failed to create: [Outlet]. The following resource(s) failed to update: [Table1, Table2].

To Reproduce
Steps to reproduce the behavior:
It appeared suddenly after running amplify push so I have no clues, but I believe I deleted a table in DynamoDB from the frontend and re-created it.
Expected behavior
Should work with no errors.

Hello @HamzaLJ
A few questions here

What version of the CLI are you using? amplify -v
What does the project/schema look like?
What were the steps taken to reproduce this error? Was it deleting the table in DynamoDB?

@HamzaLJ if you delete any resource by hand and then recreate it, the ARN of the object will not be the same, which means that the CloudFormation stack that was used to deploy that resource will be in a drifted state that can cause issues for further deployments and dependent resources.
If this a development project which can be deleted and recreated? If that's the case I'd suggest that because it seems that an operation outside of the CLI caused this issue you are seeing.

For me, this issue occurred when I attempted to delete a dynamoDB table and also dereference it in a function. My solution for this was removing the references to the offending elements, in your case "Table1" and "Table2" from the "amplify-meta.json" and "backend-config.json" from both the "backend" and "#current-cloud-backend" folders. I hope this solves your problem. Thank you.


script error.

your script is missing Open and Close brackets { }
Fixed Lines 19 and 22
<#
.SYNOPSIS
This script allows you to uninstall the Microsoft Teams app and remove Teams directory for a user.
.DESCRIPTION
Use this script to clear the installed Microsoft Teams application. Run this PowerShell script for each user profile for which the Teams App was installed on a machine. After the PowerShell has executed on all user profiles, Teams can be redeployed.
#>
$TeamsPath = [System.IO.Path]::Combine($env:LOCALAPPDATA, 'Microsoft', 'Teams')
$TeamsUpdateExePath = [System.IO.Path]::Combine($env:LOCALAPPDATA, 'Microsoft', 'Teams', 'Update.exe')
try
{
if (Test-Path -Path $TeamsUpdateExePath) {
Write-Host "Uninstalling Teams process"
    # Uninstall app
    $proc = Start-Process -FilePath $TeamsUpdateExePath -ArgumentList "-uninstall -s" -PassThru
    $proc.WaitForExit()
}{
Write-Host "Deleting Teams directory"
Remove-Item –Path $TeamsPath -Recurse
}

}
catch
{
Write-Error -ErrorRecord $_
exit /b 1
}

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

ID: c642df17-1656-7c29-9fc3-04f70689f902
Version Independent ID: 63bef712-cfb2-9efc-0b62-f68b0968b84c
Content: PowerShell Script Sample - Assists with Microsoft Teams Deployment Clean Up
Content Source: Teams/scripts/Powershell-script-teams-deployment-clean-up.md
Service: msteams
GitHub Login: @ninadara
Microsoft Alias: ninadara

@brucesa85 - would you mind submitting a Pull Request and I will get @ninadara to review and we can get it merged in?
Thanks for submitting!

@tonysmit - do you know who owns this script? I have been emailing with Bruce and we might need to add {} to make the script run all of the time without errors but I am not SME on this and not sure who we can get to validate.

@juturu or @voltarone - can you help us with this?

@juturu and @voltarone - Bruce noticed that sometimes the script worked with the curly braces and sometimes without. Any idea what might cause this? If it didn't work with the curly braces he took them out and it would work and if it didn't work without the curly braces he put them in and it worked. We are thinking something in the environment but not sure and looking for guidance. Thanks!

Adding in the curly braces and closing this one out. If anything else please re-open. Thanks for this!

Those {} added at 19 and 22 by brucesa85 actually cause the script to not fully delete the Teams folder in the user's appdata\local\microsoft\teams for me.  If I have those 2 curly braces, .dead and update.exe are left behind.  If I remove the curly braces at 19 and 22, the folder gets fully deleted.  I don't actually understand why- it seems like the script should work either way.
I tried multiple times both ways (maybe 10 times each) and it always deleted everything if I did not have the braces and always failed to delete everything if I had the braces.

@ninadara Could you take a look at this? Looks like we need a fix to the script in Powershell-script-teams-deployment-clean-up.md.

Per Nishanth, this script was written by Hari Krishna Reddy Juturu. I'll assign it to him for feedback.

There is something up with the script. Sometimes it works with the curly{} braces sometimes it doesn't. I actually gave up on it for now as I couldn't get it to work 100% with or without the braces :/

Having the same  issue, It seems s though there is something wrong with the brackets on the exception handling of try and catch I commented the section out to troubleshoot but it seems as though there is another issue with the TeamsPath variable, it looks as though it is passing: â€“ at the beginning of the string causing an error when "Remove-Item" is ran.
Not sure where the -  â€“ - is coming from though...

Update: looks as though the â€“ is a special character that has been improperly encoded for utf-8

@juturu - can you help here?

@brucesa85 Thank you for this feedback
We need to track down the owner of this script so I am adding it to our backlog to the Teams/Skype for Buisness team so we can get this handled appropriatly.
I was able to get this into the backlog for the Teams/Skype for Business team. The team will get this prioritized into a sprint plan. Thank you for reporting and making the docs better. Much appreciated.
I made a note to request the team to update this when the work is complete.

@brucesa85 The script that caused the error has been removed.


Update to version 2.1.0

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[x] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

Oops 😞 Let me fix.


Implement Alpha Test

See title. Uses specialization constants to select the alpha compare op in the fragment shader, and passes in the alpha reference using a uniform buffer.
Some backend work was done to expose the alpha compare op to the shader without breaking existing D3D11 state caches, I'll cherry-pick that commit into mainline DXVK should you decide to merge this implementation.

Again, looks good!
Thanks for your time and work @doitsujin :)


Init with custom target

Hello,
Thank you for this awesome plugin.
In real projects i have a video / newsletter / ... modals, and they have custom onClose functions.
Can you please adjust it to return an instance with .show() / .close() options if is initialised with a custom target?
const instance = MicroModal.init({       targetModal: customTargetId,       onClose: md => {},       onShow: md => {}    }); instance.show();
Thanks in advance,
Erol

@erolabzait Hey, we are working on v0.2.0 which would allow you to pass a config for individual targets using the show() method. However, this method needs to be triggered manually on click.
MicroModal.show('customTarget', {
  onShow: md => {},
  onClose: md => {}
})

I understand what you are trying to achieve. Currently, there is no support of that, but it makes sense to have that ability.
We will slate for a future release. In the meantime maybe you can use the show() api once v0.2.0 lands.

That will be awesome, any timeline for v0.2.0?

Nothing concrete yet, but sometime next week maybe. You can track it here - https://github.com/ghosh/micromodal/milestone/1

 Init with custom target


[FEAT]: Update Powershell icon

Description
Thanks for maintaining this much better version!
Do you consider adding the new powershell core icon?
Found this Image, here it's quickly visible what the differences are.
https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fwww.it-connect.fr%2Fwp-content-itc%2Fuploads%2F2021%2F04%2Fslide-windows-powershell-vs-powershell-core-2021-768x427.jpg&f=1&nofb=1&ipt=fd44aabe11443abfea525a25e1a157977e8cbcec0cc882fc606d9aefb4f5a0de&ipo=images
Additional Information
No response
Code of Conduct Acknowledgment

[X] I have read and agree to the Code of Conduct.

same reasons then #242


Mark all as read

GUS W-8070355
Enterprise customers (mostly SFDC and Heroku) can have many thousands of notifications. Currently when I user visits https://dashboard.heroku.com/notifications they see a button that says "Mark All As Read". Dashboard enqueues a notification read request for each of the notifications for that user.
Because of other work we are doing around rate limiting (DOS protection) in particleboard we noticed large spikes in requests for certain users. Turns out, if a SFDC employee in Germany clicks "Mark All As Read" it will enqueue 21k+ notification requests from the browser.
This PR will allow dashboard to make one request instead of 25k.

@wbarn the current code is the existing behavior. If we load 20k messages then we makr 20k messages as read. Removing this code will mark all things as read even in the past (messages that don't show up as valid). I'm not sure if Telex has some worker that eventually cleans up notifications but removing this could potentially mark a lot of notifications as read per user.
I'm fine with removing this, just want you to understand what the implications are, and that this is not current behavior.


Mouse click/touch on object not working with Aframe 1.0.0 (working with 0.8.0)

Describe the bug
A clear and concise description of what the bug is.
Mouse click/touch on object using <a-marker preset="hiro" cursor='rayOrigin: mouse;'> was working okay with aframe v.0.8.0 as we can see it in this simple example
With aframe v1.0.0 it doesn't work anymore.
You can try to replace: <script src="https://aframe.io/releases/0.8.0/aframe.min.js"></script>
by <script src="https://aframe.io/releases/0.8.0/aframe.min.js"></script>
in the script above to test it.
Tested on Laptop (Mac) with Chrome/Firefox and Mobile (iPhone), with Safari.
[Edit] I gave a try to aframe v0.9.0: despite the fact that it doesn't work on Mac Chrome for non-related bug reasons, the click works on Firefox. I am investigating further...

Hi @yannklein we are moving to the new Ar.js org may we discuss this on the issue tracker there? Thank you! :slightly_smiling_face:

thanks for opening. can you please open here? https://github.com/AR-js-org/AR.js/issues
see the readme :)


Routes are not refresh when spring.cloud.config.discovery.enabled=true and spring.cloud.gateway.discovery.locator.enabled=true

Spring Boot 2.2.4
Spring Cloud Hoxton.SR1
Routes from SpringCloudGateway are not refresh when we use Eureka, SpringCloudConfigServer
according to these conditions :
Eureka is start, SpringCloudConfigServer is registred to Eureka
SpringCloudGateway fetch its config from SCCS using Eureka :
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=configserver

I want SCG create routes with services registered in eureka :
spring.cloud.gateway.discovery.locator.enabled=true

I start SERVICE and SCG : SERVICE, SCG and SCCS are present in Eureka.
In SCG, /actuator/gateway/routes show us all routes.
[{"predicate":"Paths: [/GATEWAY/**], match trailing slash: true","route_id":"ReactiveCompositeDiscoveryClient_GATEWAY","filters":["[[RewritePath /GATEWAY/(?<remaining>.*) = '/${remaining}'], order = 1]"],"uri":"lb://GATEWAY","order":0},{"predicate":"Paths: [/CONFIGSERVER/**], match trailing slash: true","route_id":"ReactiveCompositeDiscoveryClient_CONFIGSERVER","filters":["[[RewritePath /CONFIGSERVER/(?<remaining>.*) = '/${remaining}'], order = 1]"],"uri":"lb://CONFIGSERVER","order":0},{"predicate":"Paths: [/SERVICE/**], match trailing slash: true","route_id":"ReactiveCompositeDiscoveryClient_SERVICE","filters":["[[RewritePath /SERVICE/(?<remaining>.*) = '/${remaining}'], order = 1]"],"uri":"lb://SERVICE","order":0}]

Now, i stop SERVICE. It de-registered from Eureka. But it stay in the route list /actuator/gateway/routes : KO
In SCG, i change this parameter :
spring.cloud.config.discovery.enabled=false

I restart SERVICE and SCG, all routes are right.
I stop SERVICE, It de-registered from Eureka and not present in he route list /actuator/gateway/routes : OK
You can find this example here :
https://github.com/guerricm/eureka-fetch
Other question : why gateway expose its own route ?

I have the same problem with spring cloud gateway version 2.2.1.RELEASE.
I've solved it with this simple workaround:
@Scheduled(fixedDelayString = "${spring.cloud.gateway.discovery.locator.refreshMilliseconds:30000}")
	public void refreshRoutes() {
		try {
			Field field = discoveryClientRouteDefinitionLocator.getClass()
				.getDeclaredField("serviceInstances");
			field.setAccessible(true);
			field.set(discoveryClientRouteDefinitionLocator, discoveryClient.getServices()
				.flatMap(service -> discoveryClient.getInstances(service)
					.collectList()));
		} catch(NoSuchFieldException | IllegalAccessException ex) {
			log.error("Could not refresh discovery client routes.", ex);
		}
        }

Can confirm the same issue when upgrading spring-cloud-dependencies from Greenwich.SR3 to Hoxton.SR2

Duplicates #1514

I have the same problem with spring-cloud-gateway + spring-cloud-kubernetes Hoxton.SR8

I have the same problem with spring-cloud-gateway + spring-cloud-kubernetes Hoxton.SR8


LPSP.VZ jump during POSCTL

I made a long flight, all is right except for the altitude hold, the copter seems "floating" in height,(almost no wind), and I checked the log, and found that the LPSP.VZ is not contine from time to time. Here is the "jumping"  moment:

I checked that LPOS.Z and LPOS.VZ are both correct and also RC input is continue.
I'm not sure if it's the reason that cause my copter "floating", but I suppose this should be fixed...
Here is the link of my log  http://logs.uaventure.com/view/pyW2SSFTrx2z72Wvq8z4oU
however, I have to zoom several times to see that jump clearly, so you may not be able to see that online.
I don't know how to upload a log file here....If you need more log to fix this bug, just tell me how to send the log.
Thx!

I would like to report a similar situation. I have faced this several times using both LPE and EKF3, and using Lidar lightware as range sensor. Recently, I was flying F550 frame with master branch v1.6.0, but without Lidar, only GPS and baro for altitude estimation. I was using EKF2, and was flying fine for couple of lights in Manual/ALTCTL/POSCTL modes. In the last two flights, after 4 successful flights, however, the copter would not go down in ALTCTL mode even though I was pulling the throttle all the way down. I landed in Manual, disarmed, then armed again and tried ALTCTL and POSCTL, and I get the same problem in altitude. Please help in fixing/identifying this issue. A log is available here,
http://logs.uaventure.com/view/HNFY7UpSuabPusXNsj2vzM#_PLOT

@mzahana the second sounds similar to that https://github.com/PX4/Firmware/issues/6604
The first one seems to be mc_pos_,control problem..

The accelerometer z-direction does not clip, just to rule this one out...

@MaEtUgR  LPSP.VZ doesn't depend on accel.z, and lpos.z estimated based on accel.z is continue,

@priseborough Can you please chime in and inspect the log?

The second log was using the ecl estimator at commit 7e2597e and exhibits a problem with accelerometer bias estimation that is causing offsets in vertical velocity and position. Unfortunately this problem develops before arming so is not captured in the log. However a vulnerability to timing jitter and high amplitude inputs that could cause incorrect learning of accel bias estimates was fixed in the ecl version we changed to recently, so I would recommend that you update to PX4 master on or after commit ed9a9b7. If the problem persists you can do the following:

Use the new logger SYS_LOGGER=1
Use a high quality sd card that doesn't produce dropouts in the log (I have good results using a Sandisk extreme 32GB). Increasing the RAM used by the buffer will reduce the dropout length. This is defaulted to 16kB here but can be increased depending on your system configuration
https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/rcS#L857
Turn on dedicated replay logging EKF2_REC_RPL=1
Turn on logging from boot to disarm SDLOG_MODE=1
Post a link to the log in https://github.com/PX4/Firmware/issues/6604

@JohnSnowball We had cases where accel.z problems resulted in wrong vertival velocity estimates hence wrong altitude estimates and the controller tried to compensate using the setpoint LPSP.VZ. But I checked and at least the accelerometer did not clip here in your case.

@MaEtUgR thanks for explain! in fact I'm a bit confused by your discussion, I can't tell which case will solve my bug......

@JohnSnowball I think if you provide a replay log (more detailed for estimation debugging) like described above (https://github.com/PX4/Firmware/issues/7048#issuecomment-296490122) @priseborough will surely have a look at what goes wrong.
@priseborough Does this have any relation to https://github.com/PX4/ecl/pull/265 ?

We are dealing with two separate problem reports here.
The problem reported by @JohnSnowball looks like a controller set-point issue.
The problem reported by @mzahana is due to estimation error and discussion should be moved to https://github.com/PX4/Firmware/issues/6604.  PX4/ecl#265 is capable of masking the effect of vertical velocity estimation errors but will require the new mode to be selected appropriately on the PX4/Firmware side of the interface.

@MaEtUgR I would like very much to upload a log(I got several with same bug), but I can't paste any here, even I compressed them to ZIP. Do you know any other ways to upload px4log here?

@JohnSnowball use logmuncher, http://logs.uaventure.com/

@tumbili yes, already did that, as I pasted a link at the first http://logs.uaventure.com/view/pyW2SSFTrx2z72Wvq8z4oU
but for my case, you have to zoom to see the LPSP.VZ discontinuity. I don't know if we can do that with logmucher, I guess a full px4log should be better.

@JohnSnowball what's the current state for you?

Position controller has been revised since, closing as stale.

@JohnSnowball I will close it because we haven't encountered a similar issue. The firmware has changed a lot since then and although I am not able to prove that it is fixed, it is very likely that you will not encounter the same issue again.
It would be great if you can do another flight test, and if there is anything that seems wrong, then please don't hesitate to reopen this issue or create a new issue.

@TSC21 well, afterwards I use other versions, up to now , I didn't reproduce this bug.

@Stifael Ok, If I met this bug again in the future, I will report that. For the moment, I can't reproduce the same thing.


background compress

Hello! I'm using your project, and It works wonderful!
But I want to compress video in background mode.
How can I write code for this work?
I tried to cover compressVideo function using DispatchQueue.global in background mode... but it doesn't work.
DispatchQueue.global(qos: .background).sync{
            compression = videoCompressor.compressVideo(source: videoToCompress, ..)
 ....
}

Any words can help! HELP ME!

Hi @LEEYOONJONG sorry you're facing this, we will release an update very soon to fix all the issue encountered, we're working on it at the moment.

Hii @AbedElazizShe @LEEYOONJONG
any update here?


Failure to start using environment variables

I am trying to make a enviroment file when Mailpit is being started as service and I can use any variable inside without problem, but the moment I put in a certificate the start fails. The same env configuration but passed through flags works perfectly.
I no longer know if I am doing something wrong or if there is something in the file that is wrong. This is part of the file I have in "/etc/systemd/system/mailpit.service.d/override.conf"
[Service]
# TLS certificate for SMTP SSL/TLS. This option requires the MP_SMTP_TLS_KEY
# environment variable to be set too.
# @see https://mailpit.axllent.org/docs/configuration/certificates/
Environment="MP_SMTP_TLS_CERT=/etc/ssl/certs/ssl-cert-snakeoil.pem"
Environment="MP_SMTP_TLS_KEY=/etc/ssl/private/ssl-cert-snakeoil.key"

# Require all SMTP clients to use SSL/TLS encryption. If set to true, all
# connections to the SMTP server must be handled over TLS. This is different to
# STARTTLS which requires the initial connection to be unencrypted.
# Note that this option disables STARTTLS and may reduce client compatibility.
Environment="MP_SMTP_REQUIRE_TLS=true"

journalctl -u mailpit.service -n 40

Apr 20 21:49:02 Gaspar systemd[1]: Started mailpit.service - Mailpit is a small, fast, low memory, zero-dependency, multi-platform email testing tool and API for developers..
Apr 20 21:49:02 Gaspar mailpit[7084]: panic: runtime error: invalid memory address or nil pointer dereference
Apr 20 21:49:02 Gaspar mailpit[7084]: [signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x7d73ae]
Apr 20 21:49:02 Gaspar mailpit[7084]: goroutine 1 [running]:
Apr 20 21:49:02 Gaspar mailpit[7084]: github.com/axllent/mailpit/config.isFile({0xc00002e050?, 0x26?})
Apr 20 21:49:02 Gaspar mailpit[7084]:         /github/workspace/config/config.go:503 +0x4e
Apr 20 21:49:02 Gaspar mailpit[7084]: github.com/axllent/mailpit/config.VerifyConfig()
Apr 20 21:49:02 Gaspar mailpit[7084]:         /github/workspace/config/config.go:307 +0x8ed
Apr 20 21:49:02 Gaspar mailpit[7084]: github.com/axllent/mailpit/cmd.init.func3(0xc000024f00?, {0xccd40f?, 0x4?, 0xccd40b?})
Apr 20 21:49:02 Gaspar mailpit[7084]:         /github/workspace/cmd/root.go:34 +0x17
Apr 20 21:49:02 Gaspar mailpit[7084]: github.com/spf13/cobra.(*Command).execute(0x166f2c0, {0xc000022190, 0x0, 0x0})
Apr 20 21:49:02 Gaspar mailpit[7084]:         /go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:987 +0xab1
Apr 20 21:49:02 Gaspar mailpit[7084]: github.com/spf13/cobra.(*Command).ExecuteC(0x166f2c0)
Apr 20 21:49:02 Gaspar mailpit[7084]:         /go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1115 +0x3ff
Apr 20 21:49:02 Gaspar mailpit[7084]: github.com/spf13/cobra.(*Command).Execute(...)
Apr 20 21:49:02 Gaspar mailpit[7084]:         /go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1039
Apr 20 21:49:02 Gaspar mailpit[7084]: github.com/axllent/mailpit/cmd.Execute()
Apr 20 21:49:02 Gaspar mailpit[7084]:         /github/workspace/cmd/root.go:55 +0x1a
Apr 20 21:49:02 Gaspar mailpit[7084]: main.main()
Apr 20 21:49:02 Gaspar mailpit[7084]:         /github/workspace/main.go:20 +0x85
Apr 20 21:49:02 Gaspar systemd[1]: mailpit.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Apr 20 21:49:02 Gaspar systemd[1]: mailpit.service: Failed with result 'exit-code'.

Yes, that was the problem... another case of rubber duck. I started thinking the same thing a while ago and when in the .service I changed the user to root and it worked, I realized the permissions issue.
Sorry to respond late, I had taken the opportunity to have dinner and regain my mental health. Changing User and Group from mailpit to root allows the script to start without problems.
Description=Mailpit is a small, fast, low memory, zero-dependency, multi-platform email testing tool and API for developers.

[Service]
ExecStart=/usr/local/bin/mailpit
Restart=always
RestartSec=10
SyslogIdentifier=mailpit
User=root
Group=root

[Install]
WantedBy=multi-user.target```

Glad to hear you found the cause. Just to clarify, you can easily run Mailpit as an unprivileged user provided:

Your user has read/write permissions to the directory and database file where the data is stored
Your user has access to all other files referenced in the startup options (eg: TLS certificates & config files etc)
you are not explicitly running any of the smtp/http/pop3 ports < 1024

I've made a code change to help users understand the permissions issue you faced (rather than a complicated "panic" message) - which will make it's way into the next release. It will basically display a human-friendly manner that the file does not exist or they don't have permission to read it.


Docs specify dash vs underscore in require statement?

It looks like there may be a problem in your documentation. Your example says to add require 'mina/puma-systemd' to the deploy.rb file, but it looks like the current version requires using an underscore rather than a dash (i.e. `require 'mina/puma_systemd').
Is this true or do I have my wires crossed? Thanks for this.

Hi @davetroy. Thank's for reaching me out. You're right, there is a typo. I just have updated readme file.

Thanks! Glad to know I wasn't hallucinating. :)


22

22

@MihaiDejeu this is your task now, please go ahead. Deadline (when this ticket should be closed) is 2020-12-16T12:55:21.965787.
Estimation here is 60 minutes, that's how much you will be paid.
Remember, you don't have to solve everything in this ticket - you can solve it partially and leave todo markers in the code, which will become future tasks.
If you have any questions don't ask me, I'm not a technical person. Open new tickets instead.

@MihaiDejeu please keep in mind that manual assignment of tickets is a bad practice and it is discouraged. Next time, please let me elect the assignee.

@MihaiDejeu Don't forget to close this ticket before the deadline (2020-12-16T12:55:21). You are past the first half of the allowed period.

@MihaiDejeu thank you for resolving this ticket. I've just added it to your active invoice. You can always check all your invoices and more on the Contributor Dashboard.


Update demo file names

Alaska Airlines Pull Request
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Resolves: # (issue, if applicable)
Summary:
Please summarize the scope of the changes you have submitted, what the intent of the work is and anything that describes the before/after state of the project.

Update demo file names
Update dependencies

Type of change:
Please delete options that are not relevant.

[ ] New capability
[x] Revision of an existing capability
[ ] Infrastructure change (automation, etc.)
[ ] Other (please elaborate)

Checklist:

[x] My update follows the CONTRIBUTING guidelines of this project
[x] I have performed a self-review of my own update

By submitting this Pull Request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
Pull Requests will be evaluated by their quality of update and whether it is consistent with the goals and values of this project. Any submission is to be considered a conversation between the submitter and the maintainers of this project and may require changes to your submission.
Thank you for your submission!
-- Auro Design System Team

:tada: This PR is included in version 3.0.5 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


boost version is updated

Boost version is updated for action belonging to Ubuntu x64. (1.71->1.73)
New version is selected according to the oldest compilable version after 1.71.
Fixes #1111

Linux test PASSed.

Windows test PASSed.

Linux test PASSed.


n

error mio

@xerron   were you able to install the kernel, or did you get an error? noticed the issue was closed out.


Configurable Server Tickrate

extremely useful for server-only mode (not only headless).
high tick rate lowers latency (important for shooters)
low tick rate lowers CPU usage (important for MMOs)

only sets Update now

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


Network Master Key in Web UI

Hi,
I added a Network Master Key to the response of WpanService::HandleStatusRequest (i.e., GET /get_properties) in a fork.
This helps with OOB commissioning.
Now, the OTBR Web UI loops through all properties and displays them on a status page. This means that the Network Master Key is displayed in plain text.
Does this sound okay? Should the Network Master Key be obtainable via a HTTP(S) request? Should it be displayed in plain text on the status page?
To explain my OOB case a little better, I have a mobile app that establishes a TLS-PSK connection with a border router. TLS is terminated before it reaches the OTBR web service. I then obtain all necessary info, including the Network Master Key, and commission a device using BLE.

@mateusz-, in general, presenting/communicating the Thread Master Key should be done with lots of care. Where possible, the Thread Master Key should only be communicated securely to properly authenticated users. Requiring a TLS-PSK session does help with that. At the same time, the user should take care how the Thread Master Key is communicated and stored after retrieval. Hope that helps.


Create cdl_examples directory and deltares_fm.cdl

I would like to document some examples of UGRID CDL without polluting the document, hence thinking this "cdl_examples" directory might be a nice way to do it.   Also we might need to iterate a bit on these to get them right.   Okay?

Great idea, thanks!
This reminds me that we really should have a compliance checker...
pyugrid has a start, but it's not complete or rigorous...
-CHB

Also,  I see that you  can put comments in CDL:
"""
CDL comments follow "//" symbols. They are not part of netCDF data. To store comments about a variable or file, use a variable attribute or global attribute.
"""
So it would be nice to have a bit of documentation as to what a particular file is demonstrating.


questions about the hyperparameters

Hi, I don't understand what the cls_train_steps and num_shots parameters mean. Could you please explain them for me simply?

Hi,
Training proceeds in two phases: FIrst we train the VAE to learn the shared embedding, then we train the classifier separately on embedded features. cls_train_steps is the number of training steps of that classifier.  num_shots is the number fo shots: if it is 0 we do 0-shot learning, if it is 1 we do 1-shot learning, and so on.

Thanks a lot!!

Hi,
Training proceeds in two phases: First we train the VAE to learn the shared embedding, then we train the classifier separately on embedded features. cls_train_steps is the number of training steps of that classifier. Classifier training relies on early stopping, so the cls_trainsteps were determined on the hyperparameter tuning split to know when to end training. num_shots is the number of shots: if it is 0 we do 0-shot learning, if it is 1 we do 1-shot learning, and so on.

Thanks a lot!!!!


Remove target="_blank"

Github must strip out the target, so the link doesn't open in a new tab

if github is stripping it out, I think its ok just to leave it in for now? The docs may be rendered in another environment, for example locally or on heroku, where it will work.


Refactor/docs remove commercial

remove commercial parts in the docs
If the feature is a refactor, please explain why your way is better

Should we mention the terraform  somewhere ? @znat