[Espanso]: Add ability to display match labels to Search Matches command

Description

Changes the method of getting matches for the Search Matches command, directly checking YAML files instead of using Espanso's shell command
Introduces the ability to display labels in search results and therefore resolves #8235 (labels overriding the replace of an Espanso match).
Improves the fetching of matches and match files, accounting for potential differences in configs that was not there before

Screencast

Checklist

[x] I read the extension guidelines
[x] I read the documentation about publishing
[x] I ran npm run build and tested this distribution build in Raycast
[x] I checked that files in the assets folder are used by the extension itself
[x] I checked that assets used by the README are placed outside of the metadata folder

@nbbaier thanks for your contribution 🔥 Do you mind adding a CHANGELOG entry 🙂
@kud do you mind checking this 🙂

@nbbaier thanks for your contribution 🔥 Do you mind adding a CHANGELOG entry 🙂

Done!

Hey, thanks for the PR. Could you please update the title of the PR to make it meaningful? 🙏
Regarding the PR itself, to understand it better, instead of using the shell command, are you checking the espanso YAML files? It seems legitimate to me. However, I didn't notice initially that the previous PR added "Add match," but it's broken. The issue lies in assuming that people use the default folders. For some reason that I haven't explained (maybe a legacy one), I don't use them, but I use ~/Library/Preferences/espanso.
I will change it to use the default ones now.
However, this means that the code is not secure enough. Could you please use something like espanso path to determine the location of the config? It would be safer. (Unless you know a better way to find the config files). Thanks.

Hey, thanks for the PR. Could you please update the title of the PR to make it meaningful? 🙏

Done!

Regarding the PR itself, to understand it better, instead of using the shell command, are you checking the espanso YAML files? It seems legitimate to me.

Yes, exactly. I intended this both as a method to get the labels from the YAML files and to also allow for future addition of the displaying of variables in the list item detail view (since neither variables, forms, labels, etc are returned by espanso match list -j.

However, I didn't notice initially that the previous PR added "Add match," but it's broken. The issue lies in assuming that people use the default folders. For some reason that I haven't explained (maybe a legacy one), I don't use them, but I use ~/Library/Preferences/espanso. However, this means that the code is not secure enough. Could you please use something like espanso path to determine the location of the config? It would be safer. (Unless you know a better way to find the config files). Thanks.

Will do! I forgot about espanso path and this will be a nice way to do it.

@kud, those fixes have been made

Thanks. It's really neat now!

Thanks. It's really neat now!

Thanks for your suggestions! Still getting the hang of writing neat code haha

Hehe congrats!

Thanks for handling @kud, and thanks @nbbaier for the enhancement


The dreamview is keep flashing and i can't control the car by Routing Editing

I grab a video to describe my problem. I think i follow the instructions step by step. My device is 3080. Is it because my graphics card isn't powerful enough?
The modules are as follows.

Here is the video:
https://github.com/MaisJamal/carla_apollo_bridge/assets/65377379/371e74d3-641d-4087-84c3-5730b8bac9a4

I met the similar problem:

Dreamview keeps flashing.
However, the position of the manual_control vehicle seems to be consistent with the position in Dreamview. But the heading angle of two vehicles are different.
Dreamview can perceive the brake and throttle command from manual_control vehicle, indicating the bridge is somehow working.

I guess there are still some buggy parts in the bridge code.

@PhilWallace Hello,
There should not be a wrong heading angle, please follow the installation's instructions carefully.
I will record a detailed video tutorial soon, so it will be clearer to everyone.

@MaisJamal
Looking forward to your video tutorial! We very need it.

@2019211753 please check and pull the latest version of the bridge and run manual_control.py instead of manual_control_13.py
In another opened issue , they say they have faced a similar problem of flashing dreamview by running manual_control_13.py script and now it is working fine by the script manual_contorl.py.

@PhilWallace Can you please elaborate on the issue of different heading angle of two vehicles in Carla and in Apollo.
It seems like other users of the bridge are not facing this issue.

@PhilWallace Can you please elaborate on the issue of different heading angle of two vehicles in Carla and in Apollo. It seems like other users of the bridge are not facing this issue.

I'm recently not running the project. I will detail this problem If I meet it again. Thanks

End-to-end video tutorial, how to install, configure and use this Carla-Apollo-Bridge, with Carla simulator (v0.9.13) and Apollo driving software (v8.0.0):
https://youtu.be/2dQC3ToJGJU?si=6mZMHP1RRZHPRggX

End-to-end video tutorial, how to install, configure and use this Carla-Apollo-Bridge, with Carla simulator (v0.9.13) and Apollo driving software (v8.0.0): https://youtu.be/2dQC3ToJGJU?si=6mZMHP1RRZHPRggX

Thanks for your contribution!


Failed to find WrapRt. Version 6.6.2, wasm_singlethread + mingw_64

uses: jurplel/install-qt-action@v3
with:
version: '6.6.2'
host: 'windows'
target: 'desktop'
arch: 'wasm_singlethread'
install-deps: 'true'
modules: 'qtimageformats qtmultimedia qtshadertools'
cache: 'true'
cache-key-prefix: 'install-qt-action-wasm'
setup-python: 'true'
extra: '--autodesktop'
qt-cmake.bat d:/a/test/test -G "Ninja" -D CMAKE_BUILD_TYPE=Debug  -D QT_HOST_PATH=d:/a/test/Qt/6.6.2/mingw_64
Could NOT find WrapRt (missing: WrapRt_FOUND)
CMake Warning at D:/a/test/Qt/6.6.2/wasm_singlethread/lib/cmake/Qt6/Qt6Config.cmake:164 (find_package):
Found package configuration file:
D:/a/test/Qt/6.6.2/wasm_singlethread/lib/cmake/Qt6Core/Qt6CoreConfig.cmake

but it set Qt6Core_FOUND to FALSE so package "Qt6Core" is considered to be
NOT FOUND.  Reason given by package:
Qt6Core could not be found because dependency WrapRt could not be found.

I think v4 might resolve this, reopen if not


Allow working with the type previously checked through isInstanceOf(…)

Summary
When writing assertions against instances of Object, I frequently find myself asserting the actual object type first, and then casting to that type to add further assertions:
Object object = …;

assertThat(object).isInstanceOf(Foo.class);

Foo foo = (Foo) object;

assertThat(foo).…

It would be cool if the instanceOf check returned an assertion for the type I just asserted to:
Example
assertThat(object).isInstanceOf(String.class).contains("bar");

That  would be a nice thing to have indeed, I'm not sure it is technically feasible to with generic type erasure but I'll give it a try anyway.
In the meantime, in case your object is a String, there is an asString() that combines checking the object is an instance of a String a return StringAssert (same with List).

The String was just an example :). In my case I am actually using a complex type. Maybe introducing a new method for exactly that purpose is a better way (also not to break existing code)?

I know it was an example :)
Thinking out loud, we could introduce a method like <ASSERT> toAssert(ASSERT assertionClass) to support that but it is a bit ugly.

No need to hurry! Maybe just leave the ticket flying around for a bit and see if others chime in and have ideas.

No hurry indeed, I have put it for 2.6.0 which is not the next release (2.5.0) to have time to think about it.

I think this is really hitting the limits of Java ;)
Two ideas come to mind:
First idea:
assertThat(typeChecked(object, String.class)).contains("bar");

public static <T> T typeChecked(Object object, Class<T> expectedClass) {
    assertThat(object).isInstanceOf(expectedClass);
    return (T) object;
}

This would make use of the existing overloads of assertThat. Might be hard to integrate this with soft assertions, though.
Second idea:
assertThat(object).isInstanceOf(String.class).satisfies(string-> assertThat(string).contains("bar"));

Where isInstanceOfcould return an AbstractObjectAssert of the expected type. Even simpler, but probably less readable, would be:
assertThat(object).isInstanceOfAndSatifies(String.class, string-> assertThat(string).contains("bar"));

I like the
assertThat(object).isInstanceOf(String.class).satisfies(string -> …);

idea.

in 3.5.0 release (which is 2.5.0 + Java 8 specific features) coming this month, we have added satisfies feature, see https://github.com/joel-costigliola/assertj-core/issues/643#issuecomment-210687011, it will be pushed in master soonish.

If we change isInstanceOf to the below:
public <X> X isInstanceOf(Class<X> type) {
    objects.assertIsInstanceOf(info, actual, type);
    return type.cast(actual);
}

would that be sufficient to get it working with satisfies?

This would return an instance of X itself, which would require another assertThat around the call. But if isInstanceOf returned an ObjectAssert<X>, it should work. Something like:
public <X> AbstractObjectAssert<?, X> isInstanceOf(Class<X> type) {
    objects.assertIsInstanceOf(info, actual, type);
    return assertThat(type.cast(actual));
}

@lbilger — That's basically was I was looking for 🙃.

As @lbilger said, his suggestion is not addressing the initial issue :
// does not compile because isInstanceOf returns AbstractObjectAssert not StringAssert.
assertThat(object).isInstanceOf(String.class).contains("bar");

I'm gonna continue trying things although my gut feeling is that you need to pass the assert type as a parameter of isInstanceOf in order to chain type specific assertions.

Got something working by introducing ...
// (naming of the method might change)
public <ASSERT> ASSERT assertWith(Class<ASSERT> type) {
  try {
    return (ASSERT) type.getConstructor(actual.getClass()).newInstance(actual);
  } catch (Exception e) {
    throw new RuntimeException("Fail to switch to " + type.getSimpleName() + " assertions", e);
  }
}

... one can write:
Object object = "foo";
assertThat(object).assertWith(StringAssert.class).contains("oo")

Another solution would be to add methods like asString for every type AssertJ has assertions for, each method would check the instance type and convert to the proper assert type. This will add a bunch of methods to AbstractAssert but they will be easy to discover since they all follow the pattern asTYPE, concretely if the object under test is a Date you would just to write
Object object = new Date();
assertThat(object).asDate().hasYear(2016);

Comments welcome ;-)

Fixed by adding all possible asXXX methods.

To be completely honest, I think the API is not really nice as it requires you to have all potential possibilities implemented explicitly. As indicated above, I think the requirement never was to get hold of a typed {{Assert}} in the first place (or by that wanting to pass the assert type), but only API to get access to the object under test as the type I just validated against, so that I can create additional assertions myself:
assertThat(object).isInstanceOf(String.class).satisfying(string -> { // string is a String here
  assertThat(string).… // <- I happily create the typed assertion myself here
})

I see all the support implemented for the types you know of, but what if I come around with an Optional or something that implements Iterable. There's no as…-method I could call then, right? Feels a bit like we were throwing out the baby with the bathwater here?

I missed the main point, fair enough ...
I'll keep the asXXX methods as they are handy for AssertJ known types and will add the type aware satisfying if this is technically possible (not so sure yet):
 assertThat(object).isInstanceOf(String.class).satisfying

otherwise I'll go for:
assertThat(object).isInstanceOfSatifying(String.class, string-> assertThat(string).contains("bar"));

which I'm pretty sure is possible.

I have reverted the asXXX method to avoid bloating the API and added in isInstanceOfSatifying https://github.com/joel-costigliola/assertj-core/commit/baa10e7e7a67d09fabc2f0f20a919d8e0c30b40f.
Hope this is the right one this time !

There's no right or wrong here :). But a big thanks for taking the feedback into account! 👍


add xcode9.0 gm support

I have resign Xcode, the XVim plugin loaded, but XVim does not work.
-------- Debug Info -------
XVim revision :
OS Version : Version 10.12.6 (Build 16G29)
Xcode Version : 9.0

--- .xvimrc ---
N/A
--------------

Check out https://github.com/XVimProject/XVim/issues/1074 for progress info


feat: Deposits to support Nostra Lending Pools #80

closes #80

Hi @tensojka, My PR is ready for review.


Add/Edit a few Basic Machine pages

Do mention any mistakes.
New Pages

Automated Panning Machine
Grind Stone
Ore Crusher
Compressor
Pressure Chamber

Edited pages

Magic workbench
Armor Forge

I think you shouldn't have replaced the old magic workbench image.

Nor the Ore Washer...

I think you shouldn't have replaced the old magic workbench image.

The thing with the magic workbench was that it wouldn't load on the page, so I reworked the entire page.

After some struggling with the bloody image I resolved it, anyway, do I re-implement the old image of the Magic Workbench? I removed it since it wouldn't show up on anyone's (3 people) their github, it would fail to load.


codemirror-graphql package not es5 compatible on npm

I'm assuming from #1557, the goal is to produce es5 compatible packages.  When installing the latest (0.12.0) version of codemirror-graphql the distributed code contains the const keyword which is not es5 compatible.  For instance, the first couple lines of codemirror-graphql/hint.js (although every top level distribution file looks to have this problem):
_codemirror.default.registerHelper('hint', 'graphql', (editor, options) => {
  const schema = options.schema;

  if (!schema) {
    return;
  }

  const cur = editor.getCursor();
  const token = editor.getTokenAt(cur);

looking into this, and though I was able to get what you needed working, we are going to be updating our .browserslistrc and dropping ie11 and ios10 support anyways, which will lead to using const by default.
codemirror-graphql is the only non typescript package as of this january, so it does not inherit the es5 configuration used by the other tsconfigs, however those are about to be bumped to es6, and i may just end up adding rollup anyways

I'm actually thinking es6-esque targets for a few reasons. probably going to make this choice and release today.
considering adding rollup, and building a few bundles for each package, and the necessary documentation

My main motivation for getting this fixed is for including graphiql in my webpack bundle.  It is pretty standard webpack practice to skip babel transpiling node modules (it would take forever and it's assumed they've already been transpiled).    So personally, I'm happy with any decision where I don't need to hack my webpack config file for this one module 😛.

have you seen our webpack example?

it also works fine in create react app without any configuration. maybe start there?

@acao The issue isn't that it doesn't build with webpack (it builds fine), it's that the resulting bundle is not es5 compatible due to this one module.  I have to make an exception for running the babel transpolar on this one node module out of all the hundreds that are present if I want es5 compatible code.

for clarity’s sake, we no longer support IE. there is nothing we will change about that. we updated the babel config recently because codemirror-graphql does not use typescript. everything else transpiles to es6. after looking at the current support matrix, the only purpose of supporting es5 for us would be IE support.
if you have an issue with es6 support, please open another ticket

I think I haven't been clear that I'm asking this for the 1.0 branch.  This branch lists IE11 as a supported browser (I actually don't need IE11 support, but I still need es5 for other reasons) and is your current release (non-beta / alpha) branch.  I hope you would consider reopening this for the 1.0 branch.

the 1.0.0 branch was combined into main branch today. if you see in the git log or the changelog, one of the breaking changes leading to 1.0.0 was deprecating support for IE. we will summarize 1.0.0 breaking changes better soon!


Feature: labels layer with a closed predefined set of named labels + combobox selection

Description
Segmentation annotation often has a closed set of predefined classes such as {1: 'person', 2: 'car', 3: 'road', 4: 'sky', 5: 'tree', ...}, sometimes with tens of classes for one task. They can also be quite sparse like [1, 10, 27, 255] (e.g., 255 is often used as an ignore class).
The Labels layer currently does not provide a good way to show and navigate through labels as switching labels either by linear decreasing or increasing a label value or by typing it manually is completely not suitable in such cases, which may reduce productivity and may lead to errors and confusion while annotating.
This PR introduces a new way of displaying and selecting labels:

It adds a new parameter predefined_labels to the Labels layer specifying a closed set of labels that allowed to be used in the layer, it can also provide a name for each label.
When it is provided, instead of a spin box a new QtLabelsCombobox widget is displayed that shows a dropdown list of specified labels with its colors and names.
It also changes behavior of forward and backward navigation through labels using keybindings. If predefined_labels is provided, decrease_label_id/increase_label_id methods select the closest label that is less or greater than the current selected label. They also do not allow going above or below the minimum or maximum label value.
If names are specified, it augments the status message with the current label name in the same way as properties/features.

https://github.com/napari/napari/assets/5459767/1ae92409-7c24-40cf-a01f-55d95285d239
https://github.com/napari/napari/assets/5459767/ce266c11-3f75-454d-bb17-8f59cb90a762
I've added a usage example: examples\add_predefined_labels_with_names.py:

Type of change

[X] New feature (non-breaking change which adds functionality)

How has this been tested?

[X] a test for the new QtLabelsCombobox is added
[X] tests covering predefined_labels in the Labels layer are added
[X] all tests pass with my change

Final checklist:

[X] My PR is the minimum possible work for the desired functionality
[X] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[X] I have added tests that prove my fix is effective or that my feature works

This feature is awesome—love the example ❤

In the last commits I refactored QtLabelsControls by separating self.selectionSpinBox, self.colorBox and its logic into a separate class derived from QWidget. There are two widgets that share a common interface: QtLabelsSpinBox that implements the default spinbox with a color box and QtLabelsCombobox that implements the new labels combobox.
I had to do this refactoring to allow switching the labels selection widgets on the fly by dynamically updating the layout of the labels controls when one changes the predefined_labels attribute of the Labels layer.
And now the following code is valid and allows dynamically change the modes (you can test it with the provided example):
@label_layer.bind_key('A')
def toggle_predefined_labels(layer):
    if layer.predefined_labels:
        layer.predefined_labels = None
    else:
        layer.predefined_labels = labels_df['name'].to_dict()

@ksofiyuk just btw thinking about this in the context of #5806, I think the way to actually express this would be with an Enum or Categorical data type for the NumPy array dtype. But I checked the relevant NEPs and this doesn't seem to be ready just yet, so I think this is a worthwhile contribution. But once again it opens a significant can of worms in the UX department so I want to make sure we get it right...
In the context of features, we use pandas dataframes for the features, so an alternative way to express this is with sequential labels that are annotated with specific pd.categorical features. See #3779 for some context on that work. I think actually that technically, but there's no widget for editing feature tables or "current feature selection" — this would have to come from a plugin.

But once again it opens a significant can of worms in the UX department so I want to make sure we get it right...

@jni What kind of concerns ("can of worms") do you have about this feature in terms of the UX? If you don't use the predefined labels, nothing is changed and you can use unrestricted spinbox to select any possible value. When the predefined labels is used, the combo box replaces the spinbox, which is very intuitive way to both select a label and just to view all kinds of used labels.

In the context of features, we use pandas dataframes for the features, so an alternative way to express this is with sequential labels that are annotated with specific pd.categorical features.

This PR supplements the existing features/properties system, and you can use it along with it. Honestly, using pandas, if you just need to specify (label, name) pairs, feels like using a sledgehammer to crack a nut. I'm sure it will cause unnecessary difficulties for people who not familiar with pandas. From my point of view, using dict is a concise and simple solution. If you want to display more properties, then you can pass a features dataframe to the layer and display any number of additional features in the status bar or wherever you want.

@jni I do not necessarily see any blockers for this PR. Do you still have concerns?

@ksofiyuk @jni @Czaki Yesterday we had a bit of discussion whether there should be a way in the GUI itself to parse the labels. We saw a few options:

We keep it as is and plugin developers can have a graphical interface with the functionality.
Have a  text widget pop up when shortcut is pressed, user can type comma separated label name and value which
are then parsed. Optionally a widget also allowing for uploading a csv,
@Czaki I think you mentioned also the use of named tuples. Correct me if I am wrong.
If we would allow to interface with this through an additional widget. This could be part of a separate PR I believe.

@ksofiyuk Thanks for developing this! It is a very nice feature to have.

@jni IMO the UI part of this is totally sweet. I have people at JAX wanting to have annotators annotate things, but not shockingly the expert annotators are not Python savvy, so and giving them e.g. a startup script to set-up the layer with a GUI combobox to annotate with would be a huge win.
From your POV would be the backend to enable this? I get not wanting to create a new layer property, so how can we use features has the backend?

Ugh, sorry folks. Indeed it looks like I dropped the ball on responding here, probably due to SciPy 2023 preparations. 😞 Thanks @psobolewskiPhD for reviving the thread!

What kind of concerns ("significant can of worms") do you have about this feature in terms of the UX?

Well, as pointed out by @melonora, how would you use this if you are not a Python user? (Though I'm reasonably happy to say "that is up to plugins.")
Overall, it expands our already expansive attribute list in a (to me) weird way ("predefined_labels" is not a common term — 120 hits in a Python GitHub search vs 500K-1M for "categorical" and "categories".), so it's worth spending a minute (but not 18 months 😬, sorry again about that!) about how best to represent this information.

using pandas […] feels like using a sledgehammer to crack a nut.

Ok but we already have the sledgehammer. 😜 And the way this is implemented currently adds a bit of complexity, because it takes the nutcracker and attaches it to the sledgehammer. (here)

From your POV would be the backend to enable this? I get not wanting to create a new layer property, so how can we use features as the backend?

So, I actually now have reservations about the approach I was proposing, but I'll nut it out here just to discuss the full possibility space and decide on an approach with eyes wide open.
The basic idea is to have a feature table with a categorical feature, "label category". Then, when you add a label (m key), you set the right category (right now, this would be a plugin widget because we don't have any way to interact with the features table built in). I think it would be reasonably easy to register a pandas categorical dtype with magicgui and add a function that takes a layer, a feature name, a feature value, and sets "current_features" to have the selected value in the layer.
Why doesn't this work? Because ultimately, for @ksofiyuk's use case, the integer-label mapping is predetermined e.g. by some neural net architecture that outputs e.g. a one-hot encoded value at a given pixel. So we can't just use arbitrary labels and map them to a property, because there's no neural net that understands that: we would be imposing an additional (and pretty non-trivial) post-processing step on users, who would need to map the painted labels to whatever integer labels are expected by the net on the other side, using the feature mapping and an additional bit of information (what is the integer representation of each feature name).
As I mentioned above, the "true" fix is a categorical NumPy dtype, but that choice remains closed to us, particularly because, even if NumPy added it today, PyTorch & co wouldn't have it, so again, we would be imposing downstream post-processing.
My current thinking is that we add a dtype attribute to the layer, and we create a virtual categorical dtype using more or less the mechanism in this PR (Dict[int, str]). Maybe setting the dtype would also convert the array dtype to the smallest NumPy dtype able to hold the maximum label. Also maybe, the dtype to a NumPy integer dtype would convert the data array, and setting it to an Enum or a pandas Categorical would also work.
A more minimal alternative: rename predefined_labels to categories, setting to None clears things and allows all integers again, setting to a dict works as in this PR.
Apologies again for dropping the ball here. @melonora @psobolewskiPhD what do you think about layer.dtype vs layer.categories vs using features?

Hm. Maybe we should implement it as a subclass of Labels that will be possible to create only from code for now?
It will be much cleaner than adding new ifology to Labels itself?

I'm not really into subclasses... They tend to lead to a lot of spaghetti code and tight coupling... See my post from a while back on the architecture WG channel...

I'm not really into subclasses... They tend to lead to a lot of spaghetti code and tight coupling... See my post from a while back on the architecture WG channel...

Having multiple if, attributes used only in specific cases, different attribute types based on some boolean flag etc, is even worse. And we already have these in multiscale data and it is nightmare.
There are places where we may use composition, but for this use case inheritance is the best approach, as it simplifies code and simplify navigation in it using IDE.

@jni
I'm not sure I follow everything and maybe I'm misunderstanding this PR.
What I've had users request is being able to set up a viewer with a labels layer in Direct mode where the classes and colors are provided in the layer controls such that an annotator can label tissue/cell whatever.
Of course in an ideal world configuring the classes and labels would be done in the GUI, but until we live in that world pre-configuring isn't a big deal and would be a major QoL improvement.
And in a ideal ideal world, the same annotation classes and colors could be used in shapes/points too.
Currently, it's quite straightforward to do this in QuPath, but the integration of napari with the python stack including zarr support makes moving the annotation process to napari very appealing. Universally everyone tells me they find the napari tools fantastic, but this specific limitation is currently a pretty big blocker.
The user actually pointed me to this PR! They saw the video in the OP and were like this is exactly what we need.

Yes yes, I'm already on board with the functionality being useful (but thanks for the user feedback, always great to have more sense of what folks are pining for), we're just talking about the specifics of how best to implement it.


Provide logs for debugging issues

Allowing users to capture detailed information about the system's state, including timestamps, relevant variables, function calls, and other error messages will be useful and a valuable time saving.

Isn't docker compose logs bee-api enough?


Hide address tab when a pod is not a broker pod

Now the plugin integrates the Address tab into the pod page, however when the pod is not a broker pod the tab should not be added.


Enhancement of SignUp Page : revamp the Signup Page for Improved User Experience

The current layout and styling of the signup page could benefit from enhancements to improve user experience and overall visual appeal. Key areas of improvement include:
UI Consistency: Ensuring that elements align properly and are visually cohesive throughout the site.
Enhancements to improve the design and responsiveness of signup page, which require layout and visual improvements for a better user experience. By focusing on these areas, I aim to make the signup page more visually engaging and functional, aligning with the project goals in open-source programs like GSSoC and Hacktoberfest.
Request:
Please assign this issue to me and mark it at the highest level, as these improvements will take considerable time and effort to implement effectively.

Closed via #1071


⚠ Samsung has degraded performance

In 1c32e95, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2555 ms

Resolved: Samsung performance has improved in fabe5f0.


multi language question

Hi guys.
I have two databases Category and CategoryDetails with models
Category
id, active
1 ,    1
CategoryDetails
id, category_id, name,     locale
3,     1,                test_ro,    ro
4,     1,                test_en,    en
How can i log the category names when i save the category
i tried with related model attributes in Category Model
protected static $logAttributes = ['id','category_details.name];
public function category_details(){
return $this->hasMany('\Path\To\CategoryDetailsModel);
}
but returns null because is save the category first and after that i save the category details.
I have no ideea.
Thanks

Hey,
At first the related doesn't work because it's a one to many relationship.
The other side of the relationship has to be a single model.
Right now there's no way to log relationship changes on a different model. You will have to add activity logging on both models. The best solution will be the planned batches for v4 - this way the logs will have the same batch ID and can be joined by a cronjob or within your UI.

ok .. many thanks ..


INSTALLATION: update username credit

Changed github username and noticed that I was mentioned here via a Google search for my old username.
Updated to new name to be consistent :)

Thanks @adidalal. I've merged and will deploy this and other changes to the docs next week.


Reading token expiration date from serialized object

Check that it works as expected and write test.

works as expected


Artifact package pollutes the environment.

The artifacts package installs files in the top level of site-packages which breaks any other packages installed in the same virtualenvs. It should create a single directory and install itself into it. Instead this causes a generic name like "utils" to be at the top of the import path thus masking any other such package.
⟫ virtualenv Test
New python executable in Test/bin/python
Installing setuptools, pip...done.
⟫ source  Test/bin/activate
(Test)⟫ pip install --upgrade pip
Downloading/unpacking pip from https://pypi.python.org/packages/b6/ac/7015eb97dc749283ffdec1c3a88ddb8ae03b8fad0f0e611408f196358da3/pip-9.0.1-py2.py3-none-any.whl#md5=297dbd16ef53bcef0447d245815f5144
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB): 1.3MB downloaded
Installing collected packages: pip
  Found existing installation: pip 1.5.4
    Uninstalling pip:
      Successfully uninstalled pip
Successfully installed pip
Cleaning up...
(Test)⟫ pip install artifacts
Collecting artifacts
Collecting PyYAML>=3.11 (from artifacts)
Installing collected packages: PyYAML, artifacts
Successfully installed PyYAML-3.12 artifacts-20170522
(Test)⟫ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import utils
>>> utils.__file__
'/tmp/Test/local/lib/python2.7/site-packages/utils/__init__.pyc'

I'll add utils to the exclude list. It is not part of the artifacts module.

released new version


WIP: Multi model Rest server

This is a preliminary, yet working, version of a multi model Rest server.
Breaking changes:
Now including source code of restserverlua and xavante.lua as part of the code.
Unique IP/port listening, but now request need to include "id" : n, where n is the model number in the list.
Need to outsource the models list (in a YAML file) instead of part of the code.
Principle is as follow:
Load model as needed, and unload after 15 seconds of idle time.
TODO: check available memory and wait before loading additional model (to avoid OOM)
Before going further, review is needed. @guillaumekln  ?

We should put the whole license in external files header. See for example https://github.com/OpenNMT/OpenNMT/blob/master/onmt/data/AliasMultinomial.lua.

done.
@guillaumekln : here https://github.com/OpenNMT/OpenNMT/pull/196/files#diff-56d1c0c69bc0ce8f30dc5e71d1a67ba9R165
I have a simple solution which is to check if available memory is more than X MB (const to set at the top) before loading the model, or if there is a magic formula to get an estimate of the model size in Ram (based on the filesize) then it might be used.

Vincent - I added the support for yaml configuration - can you check? the yaml file should contain something like that:
-
  model: '/nmt/NMTModels/fr-en/model-fren_epoch10_4.10.t7'
  replace_unk: true
-
  model: '/nmt/NMTModels/en-fr/model-enfr_epoch10_3.42.t7'
  replace_unk: true

-port is a server option, and I moved also -withAttn at the server level although it can also be defined for a given model.
Unload time is defined by -unload_time.

Now that it's cleaner, we may add a check on model file existence during the yml loading process.

Codecov Report

Merging #196 into master will decrease coverage by 1.81%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #196      +/-   ##
==========================================
- Coverage   77.28%   75.46%   -1.82%
==========================================
  Files          67       67
  Lines        5449     5291     -158
==========================================
- Hits         4211     3993     -218
- Misses       1238     1298      +60

Impacted Files
Coverage Δ

onmt/Constants.lua
66.66% <0%> (-33.34%)
:arrow_down:

onmt/SeqTagger.lua
38.88% <0%> (-10.07%)
:arrow_down:

onmt/Seq2Seq.lua
75.18% <0%> (-9.96%)
:arrow_down:

onmt/LanguageModel.lua
34.65% <0%> (-9.28%)
:arrow_down:

onmt/train/Optim.lua
63.94% <0%> (-7.58%)
:arrow_down:

onmt/utils/CrayonLogger.lua
66.66% <0%> (-6.07%)
:arrow_down:

onmt/modules/Encoder.lua
90.47% <0%> (-5.05%)
:arrow_down:

onmt/Factory.lua
62.66% <0%> (-4.65%)
:arrow_down:

onmt/utils/Cuda.lua
46.34% <0%> (-4.24%)
:arrow_down:

onmt/translate/Translator.lua
27.42% <0%> (-4.05%)
:arrow_down:

... and 22 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f28a708...c84c0cd. Read the comment docs.

Hi Vincent, it seems that it is more than time to merge this PR. could you please add a bit in documentation http://opennmt.net/OpenNMT/tools/servers/#rest ? thx.

thanks Vincent!


removed nnx dataclass

Removed nnx dataclass, after #3720.
Instead of:
@nnx.dataclass
class Foo(nnx.Pytree):
  a: int = nnx.treenode_field()
  b: int = nnx.field()

users should now do:
@dataclasses.dataclass
class Foo(nnx.Pytree):
  a: nnx.TreeNode[int]
  b: int = dataclasses.field()

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

Project coverage is 58.52%. Comparing base (e4282ee) to head (d4ac6c3).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3742      +/-   ##
==========================================
- Coverage   58.67%   58.52%   -0.15%
==========================================
  Files         103      102       -1
  Lines       12437    12376      -61
==========================================
- Hits         7297     7243      -54
+ Misses       5140     5133       -7

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


DefaultAzureCredential fails for Container App Job

Package Name: @azure/identity
Package Version: 4.3.0
Operating system: ubuntu:noble-20240429
[x] nodejs

version: node:20.13.1-buster-slim

[ ] browser

name/version:

[ ] typescript

version:

Is the bug related to documentation in

[ ] README.md
[ ] source code documentation
[x] SDK API docs on https://learn.microsoft.com

Describe the bug
According to authenticating a user assigned manged identity the simple usage of DefaultAzureCredential() should allow infrastructure hosted on Azure to obtain the desired identity. Using this approach with Azure Container Instances works fine. But it fails with Container App Job.
To Reproduce
Steps to reproduce the behavior:

NodeJS app using the SDK and DefaultAzureCredential.
Create a Container App Job and assign it a UserAssigned identity.
Run the Container App Job

I assume I've got to use another flow but it's not clear from documentation which one is correct.
Expected behavior
I expect no Exception to be thrown. I expect my container app job to assume the user assigned managed identity in order to access other Azure Resources.
Additional context
I compared the latest SDK version https://github.com/Azure/azure-sdk-for-js/compare/%40azure/identity_4.4.1...%40azure/identity_4.3.0 but appearently there are no changes so I assume it's not related to the minor diff in versions.

Identity show output

az containerapp job identity show --name ***-***-***
{
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/4b**----389081/resourcegroups/--/providers/Microsoft.ManagedIdentity/userAssignedIdentities/---identity": {
"clientId": "6724----c13c0895",
"principalId": "2f09---***-****5e6d4252"
}
}
}

Logs

/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3355
const err = new AggregateAuthenticationError(errors, "ChainedTokenCredential authentication failed.");
^

AggregateAuthenticationError: ChainedTokenCredential authentication failed.
CredentialUnavailableError: EnvironmentCredential is unavailable. No underlying credential could be used. To troubleshoot, visit https://aka.ms/azsdk/js/identity/environmentcredential/troubleshoot.
CredentialUnavailableError: WorkloadIdentityCredential: is unavailable. tenantId, clientId, and federatedTokenFilePath are required parameters.
In DefaultAzureCredential and ManagedIdentityCredential, these can be provided as environment variables -
"AZURE_TENANT_ID",
"AZURE_CLIENT_ID",
"AZURE_FEDERATED_TOKEN_FILE". See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/workloadidentitycredential/troubleshoot
CredentialUnavailableError: ManagedIdentityCredential: The managed identity endpoint is indicating there's no available identity. Message: undefined Status code: 400
More details:
undefined
CredentialUnavailableError: Azure CLI could not be found. Please visit https://aka.ms/azure-cli for installation instructions and then, once installed, authenticate to your Azure account using 'az login'.
CredentialUnavailableError: Error: Unable to execute PowerShell. Ensure that it is installed in your system. To troubleshoot, visit https://aka.ms/azsdk/js/identity/powershellcredential/troubleshoot.
CredentialUnavailableError: Azure Developer CLI couldn't be found. To mitigate this issue, see the troubleshooting guidelines at https://aka.ms/azsdk/js/identity/azdevclicredential/troubleshoot.
at /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3355:29
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async DefaultAzureCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3330:27)
at async tryGetAccessToken (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:36:32)
at async beginRefresh (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:44:17)
at async Object.defaultAuthorizeRequest [as authorizeRequest] (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:21:25)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:72:13)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/redirectPolicy.js:25:30)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+storage-queue@12.22.0/node_modules/@azure/storage-queue/dist/index.js:1663:32) {
errors: [
CredentialUnavailableError: EnvironmentCredential is unavailable. No underlying credential could be used. To troubleshoot, visit https://aka.ms/azsdk/js/identity/environmentcredential/troubleshoot.
at /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3681:19
at /srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:114
at Object.withContext (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/instrumenter.js:41:20)
at withContext (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:49:57)
at Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:34)
at EnvironmentCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3665:30)
at /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3340:52
at /srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:114
at Object.withContext (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/instrumenter.js:41:20)
at withContext (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:49:57),
CredentialUnavailableError: WorkloadIdentityCredential: is unavailable. tenantId, clientId, and federatedTokenFilePath are required parameters.
In DefaultAzureCredential and ManagedIdentityCredential, these can be provided as environment variables -
"AZURE_TENANT_ID",
"AZURE_CLIENT_ID",
"AZURE_FEDERATED_TOKEN_FILE". See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/workloadidentitycredential/troubleshoot
at WorkloadIdentityCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:2364:19)
at /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3340:52
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async DefaultAzureCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3330:27)
at async tryGetAccessToken (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:36:32)
at async beginRefresh (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:44:17)
at async Object.defaultAuthorizeRequest [as authorizeRequest] (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:21:25)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:72:13)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/redirectPolicy.js:25:30)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+storage-queue@12.22.0/node_modules/@azure/storage-queue/dist/index.js:1663:32),
CredentialUnavailableError: ManagedIdentityCredential: The managed identity endpoint is indicating there's no available identity. Message: undefined Status code: 400
More details:
undefined
at ManagedIdentityCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:2629:23)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3340:29
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async DefaultAzureCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3330:27)
at async tryGetAccessToken (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:36:32)
at async beginRefresh (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:44:17)
at async Object.defaultAuthorizeRequest [as authorizeRequest] (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:21:25)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:72:13)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/redirectPolicy.js:25:30),
CredentialUnavailableError: Azure CLI could not be found. Please visit https://aka.ms/azure-cli for installation instructions and then, once installed, authenticate to your Azure account using 'az login'.
at /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:2849:35
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3340:29
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async DefaultAzureCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3330:27)
at async tryGetAccessToken (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:36:32)
at async beginRefresh (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:44:17)
at async Object.defaultAuthorizeRequest [as authorizeRequest] (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:21:25)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:72:13)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/redirectPolicy.js:25:30),
CredentialUnavailableError: Error: Unable to execute PowerShell. Ensure that it is installed in your system. To troubleshoot, visit https://aka.ms/azsdk/js/identity/powershellcredential/troubleshoot.
at /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3281:31
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3340:29
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async DefaultAzureCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3330:27)
at async tryGetAccessToken (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:36:32)
at async beginRefresh (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:44:17)
at async Object.defaultAuthorizeRequest [as authorizeRequest] (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:21:25)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:72:13),
CredentialUnavailableError: Azure Developer CLI couldn't be found. To mitigate this issue, see the troubleshooting guidelines at https://aka.ms/azsdk/js/identity/azdevclicredential/troubleshoot.
at /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3045:35
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async /srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3340:29
at async Object.withSpan (/srv/dist/node_modules/.pnpm/@azure+core-tracing@1.1.2/node_modules/@azure/core-tracing/dist/commonjs/tracingClient.js:36:28)
at async DefaultAzureCredential.getToken (/srv/dist/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity/dist/index.js:3330:27)
at async tryGetAccessToken (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:36:32)
at async beginRefresh (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/util/tokenCycler.js:44:17)
at async Object.defaultAuthorizeRequest [as authorizeRequest] (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:21:25)
at async Object.sendRequest (/srv/dist/node_modules/.pnpm/@azure+core-rest-pipeline@1.16.1/node_modules/@azure/core-rest-pipeline/dist/commonjs/policies/bearerTokenAuthenticationPolicy.js:72:13)
]
}

Node.js v20.13.1

Hiya @Makoehle - thanks for opening this issue. We'd love to help, but need more information from you. Could you enable verbose logging and provide the output?
The error shows ManagedIdentityCredential: The managed identity endpoint is indicating there's no available identity which means it is unable to find the managed identity you expect.
I wonder, are you passing in the clientId? For user-assigned managed identities I usually expect to see something like:
  // if using DefaultAzureCredential
  const defaultAzureCredential = new DefaultAzureCredential({
    managedIdentityClientId: "<my_client_id>"
  })

  // if using ManagedIdentityCredential
  const managedIdentity = new ManagedIdentityCredential({
    clientId: "<my_client_id>"
  })

As a debugging tip, consider using ManagedIdentityCredential directly if you know you only need managed identity at least while debugging if not permanently. DefaultAzureCredential is convenient, but the amount of logs it prints out can be obnoxious 😄
Let me know if any of these tips worked, and if not please do share the verbose logs so we can better understand the issue.

Hi @maorleger - Thank you for the support. Adding managedIdentityClientId: "<my_client_id>" did the trick. My expectation was that this is handled automatically because using new DefaultAzureCredential() in an Azure Container Instance works just fine in another service of mine. Anyway it works locally with AzCli now, where I simply omit the ID and on Azure where I provide it. For that reason I close the issue. Again Thank you.

Glad to hear it, although if you wanted to dig into it a bit you could make sure that AZURE_CLIENT_ID environment variable is set to the value you expect it to. It might be as simple as console.log(process.env.AZURE_CLIENT_ID) and tweaking your environment config until it shows what you expect. If you got that far and DefaultAzureCredential still does not pick up the environment variable I'd love to hear about it!
Either way, glad you are unblocked 😄


Fixed a bug where materials and/or meshes weren't assigned to scene on first import.

Fixes https://github.com/godotengine/godot/issues/11452

Before the beta hits I just want to make sure that it's clear what this fixes. I can make a video showing before and after. Actually, there's a video that I made that's in the bug report. But, I can make a video showing it after the fix. Thanks! :)


Frontiers in Climate 2nd (and last? 🤞 ) Proof

Our second (and hopefully last) Authors Proof is ready for review. I've uploaded it as Authors_Proof_2.pdf to our Overleaf project. Upon first skim, it looks like the issues identified in #43 have all been addressed. Please take a look and let me know if you see anything that needs changing (I spy one or two nits, e.g. linked figure name is not resolved properly in caption to Listing 3).
The journal changed our Conflict of Interest statement from

The  authors  declare  that  the  research  was  conducted  in  the  absence  of  any  commercial or financial relationships that could be construed as a potential conflict of interest.

to

AM was employed by company Google. SH was employed by company Development Seed.
The remaining authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.

Don't know if we'd prefer this phrased differently, so thought I'd bring our attention to it. I'll plan to incorporate any corrections others share with me into a response for the journal to be sent out a week from today on Friday February 21.
cc @rabernat @jhamman @rwegener2 @chiaral @sharkinsspatial @alxmrs

It looks like my name was not added to this overleaf version. I've just added it back.
Re: conflict-of-interest: Looks good to me.

Also: I checked the view of the paper in the journal the other day – it looks like my name has not been updated on their side somehow.

It looks like my name was not added to this overleaf version. I've just added it back.

I believe you are referring to the .tex on Overleaf. At this point, we are working purely from the Authors_Proof_2.pdf, on which your name is present and (phew) spelled correctly.

Re: conflict-of-interest: Looks good to me.

👍

Also: I checked the view of the paper in the journal the other day – it looks like my name has not been updated on their side somehow.

I'll make sure that the changes reflected in Authors_Proof_2.pdf propagate through other versions on Frontiers.

👍 on the revised conflict of interest.

One typo I noticed while re-reading: on page 13 line 1425 the line states "Zarr are idea for powering APIs".  I think we mean "Zarr are ideal for powering APIs"
👍🏻 re: the revised conflict of interest.

Just realized page 12 line 1322 says that we aim to publicly launch (i.e. have a deployed Columbia bakery) in "December 2021". I'll revise that to reflect the updated timeline.

I've have submitted this Proof with the corrections discussed above. They were all quite minor, so I have not requested an additional Proof prior to publication. I expect the next notification I provide this group will be of the successful publication of our paper. Thank you all again for your contributions.
(@alxmrs, I'm aware that there is a lingering question of your name's misspelling on the journal's web interface. As noted above, this issue was not present on the PDF Proof itself. If it persists as a problem on the web interface post-publication, I will follow up with the journal.)

Thanks Charles!

I expect the next notification I provide this group will be of the successful publication of our paper.

🎉 http://links.email.frontiersin.org/ls/click?upn=Dpg5ochww630xh6EMvshS4k2vZe-2Fd8MH-2FVpzt1-2FUQD91C-2FNL5bIclwWnNjv5HD9iQlI2aWVL1jOX1OW7eJBy-2F-2B9jgSFPb4rwuQN3-2B9RkC6rL7ENDuNouFpats7U-2FV8wFYW8PkB0hFMyR-2BQS4gXJw4BfljDYRBjGXOBJbXJWZ0Xxfs88jggsIqVWYlNr-2Fsxg9e9zcBglcr6ajMuyPBy03C03LGtg3en7yAD80-2F1QZflUTElImF-2FJT06C8nOU6ke2h8Qdqs-2BXmXQJuV4q6oIEnncMKr-2BROYLwNOmT4mAypxZ33FjK3C0AiOT3LEM9ovlhvBOEK_bF2uHWnL-2B7pWEYhWivHR2kU7Ehwv6-2BDprfpwhk3D7JiIINZUc-2BvClOb2pDoMw8fg64-2BqCvoMyPPWS0dDBkYGJf5nzGcdfvgoRjGBfLa5yXHYdycXoKl5N-2FAhH0wilxUKCCRNe8n0ryiGPXcPnxLRhUwSgVAHOBo5ig9NXlFt6Fu-2BINORliXHburnzHS0Okc9Nh0IIfkCF0e8ClWBHScs9mf0FH6r5TRnkZnvL2sZaHYUeSU5CWFviiiXypBnw2LdmnsKWgrGXw1brup39FQKMA-3D-3D

Amazing! Thanks for the hard work here @cisaacstern!


user opts for layout is ignored

Hey @windwp I'm becoming more and more depend on this awesome tool. There are some issue with the pickers not adhering to user opts.

:D my bad

:D my bad


Adding Loader during starting of application

Describe the bug/feature
Add a loader when the application starts during that time app will check whether any user has logged in or not. loader will be added in App.js in useEffect where profile data is being fetched. Loader can be of any form for example an overlay display with full width and height having a spinner.
Additional context
@kanak22 @rockingrohit9639 please add the 'good first issue' label to it.

can i work on this issue.

can i work on this issue.

You can start working on this issue. You are given 3 days to complete this.

hey @mayankmohak bro, are you working on it?

sry i actually missed the notification.
I will be doing in couple of hours.

h

okay

made a pr please review.


Wrapper-based plugin API

Here is my take on a possible way to implement a plugin API for hydrogen.
Thanks to @lgeiger and @fasiha for looking into plugin solutions beforehand!
This PR is influenced by my experience extending hydrogen (where extend=fork because at the time I didn't know about how providers/consumers work in atom). The idea is to have wrapper classes that add a layer of indirection for plugins. This leads to slightly more complex code on hydrogen's end, but it formalizes the API commitments that Hydrogen is willing to make to plugin developers.
The code here is a sketch of the general idea I have, and I certainly don't want to suggest that this be merged without prior discussion of the direction the project wants to take with respect to plugins.
I've also added a few emitter objects throughout hydrogen, which to the best of my knowledge are the canonical way to implement events in atom. The idea is to demonstrate how the API can expand to allow plugins to subscribe to events. (For example, one of my own use-cases involves being able to detect when some code is about to be executed in a kernel, and react to that event)

This is interesting! I have thought about doing something similar.
@nikitaki, @fasiha, @n-riesco, @rgbkrk There are now a few proof of concept PR showing what can be done with a plugin API. I think we should discuss this in the next ntetact dev meeting in detail. Maybe we can even come up with a general spec to be used by nteract as well. The next meeting will probably on Monday the 26. at 9am pacific central time (I hope this is correct).

Sure, we can chat about it at the dev meeting. Next meeting is Monday the 26 at 9 am central. nteract/nteract has the beginnings of a plugin system, though it will likely form on top of our redux layer and be fairly similar to hyperterm.

I can make it to the meeting next Monday. (Though you'll have to let me know what the meeting format is / how do I join)

People what they're going to do in the next 2 weeks as well as what they did in the past 2 weeks, if they want to. Discussions spawn naturally from there as a bit of cross-pollination amongst the various projects.

@lgeiger Nice catch about requiring emitter from atom. I recall seeing it in the docs, but I wasn't sure. I think this also means that event-kit can be removed from the package.json

From reading over the code (as an Atom/CoffeeScript noob), I understand that this is a far more general and flexible approach than the one in nteract/hydrogen/pull/441, super-awesome!
I can’t quite tell what a consumer plugin would look like—would it (wild guess) use the onDidChangeKernel in hydrogen-provider.coffee to somehow set up its own listener?
Or does the consumer basically have complete access to the kernel object and do whatever it wants to it 😮?

Oh wow pushing to forks from a pull request is strange but amazing 😂 .
I'm looking forward seeing you in the meeting. There will be an general announcement in our slack channel. They are held via appear.in in the nteract room. You can take a look at the notes from last time.

@fasiha From the consumer side, it depends on whether the plugin responds to direct user commands, or events from hydrogen.
For the first case (e.g. reading connection files to spawn a connected console), a plugin can look up the current kernel, get its connection file, and then work with it.
For the second case, the plugin can listen to onDidChangeKernel and then register events for that kernel (e.g. use something like onDidGetResult, which does not exist yet, to read the results and paste them inline into the document). I was also considering adding a way to register event listeners for all kernels (present and yet-to-be-spawned), but that part is not fleshed out yet.
The idea is that the consumer has complete access to the kernel wrapper object (called HydrogenKernel here), which only exposes APIs we consider stable. So the range of modifications a consumer can make is very large, but we still make a distinction between internal and external interfaces.

I tried using this PR but Hydrogen provides only

Any idea why?

I just had a look at the atom status-bar package. They only provide the relevant methods of the  status-bar-view class like this.
This would mean we could get rid of the additional wrapper while still only exposing the methods we are comfortable sharing.

@lgeiger The image in your first comment is as expected, because HydrogenProvider only has two properties. All of the methods are hidden under __proto__, because that's how classes work in javascript. Calling methods on the object should still work.

Regarding the way the status-bar package exposes a subset of methods, it's certainly possible to do so as well. I don't see declaring a wrapper inline as being that different from making a class. It would be pretty straightforward to do so for the main hydrogen class, but less so if we want to wrap kernels.
One thing to consider, if you look at the HydrogenKernel wrapper proposal, is that sometimes plugin calls need to perform additional validation that is not used internally. In particular, hydrogen can guarantee that once a kernel is not in use, all references to the Kernel object are removed. On the other hand, the plugin API might need to perform additional validation to make sure that plugins can't use already-destroyed kernel objects to corrupt hydrogen's internal state. Depending on how much extra validation we want to do, the wrapper class approach may be cleaner than doing inline wrapper creation with bind.
We can discuss tradeoffs at the meeting.

@lgeiger The image in your first comment is as expected, because HydrogenProvider only has two properties. All of the methods are hidden under proto, because that's how classes work in javascript. Calling methods on the object should still work.

Sorry for the dumb question. This exposed my lack of knowledge regarding javascript 😂
But the issue still exists. I'm trying to use it here and here but getActiveKernel always returns undefined. I think I'm using it wrong but couldn't get it to work.

@lgeiger Don't worry about it!
I actually have no idea why you're having this issue. I tested a version of your launcher plugin on my machine, and it worked fine. The code is at https://github.com/nikitakit/hydrogen-launcher/tree/wrapper-api (note that I had some issues with term-launcher, so I just tested the other parts of the plugin)
My best guess would be that you either didn't spawn a kernel prior to calling the plugin, or that you're somehow still using your own version of the plugin api code. (Atom also does this weird thing that dev-mode plugins are gone if you forgot to start atom in dev mode)
What is the issue precisely?

getActiveKernel is undefined (i.e. you can't call it at all)
getActiveKernel returns undefined (should never happen)
getActiveKernel returns null (should happen whenever there is no active kernel yet)

Thanks for testing!
I used your code and get the following error: Uncaught TypeError: Cannot read property 'getConnectionFile' of undefined
I also checked to make sure both packages are installed correctly. To reproduce this issue I used the following steps on my machine:

Restart atom
Optional: Run Hydrogen Launcher: Launch Jupyter Console and see the error notification because no kernel is running.
Run some code in Hydrogen to start a kernel
Run Hydrogen Launcher: Launch Jupyter Console

I figured it out. I'll push a quick fix.

It's strange that the missing new operator worked on your machine but not for me.
It would be great if you could open a issue at the term-launcher repo and briefly describe your problem. I did just a rough test on linux and windows also you're probably the first on using it :smile:.

@lgeiger Thanks for fixing this!
(Now it's my turn to be embarrassed by poor knowledge of javascript, because this is definitely not the first time I've forgotten new)
Not sure why it worked for me before. Maybe I refactored after testing, and that ended up breaking things. I'll get back to you on term-launcher, since I found in retrospect that I messed up the package.json, which could have caused the problem.

While totally a meta on the missing new (I don't recommend doing this), you can return a properly constructed newed object as part of the function constructor:
function X() {
  if (! (this instanceof X)) {
    return new X(arguments);
  }
}

Which results in a proper new X() to be setup. :wink:

So this plugin situation has been at a standstill for quite a while...
It really seems that this is a "perfect is the enemy of the good" situation. Any chance we can just merge one of the proposals to move things forward? It's also possible to admit that the project lacks manpower to make any further progress on plugins, and close these issues.

Could someone else hit the merge button on this one?

Here we go!


Garbage on the screen, text not rotated, general Noob confusion.

First off let me explain that normally I work with M5Stack Micropython so this is somewhat new to me as I constantly forget things.
The following is the code I'm trying to use:
from machine import I2C, Pin
import bmp280
from micropython_sht4x import sht4x
import sh1107
import time

i2c = I2C(1, sda=Pin(2), scl=Pin(3), freq=400000)
sht = sht4x.SHT4X(i2c)
bmp = bmp280.BMP280(i2c)
bmp.oversample(bmp280.BMP280_OS_HIGH)
display = sh1107.SH1107_I2C(128, 64, i2c, address=0x3c, rotate=90)

while True:
    display.sleep(False)
    display.fill(0)
    display.text('SH1107', 0, 0, 1)
    display.text('driver', 0, 8, 1)
    bmp.use_case(bmp280.BMP280_CASE_WEATHER)
    temperature, relative_humidity = sht.measurements
    print(f"SHT40 Temperature: {temperature:.2f}°C")
    print(f"SHT40 Relative Humidity: {relative_humidity:.2%}%")
    print("")
    print("BMP280 tempC: {}".format(bmp.temperature))
    print("BMP280 pressure: {}Pa".format(bmp.pressure))
    print("")
    display.show()
    time.sleep(0.5)

When I run the code the first line is rotated as per the function but is filled with garbage.
The SHT and driver lines aren't rotated and appear in the unrotated locations.
Next (please help with my forgetful ness) How do I display the SHT and BMP readings on the OLED screen please?

Hi Adam,
By garbage on the screen do you mean random black and white pixels on the display? If so that could be caused by several things, so it is difficult to give definite advice. Powering off and on might help, of course. It would be worth checking the set up and that the wiring has good connections. Something that might cause the effect is using the wrong parameters. You have the parameters set for a 128x64 display, which may be correct but with a 128x128 display you could get random pixels and would need to change the settings.
To put text on the screen use display.text() and not print().
More generally,
the SH1107 module builds on the micropython framebuf module. As a sub-class, it provides the methods offered by the framebuf module. These are demonstrated in the example code for the module.
If you have further problems specifically related to the SH1107 module I would be happy to try and help, but can't offer general help with MicroPython.

Ok that was weird I had to set the following line:
display = sh1107.SH1107_I2C(128, 64, i2c, address=0x3c, rotate=180)
to 180 for it to work but thanks I was being a noob and you can see the project on hackster.io

Hi Adam,
Thanks for letting me know. Glad you found a solution.
I'll close the issue.


MeetingCard Component updated

here , i updated the MeetingCards Component by adding cards and it is responsive.

Your development is not visible


[Regression]: Launching Chrome after Firefox breaks due to a regression in version 19.1.0

Bug description
During the upgrade of Puppeteer from version 19.0.0 to version 19.1.0 in Mozilla's PDF.js project (https://github.com/mozilla/pdf.js/issues/15865) we ran into the issue that our two browsers (Firefox and Chrome) didn't start correctly anymore. I found out that this is a regression and will provide a reduced test case and what I think is the location of the bug below.
Steps to reproduce the problem:

Create a file called reduced.js wit the following reduced test case code:

const puppeteer = require("puppeteer");

async function startBrowser(browserName) {
  const options = {
    product: browserName,
    headless: false,
  };
  await puppeteer.launch(options);
}

async function startBrowsers() {
  for (const browserName of ["firefox", "chrome"]) {
    await startBrowser(browserName);
  }
}

startBrowsers();

Install Puppeteer 19.0.0.
Run node reduced.js and notice that Firefox and Chrome start.
Install Puppeteer 19.1.0.
Run node reduced.js and notice that Firefox starts but Chrome errors with Tried to find the browser at the configured path (/home/timvandermeij/.cache/puppeteer/chrome/linux-110.0a1/chrome-linux/chrome) for revision 110.0a1, but no executable was found.. Notice that Puppeteer erroneously puts the Firefox revision in the Chrome path.
Switch Firefox and Chrome around in the array in the reduced test case code. Notice that Firefox and Chrome now start just fine again. Therefore, the order suddenly matters.

I traced this back to a regression in commit https://github.com/puppeteer/puppeteer/commit/ec201744f077987b288e3dff52c0906fe700f6fb which landed in version 19.1.0. I think the bug is here: https://github.com/puppeteer/puppeteer/commit/ec201744f077987b288e3dff52c0906fe700f6fb#diff-545f1eb6b4d2825410b4be2eb6f6baa65ab44841c7ef5ff444bb01a5ece66c2aR198. The FirefoxLauncher class needs to translate the "latest" revision, which is the default for Firefox, to a concrete revision such as "110.0a1". However, this line overrides the revision globally instead of putting it in a private member variable like before, so from now on any Chrome revision that was set during the intialization of Puppeteer is overwritten with the Firefox revision. Therefore, if you start Chrome next, it will try to use the Firefox revision because in the ChromeLauncher code there is no code to set the revision back. If you reverse the browsers in the reduced test case code it doesn't happen anymore because Firefox is last, so any global this.puppeteer object mutations it does are still done, but just not used anymore.
/cc @jrandolf as the author of the commit who might have an idea on how to best resolve this issue.
Puppeteer version
19.1.0
Node.js version
19.3.0
npm version
8.19.2
What operating system are you seeing the problem on?
Linux, Windows
Configuration file
No response
Relevant log output
No response

There was never an expectation that Puppeteer would work with more than one browser at the same time since there would generally be a runner to instantiate separate instances of the running script for each browser in separate environments. Could you provide more context into why we should have this?

The use case for Mozilla's PDF.js is that we have a test runner that spawns an instance of Chrome and Firefox, runs regression tests in both of them at the same time (because doing it in series would take much longer) and collects the statistics at the end (number of passed/failed tests and logs). The test runner script basically uses the code posted above to launch the browsers and then opens a URL that runs all tests using the Jasmine test runner.
I haven't found documentation on why that shouldn't be possible, also because this worked just fine before 19.1.0. If there is a better way to do this I'm also fine with changing the test runner if you have suggestions, but in general I still feel that this is in fact a regression because this used to work fine and the API usage in the code posted above also feels very logical to me at least, so I can imagine that this is basically how more people would approach this.

I think we should keep the support for launching multiple possible different browsers. @jrandolf could you PTAL?

Thank you for fixing this! We'll upgrade to the most recent version once the release is made.


Task - Comprehensive digitization - click to focus edit to collection object row

Can we enable the whole row to be clickable rather than just using the edit icon?

This could be a problem, because the container have other active objects that needs to click them too.

Right, let's close for now.


iPad iOS 14 Can’t add new printer on latest build

Thank you Gaston for your dedication and hard work

Thanks @Jon-So. Could you share more info about what is not working or how to reproduce this?
Regards,
Gaston

I couldn’t add any new printers via iPad iOS 14. And the save button wouldn’t light up for me after I put in all the necessary info.

On Oct 15, 2020, at 2:16 PM, Gaston Dombiak<EMAIL_ADDRESS>wrote:

Thanks @Jon-So. Could you share more info about what is not working or how to reproduce this?
Regards,
Gaston
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hey Gaston, I think I figured out what the problem was, probably something to do with my network, I changed the hostname and it allowed me to add it after I restarted the pi... thanks for all you do...

On Oct 15, 2020, at 2:16 PM, Gaston Dombiak<EMAIL_ADDRESS>wrote:

Thanks @Jon-So. Could you share more info about what is not working or how to reproduce this?
Regards,
Gaston
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Thanks for the update @Jon-So . Is there anything I need to fix or can we close this ticket?
Regards,
Gaston

As far as I can tell it seems to be ok when I changed the hostname but I can’t understand why that would have been an issue... I think it comes down to having multiple printers... but I am ok with you closing it for now, if I run into anything I will let you know. Thanks for the amazing app man!

On Oct 16, 2020, at 9:13 AM, Gaston Dombiak<EMAIL_ADDRESS>wrote:

Thanks for the update @Jon-So . Is there anything I need to fix or can we close this ticket?
Regards,
Gaston
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Cool. If you find a way to reproduce the disabled button even after completing the 3 fields with valid data then we can reopen this ticket. I tested it on my ipad with latest os and worked fine. We might be missing some edge case that needs to be fixed


Create kubelib in python for Kadet

Based on kube.libjsonnet but using the new kadet/python input type create a new library that provides similar functionality for kubernetes.

Hi I would like to work on this issues! Could you point to an example that are already done or explain it in more detail?

@ademariag can I work on this?

Hi, I'm not involved with this process. Please ask @uberspot

@vaibhavk @michiboo See https://github.com/deepmind/kapitan/pull/190 for more details. We can start off with creating the equivalent of kube.libjsonnet in kadet (kube.py).
@uberspot Can we split this issue into 2 for k8s and terraform libs. For grafana there's already https://github.com/weaveworks/grafanalib.

Updated description and created #271

@adrianchifor while working on it, I'm not able to implement Endpoint, it has hidden functions inside it, Ip and Port, to implement this possible solutions I can think of are a single functions with kwargs, or a class based implementation, any suggestions?

A class in the same file might be preferred but it's up to you as long as code is readable and doesn't repeat too much


Add content hash to ls --json

Output of restic version
restic 0.9.6 (v0.9.6-337-g0b21ec44-dirty)
What should restic do differently? Which functionality do you think we should add?
Add a content hash to the ls --json output.
When the file was stored in a single chunk, the real sha256 has is available and the reported hash will have the format "sha256:...".
When the file was split into multiple chunks, it is not possible to show a real content hash, because restic does not currently store this information. We can however construct a hash out of the chunk hashes. To distinguish this from a real sha256 of the contents, this hash will have the format "multi:...".
This 'multi' hash can only be compared within a single repo, as different repos will split files in different locations.
I have a PR ready that I add in a moment.
What are you trying to do?
I am trying to figure out if any original pictures have succumbed to bitrot since my initial restic backup of them.
Did restic help you today? Did it make you happy in any way?
Keeping the full backup history of my pictures in an efficient way makes it possible to recover from bitrot in the future.

What you are basically looking for is a possibility to check if your local files match the state of a backup snapshot. I agree that that this would be a nice and useful extension to restic. It is similar to #2011.
However, I don't agree that listing hashes in ls is a good option to solve this. As you already pointed out hashes for files in the repository which have been split into more than one chunks are not available to restic.
Honestly, I dislike the "hack" to create an artificial hash using the chunks hashes a lot. A solution using ls would need to print all chunk hashes together with the sizes of the chunks. This would allow an external program to split the files itself into the same chunks and check the hashes of these chunks.
But I would prefer to have this implemented into restic - either as extension to the restore command or as a new command, e.g. verify.

I share @aawsome's objection. The suggestion is to introduce a hash that doesn't correspond to anything in the restic object model and is also not the hash of a file on disk, so its usefulness is very limited. There must be a cleaner way to do this.

I'm also not too happy with the 'multi' solution. Ideally restic would store the full file hash in the metadata, but this would impose a performance cost during backup. I don't think it's this is really worth it just for this.
My original approach just included the list of content hashes in the output. Unfortunately these content hashes are not very useful by themselves, unless of course you want to fetch the content. In order to check any local files, you would need to either know the chunk sizes or know the split secret and apply the same algorithm yourself.
This size information is currently unfortunately not available. Perhaps this is something we could add to the metadata and then print both Content and ContentSize slices? This would only work for newer snapshots, but that is OK I guess.
For my purposes of comparing files between different snapshots just having the list of content hashes would suffice. Would my PR be acceptable if would simply expose the list Content IDs in the JSON and get rid of the weird multi hash? I guess this is useful anyway, because it allows you to reconstruct the file contents.
I can also add a new issue to discuss the addition of a ContentSizes slice.

This size information is currently unfortunately not available. Perhaps this is something we could add to the metadata and then print both Content and ContentSize slices? This would only work for newer snapshots, but that is OK I guess.

The chunk size information is available to restic, it is saved in the index. Simply use something like
for i, id := range node.Content{
   size[i]:= repo.Index().Lookup(node.Content[i],restic.DataBlob)[0].Length
}

However, I would still prefer to have a verify command or something similar within restic...

The chunk size information is available to restic, it is saved in the index. Simply use something like

Thanks! I will try this and see how it performs.

However, I would still prefer to have a verify command or something similar within restic...

I agree that this would be very useful. I currently do not have enough time to make any promises, but I may have a look at how much effort that would take.
This does however not preclude making the ls JSON output more useful for those that want to do some restic data mining.

@wojas Your use case sounds a lot like #805 to me. Storing a hash covering a complete file was already request in #1620.

I have closed the PR implementing this clunky solution and will close this issue. #805 and #1620 would both solve the original issue I wanted to address. Thanks!


Uptime Istanbul timezone

Turkish time zone is set to GMT+3^1 since 2018^2. Current label indicates old state.
I'm not sure if I need to create a migration file for this change.

The file looks like test fixtures, I think you need to update https://github.com/TryGhost/SDK/tree/main/packages/timezone-data

Oh, ok. I couldn't notice that. Then I'll close this and open a PR on SDK project. Thank you @vikaspotluri123

Done: https://github.com/TryGhost/SDK/pull/495

Actually, updating this fixture file stille makes sense after fixing the SDK, right?

Thanks for the submission(s)! I merged the SDK package and I had to make other changes in https://github.com/TryGhost/Ghost/commit/c046bbda91761551e1f7a5942df2faa85c29f241 so this change was included there. Mentioned you in the commit 👍 .


Switch out cloud build in favour of travis

Travis is nice and easy to set up and much easier to make build status public.

Done.


add splitAndScatterRegions in split_region.go

this pr is a child task  in issue : https://github.com/tikv/pd/issues/4224
add a method splitAndScatterRegions() in split_region.go so that tidb can use it directly

LGTM.

No update for a long time. Closing for now. Reopen if need.


Add spectral_norm example from packed_simd

Ported packed_simd spectral_norm example
Related to #110

Ah! Sorry for not getting around to this earlier. Thank you!


units should not require unit magnitude

Hello,
Right now, neo enforces the units attribute to have unit magnitude, e.g. 1*uV.
There at least two situations where I disagree with this rule.

When using fixed gain amplifiers, such as the popular Intan chips used in the Open Ephys, there is a known constant conversion from a binary integer value to a microvolt value. The 16 bit integer is a much more efficient storage option (both in space and speed) than converting all the values to a 64 bit floating point value required to represent the true microvolt magnitude. Therefore, I'd like to store the units as 0.195 uV.
For some event data, the values may be in samples, and the units therefore, are 1/sampling_rate * s. For the reasons mentioned in (1), and to eliminate any added floating point error. I'd like to be able to store them in there original integer format.

Curious what you think! (And thanks for working on NEO)

I'm not sure this was a deliberate decision. Can you give a short example of code which doesn't work (together with the Traceback), which you think ought to work?

I am agree with this.
But this depend on each IO to implement it or not.
Now the io api have been split in two part. BaseFromRaw is a wrapper for neo.io on top on neo.rawio.
So we could add an option in BaseFromRaw.read_block, for instance quantity_mode:

quantity_mode='float_magnitude' would lead to [0.2, 0.4, .6, .8] * pq.uV
quantity_mode='raw_magnitude' would lead to [1, 2, 3] * (0.2*pq.uV)

I guess this can be iplemenetd with quantities.CompoundUnit but I am not sur.

#461 implement this feature but it is postpone to 0.8.


Syntax error and unclear function in "Data-driven component identity"

Hello! I'd like to use this Mithril's feature, but I can't get it to work. The documentation lists an example:
m.render(document.body, ProjectList({key: people[0].id, value: people[0]})
But (1) this is missing a closing parenthesis, (2) what is ProjectList? It looks like a function, but m.render expects an object {view: Fn, controller: Fn}.

"Suppose we have a component called ProjectList"

If ProjectList is a component object, it cannot be called as a function?

I was expecting this example to call the controller every time I press the button, but it doesn't:
http://codepen.io/anon/pen/avMaqW
var persons = [
  {name: 'John'},
  {name: 'Steve'}
]

var currentPersonIdx = 0;

var comp = {
  view: function(ctrl, args){
    return m('', [
      persons[currentPersonIdx].name, ', ', args.key,
      m('button',{onclick:ctrl.exchange},['exchange persons'])
    ]);
  },
  controller: function(args){
    console.log('ctrl ctor');

    this.exchange = function(){
      currentPersonIdx = (currentPersonIdx+1)%2;
    }

  }
};

m.mount(document.querySelector('#mount'), {
    view: function(){
      return m.component(comp, {key: currentPersonIdx});
    }
});

Thank you for your efforts!

think this a bug in the docs. @lhorie was experimenting with components as factory function at the time he created it. He dropped it in favour of m.component(ProjectList, args).
Controllers are called only once on mount/routechange.
Besides that, the controller is not reinitialised due to #823 components that only return a component.
Can be solved by simply wrapping the response in an array.

@StephanHoyer Thank you for your answer!

fixed docs


New SVD linmath tools

As far as I understand, some folks need some SVD and other decomposition algorithms.  I wanted to float the idea to see if Dave's stuff works.
bidiagonalize.txt
givens.txt
svd.txt

Maybe I'm not running it right, but I'm getting ~2.5 seconds to run a 4x20 and about ~12 seconds to run a 22x15.
For comparison the same matrix in opencv isn't really measurable at those sizes. 40x200 takes 0.25s or so.
svd.c.txt
is the file with the modification to run opencv.
gcc svd.c -lm -O3 -o svd -I/usr/include/opencv -lopencv_core
to build it. Pass in an argument to run opencv version.
I don't want to undercredit the accomplishment of a self contained small SVD c file -- that math is hard and I honestly don't understand most of it. For small matrices it seems like it runs slightly faster than opencv (hard to say though -- one is static vs dynamic allocation), and it does seem to optimize for symmetrical.
But the bottom line for me is that as soon as we need anything medium and above its immediately going to stall the pipeline. Not to mention we'd have to write adapters for it and any other library we want, like SBA. I really think lapack/clapack is the way to go here.

Hey, I wrote the code and I think the housholder (svd c) is not supposed to be run on it's own but after you precondition it with the bidiagonalization.  Obviously I need to tie the programs together into one to have a competitive solution, but I just haven't had time.
The givens is the simpler algorithm.  It's an eigenvector algorithm though, so you need to take a covariance matrix to use it.  Givens is slower than the housholder for large matrices, but for smaller ones it should be fine.
I will have time to work on this Wednesday

The full range of lapacke functionality we are likely to need long term is here:
https://github.com/balintfodor/sba/blob/master/sba_lapack.c
lines 50-83
Some of those could trivially be implemented with less specialized forms for a performance penalty, we can evaluate that in context.
We also have a dependency on BLAS dgemm as well; but that is just a matrix multiply which you'd likely be hard pressed to do without to implement svd.
We are currently using dgelss as well, but that can be rewritten in terms of dgesvd. I'm honestly not sure if there is a performance saving for dgelss or if its just a convenience.
Optimally we'd have a lib with identical function signatures to lapack so that any low level library we might use down the line should just drop in.

Understood.  I'll continue to work on performance improvements.  But.... givens.c is already fast enough to be useful in some circumstances.
If you're only using the 20x12, then givens.c may be more than fast enough.  In testing the performace of givens.c, it solves the 12x12 eigenvector problem in 0.0003s and the 15x15 eigenvector om 0.002s.  Which means that you can sove the Mx12 svd in this same amount of time.
givens.c also outperforms OpenCV for the Mx40 matrix, because it only takes 0.5s to solve the 40x40 eigenvector problem
In order to scale to larger matrices, however, I will need to implement a better method once the matrix is in tridiagonal form.  I'm working on implementing the "divide-and-conquer" eigenvalue method, because this runs in quadratic time so most of the time will be spent converting the matrix to tridiagonal in that case.
Regars

Is there a repo location with a callable givens.c? Specifically I'd just wrap this: http://www.netlib.org/lapack/explore-html/d0/dee/lapacke__dgesvd_8c_af31b3cb47f7cc3b9f6541303a2968c9f.html#af31b3cb47f7cc3b9f6541303a2968c9f declaration around it. (We only need a row major impl; we can assert if its given column)
I could then give you performance numbers in use.
If you are doing all your work in place for SVD -- which I sort of expect -- be sure to compare it against opencv with CV_SVD_MODIFY_A turned on. Also possibly run it twice and use the second timings -- the first pass likely sets up a thread local work buffer dynamically and keeps it around. I'm probably telling you stuff you already are checking though.
Would it be difficult / feasible to make all your diag matrices output 1xMIN(N, M)?

Do you use a c 2D array or are you calling malloc?

Just FYI to any reading this thread, it was taken to the Discord channel.  We will report back with decision and close this thread here.  @ultramn and @jdavidberger please update and close this thread.

For SBA, we need any one of the methods in sba to be available. LU looks like it will work if I can can it with a dynamic array.
I would like cholesky decomposition at some point - my understanding is that it should be somewhat faster for sba.
Input into SBA is an NxN matrix where N is the number of parameters we mean to solve for; currently this is 7. At some point we'll try to tackle the calibration issue and we'll likely see something like... 17x17.
We will need a SVD. It is running a 12x12 for epnp. For rotation matching stuff, I think we'll need ~22x22 still though.
The matrix multiplies probably matters performance wise a lot. We calculate A^T*A with a 12x24. Ideally that transpose is a flag we can pass in.
So that list is:

cblas_dgemm
dgetrf - LU factorization
dgetri - Use LU factorization from dgetrf, invert A
dgetrs - Solve Ax=b with LU factorization from dgetrf
dgelss - Minimize Ax-b with SVD
dgesvd - SVD
dpotrs (optional) -  Solve Ax=b with Cholesky factorization


Get-MessageTrace is missing results unless searching windows is 30 minutes.

Hello, all has been described here https://paweljarosz.wordpress.com/2019/02/06/get-messagetrace-exchange-online-and-lots-of-missing-results-workaround/. Generally happened to me a few times, so decided to let you guys know, when searching for results I am only able to find particular message when the search windows is 30 minute. Otherwise when pipelining the results by | ? {$_.messageid -match ...} or | ? {$.sender -match..} doesn't work.

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

ID: e3d7f9c1-78f0-5869-2e87-94c56c914316
Version Independent ID: f7927615-71e8-069b-d2f3-0cae30092cd1
Content: Get-MessageTrace (exchange)
Content Source: exchange/exchange-ps/exchange/mail-flow/Get-MessageTrace.md
Service: exchange-powershell
GitHub Login: @chrisda
Microsoft Alias: chrisda

I think we might close it - I need to use pagination for this, just saw this.

Hi @AndreaBarr , could you close it? It's not a real issue based on the last comment.
Thank you so much!


Docstrings for radix components

Discovered these discrepancies while editing for voice.
Will continue to update this branch until it merges, at which point i'll open a new PR for additional changes.

This looks good to me just need to from the pyi script again


feat(generic): add LastBy

What?
add LastBy
Why?
because last also accepts a callback
How?
Going through the slice in reverse order and returning the first element that matches with matcher

Codecov Report
Base: 97.83% // Head: 97.85% // Increases project coverage by +0.02% :tada:

Coverage data is based on head (e33098b) compared to base (cb754bb).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #65      +/-   ##
==========================================
+ Coverage   97.83%   97.85%   +0.02%
==========================================
  Files           7        7
  Lines         922      931       +9
==========================================
+ Hits          902      911       +9
  Misses         14       14
  Partials        6        6

Impacted Files
Coverage Δ

generic.go
100.00% <100.00%> (ø)

matcher.go
93.75% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


First touch action in component first time rendering is never triggered

My components are under NavigationExperimental.CardStack.
Let say I have touchable button in Main page,
after the Main page first time rendered,
the first time I click the touchable button, it never trigger the onPress event.
But it will trigger if it is not first time click and the page is not first time be rendered.
I have no clues how to solve this. thanks.

I have a similar problem. If I use CardStack it renders my views just fine, but inside it touch events stop working altogether. Did you manage to figure it out, @vshy108 ?

I was inadvertently modifying the navigationState object before doing setState, fixing that got rid of the problem. It might also be related to changing it during a transition.