Annotation of Images (Reading and Writing)

User story
Annotations like ROI's are often present in OME-TIFF files and can be rendered as overlays on an image.  Furthermore, users may want to add annotations to an image on their screen.  Vitessce could handle both, reading custom formats or OME(XML) ROI's and writing to a custom format (we can't expect to edit an OMETIFF).
Preferred solution

Read OME(XML) ROI's and display them
Add a part to the layer controller for selecting/de-selecting ROI's for display and their settings
Add a UI component for creating new ROIs
Add a "save" method for new ROI's

Other Features

Add a callback for saving ROI's that can post them to URL's

@ilan-gold one quick thought on how to save the ROIs and other annotations: the OME-TIFF specification supports multi-file (https://docs.openmicroscopy.org/ome-model/6.0.0/ome-tiff/specification.html#multi-file-ome-tiff) so maybe it's possible to remain fully compliant by storing those additional data in a companion file without having to edit the OMETIFF.

Thanks! That'd a great idea!

Also see minerva story JSON schema https://labsyspharm.github.io/minerva-story/json-schema/exhibit/build/index.html https://github.com/labsyspharm/minerva-story/tree/06114c2/json-schema

Hi there, I am really interested in making this funcionality possible.
Is there any advances on this?

Hi @BioinfoTongLI, are you interested in the reading, the writing, or both types of functionality?
As for reading, we plan to support OME-TIFFs produced by nanostring's GeoMx instrument in the near future (https://github.com/vitessce/vitessce/issues/1426), and these contain ROIs defined via OME-XML https://www.javadoc.io/doc/org.openmicroscopy/ome-xml/5.5.0/ome/xml/model/ROI.html
The progress made so far has been getting a better understanding of how the ROIs are represented in OME-XML as binary strings:
from ome_types import from_xml
import numpy as np
import base64
import matplotlib.pyplot as plt

ome = from_xml('/Users/mkeller/Downloads/3146_pA_M.ome-1.xml')

def mask_to_img(mask):
    val = mask.bin_data.value
    intarray = np.frombuffer(bytes(base64.b64decode(val)), dtype=np.uint8)
    binarray = np.unpackbits(intarray)

    width = int(mask.width)
    height = int(mask.height)

    imgarr = np.reshape(binarray[:width*height], (height, width))

    return imgarr

segments = ['Endothelial', 'Trophoblast', 'Others']
fig, axs = plt.subplots(len(ome.rois), len(segments), sharex=True, sharey=True, figsize=(15, 55))
for roi_i, roi in enumerate(ome.rois):
    masks = roi.union[2:]
    for mask_i, mask in enumerate(masks):
        segment_i = segments.index(mask.text)
        axs[roi_i, segment_i].imshow(mask_to_img(mask))

and https://github.com/vitessce/vitessce/pull/1399 is a large PR containing a prototype of supporting non-cell segmentations (from multi-channel OME-TIFFs and AnnData objects) (demo). I am currently working to create multiple smaller PRs that will be more manageable to review to bring this functionality to production.
I am interested to learn the use cases you have for this functionality so that we can consider them in the work.

Hi Mark! Thanks a lot for your prompt answer!
I would say we are interested in both reading and writing. Ideally, we were thinking how difficult it is to turn the current vitessce into an image annotation tool, by saving/loading annotations as polygon for example. And I am not talking about the lasso/rectangular selection tools in the current setting, afaik, it is to annotate cells , and no spatial coordinates are recorded, right?
It actually can be a general feature and not necessarily related to the nanostring way of storing ROI information. Asking here because it seems to me the most relevant issue. Sorry if there's other issues and I didn't find out.

Ideally, we were thinking how difficult it is to turn the current vitessce into an image annotation tool, by saving/loading annotations as polygon for example

Thank you for the context, this makes sense, and I agree this is the most relevant issue for this discussion. I think it would take a bit of work to support image annotations but I think all of the concepts are available in Vitessce to make it straightforward to implement. I could imagine the following changes being needed:

new file type to support the loading of annotations

some options could be the OME-XML ROI format discussed above, GeoJSON, the Minerva JSON format, another format supported by a tool such as QuPath, or even some custom format

either a new view type or additions to the current spatial and layerController views for the UI

new coordination types to support coordinated user interactions in multiple views

thanks @keller-mark ! those sounds good.
I might be too amateur to provide help on the js side. I am more backend and data-centric.
Re the file type point, I don't know if you're aware of this spatialdata project.
https://spatialdata.scverse.org/en/latest/design_doc.html#shapes
We are trying to make this file format work with vitessce (it doesn't work now).
But what's important is that it supports shapes (polygons) already.
What do you think adapting this file format?
btw and I am pretty sure @ilan-gold  knows this format since he's working with the spatialdata team :)


Request for Morphius Touchpad 20240120.rom if feasible

https://github.com/MrChromebox/scripts/blob/2c2150ff7ff83a4d5665f42613a1a3aaa7bb1bbc/sources.sh#L303
The script still points to the January 7th release. Any way in the near future to get the touchpad-enabled release of 4.22.2 or are the fixes just Windows-related as the changelog on your site indicates?

done

That was fast. Thanks. Flashed fine here.
[Still got a lot of dmesg errors and audio still doesn't work but that might still be kernel related.]


v-html can not reselect content when content change!

Version
2.5.2
Reproduction link
https://jsfiddle.net/weituotian/0rc7zq1b/5/
Steps to reproduce

select h11111111111111111
click rerender button
then you can see the selected can not be reselected

What is expected?
I hope I can update incrementally so that my html content can be selected back to the previous selection.
What is actually happening?
If the html changes, then the window.getSelection().addRange can not choose to go back to the previous content.

You need to get the selection again since Vue is replacing the HTML:
this.$nextTick(function(){
         	selection = window.getSelection()
           selection.removeAllRanges();
           selection.addRange(X);
        })

@posva
why close my issue!
it is not solve!
your solution is not work! you don konw the meaning of this issue!

My bad, it doesn't work! I updated my comment to better reflect why I closed the issue :wink:

@posva
If your technique is very powerful, give me some advice.
it is because vue update the html,  and  there is impossible to reselect the previous selection!!!
Vue should be responsible for the issue after updating the dom element!
not only v-html, every component which been updated by vue also hava a reselect issue!
now you understand the real meaning of this issue???

Calm down plz.

it is because vue update the html, and there is impossible to reselect the previous selection!!!

Of course you can, you just need to decide how to record previous selections yourself, even with v-html.

Vue should be responsible for the issue after updating the dom element!

Absolutely not. By using v-html like this you are explicitly re-rendering all existing content, that's why the selections are discarded. If you are just appending content, just try to keep previous content as much as possible and the selection will be preserved.
You can check on this: http://jsfiddle.net/eywraw8t/143042/
And btw, don't take free help for granted.

@Justineo The example may be written in error, It should be so
this.contents.push(Math.floor(Math.random() * 3))


Instalation problem

OS: Zorin OS (ubuntu based)
Python: 3.11.7

When I try to install the lib, below error is happening:

This is due to a conflict between spacy and selenium. Try to instal spacy like this pip install spacy --no-deps then try again.


.travis: Fix probes_test failure on Arm64

Have no available kernel config in LXD container for arm64
Signed-off-by: Jianlin Lv<EMAIL_ADDRESS>Fixes: #12322

Coverage increased (+0.001%) to 36.912% when pulling 78bee146d3893060f8b4e7d07b2386911e220710 on Jianlin-lv:pr-fix-probes-issue into 655c6362c5c44a554039f297b9bde55fc5413f28 on cilium:master.

No need to run Jenkins CI, this change is already covered by Travis CI, which suceeded for ARM64: https://travis-ci.com/github/cilium/cilium/jobs/355785768
Thus, marking as ready-to-merge.


Header token & URL value

Hi all,
Iam using the api call to retrieve a token then i want to use that token in the Authorization header like (Bearer token value) but when i retrieve the token they come with "token value" so how to get the token value only without the " " and add the to the Bearer?
I tried to use this:

description: Api Post request for extracting the token
action: org.getopentest.actions.HttpRequest
args:
url: $data("apiData/config").apiExtractToken
headers:
Content-Type: application/json
verb: POST
body: |
  - script: |
          var Response = $output.body;
          var Bearer = "Bearer";
          var myHeader = Bearer +Response

  - description: Api get the webagent url
    action: org.getopentest.actions.HttpRequest
    args:
      url: $data("apiData/config").apiExtractUrl
      headers:
        Authorization: myHeader
      verb: GET
      body: |

but i get this output "
| Executing action org.getopentest.actions.HttpRequest with arguments {"verb":"GET","headers":{"Authorization":"myHeader"},"body
-- | ........................

i solve it in this way but i think it is not the pretty way if someone know how to do it better plz let me know:

description: Api Post request for extracting the token
action: org.getopentest.actions.HttpRequest
args:
url: $data("apiData/config").apiExtractToken
headers:
verb: POST
   - script: |

         var Response = $output.body;
         var Bearer = "Bearer ";
         $localData.apiResponse = Bearer+Response;

   # - description: Log the current Response
   #   script: |
   #     $log("The current Response is: " + apiResponse);

   - description: Api get the webagent url
     action: org.getopentest.actions.HttpRequest
     args:
       url: $data("apiData/config").apiExtractUrl
       headers:
         Content-Type: application/json
         Authorization: $localData.apiResponse
       verb: GET

I have another problem is that iam reading the url from another api call and i want to put it in the next api call. The url still not be filled with the right parameters!

When you pass argument values to a test action, they will be interpreted as plain strings, unless they start with the $ sign. This is why the syntax $data("...") works: since it starts with the $ sign, OpenTest knows to evaluate it as JavaScript code. If you want to use the variable myHeader as the value of a test action argument, you have to start with the prefix $script, to let OpenTest know this is JavaScript code. For example:
- description: API call to get the URL
  action: org.getopentest.actions.HttpRequest
  args:
    url: $data("apiData/config").apiExtractUrl
    headers:
      Authorization: $script myHeader
    verb: GET

ok thank you for clearing this to me, how to solve the url issue as i have url with many extensions like this URL/api/v1/settings , and other like URL/api/v1/Monitor. I can extract the URL but when i want to put it in the api call i need to put the URL that i red and add /api/v1/settings behind. That is not going well:

description: API call to get the URL
action: org.getopentest.actions.HttpRequest
args:
url: URL /api/v1/settings
headers:
Authorization: $script myHeader
verb: GET

The solution is similar - you need to use a JavaScript expression to concatenate the two strings and the $script prefix:
- description: API call to get the URL
  action: org.getopentest.actions.HttpRequest
  args:
    url: $script URL + "/api/v1/settings"
    headers:
      Authorization: $script myHeader
    verb: GET

yes this will work, but i want it to read the /api/v1/settings from a config file.

In this case you can use the $data function. For example:
- description: API call to get the URL
  action: org.getopentest.actions.HttpRequest
  args:
    url: $script URL + $data("config").uris.v1.settings
    headers:
      Authorization: $script myHeader
    verb: GET

Just make sure the value of the url argument starts with $, so it will be evaluated as a JS expression. Here are some examples of valid values for the url:

$script url + $data("config").uris.v1.settings
$data("config").baseUrl + $data("config").uris.v1.settings
$script "https://myserver.com" + $data("config").uris.v1.settings

And here are examples of invalid values that will be interpreted as strings (so will not be evaluated as JS expressions):

url + $data("config").uris.v1.settings
"https://myserver.com" + $data("config").uris.v1.settings


Is it possible to stack 2  elements on top of each other

I would like to do this:
      <g ref={this.gRef} className={styles.container}>
        <path ref={this.pathRef} />
        <Text
          className={styles.item__name}
          width={50}
          verticalAnchor="start"
          textAnchor="middle"
          style={{ pointerEvents: 'none' }}
          fill="white"
        >
          {data.name}
        </Text>
        <Text
          className={styles.item__name}
          width={50}
          verticalAnchor="end"
          textAnchor="middle"
          style={{ pointerEvents: 'none' }}
          fill="white"
        >
          {data.type}
        </Text>
      </g>

I the reason I need 2 different text areas on top of each other is because they both have different font styles.
I could target <tspan /> with css but I can't think of a reliable way to ensure what text lines appear on which <tspan /> elements because it is abstracted.

hi @dagda1, thanks for checking out vx!
Yes it is possible using the dy prop on to adjust the offset based on the bounding box height of the text above. example: https://codesandbox.io/s/y7659zz6x
Hope that helps!


Losing work upon pressing browser back button

Describe the bug
If you press Back, and then forward, all your code will be gone.
To Reproduce
Accidentally swipe 2 fingers on a macbook and Chrome will go back a page.
 popup on code-input pages, that allows you to stay on the page, or some mechanism to auto-save what you've typed into the code box. It's too frustrating to lose huge amounts of effort due to an errant swipe.
Screenshots
Contexts

OS: macOS
Browser: chrome

Maybe will be useful to link with same problem: https://github.com/Codewars/codewars.com/issues/1753

Another vote for this. It's very annoying when it happens and unfortunately I happen to accidentally hit the back button on my mouse enough times find this incredibly annoying.


Storage Entity Types

Relevant information
Adding entity definitions for the following storage types - all telemetry is emitted via custom Flex configurations that is unique to a single NR account.

Dell Compellent
DellEMC Isilon
Pure
Dell RecoverPoint (RPA)
Synology
DellEMC VMAX
DellEMC VNX
DellEMC VPLEX
DellEMC XtremIO

Checklist

[x] I've read the guidelines and understand the acceptance criteria.
[x] The value of the attribute marked as identifier will be unique and valid.
[x] I've confirmed that my entity type wasn't already defined. If it is I'm providing an
explanation above.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.2 out of 3 committers have signed the CLA.:white_check_mark: khpeet:white_check_mark: naxhh:x: peetkYou have signed the CLA already but the status is still pending? Let us recheck it.

we would need the sla signed with the 2nd user too

I've signed with both - though it's unnecessary since both GH users are me. I've merged PRs before without having to sign both.

../definitions/ext-dell_compellent/summary_metrics.yml invalid
[
  {
    "instancePath": "/failedDriveCount/query",
    "schemaPath": "#/definitions/query/required",
    "keyword": "required",
    "params": {
      "missingProperty": "eventId"
    },
    "message": "must have required property 'eventId'"
  }
]


Have Email submission be redirected to specified URL and a email submission confirmation

Refer: https://www.youtube.com/watch?v=RJtaMJTlRhE

https://www.youtube.com/watch?v=sGQSz22U8VM


Extended properties

It would be a cool feature to have properties that participate in asdict method.
@attr.s
class SomeClass:

  @attr.property(asdict=True)
  def some_dynamic_attr(self):
    return True

print(asdict(SomeClass()))
>> {'some_dynamic_attr': True}

This seems out of scope to me… as it's a start at extensible serialization, which isn't what attrs is trying to provide.

I've been thinking about how to add first-class property support in attrs before, because I keep running into this limitation myself. Haven't come up with anything useful so far though...

@andvikt Try this https://github.com/pwwang/attr_property ?

This would be a huge advantage of attrs over dataclass, as we can see in this open issue.
To give a minimum reproducible snippet of the problem, see this example:
from attrs import define

@define
class Vehicle:
    wheels: int = 4

    @property
    def wheels(self) -> int:
        print("getting wheels")
        return self._wheels

    @wheels.setter
    def wheels(self, wheels: int):
        print("setting wheels to", wheels)
        self._wheels = wheels

v = Vehicle()

print(v.wheels) # -> should print 4
# prints <property object at 0x...>

The corresponding regular class with regular __init__ don't have any problem
class Vehicle:

    def __init__(self, wheels:int = 4) -> None:
        self.wheels = wheels

    @property
    def wheels(self) -> int:
        print("getting wheels")
        return self._wheels

    @wheels.setter
    def wheels(self, wheels: int):
        print("setting wheels to", wheels)
        self._wheels = wheels

v = Vehicle()

print(v.wheels)
# prints 4

I know that happens because of this limitation. I do not know how one would solve this.
This workaround may give a hint.
Can't say if #353 is related


No sound on Linux

For some reason streaming (generate_and_stream_audio) doesn't work on my Linux machine. I get no sound at all. I installed all the dependencies mentioned in the README.
Here is the debug trace:
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.elevenlabs.io:443
DEBUG:urllib3.connectionpool:https://api.elevenlabs.io:443 "GET /v1/voices HTTP/1.1" 200 4815
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.elevenlabs.io:443
DEBUG:urllib3.connectionpool:https://api.elevenlabs.io:443 "GET /v1/user/subscription HTTP/1.1" 200 484
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.elevenlabs.io:443
DEBUG:urllib3.connectionpool:https://api.elevenlabs.io:443 "GET /v1/voices HTTP/1.1" 200 4815
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.elevenlabs.io:443

DEBUG:urllib3.connectionpool:https://api.elevenlabs.io:443 "POST /v1/text-to-speech/21m00Tcm4TlvDq8ikWAM/stream?optimize_streaming_latency=0 HTTP/1.1" 200 None
Complete response received: The capital of Kenya is Nairobi.
DEBUG:root:Starting iter...
DEBUG:root:Waiting for header event...
Press Enter once playback is finished.DEBUG:root:Writing weirdly sized chunk (3749)...
DEBUG:root:headerReady not set, setting it...
DEBUG:root:Header maybe ready?
DEBUG:root:File created (208 bytes read).
DEBUG:root:HeaderReady is set, waiting for the soundfile...
DEBUG:root:Writing weirdly sized chunk (3821)...
DEBUG:root:Write head move: 3821
DEBUG:root:Raise available data event - 7362 bytes available
DEBUG:root:HeaderReady is set, waiting for the soundfile...
DEBUG:root:Writing weirdly sized chunk (3816)...
DEBUG:root:Write head move: 3816
DEBUG:root:Raise available data event - 11178 bytes available
DEBUG:root:HeaderReady is set, waiting for the soundfile...
DEBUG:root:Write head move: 4096
DEBUG:root:Raise available data event - 15274 bytes available
DEBUG:root:HeaderReady is set, waiting for the soundfile...
DEBUG:root:Writing weirdly sized chunk (818)...
DEBUG:root:Write head move: 818
DEBUG:root:Raise available data event - 16092 bytes available
DEBUG:root:Starting playback...
DEBUG:root:Missing data but download isn't over.
DEBUG:root:Expected 8192 bytes, got back 8192
DEBUG:root:Read bytes: 8192

[x9] DEBUG:root:Putting 8192 bytes in queue.
DEBUG:root:Expected 8192 bytes, got back 8192
DEBUG:root:Read bytes: 8192

DEBUG:root:Putting 8192 bytes in queue.
DEBUG:root:Expected 8192 bytes, got back 1132
DEBUG:root:Insufficient data read.
DEBUG:root:We're not at the end of the file. Check if we're out of frames.
DEBUG:root:Recreating soundfile...
DEBUG:root:Frame counter was outdated.
DEBUG:root:Now read 8192 bytes. I sure hope that number isn't zero.
DEBUG:root:Read bytes: 8192

[x29] DEBUG:root:Putting 8192 bytes in queue.
DEBUG:root:Expected 8192 bytes, got back 8192
DEBUG:root:Read bytes: 8192

DEBUG:root:Putting 8192 bytes in queue.
DEBUG:root:Expected 8192 bytes, got back 8192
DEBUG:root:Marking no available blocks...
DEBUG:root:Read bytes: 8192

DEBUG:root:Putting 8192 bytes in queue.
DEBUG:root:Download finished - 16300.
DEBUG:root:Expected 8192 bytes, got back 8192
DEBUG:root:Read bytes: 8192

DEBUG:root:Putting 8192 bytes in queue.
DEBUG:root:Expected 8192 bytes, got back 8192
DEBUG:root:Read bytes: 8192

DEBUG:root:Putting 8192 bytes in queue.
DEBUG:root:Mismatch in the number of frames read.
DEBUG:root:This only seems to be an issue when it happens with files that have ID3v2 tags.
DEBUG:root:Ignore it and return empty.
DEBUG:root:Read bytes: 0

DEBUG:root:Got back less data than expected, check if we're at the end...
DEBUG:root:We're at the end.
DEBUG:root:While loop done.
DEBUG:root:Finished playing audio:The capital of Kenya is Nairobi.
DEBUG:root:False
DEBUG:root:Stream done.

Same problem. Was working until a few days ago; now compeltely broken on Linux.

I've been trying to replicate the issue and it's just not happening. What I am getting are some random ALSA errors declaring the device busy.
Could you elaborate on what your environment is? OS version, audio API, that sort of thing.

 Okay, I think I've got it. Essentially, the issue comes down to ALSA and the behavior of its "default" audio device.
If nothing else is playing, it will work correctly the first time you try to play back audio. On subsequent runs, the audio device used for the playback becomes unavailable (I noticed this by listing all audio devices every time).
Normally, if you don't specify a deviceID, sounddevice (the library I use for the playback) will just pick the default output device, which in this case is the ALSA "default" device.
The problem arises when the REAL audio device is marked as busy by ALSA. It seems like the "default" device picks whatever other audio device isn't marked as busy, resulting in the second playback technically working (and seemingly being on the same device as the first one) but outputting to another device (likely one that is disconnected, hence the lack of audio).
I'll do some digging and try to figure out how to fix this.

Thanks! Really appreciate it!

Some debugging later, it appears I was (partially) correct. That does seem to be the issue, but the generate_play_audio function has no issues with it, even down to playing two simultaneous audios.
I believe the issue comes down to the fact that the stream function uses sounddevice's RawOutputStream, whereas the non-streaming one uses OutputStream. I'll see if I can't switch to the latter for the stream as well, but I don't think so.

I am genuinely at a loss. I'm going to try and isolate the issue down into a minimum reproducible code sample, then I'll probably make an issue on the sounddevice repo.

Turns out this was all actually a race condition that had gone completely undetected as it never happens on windows.
The thread that pulls sound data from the queue was actually running BEFORE the queue ever got filled, and triggering an error. This only happens on linux for some reason, maybe some difference in the thread scheduling? Who knows.
Bug is now fixed in release 0.8.1

Big thanks! It's working now!


How to get started with custom backend development?

I want to write a backend (?) for tools that doesn't exist in the registry. Is there any docs around it?

Are you sure you want to write a backend? These normally allow access to a whole repository of different tools, e.g.

npm enables the installation of tools from the npm registry
pipx enables the installation of tools from the pypi registry
ubi enables the installation of binaries from github releases
asdf enables the installation of tools from asdf plugins

If its just a single tool you want to use with mise, then you have some options:

If it can be installed from a github release:

You might be able to install it with ubi:

mise use ubi:the-github-user/the-github-repo e.g. mise use ubi:astral-sh/ruff?

Or you add it to the aqua repository, aqua is experimental in mise right now but a very promising development

docs here: https://aquaproj.github.io/docs/products/aqua-registry/contributing

Else you can write an asdf or vfox plugin for it:

https://asdf-vm.com/plugins/create.html
https://vfox.lhan.me/plugins/create/howto.html

If you truly do want to write a backend, there are no docs for that and it would be a much more complex task.

Thanks for the answer. I should've probably explain myself better. Classic case of xy problem here.
I'm trying to do install binaries from github releases. I want it to be generic. It seems ubi is exactly made for that.
I tested it on kind and it works great.
mise use -g ubi:kubernetes-sigs/kind
However I couldn't figure out how to use it on cilium-cli
❯ mise use -g ubi:cilium/cilium-cli
mise ERROR failed to install<EMAIL_ADDRESS>mise ERROR Failed to install with ubi<EMAIL_ADDRESS>could not find any files named cilium-cli in the downloaded tarball
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information

Then I tried below settings in my ~/.config/mise/config.toml config file.
Test 1
[tools]
"ubi:cilium/cilium-cli" = { exe = "cilium" }

❯ mise use -g ubi:cilium/cilium-cli
mise ERROR failed to install<EMAIL_ADDRESS>mise ERROR Failed to install with ubi<EMAIL_ADDRESS>could not find any files named cilium-cli in the downloaded tarball
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information

Test 2
[tools]
"ubi:cilium/cilium-cli" = { matching = "cilium-linux-amd64" }

❯ mise use -g ubi:cilium/cilium-cli
mise ERROR failed to install<EMAIL_ADDRESS>mise ERROR Failed to install with ubi<EMAIL_ADDRESS>could not find any files named cilium-cli in the downloaded tarball
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information

Version
❯ mise version
2024.11.15 linux-x64 (d3d8dc0 2024-11-16)

config seems right, might be a bug

Gotcha. I got it working somehow after deleting my backup binary. I had my old cilium cli backed up in /usr/local/bin/cilium.backup path and noticed that mise ls was showing the version as system somehow.. Deleted that and opened a new shell somehow it was gone.

I think this was partially mitigated by https://github.com/jdx/mise/pull/3076
@shinebayar-g I can't reproduce the condition you described above but if you see the following I ran commands I ran today:
❯ echo '
[tools]
"ubi:cilium/cilium-cli" = { version = "latest", exe = "cilium" }
' >mise.toml

❯ mise install
mise Installed binary into /Users/syhol/.local/share/mise/installs/ubi-cilium-cilium-cli/0.16.20/bin/cilium
mise<EMAIL_ADDRESS>✓ installed

❯ cilium version
cilium-cli: v0.16.20 compiled with go1.23.2 on darwin/arm64
cilium image (default): v1.16.3
cilium image (stable): v1.16.4
cilium image (running): REDACTED

It looks like you are trying to use a client-go credential plugin that is not installed.

To learn more about this feature, consult the documentation available at:
      https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins

You can see it works as expected. @shinebayar-g are you happy to close the ticket?

Sure. Thanks for the follow up.


I'm getting invalid type: string. expected a borrowed string

Hey!
I have this very simple example:
extern crate serde;
extern crate serde_json;
#[macro_use]
extern crate serde_derive;

use std::fs::File;
use std::collections::HashMap;
use std::io::prelude::*;

#[derive(Deserialize)]
struct User<'a> {
    username: &'a str
}

#[derive(Deserialize)]
struct Comment<'a> {
    author: User<'a>,
    text: &'a str,
    likes: Vec<User<'a>>
}

#[derive(Deserialize)]
struct Media<'a> {
    author: User<'a>,
    likes: Vec<User<'a>>,
    comments: Vec<Comment<'a>>,
    images: HashMap<String, String>,
    description: &'a str
}

fn conv<'a>(string: &'a str) -> Vec<&'a str> {
    let media: Vec<Media> = serde_json::from_str(&string).unwrap();
    media.into_iter().map(|x|x.author.username).collect::<Vec<&str>>()
}

fn main() {
    let mut f = File::open("./test.json").expect("file not found");
    let mut contents = String::new();
    f.read_to_string(&mut contents).expect("something went wrong reading the file");
    println!("{:?}", &conv(&contents));
}

This is the input json:
[{"images": {"small": "http://appventure.me/small.png", "medium": "http://appventure.me/medium.png"}, "description": {"text": "Duis quam lorem, lacinia nec tempus non, Sondra Swigart tristique", "likes": [{"username": "Loan"}, {"username": "Shaneka"}], "author": {"username": "Hattie"}}, "likes": [{"username": "Les"}, {"username": "Vance"}, {"username": "Marilee"}], "comments": [{"text": "dictum feugiat. Ut blandit volutpat Kandis Ammerman ante in commodo.", "likes": [{"username": "Les"}], "author": {"username": "Les"}}, {"text": "luctus, enim lacus sagittis arcu, Clement Cassity at mollis tellus", "likes": [{"username": "Marisha"}], "author": {"username": "Liliana"}}], "author": {"username": "Debbie"}}]

I'm getting the error:
invalid type: string [...] expected a borrowed string

What did I do wrong?  I did read the docs but couldn't figure it out.

That is not the error I get when running the program you gave.
Your input file contains "description": { ... } where the description value is a map, but the Media struct contains description: &'a str where the value is a string.

Here is a minimized example (same as your code but with extraneous fields removed):
https://play.rust-lang.org/?edition=2015&gist=378fc363d8ec9752d4e19f4500c07851
Here you need to consider what you expect 'a to be, i.e. what variable owns the data from which the &'a str is borrowed.

Doesn't (in your example) j own the data as 'static? And even if not, everything is dropped at the end of main. How could I change it, so that it works? I have to admit I don't get what's wrong here. Changing it to:
struct Media {
    description: String
}

would obviously work, but I wanted to play around the serde zero-copy deserialization feature.

Well the length of the string in description needs to be 3 and it needs to contain the byte 'A' followed by a newline (byte '\x0A') followed by the byte 'B', because this is the JSON string in the input. There is no 'static data (in j or anywhere else) containing 'A' followed by a newline followed by 'B'.

For anyone landing on this issue (like I did), I think a bit more context may be useful.
The reason serde can't deserialize into a borrowed string is that it needs to modify (unescape) the encoded json, which requires ownership.
That said, it appears you can get around this by using a Cow<'a, str> allowing deserialization to borrowed or owned memory depending on the string itself.
Link to playground
If this is incorrect please let me know (I'm still somewhat new to Rust).

This seems like a case where the error messaging describing the problem could be improved. I can accept that the lib needs to own the data once the "escape" dilemma is explained to me (thanks @michael-grunder ) however when I first saw this error message in my own code I was baffled as to why a borrowed string posed a problem here. Perhaps serde's error message could better explain why the distinction matters.

For anyone landing on this issue (like I did), I think a bit more context may be useful.
The reason serde can't deserialize into a borrowed string is that it needs to modify (unescape) the encoded json, which requires ownership.
That said, it appears you can get around this by using a Cow<'a, str> allowing deserialization to borrowed or owned memory depending on the string itself.
Link to playground
If this is incorrect please let me know (I'm still somewhat new to Rust).

@michael-grunder as an alternative, is there a way to specify a borrowed string from the json?


fix a few cases in which some content was not showing up due to allOf references

Resolves allOf references in the schema. Otherwise, I found that in some special cases the request body was missing.

Cool! I can't merge it myself so I'll leave it to you


The codemode i18n -> intl is removing too many spaces

Hi, thanks for this codemod, unfortunately it triggers too many undesired changes, ex:
export default Component.extend({

  i18n: inject(),

  prop: 'value',

  prop2: 'value2'

Will be rewritten as:
export default Component.extend({
  intl: inject(),
  prop: 'value',
  prop2: 'value2'

which is kind of annoying.

@panthony Grat catch.  This should be fixed now!


⚠ Samsung has degraded performance

In 66def5f, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2836 ms

Resolved: Samsung performance has improved in 2c411b5.


Add "Hot-Corners" like in MacOS

Description of the new feature / enhancement
A "Hot-Corner" - to "Turn off screen now", and "Leave Screen On" (Disable sleep/dark-screen), is what I use in MacOS.
There's a separate tool on GitHub, doing the 'screen off now', but it seems to me like it might be a suitable feature for PowerToys, see:
https://github.com/vhanla/winxcorners
Scenario when this would be used?
Leaving the pointer at screen corners, to trigger actions.
Supporting information
The
https://github.com/vhanla/winxcorners
page describes that, projects might be co-integrated possibly? cheers.

Thank you for the suggestion! This is a duplicate of https://github.com/microsoft/PowerToys/issues/1305. We'll close this to keep the conversation centralized to that thread.


Not working on Raspberry Pi (4B)

So, I installed neovim on my Raspberry Pi, and then cloned this repo to ~/.config/nvim.
But when I launched nvim, nothing happened. It worked on my MacBook and Surface.
What should I do?
OS: Raspbian GNU/Linux 10 (buster)
shell: zsh
$ tree .config/nvim
.config/nvim
├── doc
│   ├── kickstart.txt
│   └── tags
├── init.lua
├── lazy-lock.json
├── LICENSE.md
├── lua
│   ├── custom
│   │   └── plugins
│   │       ├── filetree.lua
│   │       └── init.lua
│   └── kickstart
│       └── plugins
│           ├── autoformat.lua
│           └── debug.lua
└─── README.md

What happens if you type nvim --clean on your raspberry pi?
Wondering if Neovim itself is busted.

What happens when you run nvim --version

Thanks.
the version is 0.3.4 on my Raspberry Pi, and 0.9.0 on my MacBook. Maybe I should try to install a newer version.
NVIM v0.3.4
Build type: Release
LuaJIT 2.1.0-beta3

:checkhealth shows:
health#nvim#check
========================================================================
## Configuration
  - WARNING: Missing user config file: /home/pi/.config/nvim/init.vim
    - ADVICE:
      - :help init.vim
  - ERROR: 'paste' is enabled. This option is only for pasting text.
    It should not be set in your config.
    - ADVICE:
      - Remove `set paste` from your init.vim, if applicable.
      - Check `:verbose set paste?` to see if a plugin or script set the opti      on.

## Performance
  - OK: Build type: Release

## Remote Plugins
  - OK: Up to date

## terminal
  - INFO: key_backspace (kbs) terminfo entry: key_backspace=\177
  - INFO: key_dc (kdch1) terminfo entry: key_dc=\E[3~
  - INFO: $SSH_TTY='/dev/pts/0'

Sorry but there's your problem. We require at least 0.8 to work properly. You may need to compile from source. Resolving for now. Thanks for the report.

Sorry but there's your problem. We require at least 0.8 to work properly. You may need to compile from source. Resolving for now. Thanks for the report.

OK. Thanks a lot.


Be more consistent about how stack traces are output from flutter_test

I need to add a test.

LGTM

will check in on green


Always allow image to zoom out to 1:1 scale

When displaying an image that is smaller than the current canvas, there is no way to "zoom out" to the native 1:1 resolution of the image.  This means small images may be oversized.
Exa:

There is no way to scale down the image here to match the size of the imshow window without doing something like abusing the selection panel to take up space.

This is part of a larger issue of rewriting the 2D "eye" (view) code to allow arbitrary panning and zooming

Blocked by

#2531

It's unclear how this should work. We could add a button to go to zoom=1 for a 2D space view, but I'm not sure how useful that would be. Should it keep that zoom even if we resize the space view? Would it be one image pixel per screen pixel, or per ui point?

Maybe could see what other common image preview tools do for this.


Wrong hash for mercurial 3.8.1

~ $ scoop.cmd install mercurial
installing mercurial (3.8.1)
downloading http://mercurial.selenic.com/release/windows/Mercurial-3.8.1.exe...done
checking hash...hash check failed for http://mercurial.selenic.com/release/windows/Mercurial-3.8.1.exe. expected: 1629e8171461bd2fad09466f5c1beca7a7f3de3d55ebd8eca647a8a3e76c9c6e, actual: b0378236f03ca72c69d265b7d0651cf81fce158eba08f5e0a5ece8160f1b5991!

That's probably my bad. Although, I remembered that I tested this in my bucket. The file might have actually changed since then. Added PR for Mercurial 3.8.2.

Should be fixed now. Please run scoop update.


Fixed timeout for EC2

Fixed timeout with the timeout param for EC2, instead of read_timeout for newer ruby versions
The bug can be reprodced on the virtual environment.

Can one of the admins verify this patch?

@puppetlabs-jenkins ?

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.Pavel Skrylev seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.

fixed

@puppetlabs-jenkins @dlapiduz @wfarr ping

Hi @majioa, thanks for taking the time to contribute to Facter!
Over the past year we've been super busy working on Facter 4 which is a complete rewrite of Facter 3 in Ruby. Facter 4 has been out for some time and we ship it with Puppet 7. It should be fully backwards compatible with Facter 2 and 3 so we encourage you to try it!
As such, we don't accept contributions to Facter 2 anymore. If this problem also manifests on Facter 3 or 4 please open a PR targeting the 3.x (cfacter or Facter 3) or main (Facter 4) branch.
For now I'm closing the PR, if you have any further questions feel free to ping me or @puppetlabs/night-s-watch.


Minimal interval

We're using your library and sometimes we want to disable selecting the "every minute" interval or set some kind of minimal interval.

Hello,
Thanks for using this library!
Without any modification you can already do something like this.

Displaying an error when every minute is selected, and you can use this error to disable a form submit for example.
Example: https://codesandbox.io/s/react-js-cron-minimal-interval-forked-cciq5k?file=/src/App.tsx

Wow, perfect! Thank you for developing it! Any way to contribute financially?

Thanks for the support!! I currently don't have a donation system in place, but I could think about it If you want to support this library 😃
I agree with you that it can be a new feature. I have some questions to think about it:

Removing the "minutes" option of the first dropdown will still allow the user to select every minute since when deselecting all values, every minute is set anyway, how to handle the last deselection that trigger the every minute to happen? (block it?)
To do something more generic, it's not only "every minute" that need to be disabled but any other value right?

Let me know If my questions are not clear enough

You are right. Maybe this is not the library problem.
Will explain more about what we do, maybe it will be helpful for you to understand me.
We wanted to limit our clients of running tasks every minute or even every hour. So we added this rule to check:
`
const items = value.split(' ');
if (value === '* * * * *' || items[1] === '*') {
  setError('The interval is too small');
} else {
  setError(null);
}

`
Yes, it will be possible to run almost every hour (23/24) if some user will really want it and select all 23 hours, but it's okay at least for now.
Thanks, for your help and support! Maybe the library is not so big but it's working well!


Add example for effect.from

I found it hard to figure out exactly how it should be used without clicking through to the code where the variable names helped me a little.
I hope that this could be useful to include. I'm not sure how we feel about having other libraries in code examples. I guess I like the idea of its being more real world but I also realise that plinth library might change and render this out of date which isn't so great.
I'm not sure if any core libraries expose a repeater timer concept as that could also be a real world example. To refresh some data every minute or something.

Hey there, thanks for the PR! The guide on side effects has a few examples on how to write your own effects (including a repeating timer), and there's a custom effects example too. Just pointing these out in case you missed them.
My personal practice is to make sure examples are complete gleam modules to avoid confusion. Could you please rewrite the example so that any plinth/lustre modules are imported and the whole thing compiles on its own?

I've attempted to do that in some format. I can understand the motivation. I also recognise that this might become too unwieldy and would respect if you'd rather not include it. It is possible that a link to the examples from the effect.from docs would also help.

Awesome, thank you!


FAQ browser Back text change

Change state_faq_topics Back option text to Main Menu.

@imsickofmaps Please review.

:+1:


CurrentDate and CurrentTime commands not working.

Hi, the code I am executing to try and change the date are as follows:
var today = new Date().toISOString().split('T');
drone.Common.currentDate(today[0]);
drone.Common.currentTime('T' + today[1]);

I've inspected the packet that is sent to the drone and compared it with what is sent from the phone app (FreeFlight 3).
Date, phone -> drone
04 0b 01 16 00 00 00 00 04 01 00 32 30 31 36 2d 31 31 2d 31 33 00

Date, computer -> drone
02 0a 04 15 00 00 00 00 04 01 00 32 30 31 36 2d 31 31 2d 31 33

From bebop.py I can see that the first 2 bytes correspond to the data type and id. How come these are different? Shouldn't they be the same as FreeFlight uses the official SDK?

Hi, @ChrisWills123 there appear to have been a number of breaking changes to the Parrot API in that release. The XML definition file has even moved to a different repo https://github.com/Parrot-Developers/arsdk-xml
I will try to look into this when I get a chance to get my Bebop out and flash it to the latest firmware. In the meantime, any help to resolve would be greatly appreciated.

Hi @deadprogram
Yeah I've even tried downgrading the drone but not really had any luck there.
I'll take a deeper look into it tomorrow and see if I can resolve any of the issues (this one and the video stuff).
Cheers for the response.
Chris

Hi, @ChrisWills123
There are some changes here https://github.com/hybridgroup/node-bebop/tree/feature/firmware-4.0 that should correct your issues. Also check out the sample https://github.com/hybridgroup/node-bebop/blob/feature/firmware-4.0/examples/setdatetime.js strangely you must set both date and time for the drone to fire off the CurrentDateChanged and CurrentTimeChanged events.


nextcloud app install failed ?

sorry for no reply last issue , My PC goes down for serveral days...
I run this playbook tonight and there`s something error , looks like the nextcloud apps install failed
the first time is talk
talk
TASK [prep_talk : install talk app] ****************************************************************************************************************************
Wednesday 17 October 2018  23:14:57 +0800 (0:00:00.279)       0:13:21.548 *****
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "sudo -u www-data php occ app:install spreed", "delta": "0:00:10.228648", "end": "2018-10-17 23:15:08.011096", "msg": "non-zero return code", "rc": 1, "start": "2018-10-17 23:14:57.782448", "stderr": "", "stderr_lines": [], "stdout": "Error: Could not download app spreed", "stdout_lines": ["Error: Could not download app spreed"]}

so I disable install talk and run again
now the onlyoffice app failed
TASK [prep_onlyoffice : install onlyoffice app] ****************************************************************************************************************
Wednesday 17 October 2018  23:21:52 +0800 (0:00:00.282)       0:03:09.106 *****
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "sudo -u www-data php occ app:install onlyoffice", "delta": "0:00:10.232173", "end": "2018-10-17 23:22:03.109795", "msg": "non-zero return code", "rc": 1, "start": "2018-10-17 23:21:52.877622", "stderr": "", "stderr_lines": [], "stdout": "Error: Could not download app onlyoffice", "stdout_lines": ["Error: Could not download app onlyoffice"]}
...ignoring

TASK [prep_onlyoffice : enable onlyoffice app] *****************************************************************************************************************
Wednesday 17 October 2018  23:22:03 +0800 (0:00:10.499)       0:03:19.605 *****
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "sudo -u www-data php occ app:enable onlyoffice", "delta": "0:00:00.216763", "end": "2018-10-17 23:22:03.592899", "msg": "non-zero return code", "rc": 1, "start": "2018-10-17 23:22:03.376136", "stderr": "", "stderr_lines": [], "stdout": "onlyoffice not found", "stdout_lines": ["onlyoffice not found"]}

if I disable all apps , then the playbook works perfectly .
this is may not the error from the playbook , but can you please give any advice to solve that problem?

Difficult to say. The error message is: ""stdout_lines": ["Error: Could not download app onlyoffice"]}
...ignoring"
That could be a network error or the app server is down.
Are you able to install the apps via the Nextcloud gui?

well , I run the playbook couple hours later , then it`s ok , I guess the app server was down last night , thanks !


Move Platform Examples (3912)

Move rocLovesFoo.roc examples up one directory
Should resolve #3912.
I moved the following example files from the directory of the platform they use up one level to the examples/platform-switching directory.

rocLovesRust.roc
rocLovesSwift.roc
rocLovesZig.roc
rocLovesC.roc
rocLovesWebAssembly.roc

I've also updated references to these files in getting-started.
cli_run tests have been updated.
README for the WebAssembly platform has been updated as well. Please confirm that I didn't miss anything here.

Well, clearly I forgot to run all of the checks locally. Working on it now.

Hmm, looks like test_mono is failing. Seems to fail on main as well.
Let me know if there is anything I need to change to fix this.

The cli_run::all_examples_have_tests test is failing because the affected platform directories lost their tested apps. @Anton-4 @folkertdev do you think we can/should have exceptions to this "every dir needs tests" rule? Is there already an ignorelist that I'm not seeing?

Just realized that cargo test and cargo test --release produce different results. Both fail for different reasons. Is this expected?

No, that is not expected. What is the difference?

@ayazhafiz cargo test (without the release flag) fails on the test_mono tests, and generates some files that aren't ignored by git. It also executes two fewer tests in cli_run. One of the excluded tests is the failing cli_run::all_examples_have_tests.

that last part is expected so we can have some test files in development that don't have tests. on CI/in production we want to verify everything is tested (really to make sure all files  are up to date)
so, we should change the test here to make sure that all the platforms are exercised. That's really the only thing that counts

Hooray for surprises, @sandprickle :)
@folkertdev is there another test that works like that, to copy? I was planning to pair with @sandprickle on any complications, but I don't know off the top of my head how we'd make that testing change. Probably a lot of ways to implement that, though... some more brute force than others... but I want the test to catch new untested platforms without requiring excessive maintenance.
@sandprickle how Rust-y are you? Does anyone Rust-ier than myself want to jump in on this, too?

@JanCVanB I've taken Richard's Rust course on Frontend Masters, and that's about where my Rust knowledge ends.
Naturally, the issue that looked the easiest sent me directly to macro-land 😅.
Unsurprisingly, I'm very unsure of how to go about reworking the test.

@sandprickle I'm sitting down to give it try now 🤞🏻

When running cargo test --release, I hit #3811 but nothing else.

Okay, I see a few solutions here:

We can ignore this problem for now and revisit it later (and disable the failing test/subtest and add a TODO comment).
We can disable this "missing tests" check for the entire platform-switching directory.
We can duplicate the example apps between the platform dirs and platforms parent dir - effectively making this PR into a "copy" instead of a "move". This would satisfy the filesystem-based "no untested directories" check.
Maybe we can improve the "missing tests" check to be more intelligent (know that the platform is tested by an app in another directory), as I think @folkertdev suggested above, but I don't know how to do that.

With all of these options, we need to be aware of the "race condition" mentioned here:
                if example_dir_name == "platform-switching" {
                    for sub_dir in [
                        // We exclude the C platforming switching example
                        // because the main platform switching example runs the c platform.
                        // If we don't a race condition leads to test flakiness.
                        // "c-platform",
                        "rust-platform",
                        "swift-platform",
                        "web-assembly-platform",
                        "zig-platform",
                    ] {

@JanCVanB Thanks for taking a look! I feel pretty comfortable attempting 1-3, but 4 is probably not something I can do either. I will defer to others on which is the best choice.
4 does seem like the preferable option, at least on paper. The problem is that it would pull someone away from more valuable work, as this PR addresses a low-priority issue.
Does it make the most sense to set this aside this for now?

@sandprickle I think so, especially if you leave a TODO & Issue for revisiting it! The simplest solution in the the relevant section of test code is to treat platform-switching like benchmarks - effectively ignored, rather than special-cased for manual subdirectory checks.

@JanCVanB Ah, when I suggested setting "it" aside, I was referring to hitting pause on the entire PR. Should have made that more clear. Just wanted to convey that I don't want to push for merging this if it makes more sense to wait.
However, if you think making the platform-switching tests behave more like the benchmarks is the best option right now, then I'll give that a shot!

@sandprickle I appreciate that clarification, as I did misunderstand you. However, yes, please try benchmark-ifying the platform-switching directory in all_examples_have_tests's helper function - especially since the platform-switching dir is already handled with a semi-hacky temporary special case. This testing issue is an existing problem that this PR has resurfaced, and I expect there will be appetite among core contributors to solve it more-permanently.

(If you want help, I'm happy to comment how that benchmarks-ification could work, but I can't push to your fork branch)

Sounds good. Taking a stab at it now!

Ok, the test isn't failing anymore. Am I on the right track here?
I was torn between omitting the if example_dir_name == "platform-switching" {...} block entirely to keep things more tidy, and adding an exclusion on line 853 to make it explicit that we were skipping the platform-switching directory for now. I'm happy to change this if I didn't make the best choice here.
Also let me know whether the comments I added/changed look good. Happy to make changes there as well.

omitting the block and doing something similar to the benchmarks is fine. After some thought I'm actually not that worried about missing the "does the platform have a test " check here since it exists specifically to test that we support a particular language so it's obvious that there should be a cli test for it.

@folkertdev Just want to make sure I understand correctly.
Would you like me to (try to) create a new macro similar to examples! and benchmarks! and move the platform-switching tests there? Or Do you want me to keep my changes confined to the check_for_tests helper function and just get rid of the if block that checks subdirectories of platform-switching?

let's go with the latter for now (though feel free to also try the former)

Thank you, @sandprickle! I'm happy to pair with you on your next endeavor, too (hopefully with fewer deep surprises, haha)

Glad I was able to help!


Helios API - Address::fromUplcData

Unable to correctly convert an Address object back from Datum.
Test case on StackBlitz: https://stackblitz.com/edit/helios-address-issue?file=test/suite.test.ts

Unsure of full ramifications, however the below seems to work:
I have tested for both Addresses with a Stake Key and addresses without; I've not tested all connotations of StakeKey (i.e., a Script Stake Address)
    /**
     * @param {UplcData} data
     * @param {boolean} isTestnet
     * @returns {Address}
     */
    static fromUplcData(data, isTestnet = IS_TESTNET) {
        assert(data.index == 0);
        assert(data.fields.length == 2);

        const credData = data.fields[0];
        const stakData = data.fields[1];

        assert(credData.fields.length == 1);

        /**
         * @type {?(StakeKeyHash | StakingValidatorHash)}
         */
        let sh;

        if (stakData.fields.length == 0) {
            sh = null;
        } else {
            assert(stakData.fields.length == 1, "Stake Data not found");

            const inner = stakData.fields[0];
            assert(inner.fields.length == 1);

            if (inner.index == 0) {
                const innerInner = inner.fields[0];
                assert(innerInner.fields.length == 1);

                if (innerInner.index == 0) {
                    sh = new StakeKeyHash(innerInner.fields[0].bytes);
                } else if (innerInner.index == 1) {
                    sh = new StakingValidatorHash(innerInner.fields[0].bytes);
                } else {
                    throw new Error("unexpected");
                }
            } else if (inner.index == 1) {
                throw new Error("staking pointer not yet handled");
            } else {
                throw new Error("unexpected");
            }
        }

        if (credData.index == 0) {
            return Address.fromPubKeyHash(new PubKeyHash(credData.fields[0].bytes), sh, isTestnet);
        } else if (credData.index == 1) {
            return Address.fromValidatorHash(new ValidatorHash(credData.fields[0].bytes), sh, isTestnet);
        } else {
            throw new Error("unexpected");
        }
    }

v0.13.5 fixes this. I hope I didn't keep you waiting too long
The issue was that I forgot that Option::None is encoded using index 1 instead of 0 in PlutusTx.

This is great! I will throw away my patch that I was not 100% with!


Update oracle-source.md

Minor update: capital letter for title

@chugugrace : Thanks for your contribution! The author(s) have been notified to review your proposed change. @gracegu


Enrich webhook output file

closes #1517

Codecov Report

Merging #1519 (0f03015) into master (8f2bd72) will decrease coverage by 0.11%.
The diff coverage is 60.00%.

@@            Coverage Diff             @@
##           master    #1519      +/-   ##
==========================================
- Coverage   38.63%   38.51%   -0.12%
==========================================
  Files         167      167
  Lines       13590    13557      -33
==========================================
- Hits         5250     5221      -29
+ Misses       7579     7578       -1
+ Partials      761      758       -3

Impacted Files
Coverage Δ

actions/webhook.go
65.15% <60.00%> (-0.85%)
:arrow_down:

actions/service.go
56.52% <0.00%> (-3.70%)
:arrow_down:

pyramid/tier_fs.go
56.76% <0.00%> (-1.75%)
:arrow_down:

actions/hook_output_writer.go
100.00% <0.00%> (ø)

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 8f2bd72...5c856c2. Read the comment docs.


Noticed exception 'ErrorException' with file_get_contents

Issue description
The PHP file_get_contents throws one exception in case of failure and that should be documented in the docblock of the public submit method.
Example of error :
ErrorException: Noticed exception 'ErrorException' with message 'file_get_contents(https://www.google.com/recaptcha/api/siteverify): failed to open stream: HTTP request failed! ' in /app/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php:72
/**
 * Submit the POST request with the specified parameters.
 *
 * @param RequestParameters $params Request parameters
 * @return string Body of the reCAPTCHA response
 */
public function submit(RequestParameters $params)

should be
/**
 * Submit the POST request with the specified parameters.
 *
 * @param RequestParameters $params Request parameters
 * @return string Body of the reCAPTCHA response
 * @throws ErrorException in case of failure connecting to google
 */
public function submit(RequestParameters $params)

@vitorloureiro Thanks for reporting. It looks like ErrorException is a result of converting errors to exceptions rather than an issue in the library, see: https://www.php.net/manual/en/class.errorexception.php

But I think the exception should be present in the docblock, because it happens in case of connection failure.


Float APIs - Part1

This PR is for continuing the work at #615 (thanks @SD10 for previous works)
It implements:

[x] Float#abs Return positive number of the float. "Formally as the distance between 0 to the number of the float in 1-dimensional axis ..."

[x] Float#ceil Returns the smallest number greater than or equal to the receiver

[x] Float#floor Returns the largest number smaller than or equal to the receiver

[x] Float#round Rounds float to a given precision in decimal digits (default 0 digits). Precision may be negative. Returns a floating-point number when n digits are more than zero.

[x] Float#positive? Returns true if float number is larger than 0.0

[x] Float#negative? Returns true if float number is less than 0.0

[x] Float#zero? Returns true if float number is equal to 0.0

🎉 Stay safe and healthy my friends


Lost access to all calendar entries after latest update 2.0.17

We have reports in our organization that the calendar links have stopped working.
I've noticed that the GUIDs have change on some links.
When teams select calendar from the board menu all the data is missing from the calendars.

I have found that if you substitute a team name for the team id that works as a reasonable work around, though its been temperamental at times

Our company also uses DevOps On-premise, and the calendar does not work after being forced to update to version 2.0.17. The previous version is the version installed on May 9, 2020. There is definitely a problem, so please fix it.

Another DevOps On-premise users here, I see the same thing as the others.. I could conceivably grab the old version off a backup server, but even if that works i have the feeling it would just auto update to this version again.

Thanks for reporting, We are working on it, We will release an update as soon as possible.

All, we decided to revert the latest change to resolve the issue it caused for Azure DevOps 2018 and 2019. Can you check that the Calendar look ok for you again with the 2.0.22 version?

We are still seeing blank calendars. Was there any possibility of data loss?

@JJKW1984 what version of ADO are you on? Also can you verify that the extension has been updated to the latest version?

We are on ado sevices.It update this morning 7am estsent from my mobile deviceOn Mar 6, 2023, at 2:51 PM, Mathias Olausson @.***> wrote:
@JJKW1984 what version of ADO are you on? Also can you verify that the extension has been updated to the latest version?
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

@JJKW1984 can you share an update? Are you still having problems or have you been able to work around and move forward?

@MOlausson Things are back to normal and all data is present.


Fix some issues with the protect-hosts doc

Adjust some spacing
Fix broken links
Fix misplaced comma
use site.prodname

[ ] Tests
[ ] Documentation
[ ] Release note

None required

Deploy preview for calico ready!
Built with commit 4d642074a7ede443bc12e60564bcbcb3b6adbb88
https://deploy-preview-2747--calico.netlify.com

Deploy preview for calico ready!
Built with commit f6d1514f0f0550e949fc0a570f800f39b6e7d424
https://deploy-preview-2747--calico.netlify.com


New GPTs Submit: Physique Coach

💪 Physique Coach
Analyzing progress, setting goals, and giving feedback on your training plans.
Chat now
Submit by @foraxe

Share your GPTs and apply to be the GPT Of The Week  here : https://gptspedia.io ❤

Merged


Xd extra atomic fix

What type of PR is this?
refactor
What this PR does / why we need it (English/Chinese):
English:Delete additional atomic operations and replace it with a normal operation.
中文：删除额外的原子操作并用普通赋值操作替换。
Which issue(s) this PR fixes:
Refactor #349

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

参考一下其他人提交的 PR 格式 改一改～ 如标题 :rofl: @dongzeXD


Bad marc tests MODMS-56

Add 'strict' client switch and tests for bad leader

@adamdickmeiss This only covers the bad leader case, not the non-XML chars case. I tried putting 0x1F and 0x07 in various places in the marc but couldn't trigger the error, the datafield was just getting split. Ideas welcome.


Move attachments folder when the note file is moved

Currently if I move the note to another folder, I have to move attachments folder manually.
I was considering plugin https://github.com/dy-sh/obsidian-consistent-attachments-and-links it is extremely inefficient for big vaults

It was actually not too hard to implement. I prepared a pull request for that

I have considered your solution, but I'm not sure if 'file-open' handler is called before you switch your notes. If not, it may causes unexpected problems.

@RainCat1998 It seems to be working fine as per my testing

Hi
Is there a plan to include this solution to the next release ?

@pitibalrog temporarily until the author releases a new version you can use my forked version.
The easiest way is to install BRAT plugin first and from it use Add a beta plugin for testing using the following url https://github.com/mnaoumov/obsidian-custom-attachment-location