The app crashes when we resize it while it renders an image

Describe the bug
I am acquiering images with a camera very fast and I'm displaying them on the UI using an Observable.
During the aquisition i'm resizing the application and it crashes. I guess its because I am resizing the application while it renders the image.
Exception
System.NullReferenceException: Object reference not set to an instance of an object.
   at Avalonia.Media.Imaging.Bitmap.get_Size() in /_/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs:line 134
   at Avalonia.Controls.Image.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Image.cs:line 105
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding, Thickness borderThickness) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 39
   at Avalonia.Controls.Border.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Border.cs:line 187
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in /_/src/Avalonia.Controls/Grid.cs:line 230
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV) in /_/src/Avalonia.Controls/Grid.cs:line 1150
   at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged) in /_/src/Avalonia.Controls/Grid.cs:line 1005
   at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV) in /_/src/Avalonia.Controls/Grid.cs:line 968
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in /_/src/Avalonia.Controls/Grid.cs:line 489
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in /_/src/Avalonia.Controls/Grid.cs:line 230
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV) in /_/src/Avalonia.Controls/Grid.cs:line 1150
   at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged) in /_/src/Avalonia.Controls/Grid.cs:line 1005
   at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV) in /_/src/Avalonia.Controls/Grid.cs:line 968
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in /_/src/Avalonia.Controls/Grid.cs:line 489
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding, Thickness borderThickness) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 39
   at Avalonia.Controls.Presenters.ContentPresenter.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Presenters/ContentPresenter.cs:line 366
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46
   at Avalonia.Controls.Decorator.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Decorator.cs:line 54
   at Avalonia.Controls.Primitives.VisualLayerManager.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Primitives/VisualLayerManager.cs:line 133
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 625
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 625
   at Avalonia.Controls.Window.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Window.cs:line 937
   at Avalonia.Controls.WindowBase.MeasureCore(Size availableSize) in /_/src/Avalonia.Controls/WindowBase.cs:line 247
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364
   at Avalonia.Layout.LayoutManager.Measure(ILayoutable control) in /_/src/Avalonia.Layout/LayoutManager.cs:line 297
   at Avalonia.Layout.LayoutManager.ExecuteMeasurePass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 261
   at Avalonia.Layout.LayoutManager.InnerLayoutPass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 243
   at Avalonia.Layout.LayoutManager.ExecuteLayoutPass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 145
   at Avalonia.Controls.WindowBase.HandleResized(Size clientSize, PlatformResizeReason reason) in /_/src/Avalonia.Controls/WindowBase.cs:line 225
   at Avalonia.Controls.Window.HandleResized(Size clientSize, PlatformResizeReason reason) in /_/src/Avalonia.Controls/Window.cs:line 1018
   at Avalonia.Win32.WindowImpl.AppWndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in /_/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs:line 399
   at Avalonia.Win32.WindowImpl.WndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in /_/src/Windows/Avalonia.Win32/WindowImpl.WndProc.cs:line 30
   at Avalonia.Win32.Interop.UnmanagedMethods.DefWindowProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
   at Avalonia.Win32.WindowImpl.AppWndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in /_/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs:line 539
   at Avalonia.Win32.WindowImpl.WndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in /_/src/Windows/Avalonia.Win32/WindowImpl.WndProc.cs:line 30

To Reproduce
Steps to reproduce the behavior:
0 - Load an image and make sure you copy it at each call
1 - Create an observable of Avalonia.Media.Imaging.Bitmap, to simulate the camera, i'm using a Interval Observble ticking very fast (10 ms) and project the time to a copy of _mySkBitmap. The Observavle converts the SKBitmap to the WriteableBitmap
    private SKBitmap _mySkBitmap = SKBitmap.Decode(System.IO.File.ReadAllBytes("image_00028.bmp"));
    private SKBitmap MySkBitmap => _mySkBitmap.Copy();

    public IObservable<Bitmap?> DisplayInputImageObservable => Observable.Interval(TimeSpan.FromMilliseconds(10)).Select(_ => MySkBitmap)
        .ObserveOn(Scheduler.Default)
        .Select(img =>
        {
            // bitmap is a SkiaSharp.SKBitmap
            using var skImage = SKImage.FromBitmap(img);
            using var data = skImage.Encode(SKEncodedImageFormat.Jpeg, 100);
            using var stream = data.AsStream();
            var writeableBitmap = WriteableBitmap.Decode(stream);
            img.Dispose();

            if (_prevRef != writeableBitmap && _prevRef is not null)
            {
                _prevRef.Dispose();
            }

            _prevRef = writeableBitmap;

            return writeableBitmap;
        })
        .Catch<Bitmap?, Exception>(e => { return Observable.Empty<Bitmap>(); });

2 - Connect it to the View
<Image Source="{Binding DisplayInputImageObservable^}"
       Name="MyImage"
       Stretch="Fill" />

Expected behavior
The app should resize correcly without crashing when it renders an image
Screenshots

Desktop (please complete the following information):

OS: windows 11
Avalonia version 0.10.16

.ObserveOn(Scheduler.Default)

That's dangerous. UI changes should be done only on UI thread. .ObserveOn(RxApp.MainThreadScheduler) should be used at least before Catch call.
Probably that's a reason of your problem as well. As Image.Source is updated from another thread.

Thank you @maxkatz6
Unfortunately, I have the same issue with c# .ObserveOn(RxApp.MainThreadScheduler)  as well as without any ObserveOn

Why are you recreating the Bitmap every frame? Try to just allocate one Bitmap and override its content. Your camera feed should have fixed dimensions.

Hello @Gillibald and thank you for your help.
I have not found any way to allocate the pixels to an existing Avalonia.Media.Imaging.Bitmap or Avalonia.Media.Imaging.WriteableBitmap. The only way I found is to creating a new object from a stream. Am I missing something ?
best regards

var bitmap = new WriteableBitmap(new PixelSize(100, 100), new Vector(96, 96), Avalonia.Platform.PixelFormat.Rgba8888, Avalonia.Platform.AlphaFormat.Premul);

using(var buffer = bitmap.Lock())
{
    buffer.Address //Write here
}

Thank you @Gillibald, the Address pointer property is get only if i'm not wrong.

A memory address is just the start of a memory region. You have to write to that region. You know how many pixels you have and how mich space a pixel takes.

A memory address is just the start of a memory region. You have to write to that region. You know how many pixels you have and how much space a pixel takes.

Yes that's right! Who would you then trigger the framework to redraw as it is the same referenced object?
With this approach, you use an observable or a property with RaiseAndSetIfChanged ?

Just raising a change event for Source should work

Hello, following up on this topic, just raising the change event does not work. Nothing is happening, the image does not show on the app.
Here is what I have :
fields:
private WriteableBitmap _outputImage = new WriteableBitmap(new PixelSize(1920, 1200), new Vector(96, 96), Avalonia.Platform.PixelFormat.Rgba8888, Avalonia.Platform.AlphaFormat.Premul);
private WriteableBitmap _inputImage = new WriteableBitmap(new PixelSize(1920, 1200), new Vector(96, 96), Avalonia.Platform.PixelFormat.Rgba8888, Avalonia.Platform.AlphaFormat.Premul);

When I recive a new image I'm doing this.
using SKBitmap outputToCopy = img.Output;
using var bufferDestination = _outputImage.Lock();
Marshal.Copy(outputToCopy.Bytes, 0, bufferDestination.Address, outputToCopy.Width * outputToCopy.Height);
this.RaisePropertyChanged();

The property linked from the view to the view model:
public WriteableBitmap OutputImage => _outputImage;
public WriteableBitmap InputImage => _inputImage;

Your best bet is to provide a minimal sample. Then we can have a deeper look

Thank you,
There it is. Basically there is an interval observable of 10 ms that simulate a camera stream. The image is displayed on the main view. Try to resize the application and it crashes
best regards
https://github.com/broadside74/avalonia.issue.rezize_while_render_image

I wonder why you dispose your image over and over again and create a new one. I thought WriteableBitmap was there to just replace the Pixels?
You can also do new Bitmap(stream) if you don't need WriteableBitmap.
@avaloniaui-team :
I found that in https://github.com/AvaloniaUI/Avalonia/blob/8f788883315c66ad1b9af27a9103e6b2049cfa3c/src/Avalonia.Base/Media/Imaging/Bitmap.cs#L110 Item can be null and that is where it crashes on resize. I don't know if we can / should mark Item as nullable and make a null check where needed?

I wonder why you dispose your image over and over again and create a new one. I thought WriteableBitmap was there to just replace the Pixels?
It is related to this discussion https://github.com/AvaloniaUI/Avalonia/discussions/7669#discussioncomment-2221375
You can also do new Bitmap(stream) if you don't need WriteableBitmap.
@avaloniaui-team : I found that in
https://github.com/AvaloniaUI/Avalonia/blob/8f788883315c66ad1b9af27a9103e6b2049cfa3c/src/Avalonia.Base/Media/Imaging/Bitmap.cs#L110
Item can be null and that is where it crashes on resize. I don't know if we can / should mark Item as nullable and make a null check where needed?

I'd suggest to not recreate images but to use WritableBitmap instead.

That means: don't create the image over and over again. Just replace the pixels. You need to lock your Bitmap to do so I think. ATM I don't have a sample for you, but maybe you can find one online.

I think the issue is, that some times the Binding has not the new Bitmap picked up while it actually gets disposed. To work around this I've sent you a PR.

Hello @timunie Thank you a lot for your precious help, but for me It does not work (at leat on my ubuntu 22.04 laptop)
Have you tried to resize from the bottom right corner like here ? I still have the same issue, same error

Hello @timunie
First of all, big thank you for your help and your PR! it works in this case but I have some questions and remarks.

It works with avalonia 0.10.18 and not for 0.10.14. I did not really checked why
It is important to me to display every single images in my application even though in reality, the application won't display at that kind of speed (every 10ms). This sample is just to demonstrate the concept and show it can crashes (even if it is very rare)

With this workaround, what if the camera update the MySkBitmap object quicker than the tick of the timer ?
https://github.com/AvaloniaUI/Avalonia/blob/8f788883315c66ad1b9af27a9103e6b2049cfa3c/src/Avalonia.Base/Media/Imaging/Bitmap.cs#L110
@avaloniaui-team By design, the property PlatformImpl.Item is not marked as nullable but it can actually be.

I tested the following code and it works fine. I think we definitely need to check the image is not null before actually reaching the Size property. This must be the same with the Dpi property.

public Size Size
{
    get
    {
        if(PlatformImpl.Item == null)
            return Size.Empty;
        return PlatformImpl.Item.PixelSize.ToSizeWithDpi(Dpi);
    }
}

Best regards
Alex

I agree that my PR is just a workaround. Things to add:
If you need to render every frame, your Observable may fail as well. Instead you need to listen to your camera change event if it exists.
Moreover you may want to pre cache some frames.
Also try update to 11.0 preview 1 as this is faster in rendering.

Item can only be null if the PlatformImpl is disposed before it is being used by the renderer. This should not happen. So we need to investigate when it is being disposed too early.

Item can only be null if the PlatformImpl is disposed before it is being used by the renderer. This should not happen. So we need to investigate when it is being disposed too early.

Exactly ! It was because I had previously memory issues (see this thread https://github.com/AvaloniaUI/Avalonia/discussions/7669#discussioncomment-2221375). I decided to manualy dispose previous avalonia.imaging.Bitmap object which did the trick but when we resize the app, we need apparently need the reference.
I suggest closing this issue and find a better way to correctly dispose these Bitmap
Thank you all


Windows+VST3 shows garpled parameter names and values with special characters.

The "°" character in "180°" and similar expressions becomes garbled.
However, this might be my own issue and may not be relevant to others. I'm not sure where exactly the problem lies.
I know how to solve it in my environment, but I lack knowledge about character encoding related to differences in OS and compilers. There's probably an issue somewhere, and I'm not sure if this is the correct approach, but this resolved the character garbling for me.
I confirmed that the garbled characters were fixed on Windows 10 & (Ableton Live 12 | Bitwig Studio 5.2.3 | Cubase 13 | FL Studio 2024 | REAPER 7.22 | Studio One 6).
These are using the rewritten version → https://chatgpt.com/share/cb8268e7-cb34-48f4-9783-76e8b6e6d89a
Fixing garbled parameter names
https://github.com/free-audio/clap-wrapper/blob/48861ecf472fe2cbcd67478e3f5f0dabe9e5785c/src/detail/vst3/parameter.cpp#L95
Change this to:
{
  const char *utf8_text = fullname.c_str();
  uint32_t out_buffer_capacity = 128;
  uint32_t out_index = 0;
  for (uint32_t i = 0;out_index < out_buffer_capacity - 1 && utf8_text[i] != 0;) {
    uint32_t codepoint = 0;
    uint8_t byte = static_cast<uint8_t>(utf8_text[i]);

    if ((byte & 0b10000000) == 0b00000000) {
      codepoint = byte;
      i += 1;
    } else if ((byte & 0b11100000) == 0b11000000) {
      codepoint = byte & 0b00011111;
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(utf8_text[i + 1]) & 0b00111111);
      i += 2;
    } else if ((byte & 0b11110000) == 0b11100000) {
      codepoint = byte & 0b00001111;
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(utf8_text[i + 1]) & 0b00111111);
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(utf8_text[i + 2]) & 0b00111111);
      i += 3;
    } else if ((byte & 0b11111000) == 0b11110000) {
      codepoint = byte & 0b00000111;
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(utf8_text[i + 1]) & 0b00111111);
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(utf8_text[i + 2]) & 0b00111111);
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(utf8_text[i + 3]) & 0b00111111);
      i += 4;
    }

    v.title[out_index] = codepoint;
    out_index++;
  }
  v.title[out_index] = 0;
}

Fixing garbled parameter values
https://github.com/free-audio/clap-wrapper/blob/48861ecf472fe2cbcd67478e3f5f0dabe9e5785c/src/wrapasvst3.cpp#L322-L324
Change this to:
{
  uint32_t out_buffer_capacity = 128;
  uint32_t out_index = 0;
  for (uint32_t i = 0;out_index < out_buffer_capacity - 1 && outbuf[i] != 0;) {
    uint32_t codepoint = 0;
    uint8_t byte = static_cast<uint8_t>(outbuf[i]);

    if ((byte & 0b10000000) == 0b00000000) {
      codepoint = byte;
      i += 1;
    } else if ((byte & 0b11100000) == 0b11000000) {
      codepoint = byte & 0b00011111;
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(outbuf[i + 1]) & 0b00111111);
      i += 2;
    } else if ((byte & 0b11110000) == 0b11100000) {
      codepoint = byte & 0b00001111;
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(outbuf[i + 1]) & 0b00111111);
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(outbuf[i + 2]) & 0b00111111);
      i += 3;
    } else if ((byte & 0b11111000) == 0b11110000) {
      codepoint = byte & 0b00000111;
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(outbuf[i + 1]) & 0b00111111);
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(outbuf[i + 2]) & 0b00111111);
      codepoint = (codepoint << 6) | (static_cast<uint8_t>(outbuf[i + 3]) & 0b00111111);
      i += 4;
    }

    string[out_index] = codepoint;
    out_index++;
  }
  string[out_index] = 0;
}

For verification, I used a modified CLAP based on clap-c99-distortion.
https://github.com/baconpaul/clap-c99-distortion/blob/c0f7decafb651b521c75b6e25d7dbb6fa2470cd6/src/clap-c99-distortion.c#L128
        strncpy(param_info->name, "0°", CLAP_NAME_SIZE);

https://github.com/baconpaul/clap-c99-distortion/blob/c0f7decafb651b521c75b6e25d7dbb6fa2470cd6/src/clap-c99-distortion.c#L181-L189
        case 0:
            snprintf(display, size, "90°");
            break;
        case 1:
            snprintf(display, size, "180°");
            break;
        case 2:
            snprintf(display, size, "270°");
            break;

Hi, thanks for bringing up this issue. But this "fix" is at the wrong place. Actually, the wrapper relies on the VST3SDK function str8tostr16 which is actually incorrect. We have to come up with a proper utf8tostr16 that converts utf8 to widechar.
We also have to come up with a solution what to do about characters that can not be encoded in widechar.

Thank you for your reply!
As I expected, character encoding issues seem complex and difficult...
As a temporary measure, would it be okay for me to personally use the current code, limiting it to Windows and VST3?
For example, is it possible that the code only works by chance in my environment, and could potentially lead to severe character corruption for other users, making things worse?
Is it safer to use str8str16 because the only garbled character I'm actually concerned about is the single character “°” and I'm not that concerned about it?
Here are the test results from my environment:
Characters:
AÁÄÑあ汉가БيकΔ§±≠Æ™❹◒⣔⦸⌬⛄

CLAP:

VST3:

応急処置したVST3:

Why ucs2 timo? I thought vst3 was all utf-16 which seems to be what the function spliced in does.

But yeah I agree @defiantnerd it looks like the vst3 built doesnt do the right stuff. This probably also breaks on Mac and lin wheee st3 has to present utf16 no matter what
is the modified version of c99dist around somewhere for us to try @lewloiwc
we might be able to do same with std::codecvt btw.

You're right, @baconpaul - it is UTF16. I was under the impression they limit it to UCS2 because all their code does that (or even less).
I am not sure if every host implements this correct and I would suggest not to name a parameter "⛄".
Code conversion is a drama in C++ for it's own. 😜
I will add conversion functions for utf8/utf16.

@baconpaul
I have uploaded CLAP and VST3 to https://drive.google.com/drive/folders/1xpBE4lTPBW1y45sajz_3CQhlCaQiJUFN?usp=sharing
In the msvc folder, the third parameter name is "0°" and the items are "0°,90°,180°,270°".
In the gcc folder, in addition to the changes in the msvc version, the second parameter name is "AÁÄÑあ汉가БيकΔ§±≠Æ™❹◒⣔⦸⌬⛄".
The reason there are two versions is that the "⛄" version caused a C4819 error and couldn't be compiled, so I used gcc to compile it.
By the way, std::codecvt has been deprecated in C++17 and will be removed in C++26, so it's better not to use it. This page states: "There is no alternative Unicode character encoding conversion functionality in the standard library, so use other specialized character encoding conversion libraries." https://cpprefjp.github.io/reference/codecvt.html
@defiantnerd
I used emojis for testing because I knew their character encoding was special, but as you said, it seems better not to use them as they probably can't be displayed on most hosts.
Incidentally, REAPER was able to display it. 💀

Thanks. I was really hoping for the modified source, though. Do you have that? If not I can just add some unicode to the c99 list myself though now I think of it. Or actually to shortcircuit!

OK so the same happens on mac.
This is all assuming #289  is applied (@defiantnerd - I really think we should merge that even though it is only a partial fix).
Shortcircuit is a JUCE 8 app which lets you rename macros. That means I can name macros with full unicode text, including emojis. Those macro names show up as CLAP/VST3 param names.

Here/s the clap. The emoji comes through as a single un-renderable code point and the degree sign works.

Here's the wrapped VST (with #289 applied). The emoji comes through as a sequence of un-renderable characters and the degree sign is mangled.
My conclusion is

Steinberg didn't give us a correct 16 to 8 charset converter
the code point converter above looks right to me (in fact I used almost identical code for a UTF32-to-UTF8 thing in SFML I was doing just this week) and
We should replace al our U.assigne with that converter and test in bitwig

I think that will fix the problem.

Oh and in REAPER with the CLAP we actually get this. Which means REAPER + ShortCircuit should be a pretty good test for the VST3 wrapper too

I'd like to put that into proper util functions, add the caveats for the illegal codes and overflow, then we can add this to all other places we transforming u8 to u16.
The code, while thinking it is sufficient for now, is also using the ISO definition of UTF16, but that's probably okay.

Yeah of course we don’t want to inline that code everywhere. Excellent!
I’ll try the AU with scxt too

Released in 0.11


New app layout with footer

New design app layout with left-right split for chart-map, and footer only on left side.

Logos for footer (use svgs): https://drive.google.com/drive/folders/1nQ81oZsYM3_Hw0Pf4B4_Aycz7AJNUVeR

@dctanner  @peterdudfield  will we be removing the old footer? (it contains some more details)

and the old navbar maybe needs a design update and should be visible all the time?

Maybe we should remove the old footer, and add the profile dropdown to the new footer?

See https://github.com/openclimatefix/nowcasting/issues/26 for more details on line plots and labels

@JackKelly thanks for the update!

@peterdudfield here is the current header+footer design. We need to remove the header or footer. Assuming we remove the header, do you have any views on where the round account icon should go?


arp output parsing for SunOS/illumos is wrong resulting in only lo0 being used

Analysis
Took me a bit to track down but I noticed ciao wasn't working on illumos, but there was some SunOS handling and given illumos forked from SunOS a few years ago generally we're still rather compatible.
I spend a few hours hunting it down and it fumbles here:
https://github.com/homebridge/ciao/blob/3ce9b350117206ee80234d6dbed9bc54003deff1/src/NetworkManager.ts#L761
The offset for illumos (and I verified via a friend who has access to an Oracle Solaris 11 box) is wrong, it should be 0.
If I monkey patch the offset from 2 -> 0 in the node_modules generate .js file it works as expected.
Expected Behavior
CIAO should find and use the correct interface(s) instead of just lo0.
Steps To Reproduce
In my case I am using node-red-contrib-homekit-bridged with the advertiser set to CIAO, adding any Service and hitting deploy will trigger it.
Logs
Snippet from the node-red output with DEBUG=ciao:*, you can see it only ever selecting lo0 which is pretty useless.
  ciao:NetworkManager Created NetworkManager with options: {"excludeIpv6Only":true} +4m
  ciao:Responder [amethyst A181._hap._tcp.local.] Going to advertise service... +4m
  ciao:NetworkManager Initial networks [lo0] ignoring [amethyst0] +92ms
  ciao:CiaoService [amethyst A181] Rebuilding service records... +4m
  ciao:Prober Starting to probe for 'amethyst A181._hap._tcp.local.'... +4m
  ciao:Prober Sending prober query number 1 for 'amethyst A181._hap._tcp.local.'... +172ms
  ciao:Prober Sending prober query number 2 for 'amethyst A181._hap._tcp.local.'... +255ms
  ciao:Prober Sending prober query number 3 for 'amethyst A181._hap._tcp.local.'... +252ms
  ciao:Prober Probing for 'amethyst A181._hap._tcp.local.' finished successfully +253ms
  ciao:Announcer [amethyst A181._hap._tcp.local.] Sending announcement for service +4m
  ciao:CiaoService [amethyst A181] Rebuilding service records... +934ms
  ciao:Announcer [amethyst A181._hap._tcp.local.] Sending announcement number 1 +2ms
  ciao:Announcer [amethyst A181._hap._tcp.local.] Sending announcement number 2 +1s
  ciao:Announcer [amethyst A181._hap._tcp.local.] Sending announcement number 3 +2s
  ciao:CiaoService [amethyst A181] Updating txt record... +19s
  ciao:CiaoService [amethyst A181] Rebuilding service records... +1ms
  ciao:Responder [amethyst A181._hap._tcp.local.] Updating 2 record(s) for given service! +20s

Configuration
n/a

Environment

OS: OmniOS r151040 (illumos)
Software: node-red + node-red-contrib-homekit-bridged
Node: v16.14.0
npm: 8.3.1

Process Supervisor
not applicable
Additional Context
arp -a -n output from an illumos based distro:
root@amethyst:~# arp -a -n
Net to Media Table: IPv4
Device   IP Address               Mask      Flags      Phys Addr
------ -------------------- --------------- -------- ---------------
amethyst0 <IP_ADDRESS>           <IP_ADDRESS>          00:25:90:f1:55:06
amethyst0 <IP_ADDRESS>           <IP_ADDRESS>          00:00:5e:00:01:0a

Output from on an Oracle Solaris system:
af@solaris:~$ arp -an
Net to Media Table: IPv4
Device   IP Address               Mask      Flags      Phys Addr
------ -------------------- --------------- -------- ---------------
net0   <IP_ADDRESS>        <IP_ADDRESS>          02:08:20:1d:02:93
net0   <IP_ADDRESS>        <IP_ADDRESS> SPLA     02:08:20:4b:63:b7

Output for as far as I could tell has not deviated between Oracle Solaris and illumos (both return a uname of SunOS) so that's good knows as fixing one will also fix the other.
I was able to verify this my monkey-patching the offset from 2 to 0 and everything is working (include control of all my devices via home.app)
The debug output now also states that the correct amethyst0 interface is used.
  ciao:NetworkManager Created NetworkManager with options: {"excludeIpv6Only":true} +0ms
  ciao:Responder [amethyst A181._hap._tcp.local.] Going to advertise service... +0ms
  ciao:NetworkManager Initial networks [lo0, amethyst0] ignoring [] +1s
  ciao:CiaoService [amethyst A181] Rebuilding service records... +0ms
  ciao:Prober Starting to probe for 'amethyst A181._hap._tcp.local.'... +0ms
  ciao:Prober Sending prober query number 1 for 'amethyst A181._hap._tcp.local.'... +209ms
  ciao:Prober Sending prober query number 2 for 'amethyst A181._hap._tcp.local.'... +1s
  ciao:Prober Sending prober query number 3 for 'amethyst A181._hap._tcp.local.'... +596ms
  ciao:Prober Probing for 'amethyst A181._hap._tcp.local.' finished successfully +438ms
  ciao:Announcer [amethyst A181._hap._tcp.local.] Sending announcement for service +0ms
  ciao:CiaoService [amethyst A181] Rebuilding service records... +2s
  ciao:Announcer [amethyst A181._hap._tcp.local.] Sending announcement number 1 +26ms
  ciao:CiaoService [amethyst A181] Updating txt record... +712ms
  ciao:CiaoService [amethyst A181] Rebuilding service records... +3ms

I guess a properly fix this getOpenBSD_SUNOS_NetworkInterfaces() would need to be split into a OpenBSd and SunOS variant, or the offset should somehow be toggled between 2 and 0 depending on which one we are. But my typescript knowledge was not sufficient to actually do this and get it to compile :(

diff --git a/src/NetworkManager.ts b/src/NetworkManager.ts
index abe9812..a7083c3 100644
--- a/src/NetworkManager.ts
+++ b/src/NetworkManager.ts
@@ -754,11 +754,12 @@ export class NetworkManager extends EventEmitter {
           return;
         }

+        const interfaceArrayOffset = os.platform() === "sunos" ? 0 : 2;
         const lines = stdout.split(os.EOL);
         const names: InterfaceName[] = [];

         for (let i = 1; i < lines.length - 1; i++) {
-          const interfaceName = lines[i].trim().split(NetworkManager.SPACE_PATTERN)[2];
+          const interfaceName = lines[i].trim().split(NetworkManager.SPACE_PATTERN)[interfaceArrayOffset];
           if (!interfaceName) {
             debug(`${os.platform()}: Failed to read interface name from line ${i}: '${lines[i]}'`);
             continue;

I think this should do the trick, but I can't get tests or tsc to work at all

This is still an issue, a PR has also been opened

PR got merge into  beta-1.1.5  branch, closing the issue.


Bump gbx to v<IP_ADDRESS>

I have followed the guide to make changes to this repository and I have upgraded GoByte from <IP_ADDRESS> to <IP_ADDRESS>. This was a mandatory update. This is my first ever git pull request, I never made it past SVN and a personal repo where I didn' collaborate with anyone.
I have tested trading between SYS and GBX. I have tested disconnecting wallets and witnessed a rollback.
Trade IDs:
378be4dce6fb988a0fca1645a911be9f85da492297283dd0068edc947a38b802
f4ebfc9044dd8c13d890e474d962d686e5d36a6214c297eabf23c3b3b3e18f5f
19c31a19a99951f79246ff07160cfb3e6a5d75f0e92cd569d1d1a2a70d06dd41
ee5e3c2848974cbf132c00cc96f6564094a3bd780e9590e75e9998db314a1a93 -> cancelled
56a525d0dd398e2259deecf88fc426ec85819f365c829226406d92e07442e010
68b3fc3391d11bff073f504c59d84d040853bacec9df3564f02f07dfa797201a -> rollback failed
d5f524c9bb66d3c8227c6485d129f4b676989a440f8f63be80f249ce5ad557a7 - rolled back
The "rollback failed" is weird, as the funds were redeemed as I confirmed by verifying he wallet balances of both GBX and SYS wallets after taking down a wallet during a trade. It initially did have the rolled back state

Looks good to me. I've built an image locally and used it for a test trade. I'll open PRs for the dockerimages change to build with the correct datadir name and an exrproxy-env update later today.
LGTM


wordy: Match bonus in description with canonical data

The bonus mentioned for the description in wordy (i.e. 5th power) is not in the canonical data. There is cubed in the canonical data which is vaguely similar, however the case having an expected false means an error or failure is to be raised according to the canonical data description.
Any preference for which it should be?

The current state of affairs doesn't seem incorrect, but it may cause two unrelated things to seem related.
The https://github.com/exercism/x-common/blob/master/exercises/wordy/description.md would say that a track might add a test such as "What is B raised to the Eth power?" and expect an answer. Even if a track were to do so, #511 and #512 told us that such a test, being a bonus, would not be included in the canonical data.
Then there is the matter of the test that is in the https://github.com/exercism/x-common/blob/master/exercises/wordy/canonical-data.json. Since the sentence "What is 52 cubed?" does not match the pattern "What is B raised to the Eth power?" nor any other known operation, it is expected to error, no matter whether a track provides a test for powers.

Since they are two different things, it seems OK to close.
If I were to make a possible suggestion, it is that "What is 52 cubed?" could be changed to a different question, such as "What is the square root of 9?" or something. Less confusion with powers, unless someone is considering the fractional powers.


Setting fill colors for a line animation

Feature Proposal
The filling of a graph should render during an animation, not pop in when it is finished.
Feature Use Case
Animating a graph that makes use of filling.
Discussed in https://github.com/chartjs/Chart.js/discussions/9272

Originally posted by SimonDamberg June 16, 2021
I have implemented the Progressive Line animation example to my line chart with filling. However, during animation the filling is not visible and after it is completed it just pops in. Is there a way to include the filling during animation?

I think there is an omission in there and setting animation.x.from to NaN will result in all target segments having their end points x set to NaN. Therefore, during animation function segments in function _fill is an empty array.
Try defining a similar function to previousY from the docs' samples to use as animation.x.from instead of setting it to NaN.
You will get fill during the animation.
During animation:

After animation:


Connectivity to Oracle database

Hello is it posible to connect to a oracle database during a test?
How can I achieve this?

See the JdbcQuery and JdbcUpdate keywords.


Format checkboxes

GitHub task lists are represented in HTML as unordered lists with checkboxes.  These checkboxes are currently ignored when converting the HTML to text.  This affects PRs with task lists (e.g. https://github.com/git/git/pull/1359); the resulting text list has no indication anymore whether an item was checked (done) or not.
E.g. this:

[x] done item
[ ] item still to do

Is turned into:
 * done item
* item still to do
Format checkboxes by turning checked ones into "[x]" and unchecked ones into "[ ]" to retain that information during the conversion. This turns the text result for the example above into:
 * [x] done item
 * [ ] item still to do
Unfortunately the simple formatter callback requires two ESLint annotations to avoid a warning and an error because it doesn't use all of its parameters and needs to access elem.attribs, which is untyped for some reason.  Hopefully there's a better way, but that's the best I  can do for now.

@rscharfe I force-pushed your branch, please review.
Range-diff

1:  e5b1da3 ! 1:  df287d1 Format checkboxes
@@
  ## Metadata ##
-Author: rscharfe<EMAIL_ADDRESS>+Author: René Scharfe<EMAIL_ADDRESS>
  ## Commit message ##
     Format checkboxes
@@ Commit message
     for some reason.  Hopefully there's a better way, but that's the best I
     can do for now.

+    Test-added-by: Johannes Schindelin<EMAIL_ADDRESS>+    Signed-off-by: René Scharfe<EMAIL_ADDRESS>+    Signed-off-by: Johannes Schindelin<EMAIL_ADDRESS>+
  ## lib/markdown-renderer.ts ##
 @@ lib/markdown-renderer.ts: export function md2text(markdown: string, columns = 76): string {
                          .replace(/(^|\n)(\n)(?!$)/g, "$1>$2"); // quote empty
                      }});
              },
-+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
-+            checkBoxFormatter: (elem, _walk, builder, _options) => {
-+                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
-+                builder.addInline(elem.attribs.checked === undefined ? "[ ]" : "[x]");
++            checkBoxFormatter: (elem, _walk, builder) => {
++                const attribs = elem.attribs as { checked?: boolean };
++                builder.addInline(attribs.checked === undefined ? "[ ]" : "[x]");
 +            },
          },
          selectors: [
@@ lib/markdown-renderer.ts: export function md2text(markdown: string, columns = 76
          ],
      };

+
+ ## tests/markdown-renderer.test.ts ##
+@@ tests/markdown-renderer.test.ts: const bq7 = `Over 56 levels still has 20 char (exact):
+ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3 5 7 9 1 3 5 7 9 1
+ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3 5 7`);
+ });
++
++test("task lists are rendered correctly", () => {
++    const taskList = `This is a task list:
++* [x] done item
++* [ ] item still to do`;
++    expect(md2text(taskList)).toEqual(`This is a task list:
++
++ * [x] done item
++ * [ ] item still to do`);
++});
+ \ No newline at end of file


Transitions seem not to be detected properly

Describe the bug
I have the following code:
        match self.type:
            case 'FREE_ANSWER':  # L.60
                if not isinstance(answer, str):
                    raise ValueError('Answer needs to be a string, if defined, for free answer questions')
            case 'SINGLE_CHOICE' | 'MULTIPLE_CHOICE':  # L.63
                if not isinstance(answer, list):
                    raise ValueError
                num_options = len(self.options)
                if any(x >= num_options for x in answer):
                    raise ValueError("Answer must be an integer up to the number of options-1 ")
        return answer  # L.69

I have tests that go through all the lines of this block, I have verified that by hand, but still I get from coverage that transitions 61->69, 63->69, and 67->69 are missing. Something weird I see is that when I go through the code with the debugger it steps through lines 60, 61, 62 and 69 for a test (happens with a number of them). Given that 62 is a raise, 69 should never be executed.
Is this something I am doing wrong? Should I report this to the python core team?
To Reproduce
How can we reproduce the problem?  Please be specific. Don't link to a failing CI job. Answer the questions below:

What version of Python are you using? 3.10.9
What version of coverage.py shows the problem?
-- sys -------------------------------------------------------
coverage_version: 7.0.1
coverage_module: ~/venv/lib/python3.10/site-packages/coverage/init.py
tracer: -none-
CTracer: available
plugins.file_tracers: -none-
plugins.configurers: -none-
plugins.context_switchers: -none-
configs_attempted: .coveragerc
configs_read: ~/.coveragerc
config_file: ~/.coveragerc
config_contents: b"[run]\nbranch = true\nparallel = true\nconcurrency = multiprocessing\nsigterm = true\nomit =\n    backend/tests/*\n    backend/blueprints/test.py\n    backend/blueprints/checkout.py\n\n[report]\nfail_under = 90\nshow_missing = True\n\n# Regexes for lines to exclude from consideration\nexclude_lines =\n    # Have to re-enable the standard pragma\n    pragma: no cover\n\n    # Don't complain about missing debug-only code:\n    def repr\n    if self\.debug\n\n    # Don't complain if non-runnable code isn't run:\n    if 0:\n    if name == .main.:\n\n    # Don't complain about abstract methods, they aren't run:\n    @(abc\.)?abstractmethod\n"
data_file: -none-
python: 3.10.8 (main, Nov  1 2022, 14:18:21) [GCC 12.2.0]
platform: Linux-6.0.12-arch1-1-x86_64-with-glibc2.36
implementation: CPython
executable: ~/venv/bin/python
def_encoding: utf-8
fs_encoding: utf-8
pid: 154712
cwd: ~
path: ~/venv/bin
/usr/lib/python310.zip
/usr/lib/python3.10
/usr/lib/python3.10/lib-dynload
~/venv/lib/python3.10/site-packages
environment: HOME = ~
command_line: ~/venv/bin/coverage debug sys
sqlite3_version: 2.6.0
sqlite3_sqlite_version: 3.40.0
sqlite3_temp_store: 0
sqlite3_compile_options: ATOMIC_INTRINSICS=1, COMPILER=gcc-12.2.0, DEFAULT_AUTOVACUUM,
DEFAULT_CACHE_SIZE=-2000, DEFAULT_FILE_FORMAT=4,
DEFAULT_JOURNAL_SIZE_LIMIT=-1, DEFAULT_MMAP_SIZE=0, DEFAULT_PAGE_SIZE=4096,
DEFAULT_PCACHE_INITSZ=20, DEFAULT_RECURSIVE_TRIGGERS,
DEFAULT_SECTOR_SIZE=4096, DEFAULT_SYNCHRONOUS=2,
DEFAULT_WAL_AUTOCHECKPOINT=1000, DEFAULT_WAL_SYNCHRONOUS=2,
DEFAULT_WORKER_THREADS=0, ENABLE_COLUMN_METADATA, ENABLE_DBSTAT_VTAB,
ENABLE_FTS3, ENABLE_FTS3_PARENTHESIS, ENABLE_FTS3_TOKENIZER, ENABLE_FTS4,
ENABLE_FTS5, ENABLE_MATH_FUNCTIONS, ENABLE_RTREE, ENABLE_STMTVTAB,
ENABLE_UNLOCK_NOTIFY, HAVE_ISNAN, MALLOC_SOFT_LIMIT=1024, MAX_ATTACHED=10,
MAX_COLUMN=2000, MAX_COMPOUND_SELECT=500, MAX_DEFAULT_PAGE_SIZE=8192,
MAX_EXPR_DEPTH=10000, MAX_FUNCTION_ARG=127, MAX_LENGTH=1000000000,
MAX_LIKE_PATTERN_LENGTH=50000, MAX_MMAP_SIZE=0x7fff0000,
MAX_PAGE_COUNT=1073741823, MAX_PAGE_SIZE=65536, MAX_SQL_LENGTH=1000000000,
MAX_TRIGGER_DEPTH=1000, MAX_VARIABLE_NUMBER=250000, MAX_VDBE_OP=250000000,
MAX_WORKER_THREADS=8, MUTEX_PTHREADS, SECURE_DELETE, SYSTEM_MALLOC,
TEMP_STORE=1, THREADSAFE=1
What versions of what packages do you have installed?
attrs==22.2.0
certifi==2022.12.7
charset-normalizer==2.1.1
click==8.1.3
exceptiongroup==1.1.0
Flask==2.2.2
Flask-Cors==3.0.10
Flask-Login==0.6.2
Flask-SQLAlchemy==3.0.2
Flask-WTF==1.0.1
greenlet==2.0.1
gunicorn==20.1.0
idna==3.4
iniconfig==1.1.1
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.1
numpy==1.24.1
packaging==22.0
pluggy==1.0.0
psycopg2==2.9.5
pydot==1.4.2
pyparsing==3.0.9
pytest==7.2.0
pytest-flask==1.2.0
python-dotenv==0.21.0
PyYAML==6.0
requests==2.28.1
six==1.16.0
SQLAlchemy==1.4.45
SQLAlchemy-Utils==0.39.0
stripe==5.0.0
tomli==2.0.1
urllib3==1.26.13
Werkzeug==2.2.2
WTForms==3.0.1

Expected behavior
The missing transitions are successfully reported as covered.

This looks like an interesting issue.  Can you create a self-contained example that I can run?

Feel free to re-open this if you get more information.


Getting "Error: r is not a constructor" in Windows VSCode > Output > Prettier Eslint

Describe the bug
I'm trying to get the Prettier Eslint plugin to run in Windows VScode, but I only see "Error: r is not a constructor" in VSCode > Output > Prettier Eslint
To Reproduce

Open a .tsx file with intentionally ugly formatting and see no errors
Open the Prettier Eslint extension output window by opening View > Output and selecting "Prettier Eslint" from the dropdown in the right
Hit ctrl+alt+F (or force Formatting with Prettier Eslint) to force the file to be parsed
See "Error: r is not a constructor"

Expected behavior
I'd expect to see error messages for the incorrect, ugly formatting.
Example Project
https://github.com/wadewadewadewadewadewade/ineffectua.com
(Here's the ugly file I'm using for testing: https://github.com/wadewadewadewadewadewade/ineffectua.com/blob/main/src/common/components/posts/post/Post.tsx)
Screenshots

Versions (please complete the following information):

Visual Studio Code: <IP_ADDRESS>
Node: 14.18.0
Package Manager: npm 6.14.15
prettier-eslint: 13.0.0
prettier: 2.4.1
eslint: 8.0.0

System Specifications (please complete the following information):

OS: Windows 11
Processor: Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
RAM Size: 32.0 GB

Additional context
I seem to have the same problem with this project in WSL 2, if that's useful information.

I have the same error.
I also found some information in Developer Tools:

@UnstoppableMango @MarkSky I believe this is an error with Prettier ESLint. It may not support Node 16 or there is a bug in the latest version. Could you downgrade to the supported versions listed in the README. I should put that Node 14 is supported. I want to upgrade the ESLint & Prettier. I'm probably going to create a beta VSX for people to download.

@wadewadewadewadewadewade
It was a configuration issue. You do not need to specify the ES version in the env section if you are using TypeScript. I got it to work by making changes to these files.
.eslintrc.json
{
    "env": {
        "browser": true,
        "node": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:react/recommended",
        "plugin:@typescript-eslint/recommended"
    ],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaFeatures": {
            "jsx": true
        },
        "ecmaVersion": "latest",
        "sourceType": "module"
    },
    "plugins": [
        "react",
        "@typescript-eslint"
    ],
    "rules": {
    },
    "settings": {
        "react": {
            "version": "detect"
        }
    }
}

package.json
"devDependencies": {
    "@types/draftjs-to-html": "^0.8.1",
    "@types/jsonwebtoken": "^8.5.5",
    "@types/multiparty": "0.0.33",
    "@types/react": "^17.0.27",
    "@types/react-draft-wysiwyg": "^1.13.3",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.0",
    "eslint-plugin-react": "^7.26.1",
    "husky": "^7.0.2",
    "prettier": "^2.4.1",
    "prettier-eslint": "^13.0.0",
    "pretty-quick": "^3.1.1",
    "typescript": "^4.4.3"
  }

@idahogurl Awesome, that basically got me 99% of the way there - thank you!
one additional thing I had to do was change "ecmaVersion": "latest" to "ecmaVersion": 12 because of this similar error I then got (once eslint was parsing everything correctly): https://github.com/eslint/eslint-scope/issues/55
Also, I installed eslint 7.28.0 because some of the dependencies of the typescript parser asked for that.
Thank you for solving my prettier-problems, and for writing the extension in the first place!

I've got the same issue, but downgrading isn't help, it is reproducible on clean project with those files:
package.json:
{
  "name": "vscode-lint",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "6.8.0",
    "prettier": "1.9.1",
    "prettier-eslint": "10.1.0"
  }
}

.eslintrc.js
module.exports = {
    "env": {
        "browser": true,
        "es2017": true
    },
    "extends": [
        "eslint:recommended"
    ],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaVersion": 13,
        "sourceType": "module"
    },
    "plugins": [
        "@typescript-eslint"
    ],
    "rules": {
    }
};

index.ts
let a = 1;
let b = 2
a = b + 23

And when I'm trying to launch Format Document With » Prettier ESLint - I see the error in output:
Error: r is not a constructor

Can you recommend any fixes for this?

Upgrading to beta version https://github.com/idahogurl/vs-code-prettier-eslint#beta-download resolves the issue for me!

I had to downgrade to eslint@7 and then this error went away.

Downgraded to<EMAIL_ADDRESS>resolved the issue for me too. It's weird tho as prettier-eslint requires officially<EMAIL_ADDRESS>


Support for Ubuntu 24.04

Can you add support for Ubuntu 24.04 LTS?

@StormTrooper hello, yes it should come before end of month!

Support has landed. Do you want to beta-test it on packager.io? If so you can give me your repo name.

Excellent.
https://packager.io/gh/StormTrooper/InvenTree

@StormTrooper ok, you can now use ubuntu-24.04 in your .pkgr.yml file!


Types don't properly update on list comprehensions

Limited support in f7a1234a86495d71cece2aa0f504899a4f7091f3. Need to do disconnects separately.


mock pa2 codecrunch error

does anyone know what this error means? codecrunch won't run my codes because of this error :(

You can't use any properties, even if they are declared private final.

You can NOT have any of these:
public class X {
    private final X aProperty; //NO!
    private final X A_CONSTANT = SOMETHING; //NO AS WELL!
}

Try not to declare anything as private final static. for example I assume you used it for either your 'one' method or any other methods to check if the number isEquals to 0. Instead you can check the validity or if it is .equals(Num.zero())

thanks all!

thanks :)


Processing metadata from remote PACS

Hi, I'm working on a project where I need to process the metadata from studies in a PACS server and write them to a table (either CSV or Excel). I specifically need the Patient Names, Study Dates and Study Instance UIDs of all the studies in a particular date range.
I tried using FindSCU in dcm4che, and while that does return the relevant data, it's not in a format that's easy to work with.
This is the command I used in dcm4che (which works):
findscu -L STUDY -r PatientName -r StudyDate -r StudyInstanceUID -c AETitle@serverIP:port -m StudyDate = "date1-date2"
So now I'm trying to do this using PyDicom, specifically pynetdicom3, since it seems like the best way to do this is programmatically (pulling data from the server and writing to an Excel file). I am able to associate with this PACS server using the code in the docs, and this script (slightly modified from the docs) to run a FindSCU query is working:
from pydicom.dataset import Dataset
from pynetdicom3 import AE
from pynetdicom3 import QueryRetrieveSOPClassList

ae = AE(scu_sop_class=QueryRetrieveSOPClassList)

print('Requesting Association with the peer')
assoc = ae.associate('serverIP', port, 'AETitle')

if assoc.is_established:
    print('Association accepted by the peer')

    dataset = Dataset()
    dataset.PatientName = 'some patient name'
    dataset.QueryRetrieveLevel = 'STUDY'

    responses = assoc.send_c_find(dataset, query_model='S')

    for (result) in responses:
        print(result)

    assoc.release()

While this code is working, I'm not sure how to access specific data values from the results. If I try print(result.StudyInstanceUID) I get an error: AttributeError: 'tuple' object has no attribute 'StudyInstanceUID'
The question is, how exactly do I access specific attributes of studies using FindSCU in pynetdicom3? Is there any way to get dataset objects from the server like those generated from DICOM files by PyDicom? And if this can't be accomplished using PyDicom, is there any other tool I can use?
Sorry for the length of the issue, I'm new to Python and working with DICOM and PACS, just wanted to provide all the necessary info.
My environment:

Windows-10-10.0.17134-SP0
Python 3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]
pydicom 1.0.2
pynetdicom3 0.9.1

It should be
for result in responses:
    print(result.StudyInstanceUID)

I'm getting a different error now:
AttributeError: 'Dataset' object has no attribute 'StudyInstanceUID'

What do you get from just print(identifier)?

Requesting Association with the peer
Association accepted by the peer
(0008, 0000) Group Length                        UL: 62
(0008, 0005) Specific Character Set              CS: 'ISO_IR 100'
(0008, 0052) Query/Retrieve Level                CS: 'STUDY'
(0008, 0054) Retrieve AE Title                   AE: 'FREEDOM'
(0008, 0056) Instance Availability               CS: 'ONLINE'
(0010, 0000) Group Length                        UL: 26
(0010, 0010) Patient's Name                      PN: 'same patient's name'
(0088, 0000) Group Length                        UL: 16
(0088, 0130) Storage Media File-set ID           SH: ''
(0088, 0140) Storage Media File-set UID          UI: ''

Requesting Association with the peer
Association accepted by the peer
(0008, 0000) Group Length                        UL: 62
(0008, 0005) Specific Character Set              CS: 'ISO_IR 100'
(0008, 0052) Query/Retrieve Level                CS: 'STUDY'
(0008, 0054) Retrieve AE Title                   AE: 'AETitle'
(0008, 0056) Instance Availability               CS: 'ONLINE'
(0010, 0000) Group Length                        UL: 26
(0010, 0010) Patient's Name                      PN: 'same patient's name'
(0088, 0000) Group Length                        UL: 16
(0088, 0130) Storage Media File-set ID           SH: ''
(0088, 0140) Storage Media File-set UID          UI: ''

Those are the Key values returned by your C-FIND query.

So how would one go about accessing the other attributes of the study?

I tried
dataset = Dataset()
dataset.StudyInstanceUID = 'someUID'
dataset.QueryRetrieveLevel = 'STUDY'

And got the response:
Requesting Association with the peer
Association accepted by the peer
(0008, 0000) Group Length                        UL: 62
(0008, 0005) Specific Character Set              CS: 'ISO_IR 100'
(0008, 0052) Query/Retrieve Level                CS: 'STUDY'
(0008, 0054) Retrieve AE Title                   AE: 'FREEDOM'
(0008, 0056) Instance Availability               CS: 'ONLINE'
(0020, 0000) Group Length                        UL: 66
(0020, 000d) Study Instance UID                  UI: 1.2.840.113619.6.410.4382765723577506888301085195054861999
(0088, 0000) Group Length                        UL: 16
(0088, 0130) Storage Media File-set ID           SH: ''
(0088, 0140) Storage Media File-set UID          UI: ''

Which isn't really informative.
For the purposes of my project, could you please advise how I can use a date/date range as an input and receive the Patient Name, Study Instance UID, Study Date and Modality (forgot to mention this earlier, oops) as an output? I'm really sorry but I'm completely lost as to how to approach this problem.

I tried
dataset = Dataset()
dataset.StudyInstanceUID = 'someUID'
dataset.QueryRetrieveLevel = 'STUDY'

And got the response:
Requesting Association with the peer
Association accepted by the peer
(0008, 0000) Group Length                        UL: 62
(0008, 0005) Specific Character Set              CS: 'ISO_IR 100'
(0008, 0052) Query/Retrieve Level                CS: 'STUDY'
(0008, 0054) Retrieve AE Title                   AE: 'FREEDOM'
(0008, 0056) Instance Availability               CS: 'ONLINE'
(0020, 0000) Group Length                        UL: 66
(0020, 000d) Study Instance UID                  UI: someUID
(0088, 0000) Group Length                        UL: 16
(0088, 0130) Storage Media File-set ID           SH: ''
(0088, 0140) Storage Media File-set UID          UI: ''

Which isn't really informative.
For the purposes of my project, could you please advise how I can use a date/date range as an input and receive the Patient Name, Study Instance UID, Study Date and Modality (forgot to mention this earlier, oops) as an output? I'm really sorry but I'm completely lost as to how to approach this problem.

Thank you so much! That worked perfectly. Thank you @scaramallion for spending time in explaining this to me.


Fix support for Heroku style REDIS_URL env variables

Basically re-add what was done in #353
fixes #410
I also think that redis profile should not be resolved/interpolated in cache.

Can you rebase on current master? It should fix the tests.

@curry684 Done and also make some changes, thanks ;-)
It looks good overall but I am not sure if it's breaking something else or not.

I think tests should catch that, and it's going into master not right into stable.

Thanks. What should I do to fix 2.1?

Good job @B-Galati ! :medal_sports:

Merged it into master, not bothering with 2.1 anymore as it's pretty invasive and I'm trying to keep that one stable after recent issues.

Hmm my bad, I thought it was broken before 2.1.0 already. I'll see if I can merge it back into 2.1.

See #356, we're reopening up an old issue here.


⚠ Bofrost.gr has degraded performance

In 6ec268d, Bofrost.gr (https://www.bofrost.gr) experienced degraded performance:

HTTP code: 200
Response time: 3685 ms

Resolved: Bofrost.gr performance has improved in c69b845 after 304 days, 20 hours, 11 minutes.


It is generating empty alterSequence when using with PostgreSQL

Environment
Spring Boot, Hibernate 5, Gradle
Liquibase Version:
4.6.1
Liquibase Integration & Version: <Pick one: CLI, maven, gradle, spring boot, servlet, etc.>
gradle - 4.6.1
spring boots
Liquibase Extension(s) & Version:
Database Vendor & Version:
PostgresSQL
Operating System Type & Version:

macOS

Description
It generates changelog corretly, but it adds empty alterSequence at the end
    <changeSet author="jenik (generated)" id="1637177424360-1">
        <alterSequence sequenceName="hibernate_sequence"/>
    </changeSet>
    <changeSet author="jenik (generated)" id="1637177424360-2">
        <alterSequence sequenceName="revision_sequence_generator"/>
    </changeSet>

It seems like there is the bug in JIRA since 2016: https://liquibase.jira.com/browse/CORE-2495
Additional Context
I am considering writing script removing the alterSequences manually. :D

Hi @JanCizmar Thanks for writing up this issue.  I just tried a simple database with a sequence and using just the CLI I was able to pull the sequence information.  Not sure that this has been a bug since 2016.  It may be in gradle or hibernate5  use of Liquibase or even a different command that is being executed besides generateChangeLog.  We will need to do some additional debug work to find where it is.
I was able to pull a sequence out of PostgreSQL 11.7 and Liquibase 4.5.0 with a simple command like this
liquibase --changeLogFile=gh2223.xml generateChangeLog
Alter sequence may be going through a different path so I don't think this is the same bug.
Can you describe your scenario a little bit more in depth on what exactly you did to get here?
Here is the result of my command above.
<changeSet author="molivasdat (generated)" id="1638400043609-1">
        <createSequence cacheSize="1" cycle="false" dataType="bigint" incrementBy="1" maxValue="9223372036854775807" minValue="1" sequenceName="student_sequence" startValue="1"/>
    </changeSet>

Hi there! I am using liquibase gradle plugin and it's configured here:
https://github.com/tolgee/server/blob/main/backend/data/build.gradle
Since the project is public, you can try it directly on it.

As a workaround I used excludeObjects in my liquibase gradle config:
liquibase {
    activities {
        //noinspection GroovyAssignabilityCheck
        main {
            changeLogFile 'src/main/resources/db/changelog/schema.xml'
            url liveDb.url
            referenceUrl liveDb.referenceUrl
            if (liveDb.username) {
                username liveDb.username
            }
            if (liveDb.password) {
                password liveDb.password
            }

            driver liveDb.driver
            excludeObjects "table:batch_job_execution_context," +
                    "batch_step_execution_seq," +
                    "batch_job_seq," +
                    "batch_job_execution_seq," +
                    "batch_step_execution_context," +
                    "batch_step_execution," +
                    "batch_job_instance," +
                    "table:batch_job_execution," +
                    "table:batch_job_execution_params," +
                    "hibernate_sequence," +
                    "revision_sequence_generator"
        }
    }
}```

Hello, is that bug fixed? Some people encounter the same problem, but I guess liquibase has not fixed this bug.
Environment

Java 17
Spring Boot: 2.6.2
Liquibase Maven Plugin
liquibase hibernate5 - 4.1.1

changelog.yaml
databaseChangeLog:
- changeSet:
    id:<PHONE_NUMBER>801-1
    author: oguzhan.cevik (generated)
    changes:
    - alterSequence:
        sequenceName: order_product_seq
- changeSet:
    id:<PHONE_NUMBER>801-3
    author: oguzhan.cevik (generated)
    changes:
    - alterSequence:
        sequenceName: orders_seq

error message
Error setting up or running Liquibase:
liquibase.exception.MigrationFailedException: Migration failed for change set liquibase/diff/change-log-2022-01-26-07-30-oguzhan.cevik.yaml::1643182253801-1::oguzhan.cevik (generated):
     Reason: liquibase.exception.DatabaseException: ERROR: syntax error at end of input
  Position: 33 [Failed SQL: (0) ALTER SEQUENCE order_product_seq]

I don't think it's fixed. Just use the excludeObjects parameter.

If I add *_seq, it will resolve, but I don't find it right. If there is a need to add a table and add a sequence later, will there not be a problem here?

Right, I am using single sequence for most entities. So I excluded just that one.
@MappedSuperclass
@Audited
abstract class StandardAuditModel : AuditModel() {
  @Id
  @SequenceGenerator(
    name = "sequenceGenerator",
    sequenceName = "hibernate_sequence",
    initialValue =<PHONE_NUMBER>,
    allocationSize = 100
  )
  @GeneratedValue(
    strategy = GenerationType.SEQUENCE,
    generator = "sequenceGenerator"
  )
  val id: Long = 0
...

I'm also seeing this problem, also would like to see it fixed.

I have the same issue when I generate liquidbase diff by gradle plugin (2.1.1). I guess the error is caused by creating diff from hibernate referenceUrl.
What is important - broken changeset is generated for every diff generation.
I generate diff by calling gradle (gradle verion 7.4) task:
./gradlew build diffChangeLog -PrunList=diffLog

My gradle configuration for liquidbase:
plugins {
	id 'org.liquibase.gradle' version '2.1.1'
}
dependencies {
	implementation 'org.liquibase:liquibase-core:4.7.1'
	liquibaseRuntime 'org.liquibase:liquibase-core:4.7.1'
	liquibaseRuntime 'org.liquibase.ext:liquibase-hibernate5:4.7.1'
	liquibaseRuntime 'info.picocli:picocli:4.6.1'
	liquibaseRuntime 'org.postgresql:postgresql'
	liquibaseRuntime sourceSets.main.compileClasspath
	(...)
}

if (!project.hasProperty("runList")) {
	project.ext.runList = "main"
}

liquibase {
	activities {
		main {
			driver 'org.postgresql.Driver'
			url 'jdbc:postgresql://host:5432/database'
			username 'user'
			password 'password'
			changeLogFile '/db/db.changelog-master.xml'
			defaultSchemaName ''
			logLevel 'debug'
			classpath 'src/main/resources/'
		}
		diffLog {
			driver 'org.postgresql.Driver'
			url 'jdbc:postgresql://host:5432/database'
			username 'user'
			password 'password'
			changeLogFile 'src/main/resources/db/changelog/' + new Date().format('yyyyMMddHHmmss') + '_changelog.xml'
			referenceUrl 'hibernate:spring:org.my.package.domain?dialect=org.hibernate.dialect.PostgreSQL10Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy'
			defaultSchemaName ''
			logLevel 'debug'
			classpath "$buildDir/classes/java/main"
		}

		runList = project.ext.runList
	}
}

My sequence definition:
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySequenceGenerator")
    @SequenceGenerator(name = "mySequenceGenerator", sequenceName = "table_sequence_id")
    @Column(name = "id")
    private Long id;

Liquidbase is creating the following changeset in changelog:
    <changeSet author="user (generated)" id="1645544515046-3">
        <alterSequence sequenceName="table_sequence_id"/>
    </changeSet>

And it causes the error:
Caused by: liquibase.exception.DatabaseException: ERROR: syntax error at end of input
  Pozycja: 41 [Failed SQL: (0) ALTER SEQUENCE public.crypto_currency_id]

Hi people,
By when can we expect a fix for this?

@anmol1vw13 Unfortunately we can't provide a timeline right now... it's on the list of items to be addressed. Will do our best to make sure it gets some love.

What's the workaround for this? I couldn't find an example to use excludeObjects with maven while generating change log. Can you help me out?

@anmol1vw13 Can you provide your specific steps, expected outcome, and actual outcome so we can make sure, when we are able to get to resolving this, that we are fixing your use case? I see a few different sets of commands and environments mentioned above from other users, so want to make sure we fully understand what you specifically are looking to do, but are unable at this time. Thanks.


Update to Angular 16

Thanks for the updates to ensure this package stays working for those of us previously using it.
I made a few updates to ensure compatibility with Angular 16

Updated dev_dependencies in package.json.
Exported the styles folder to ensure that it can be imported in Angular 16. Without this addition an error is thrown that the file is not marked as exported.

In addition, since your package is now independently distributed on npmjs and the original package seems to be no longer maintained, I updated the readme to point to this package.

@achimha can you take a look at this PR?


Injective exchange - Failed to cancel order due to Request failed with status code 503

Release version
dev-1.14.0
Steps To Reproduce

Create/start the strategy using injective exchange
Check orders placed on injective
stop the bot and pay attention to the logs pane/exchange

Actual:
Bot Failed to cancel orders on the exchange (status code 503)
Expected:
Orders cancelled successfully after bot stopped
Bot could handle status code 503
logs_injective-new-commit.log
315.zip
2023-03-14 18:52:13,858 - 256261 - hummingbot.connector.gateway.clob_spot.gateway_clob_spot.GatewayCLOBSPOT - NETWORK - Unexpected error cancelling orders.
Traceback (most recent call last):
  File "/home/ubuntu/batch6139/hummingbot/connector/exchange_py_base.py", line 409, in cancel_all
    cancellation_results = await safe_gather(*tasks, return_exceptions=True)
  File "/home/ubuntu/batch6139/hummingbot/core/utils/async_utils.py", line 22, in safe_gather
    return await asyncio.gather(*args, **kwargs)
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ubuntu/batch6139/hummingbot/connector/exchange_py_base.py", line 416, in cancel_all
    successful_cancellations.append(CancellationResult(client_order_id, True))
  File "/home/ubuntu/miniconda3/envs/hummingbot/lib/python3.8/site-packages/async_timeout/__init__.py", line 55, in __aexit__
    self._do_exit(exc_type)
  File "/home/ubuntu/miniconda3/envs/hummingbot/lib/python3.8/site-packages/async_timeout/__init__.py", line 92, in _do_exit
    raise asyncio.TimeoutError
asyncio.exceptions.TimeoutError
2023-03-14 18:52:13,859 - 256261 - hummingbot.connector.gateway.clob_spot.gateway_clob_spot.GatewayCLOBSPOT - WARNING - Failed to cancel order. Check API key and network connection.

Note:
Orders will be cancelled after restart of the bot and start the same strategy again

The latest updates for Injective protocol fixed this issue and will be available on the release of hummingbot version 1.16.0


Batch 5 of Speedlimits UI: Changes to U library

This is batch 5 instead of canceled huge batch 4.
This contains dropped in new files of the U library

new atlases
new button skins builder code
simplified UI builder API
new margins for UI elements, now all 4 sides of a panel can be configured separately
all TM:PE code using it adapted to the new changes.

Runtime problems:
1st:
Debug<PHONE_NUMBER>: ##### Initializing ModUI.
Error<PHONE_NUMBER>: While creating MainMenu: System.IndexOutOfRangeException: Array index is out of range.
  at TrafficManager.State.ConfigData.DebugSwitchExtensions.Get (DebugSwitch sw) [0x00000] in <filename unknown>:0
  at TrafficManager.U.Autosize.UResizerConfig.CallOnResize (ColossalFramework.UI.UIComponent control, ColossalFramework.UI.UIComponent previousSibling, UBoundingBox childrenBox) [0x00000] in <filename unknown>:0
  at TrafficManager.U.Autosize.UResizer.UpdateControlRecursive (ColossalFramework.UI.UIComponent current, ColossalFramework.UI.UIComponent previousSibling) [0x00000] in <filename unknown>:0
  at TrafficManager.U.Autosize.UResizer.UpdateControlRecursive (ColossalFramework.UI.UIComponent current, ColossalFramework.UI.UIComponent previousSibling) [0x00000] in <filename unknown>:0
  at TrafficManager.U.Autosize.UResizer.UpdateControl (ColossalFramework.UI.UIComponent control) [0x00000] in <filename unknown>:0
  at TrafficManager.U.Autosize.SmartResizeExtensions.ForceUpdateLayout (ColossalFramework.UI.UIComponent ctrl) [0x00000] in <filename unknown>:0
  at TrafficManager.UI.MainMenu.MainMenuWindow.CreateMainMenuWindow () [0x00000] in <filename unknown>:0
  at TrafficManager.UI.ModUI.CreateMainMenuButtonAndWindow () [0x00000] in <filename unknown>:0
   at CSUtil.Commons.Log.LogToFile(System.String log, LogLevel level)
   at CSUtil.Commons.Log.Error(System.String s)
   at TrafficManager.UI.ModUI.CreateMainMenuButtonAndWindow()
   at TrafficManager.UI.ModUI.Awake()
   at UnityEngine.GameObject.Internal_AddComponentWithType(System.Type )
   at UnityEngine.GameObject.AddComponent(System.Type componentType)
   at UnityEngine.GameObject.AddComponent()
   at TrafficManager.UI.ModUI.OnLevelLoaded()
   at TrafficManager.Lifecycle.TMPELifecycle.Load()
   at TrafficManager.Lifecycle.TrafficManagerMod.OnLevelLoaded(LoadMode mode)
   at LoadingWrapper.OnLevelLoaded(UpdateMode mode)
   at LoadingManager+<LoadLevelComplete>c__Iterator9.MoveNext()

If you add new Debug flag to GlobalConfig you have to bump version to force config rebuild, otherwise it will throw exception as above.
2nd (TMPE.log spam):
Error<PHONE_NUMBER>: GUI Error: System.NullReferenceException: Object reference not set to an instance of an object
  at TrafficManager.UI.TrafficManagerTool.OnToolGUIImpl (UnityEngine.Event e) [0x00000] in <filename unknown>:0
   at CSUtil.Commons.Log.LogToFile(System.String log, LogLevel level)
   at CSUtil.Commons.Log.Error(System.String s)
   at TrafficManager.UI.TrafficManagerTool.OnToolGUIImpl(UnityEngine.Event e)
   at TrafficManager.UI.TrafficManagerTool.OnToolGUI(UnityEngine.Event e)
   at ToolBase.OnGUI()

NullReferenceException: Object reference not set to an instance of an object
  at TrafficManager.UI.TrafficManagerTool.OnToolUpdate () [0x00000] in <filename unknown>:0

can please you explain how to test this code?

can please you explain how to test this code?

This code does not add new features, but changes a lot of UI code.


Move JSONs to remote location

Note: While all requests are welcome, finding available cycles to custom-code a feature we won't use in our production environment is always challenging.

This is specifically for SetUpYourMac
Is your feature request related to a problem? Please describe.
Not a problem, just a potential improvement
Describe the solution you'd like
Separate out code for JSONs (like the policy list) to separate files, that can be read from remote locations. Similar to the json-url option in Nudge.
If this is set up, a JAMF variable can be assigned for the URL. This would make the script more re-usable for different scenarios, rather than needing to be directly modified for each scenario.

I think this can be done by piping a curl of the json to jq in bash.

It can, but if you are going that far, I'd like to include grabbing from a .json file as well (cat vs curl).
Essentially anyone could replace:
policy_array=('...')
with:
policy_array("$(cat /path/to/file.json)")
For a file or for a URL:
policy_array("$(curl -sL https://server.name/jsonquery)")

Thanks, @astrugatch and @wakco.

@astrugatch:
Please take a look at @wakco's instructions and advise if this satisfies this Feature Request.
Thanks.

Hi Dan,
This was what I did. (FYI I'm working off of 1.7.1 as 1.8 changes didn't impact us)
I added this line to global variables:
jsonURL=${10}                                                               # URL Hosting JSON for policy_array
And this line replaces the entirety of the policy_array (~ line 503):
 policy_array=("$(curl -sL $jsonURL)")


datepicker: use a native input to show the selected value

Fixes #106

@jefersonestevo please rebase it and resolve conflicts, also use input type according to the type of picker (i.e. date, time, datetime)

@dharmeshpipariya I've resolved the conflicts in this branch. The only thing is that I haven't changed the input type because I couldn't find a good way to disable chrome native datepicker, and it causes conflicts with this one.

@jefersonestevo , your input is not working properly as well as it is not reflect two way modal binding and events.

@jefersonestevo thanks for the PR, but we have implemented it in another way so we close this PR.


put the platform in its own repo

By "own repo" do you mean a dedicated "Playground" org space to bring together the various repositories?
:+1:

Playground is a framework able to expose gamification mechanics on a dedicated platform as on http://clubmetro.metronews.fr/, or standalone games as on http://youburger.quick.fr/, or even api mechanics.
The next version of Playground (version 3.0) is on its way. The platform itself will have its own module and https://github.com/gregorybesson/PlaygroundGame will expose a REST API layer of services, usable w/o the platform module

[...]will expose a REST API layer of services, usable w/o the platform module
Woot, exciting!


Update mqtt to mqtt communication to support full protocol

Signed-off-by: Aleksandar Novakovic<EMAIL_ADDRESS>

Codecov Report

Merging #408 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #408   +/-   ##
=======================================
  Coverage   89.21%   89.21%
=======================================
  Files          44       44
  Lines        1586     1586
=======================================
  Hits         1415     1415
  Misses        117      117
  Partials       54       54

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 b20a846...4a9d26d. Read the comment docs.

@anovakovic01 please update the branch.


Update Content on TSV Add Without Having to Save

Getting a 404 or 401 errors after clicking the add button in the Add Row pop-up. Testing with v2.1.0 build 5e71fc7 QA.
Steps to recreate errors

Add a row to any tN, twl, or TQ. Make edits to Add Row pop-up and click add button. After clicking add button you receive the 401 error (Error creating edit branch en_twl).

If you click send feedback you get 404 error page or

if you click cancel it takes you back to page, you get an endless loading on Update my content and an invalid token error after clicking Update my content on card.

Saving new note in tN:
New note is saved without having to click save button and positioned itself next to the parent note.
Private Zenhub Image


Update to the latest version of Meshes.jl

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

Project coverage is 86.39%. Comparing base (5fb3df9) to head (597f3d1).

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #133      +/-   ##
==========================================
+ Coverage   86.12%   86.39%   +0.27%
==========================================
  Files          21       21
  Lines         944      941       -3
==========================================
  Hits          813      813
+ Misses        131      128       -3

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


It is not intuitive to user where to add compound configurations in launch.json

Testing #16026
In launch.json it is not intuitive where to add compound configurations.

Agree, however this is a feature for expert users.
@joaomoreno had a nice idea of just having an empty compounds array at the end of launch.json

Adding empty compounds array sounds like a nice way to improve discoverablity however I think it would just provide noise for the novice user. And compound users shuold be experts which will find this feature one way or another.
@weinand let me know what you think about adding an empty compounds array for discoverabilty at the end of launch.json

I agree that adding the empty array makes the launch.json look more complex, so I think we should not go that route.
Users interested in "Compounds" should be able to find documentation in the provided link https://go.microsoft.com/fwlink/?linkid=830387.
However there a two problems:

the link does not go to "Launch Configurations" section,
the Launch Configuration section does not explain Compounds at all
This must be fixed (without changing the link because that is out for a long time and users have tha link already in their launch.jsons).

We will improve the documentation as part of the December docathon.


feat: treat nested block comment

Nested block comments can now be handled.
#eval runTest
  (title := "nested block comment")
  [
    "/-",.
    "this is a test",.
    "/- nested comment -/",.
    "of nested block comment -/"
  ]
  [
    "this is a test", "/- nested comment".
    "/- nested comment -/", "of nested block comment".
    "of nested block comment".
  ]

In addition, the following cases can now be handled
#eval runTest
  (title := "raw code block")
  [
    "/-",
    "```lean",
    "/- this is test -/",
    "```",
    "fuga",
    "-/",
    "/- hoge -/",
  ]
  [
    "```lean",
    "/- this is test -/",
    "```",
    "fuga",
    "",
    "hoge"
  ]


New Lambda Timers do not work

Describe the bug
The Lambda timers do not work correctly with fallback functions (tested in singleplayer).
To Reproduce
Steps to reproduce the behavior:

Create a new e2 script as follows:

if (first()) {
    timer(450, function() {
        print("Called")
    })
}

Expected behavior
Prints "Called"
Observed behaviour
Nothing happens

Apologies I am stupid, was used to milliseconds as per the deprecated timer() function


Update navicat-premium to 12.0.2

After making all changes to the cask:

[x] `brew cask audit --download {{cask_file}}` is error-free.
[x] `brew cask style --fix {{cask_file}}` left no offenses.
[x] The commit message includes the cask’s name and version.

Thank you for the contribution. It was merged directly as 6b345d8f67b362658efaf441e830fd8acd2bc66a. Your contribution is still credited to you.


[docs] Migrate Hidden demos to hooks

[x] I have followed (at least) the PR section of the contributing guide.

Added typescript version and migrated hidden demos to hooks

Closes #15954

@oliviertassinari Should I remove docs/src/modules/utils/compose since it isn't in use anymore?

isn't in use anymore?

Can you double check?

@oliviertassinari Forgot to disable files to include: packages/**/*.* :smile:, never mind then

@oliviertassinari Will you update #14897?

Done


TELEWORK: Customize email messages

User Story
As a user, either as an employee or supervisor, I want customized messages to fit the options requested by the employee.
Tasks

[x] Work out logic to match the new email messages specified.
[x] Augment the existing workflow with new decision gates to match this logic.
[x] Modify the email messages for each option (18 in total).
[ ] Format the emails in the requested way - boldfacing.
[ ] Format the emails in the requested say - list items.

Acceptance Criteria

[x] All use cases work
[ ] All use cases are formatted in the desired way.

Current status: logic is working but the formatting is not.

Hello @iman-jamali-fw - I have tried a variety of ways of adding boldfacing and list items but so far I can't add anything that produces the equivalent to a  or   effect. It all comes out as plain text and includes the markup tags.  I tried escaping to html using a \ and " and neither worked (both showed up in the message). I also tried the asteriks shown here: https://jira.camunda.com/secure/WikiRendererHelpAction.jspa?section=texteffects
Do you have any ideas?

I've applied Iman's suggested method but that method does not appear to allow attachments. We may be limited to a choice of markup OR an attachment. However, I am continuing to investigate and emailed Iman about it at the end of the day in the hope that he has an idea of a workaround.

I've been working with Don to modify our email functionality to allow for email styling. This has now been tested in dev, so it should unblock work on this

@simensma-fresh I emailed  you at 12:40 today to get your assistance on the workflow. While checking the messages we noticed some were not being delivered. It is likely a setting in the workflow. I can reopen the workflow ticket if you prefer.

All attachments are present and attached while carrying out tests in PROD.
@DonMoffatt  one issue I noticed is that in the final confirmation email to employees after a decision has been made for 3+ days, the adm attachment is not there with the email, the form is only attached. However, the supervisor's final email has the adm approval attachment.

@simensma-fresh It worked in PROD for Hasan but when the three of us retested around 10 a.m. none of us got emails as either employee or manager.

tested successfully in PROD
ready to be closed


Task declaring mustRunAfter is not taken under consideration with finalizer definition

This issue was originally report via GRADLE-3389. Given the following build script:
task A

task B {
    mustRunAfter "A"
    finalizedBy "C"
}

task C {
    dependsOn "A"
}

Expected Behavior
The task B should be run after `A. The expected output is the following:
:A UP-TO-DATE
:B UP-TO-DATE
:C UP-TO-DATE

Current Behavior
The actual output is the following:
:B UP-TO-DATE
:A UP-TO-DATE
:C UP-TO-DATE

Steps to Reproduce (for bugs)
See code example above.

Any update on this? It looks similar to a bug I am seeing..

This is very much still an issue.


Issue for tester the duplicity

Issue for tester the duplicity

### My tasks
- [ ] https://github.com/octo-org/octo-repo/issues/45
- [ ] Draft task


Test Permission CRUD

In test_universal_registry
Also fixed a bug in GetPermission method of RegistryServer

Note: one of the ITs fails while waiting for this PR to be merged: https://github.com/feast-dev/feast/pull/4328/files


chore(deps): Update h2 to 2.2.220 to get fix for CVE-2022-45868

WIP: still has some compile errors.

Not needed anymore.


Fix some description in the usage

Cherry-pick #340
Trivial fix for the usage information.

/lgtm


Helper for generate Angular Reactive from validation

Angular Reactive Form has huge flexibity we use it in our form validation
 createForm() {
    this.userForm = this.fb.group({
      username: ['', Validators.required ],
      name: ['', Validators.required ],
      email: ''
    });

is it possible to generate validation information from breeze metadata

Yep, certainly possible. The information is all there. You just have to write a utility that extracts the information from the metadata store. I don't know much about Angular Reactive Form, but I'm doing something similar on a current project. We are using the DxForm from DevExpress.
The DxForm has the ability to add custom validation rules, so I just wrote a rule that interfaces with Breeze to get the validation error for a given field.


added import UIKit, to fix build error in Swift (because CGFloat type de...

...clared there, not in Foundation)

Thanks for your contribution


Issues with near-singular data - ridge as solution?

Hello,
When fitting BayesianRegression with this data:
X = np.array([[ 0.1,  -0.1,  -0.2,   0.02],
 [ 0.3,  -0.3,  -0.6,   0.06],
 [ 0.4,  -0.4,  -0.8,   0.08],
 [ 0.5,  -0.5,  -1.,    0.1 ]])

Y = np.array([ 0.2,  0.6,  0.8,  1. ])

The returned parameters are pretty crazy:
Out[16]:
{'bias_term': 0.65000000000000002,
 'precision': array([[  8.15645225e+31,  -8.15645225e+31,  -1.63129045e+32,
           1.63129045e+31],
        [ -8.15645225e+31,   8.15645225e+31,   1.63129045e+32,
          -1.63129045e+31],
        [ -1.63129045e+32,   1.63129045e+32,   3.26258090e+32,
          -3.26258090e+31],
        [  1.63129045e+31,  -1.63129045e+31,  -3.26258090e+31,
           3.26258090e+30]]),
 'weights': array([ 0.18599761, -0.34392501, -0.68785002,  0.47188674])}

The issue is that X is nearly singular. Using ridge regression can help in such cases - would it make sense to add a scaled identity to the covariance/precision somewhere along the line to deal with cases like this?

My suggestion is after computing self.d, just do something like this:
self.d += lam

where lam is some small value like 1e-6 that is passed to __init__.

Actually, now that I'm doing more experimentation, it seems that even adding the ridge regularization, doesn't get rid of the issue. What I'm seeing that self.beta is extremely unstable from run to run for the X matrix I described above.

Hi Sergey,
Thanks a lot for help !!!  I made fixes and added your example with solution to ipython notebook.
So here is list of problems I found:
Problem N1: Infinite self.beta
self.beta is precision parameter for noise, and in fixed-point iteration update rule for that parameter is self.beta = gamma / RSS (Residual Sum of Squares). In case of nearly perfect fit RSS gets very small hence beta keeps increasing and in some examples overflows and has value np.PINF.
Solution:
As a I introduced parameter lambda_0, that serves as threshold. In case RSS gets smaller than lambda_0 (which means that model fits data almost perfectly) algorithm is terminated.
Note that beta will still be large but it is supposed to be that way. In case of almost perfect fit variance of noise parameter (which by definition is 1 / beta ) should be close to zero.
Problem N2: Inversion of precision matrix
In order to construct predictive distribution we need to calculate covariance matrix for coefficients, which requires inverting precision matrix ( self.w_precision ).
The way I was doing it before was mathematically correct but seems to be numerically unstable for large betas. I wrote code to compare two inversion methods
def inversion_checker(X,alpha,beta):
'''
Checks accuracy of inversion
'''
n,m    = X.shape
u,d,vh = np.linalg.svd(X,full_matrices = False)
dsq    = d**2
# precision matrix
S      = betanp.dot(X.T,X) + alphanp.eye(m)
# inverting precision : PREVIOUS VERSION
a1     = np.dot( np.dot(vh.T, np.diag( 1. / (beta*dsq + alpha)) ), vh)

# inverting precision : CURRENT VERSION
a2     = pinvh(S)
return [a1,a2]

Here is example, comparing two inversion methods ( I added precision_inversion_tester.py file to repository, so you can reproduce example below):
Example 1: beta = 1000
Previous inversion method
[[ 0.55634511  0.11032155  0.22064311 -0.02206431]
[ 0.11032155  0.55634511 -0.22064311  0.02206431]
[ 0.22064311 -0.22064311  0.22538045  0.04412862]
[-0.02206431  0.02206431  0.04412862  0.6622538 ]]
Current inversion method
[[ 0.55634511  0.11032155  0.22064311 -0.02206431]
[ 0.11032155  0.55634511 -0.22064311  0.02206431]
[ 0.22064311 -0.22064311  0.22538045  0.04412862]
[-0.02206431  0.02206431  0.04412862  0.6622538 ]]
Example 2: beta = 1e+30
Previous inversion method
[[ 0.55534508  0.11018413  0.22036826 -0.02212214]
[ 0.11018413  0.55625278 -0.22082777  0.02206555]
[ 0.22036826 -0.22082777  0.22501113  0.04413109]
[-0.02212214  0.02206555  0.04413109  0.66224931]]
Current inversion method
[[  5.37472127e-32  -5.37472127e-32  -1.07494425e-31   1.07494425e-32]
[ -5.37472127e-32   5.37472127e-32   1.07494425e-31  -1.07494425e-32]
[ -1.07494425e-31   1.07494425e-31   2.14988851e-31  -2.14988851e-32]
[  1.07494425e-32  -1.07494425e-32  -2.14988851e-32   2.14988851e-33]]
Solution:
I changed inversion method and now I use spicy.linalg.pinvh for inversion

Thanks! I received your reply in an email but it seems to be missing here. I'll go ahead and close this issue.

Hi Sergey, I changed code and added your example in ipython notebooks for both Bayesian Regression and RVM. Will do the same for Variational RVM and Variational Linear Regression.
Thanks again for your help!

Happy to help!


Faster tests

What
Reduce the time it takes for the UI tests to run:
Locally:
createReferral ~105s -> ~27s
home ~46s -> ~10s
On circleCI (UI tests only):
~200s -> ~122s
Why
To speed up the deployment pipeline

Legendary pull request


Odd ID from part of a Samsung Blu-Ray firmware

Scan Time:     2015-07-19 05:03:33
Target File:   /home/voltagex/re/Samsung/BD-ES5300/BSP-E5300WWB-1015.5.RUF
MD5 Checksum:  06e68a980c85bc9a765ee1f77e7f39f4
Signatures:    332

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
28215481      0x1AE88B9       MySQL ISAM index file Version 3

Scan Time:     2015-07-19 05:04:28
Target File:   /home/voltagex/re/Samsung/BD-ES5300/BSP-E5400WWB-1015.5.RUF
MD5 Checksum:  9458ccb0c7a9acb2b51807d8c9a8230e
Signatures:    332

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
66944         0x10580         Mediatek bootloader
111852        0x1B4EC         Mediatek bootloader
338961        0x52C11         Certificate in DER format (x509 v3), header length: 4, sequence length: 1284
339077        0x52C85         Certificate in DER format (x509 v3), header length: 4, sequence length: 1288
348532        0x55174         CRC32 polynomial table, little endian
353004        0x562EC         CRC32 polynomial table, little endian
425456        0x67DF0         uImage header, header size: 64 bytes, header CRC: 0xCD67775D, created: 2014-02-18 10:12:23, image size: 1524568 bytes, Data Address: 0xDA00000, Entry Point: 0xDA00000, data CRC: 0xF9A81933, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: none, image name: ""
442905        0x6C219         gzip compressed data, maximum compression, from Unix, last modified: 2014-02-18 10:11:27
3771328       0x398BC0        Squashfs filesystem, little endian, version 4.0, compression:gzip, size: 56863339 bytes, 1340 inodes, blocksize: 131072 bytes, created: 2014-02-18 10:16:40
61253968      0x3A6A950       Squashfs filesystem, little endian, version 4.0, compression:gzip, size: 12002301 bytes, 303 inodes, blocksize: 131072 bytes, created: 2014-02-18 10:16:55
73353552      0x45F4950       PNG image, 1920 x 1080, 8-bit/color RGB, non-interlaced
73353637      0x45F49A5       Zlib compressed data, best compression
73356309      0x45F5415       Zlib compressed data, best compression
74075670      0x46A4E16       mcrypt 2.2 encrypted data, algorithm: DES, mode: ECB, keymode: 8bit
74077296      0x46A5470       mcrypt 2.2 encrypted data, algorithm: DES, mode: ECB, keymode: 8bit
74078644      0x46A59B4       mcrypt 2.2 encrypted data, algorithm: DES, mode: ECB, keymode: 8bit
74079058      0x46A5B52       YAFFS filesystem
74082872      0x46A6A38       mcrypt 2.2 encrypted data, algorithm: DES, mode: ECB, keymode: 8bit
74083122      0x46A6B32       mcrypt 2.2 encrypted data, algorithm: DES, mode: ECB, keymode: 8bit

Original file: http://org.downloadcenter.samsung.com/downloadfile/ContentsFile.aspx?CDSite=UNI_CA&CttFileID=4980089&CDCttType=FM&ModelType=N&ModelName=BD-E5300&VPath=FM/201404/20140430111335562/BSP-E5400_E5300WWB.ZIP
Maybe one of these files is actually a database?

The MySQL result appears to be a false positive. Entropy analysis of BSP-E5300WWB-1015.5.RUF suggests encryption; the gzip/squashfs results for BSP-E5400WWB-1015.5.RUF at least seem to be legitimate.


ingesting images from directory

A separate process(outside of Meteor) is downloading images and saving to a local directory.
I would like to import these images into Meteor's image pipeline.
How would I go about this? Does Meteor have some standard image ingestion options for this?

Check out https://github.com/CollectionFS/Meteor-CollectionFS/pull/617, which introduces a helper function that may be of use.


Remove Dependency

Originally this cookbook relied on a separate Github repository to provide the intake catalog used in the cookbook. This created maintenance issues. This PR removes the dependency issue by adding the catalog into the cookbook.

link-checker fails because the pull request adds a file to this repo that is linked to in the cookbook. This should be resolved on next PR.


Improve bridge_generateExitProof JSON RPC endpoint UX

An important part of the assets withdrawal process from the child to the root chain is retrieving an exit proof and submitting it to the ExitHelper, as evidence that a given exit event has happened in the first place.
In order for an end-user to be able to retrieve an exit proof, Edge client implemented bridge_generateExitProof. However mentioned function expects exitEventId, epochNumber, and checkpointBlockNumber as the input parameters. The downside of this approach is that an end-user must be aware of which checkpoint block his exit event got submitted to the root chain. Unfortunately, this makes UX poor, as an end-user cannot be completely sure which checkpoint block contains his exit event.
Therefore, this PR proposes the introduction of a new function on CheckpointManager contract, called findCheckpointBlock. This function expects the block number to which the exit event was included on the child chain (this information can be obtained from the receipt, once the transaction is executed on the child chain) and it searches for the next higher checkpointBlock.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 9 (0.0%)  changed or added relevant lines in 1 file are covered.
5 unchanged lines in 2 files lost coverage.
Overall coverage decreased (-1.2%) to 89.577%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

contracts/root/CheckpointManager.sol
0
9
0.0%

Files with Coverage Reduction
New Missed Lines
%

contracts/root/CheckpointManager.sol
1
82.52%

contracts/libs/ValidatorStorage.sol
4
70.92%

Totals

Change from base Build<PHONE_NUMBER>:
-1.2%

Covered Lines:
1122

Relevant Lines:
1215

💛  - Coveralls

replace checkpointManager.findCheckpointBlock(blockNumber); with checkpointManager.getCheckpointBlock(blockNumber);


Update macOS build action

They changed names of macOS runners. Should be 'macos-latest' or 'macos-10.15' now.

Thank you!! :+1:


[New Process Improvement Need]: Expanding SLIM Framework Support for Multi-Platform Repositories: Enhancing Integration with GitLab, Bitbucket, and More

Checked for duplicates
Yes - I've already checked
Category
Software Lifecycle - the creation, change, and release of software
Describe the need
The SLIM framework needs to expand its support for repositories hosted on platforms beyond GitHub, such as GitLab, Bitbucket, and others. This expansion is particularly important for projects like NISAR, which heavily utilize GitLab repositories. By broadening SLIM's compatibility with multiple version control systems, the framework can better serve a diverse range of projects and teams, ensuring seamless integration, consistent workflows, and enhanced collaboration across different platforms.

Things to consider:

API integration: GitLab and Bitbucket REST and GraphQL APIs
CI/CD pipelines need to be compatible with GitLab and Bitbucket


Fatal error: invalid unsafeDowncast

On creation jwt - iOS 12.0
FILE:
BlueECC -> ECPrivateKey.swift
CODE: 447-463
#else
let keyData = publicKeyData + privateKeyData
var error: Unmanaged? = nil
guard let secKey = SecKeyCreateWithData(keyData as CFData,
[kSecAttrKeyType: kSecAttrKeyTypeECSECPrimeRandom,
kSecAttrKeyClass: kSecAttrKeyClassPrivate] as CFDictionary,
&error)
else {
if let secError = error?.takeRetainedValue() {
throw secError
} else {
throw ECError.failedNativeKeyCreation
}
}
return secKey
#endif
}

I also experience errors when running release builds of my command line tool where I link SwiftJWT. See Stack Overflow post.

I solved it. Just copy pod folder to ur project.


size change

Why?

No issues. I did it.
Thanks
On Fri, 13 May 2022 at 6:10 PM, Red Ochsenbein @.***>
wrote:

Why?
—
Reply to this email directly, view it on GitHub
https://github.com/spothq/cryptocurrency-icons/pull/503#issuecomment-1126013826,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AQLBDR2RRDXFOWLLREAO6F3VJZETBANCNFSM5V3IE22Q
.
You are receiving this because you authored the thread.Message ID:
@.***>


Getting “Invalid sql_display_size” querying a table with VARBINARY columns

I'd write everything again, but its easier to share the SO question directly.
https://stackoverflow.com/questions/38147136
If it isn't a bug, then what am I doing wrong? :(

Closing due to lack of activity. Please feel free to open a new issue if this is still an issue on 5.4, and we can replicate it.


Upgrade to GTDB r220 and GTDB-Tk v2.4.0

GTDB r220 was released today, along with an updated version of GTDB-Tk. This PR adds the updated GTDB and GTDB-Tk to rotary.
@LeeBergstrand Mind giving this a quick review? Note that I already checked the MASH DB build step, and the command within GTDB-Tk to build the MASH DB still seems the same as before.

Still need to test this -- @LeeBergstrand will let you know once results are available (hopefully in 1-2 days).

Still need to test this -- @LeeBergstrand will let you know once results are available (hopefully in 1-2 days).

@jmtsuji Code looks fine to me feel free to merge in once you test that it works.

This code runs successfully after a minor path fix. Merging into develop.


getters for properties of Row

Coverage decreased (-0.07%) to 96.31% when pulling 6a377736831030fcf32893273a93bbc7eccd5ec1 on row-getters into<PHONE_NUMBER>8f45661fe17fb72be56150dbecbbf6 on frequencies.