How to create a custom converter that then calls the default serialization behavior?

I am writing a custom converter for a type, let's say type X.
In my converter's read overload, I need to determine the type of entity at which I am looking. If the current entity is a string, I need to perform some custom behavior to convert the string to an X. If the current entity is an object, I need to use the ordinary serializer behavior (i.e. what the serializer would do if my converter was not registered) in order to deserialize that object and pass it along.
Is there a way to do this? If I call serializer.Deserialize I will end up in infinite recursion calling my converter. If I use a bool flag in the converter to turn off my converter before calling deserialize, I have the issue that I cannot have an X nested with in an X. It also isn't thread safe if multiple threads are using the serializer at the same time.

Ask questions on stackoverflow

You mean like this question on StackOverflow I posted two years ago on the same topic? :smile:
http://stackoverflow.com/questions/16085805/recursively-call-jsonserializer-in-a-jsonconverter

Try with
    JObject.FromObject(value).WriteTo(writer);

Try with
 JObject.FromObject(value).WriteTo(writer);

This does the serialization, but it doesn't honour the serialization settings configured on the JsonSerializer. If I pass in the serializer (JObject.FromObject(value, serializer).WriteTo(writer)) then I get a StackOverflowException as it calls back into the converter. I fixed it by creating a new JsonSerializer inside the converter with all the same settings except that converter. Awkward!

There is actually a legitimate issue here, because it doesn't seem that currently there is a way to make a custom converter based on the default conversion that is registered with a [JsonConverter] attribute on the type. Even a brand new JsonSerializer for the inner conversion doesn't work, because it sees the [JsonConverter] attribute and implicitly suffers from re-entrance.
What would be really useful in this regard is a "default" implementation of the JsonConverter abstract class, so that you can then derive from it and use base.WriteObject in your implementation.
Is Newtonsoft.Json officially dead, though, now that System.Text.Json exists? :-(

For some reason @JamesNK has shown no interest in this problem over the years. Its an incredibly frustrating problem.

Yep, I met with the same issue. :(

I know this thread is forever old, but if anyone is still trying to figure this out here was my solution. In my case I needed to check the type of the message payload before serializing or deserializing to enforce a whitelist of allowed types, and if valid continue with all other settings identical.
The basic workflow is inspect the type, remove the custom converter, serialize/deserialize the data, then add the converter back. For writing the JSON checking the type was simple because you have the in memory object. For reading it was more complex because you need to inspect the JSON graph to locate the type.
Note that this implementation is not multi-threading safe.
`
_jsonSerializer = new JsonSerializer
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
TypeNameHandling = TypeNameHandling.Auto,
DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate,
NullValueHandling = NullValueHandling.Ignore
};
        _jsonSerializer.Converters.Add(new MessageConverter(allowedMessageTypes));

private class Message
{
public object? Data { get; set; }
public Dictionary<string,string>? Meta { get; set; }
}
    private class MessageConverter : JsonConverter
    {
        private readonly HashSet<Type> _allowedMessageTypes;

        public MessageConverter(IEnumerable<Type> allowedMessageTypes)
        {
            _allowedMessageTypes = allowedMessageTypes.ToHashSet();
        }

        public override bool CanConvert(Type objectType) => objectType == typeof(Message);

        public override bool CanRead => true;

        public override bool CanWrite => true;

        public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
        {
            var jObject = serializer.Deserialize<JObject>(reader);

            jObject.TryGetValue(nameof(Message.Data), StringComparison.OrdinalIgnoreCase, out var dataToken);

            if (dataToken == null) throw new InvalidOperationException($"{nameof(Message)} payload missing {nameof(Message.Data)} property");

            var dataObject = dataToken as JObject;

            if (dataObject == null) throw new InvalidOperationException($"{nameof(Message)} {nameof(Message.Data)} property was not an object type");

            dataObject.TryGetValue("$type", out var typeToken);

            if (dataToken == null) throw new InvalidOperationException($"{nameof(Message)} {nameof(Message.Data)} property was missing $type property");

            var typeString = typeToken.Value<string>();

            var type = Type.GetType(typeString, throwOnError: false, ignoreCase: true);

            if (type == null || !_allowedMessageTypes.Contains(type))
                throw new InvalidOperationException($"{nameof(Message)}.{nameof(Message.Data)} is not an allowed type");

            var thisIndex = serializer.Converters.IndexOf(this);
            serializer.Converters.RemoveAt(thisIndex);

            var result = jObject.ToObject(objectType, serializer);

            serializer.Converters.Insert(thisIndex, this);

            return result;
        }

        public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
        {
            if (value == null)
            {
                writer.WriteNull();
                return;
            }

            var message = value as Message;

            if (message!.Data != null && !_allowedMessageTypes.Contains(message.Data.GetType()))
                throw new InvalidOperationException($"{nameof(Message)}.{nameof(Message.Data)} is not an allowed type");

            var thisIndex = serializer.Converters.IndexOf(this);
            serializer.Converters.RemoveAt(thisIndex);

            serializer.Serialize(writer, message);

            serializer.Converters.Insert(thisIndex, this);
        }
    }

`

@kevinarthurackerman you saved my day! Thanks a lot for the snippet.
Btw, probably it could have been improved with the generic JsonConverter<T> version.

Note that this approach will probably not do the right thing for a type that contains fields of the same type.
class TreeNode
{
  public TreeNode[] Children;
  ...
}

Only the first TreeNode encountered while digging into the object graph will get processed by the custom converter, because it will be inactive for the "actual" processing of everything from that point down.
This is obviously only a concern for this specific scenario, but is worth keeping in mind, as it illustrates that the work-around does not actually fully achieve the desired behaviour in a generalized sense.

@Plastiquewind glad I could help! I'm modifying my implementation to use JsonConverter.
@logiclrd that is a limitation to my approach, which in my use case was not a problem. A more robust solution might look like the code below (note: this has not been extensively tested). The key points are having a thread local flag to indicate if the converter should be skipped, and then turning the flag off after each call to CanRead or CanWrite so that it is only ever skipped once each time it is set. It's a bit of a hack on a hack, but I think it would achieve OP's original goal with support for thread safety and nesting.
private class MessageConverter : JsonConverter<Message>
{
    private readonly HashSet<Type> _allowedMessageTypes;

    private readonly ThreadLocal<bool> _skip = new ThreadLocal<bool>(() => false);

    public MessageConverter(IEnumerable<Type> allowedMessageTypes)
    {
        _allowedMessageTypes = allowedMessageTypes.ToHashSet();
    }

    public override bool CanRead => !_skip.Value || (_skip.Value = false);

    public override bool CanWrite => !_skip.Value || (_skip.Value = false);

    public override Message ReadJson(JsonReader reader, Type objectType, Message? existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        var jObject = serializer.Deserialize<JObject>(reader);

        jObject!.TryGetValue(nameof(Message.Data), StringComparison.OrdinalIgnoreCase, out var dataToken);

        if (dataToken == null) throw new InvalidOperationException($"{nameof(Message)} payload missing {nameof(Message.Data)} property");

        var dataObject = dataToken as JObject;

        if (dataObject == null) throw new InvalidOperationException($"{nameof(Message)} {nameof(Message.Data)} property was not an object type");

        dataObject.TryGetValue("$type", out var typeToken);

        if (typeToken == null) throw new InvalidOperationException($"{nameof(Message)} {nameof(Message.Data)} property was missing $type property");

        var typeString = typeToken.Value<string>();

        var type = Type.GetType(typeString, throwOnError: false, ignoreCase: true);

        if (type == null || !_allowedMessageTypes.Contains(type))
            throw new InvalidOperationException($"{nameof(Message)}.{nameof(Message.Data)} is not an allowed type");

        _skip.Value = true;

        var result = jObject.ToObject(objectType, serializer) as Message;

        return result;
    }

    public override void WriteJson(JsonWriter writer, Message? value, JsonSerializer serializer)
    {
        if (value == null)
        {
            writer.WriteNull();
            return;
        }

        if (value!.Data != null && !_allowedMessageTypes.Contains(value.Data.GetType()))
            throw new InvalidOperationException($"{nameof(Message)}.{nameof(Message.Data)} is not an allowed type");

        var thisIndex = serializer.Converters.IndexOf(this);
        serializer.Converters.RemoveAt(thisIndex);

        serializer.Serialize(writer, value);

        serializer.Converters.Insert(thisIndex, this);
    }
}

I have a different case where I overloaded the CanConvert and only a particular interface instance should be processed by my converter. I have used only a lock on write, but I haven't deep knowledge of Json.Net. What do you think about it?

public override bool CanConvert(Type objectType)
{
    return typeof(IMyInterface).GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo());
}

public override void WriteJson(JsonWriter writer, Message? value, JsonSerializer serializer)
{
    lock (this)
    {
        var thisIndex = serializer.Converters.IndexOf(this);
        serializer.Converters.RemoveAt(thisIndex);
        serializer.Serialize(writer, value);
        serializer.Converters.Insert(thisIndex, this);
    }
}

This approach could work for a serializer for a single type, but could fail if you introduce multiple types. In a multithread scenario one serializer type could remove an item from the converters list, and then another one could remove an item before the first inserted it back in the right place. This would result in serializers being reordered or potentially hitting an out of bounds exception. You could potentially lock on something shared by all of your serializer types, but that would increase lock contention and I think possibly introduce the possibility of a deadlock when the serialization of one custom type depends on the serialization of another.
Probably a better similar approach would be to not use a lock at all, copy the list of converters into a new one without your custom one, and create a whole new serializer. I'm not sure what the cost of such an operation would be, and there are a lot of settings to copy over.

I like genius humans

This was a great idea!
I've used this as inspiration to create this inheritable converter. Main advantages:

Drives off the CanWrite / CanRead flags instead of types, meaning you can call Serialize within ReadJson or Deserialize within WriteJson
Checks added to prevent accidental recursion within the converter (mostly protection in case something changes with how these are used by Newtonsoft)
Re-usable! A converter can simply inherit from this class to gain the feature (no need to add the wiring in the converter itself)

/// <summary>
/// Converts an object to and from JSON, with guarding to prevent recursive calls into the custom converter.
/// Useful for converters that want to slightly modify the default converter behaviour (e.g., add or remove a key).
/// </summary>
/// <remarks>
/// Inspiration for this approach was taken from https://stackoverflow.com/a/76705937
/// Further discussion of this issue is at https://github.com/JamesNK/Newtonsoft.Json/issues/719
/// </remarks>
/// <typeparam name="TConverter">Final derived converter this hierarchy represents.</typeparam>
public abstract class NonRecursiveConverter<TConverter> : JsonConverter
{
    [ThreadStatic]
    private static bool s_reading;

    [ThreadStatic]
    private static bool s_writing;

    /// <inheritdoc/>
    public override bool CanRead => !s_reading;

    /// <inheritdoc/>
    public override bool CanWrite => !s_writing;

    /// <inheritdoc/>
    public override sealed object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
    {
        if (s_reading)
        {
            // Protect against any changes to Newtonsoft that somehow cause concurrent access in the same thread recursively
            throw new InvalidOperationException($"Concurrent read detected on {nameof(NonRecursiveConverter<TConverter>)}");
        }

        s_reading = true;
        try
        {
            return OnReadJson(reader, objectType, existingValue, serializer);
        }
        finally
        {
            s_reading = false;
        }
    }

    /// <inheritdoc/>
    public override sealed void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
    {
        if (s_writing)
        {
            // Protect against any changes to Newtonsoft that somehow cause concurrent access in the same thread recursively
            throw new InvalidOperationException($"Concurrent write detected on {nameof(NonRecursiveConverter<TConverter>)}");
        }

        s_writing = true;
        try
        {
            OnWriteJson(writer, value, serializer);
        }
        finally
        {
            s_writing = false;
        }
    }

    /// <inheritdoc cref="ReadJson(JsonReader, Type, object?, JsonSerializer)"/>
    protected abstract object? OnReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer);

    /// <inheritdoc cref="WriteJson(JsonWriter, object?, JsonSerializer)"/>
    protected abstract void OnWriteJson(JsonWriter writer, object? value, JsonSerializer serializer);
}

This can be used like:
public class SomeConverter : NonRecursiveConverter<SomeConverter>
{
  ...
}


Mouse hover tooltip does not correspond with position of mouse

Checklist

[x] I updated the card to the latest version available
[x] I cleared the cache of my browser
[x] I verified that I'm really running the lastest version in my browser console
[x] I checked if there is another issue opened with the same problem

Describe the bug
The hover tooltip of the graph does not correspond with the position of the mouse. Here's a demonstration:

Version of the card
Version: 2.0.4
To Reproduce
This is the configuration I used:
type: custom:apexcharts-card
header:
  show: true
  title: Motion Last 12 hours
update_delay: 3s
update_interval: 1min
graph_span: 12h
yaxis:
  - show: false
    apex_config:
      tickAmount: 1
apex_config:
  chart:
    height: 150px
all_series_config:
  transform: 'return x === ''on'' ? 1 : 0;'
  type: column
  stroke_width: 1
  show:
    legend_value: false
series:
  - entity: binary_sensor.visonic_z01
    name: Front door
  - entity: binary_sensor.visonic_z02
    name: Kitchen
  - entity: binary_sensor.visonic_z03
    name: Lounge
  - entity: binary_sensor.visonic_z04
    name: Kitchen back door
  - entity: binary_sensor.visonic_z05
    name: Playroom
  - entity: binary_sensor.front_camera_person
    name: Drive
  - entity: binary_sensor.back_camera_person
    name: Garden

Screenshots
As above
Expected behavior
The position of the tooltip should line up with the position of the mouse, and describe what is under the mouse pointer
Desktop (please complete the following information):

Browser: Tried:

Google chrome 126.0.6478.127 (Official Build) (64-bit) On Windows 10
Microsoft Edge  126.0.2592.68 on Windows 10
Firefox 127.0.2 on Oracle Enterprise Linux 9

Version [e.g. 22]

Smartphone (please complete the following information):

Device: Samsung Galaxy S21+
OS: Android 14
Browser:

Official Home Assistant App 2024.6.1-full
Google Chrome 126.0.6478.122

Additional context
None

That's an issue with the apexcharts library. There's not much I can do about it, but you can try the latest beta as I've updated it to the latest version.

Where exactly can I get that latest beta. I don't seem to find a branch or a release for a beta. Thanks

@cupertinomiranda did you try with a higher chart height?
I face a very similar issue.
My chart is:
apex_config:
  chart:
    height: 150px

and as soon as I change to:
apex_config:
  chart:
    height: 205px

the tooltip is rendered with the correct data.
https://github.com/user-attachments/assets/323ed1c3-5612-4d51-8d0e-475aada27b0b

@cupertinomiranda did you try with a higher chart height?
The height of my chart is 300px. I removed the height entry and that still happens.


How to install keybinder on Mac OS X

I found there is no keybinder for python 2.7 in pypi, I can only find a version for Python 3. Anyone knows where I can get the keybinder module?

@darknessomi

https://github.com/engla/keybinder


Fix bug null is not an object (evaluating 'v(this.items).children').

Please provide the case where this is happening. It should be impossible to reach a scenario where this.items isn't defined with a correctly configured component.


make serverPrefetch() rejection trappable

What problem does this feature solve?
Currently, rejections in serverPrefetch cannot be handled
eg.
serverPrefetch() {

   return Promise.reject('myError')
}

What does the proposed API look like?
Maybe send serverPrefetch rejections as renderStream error event ?
eg.
const renderStream = renderer.renderToStream(context)
renderStream.on('error', err => { ... })

Is there necessary to stop the renderer and throw an error for renderStream?
In Vue 2.6.x, I thinks this means "only this component has error, not the hold app",so it choose to stop render this component only, and the warning will be report when hydrating in browser.

I agree that stopping the rendering is too severe for a rejection, but we need at least a mean to accurately detect that something is going wrong during a serverPrefetch.

Just came across this. This issue actually prevents me from implementing renderToStream in my app at all because there's just no way of recovering from that state and for example refresh the page using renderToString. Really hope this could be fixed in Vue 2.7 and we'd get an error event if serverPrefetch fails.


Start "View in 3D" viewing with the black background by default.

The 3D View function is very welcome to the app, really amazing, in the future even better for celestial navigation, but I believe it would be better to open 3D View without the camera opening by default, instead it would start with a black background (or even there is the option to change the default behavior in the settings), and if the user wants to use the camera function they would toggle it with the "camera" button. This would be useful to save the device's battery (in my case, I use an old cell phone that uses up a lot when opening the camera, even if I then switch to the black background).

Thank you for the suggestion. I think I am more inclined to add an option for this (keeping the default as opening the camera).
Personally, I find it more useful to use to see where the sun is going to set, which is better to use with the camera. At night, it would probably be less useful to have the camera open to see the path of the moon, so I could see maybe even an option to open with camera during the day, but without the camera at night.
For now, I'll add an option to settings to change the default behavior.

A setting for this will be available in the 6.0.0 release next month


Stabilize hide attendee names

What
Stabilize hide attendee names
Why

How Tested

Process & policy checklist

[ ] I have updated the project documentation to reflect my changes if necessary.
[ ] I have read the CONTRIBUTING documentation.

Is this a breaking change?

[ ] This change causes current functionality to break.

Closing the PR, will stabilize feature when it has been in stable for some time.


Bottom_Menu.png not found only on snes9x cores.

The menu displays correctly in other cores.

Could you show with a screenshot what you mean by that?


feature: Upgrade to build schema with 3.6.0

Codecov Report

Merging #89 (124df6b) into main (c1bea5f) will increase coverage by 0.00%.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main      #89   +/-   ##
=======================================
  Coverage   99.95%   99.95%
=======================================
  Files         868      871    +3
  Lines       22742    22833   +91
  Branches     1491     1497    +6
=======================================
+ Hits        22732    22823   +91
  Misses          5        5
  Partials        5        5

Files
Coverage Δ

src/kio/schema/add_offsets_to_txn/v0/request.py
100.00% <ø> (ø)

src/kio/schema/add_offsets_to_txn/v0/response.py
100.00% <ø> (ø)

src/kio/schema/add_offsets_to_txn/v1/request.py
100.00% <ø> (ø)

src/kio/schema/add_offsets_to_txn/v1/response.py
100.00% <ø> (ø)

src/kio/schema/add_offsets_to_txn/v2/request.py
100.00% <ø> (ø)

src/kio/schema/add_offsets_to_txn/v2/response.py
100.00% <ø> (ø)

src/kio/schema/add_offsets_to_txn/v3/request.py
100.00% <ø> (ø)

src/kio/schema/add_offsets_to_txn/v3/response.py
100.00% <ø> (ø)

src/kio/schema/add_partitions_to_txn/v0/request.py
100.00% <ø> (ø)

...rc/kio/schema/add_partitions_to_txn/v0/response.py
100.00% <ø> (ø)

... and 289 more

... and 11 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Sticky error appears to be sticky across calls to isolate.loadUri in hot-reload-mode-test

In hot reload mode test the test tests/lib_2/mirrors/dynamic_load_test.dart it appears that the sticky error is not reset across calls to isolate.loadUri.
The failure pattern is as follows:
--- Command "vm_compile_to_kernel []" (took 475ms):
DART_CONFIGURATION=ReleaseSIMDBC64 /b/s/w/ir/pkg/vm/tool/gen_kernel --no-aot --platform=xcodebuild/ReleaseSIMDBC64/vm_platform_strong.dill -o /b/s/w/ir/xcodebuild/ReleaseSIMDBC64/generated_compilations/dartk/tests_lib_2_mirrors_dynamic_load_test/out.dill /b/s/w/ir/tests/lib_2/mirrors/dynamic_load_test.dart --packages=/b/s/w/ir/.packages -Ddart.developer.causal_async_stacks=true

exit code:
0

--- Command "vm" (took 07.000368s):
DART_CONFIGURATION=ReleaseSIMDBC64 xcodebuild/ReleaseSIMDBC64/dart --suppress-core-dump --hot-reload-test-mode --ignore-unrecognized-flags --packages=/b/s/w/ir/.packages /b/s/w/ir/xcodebuild/ReleaseSIMDBC64/generated_compilations/dartk/tests_lib_2_mirrors_dynamic_load_test/out.dill

exit code:
254

stdout:
IsolateMirror on 'main'
LibraryMirror on 'dynamic_load_success'
InstanceMirror on 1
InstanceMirror on 2
LibraryMirror on 'dynamic_load_success'
InstanceMirror on 3
InstanceMirror on 4
Error: Error when reading 'tests/lib_2/mirrors/DOES_NOT_EXIST': No such file or directory
Exception: Cannot load dart:_builtin

stderr:
Unhandled exception:
Error: Error when reading 'tests/lib_2/mirrors/DOES_NOT_EXIST': No such file or directory
#0      _LocalIsolateMirror._loadUri (dart:mirrors-patch/mirrors_impl.dart:138:75)
#1      _LocalIsolateMirror.loadUri (dart:mirrors-patch/mirrors_impl.dart:130:18)
<asynchronous suspension>
#2      main (file:///b/s/w/ir/tests/lib_2/mirrors/dynamic_load_test.dart:64:21)
<asynchronous suspension>
#3      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:300:19)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:171:12)

--- Re-run this test:
python tools/test.py -n dartk-reload-mac-release-simdbc64 lib_2/mirrors/dynamic_load_test

It does not reproduce on the command line although it was failing consistently on the bot.

/cc @rmacnak-google


Support promises

It would be great to have promise support in addition to traditional callback support

This is resolved by #15


prev_cost variable never used

prev_cost variable is never used https://github.com/toastdriven/pylev/blob/700700ec1b3f637ef1a59bb46f1b2176def2886d/pylev/damerau.py#L44

I opened pull request https://github.com/toastdriven/pylev/pull/20


Release plan question?

I read the updated readme with the release plans targeting 1.0, however one thing that wasn't clear was whether you will be registering the releases along the way (0.14, 0.15, ..., 1.0)? For example, if FMI.jl is installed now, FMI 0.13.3 installs rather than the new 0.14. Thanks!

Now v0.14.0 is registered :-)
Plan is to indeed release 0.14, 0.15, 0.16 ... and finally 1.0
The 0.14 is the worst breaking change, I think until 1.0 there are no heavy breaking changes to expect


List storage function

A list storage function would be super handy
list start
list view
list view * {returns list of lists}
list add (or last list?) words words
list del (or last list?) {stores somewhere}
list swap (or last list?)
list move (or last list?)
Would be very good for todo lists

This doesn't seem so useful anymore?


TypeError

hey
I want to do active learning and whenever I browse model file and reviewing , It is throwing
TypeError: Path must be a string. Received undefined
I googled it and still cannot fix it .Help me out !!!
TIA

Can you confirm that you have the enviorment installed using the instructions in the readme.  I would recommend using the docker service.


asm/ascii: pass ABI to functions

@achille-roussel when do you think you can merge this?

Not as-is, if this is the pattern we have to adopt we need to apply it to all functions who need access to the ABI

@achille-roussel i am blocked on this. when you get a chance to ship this, LMK.


Upgrade actions-setup-docker in E2E - Self Hosted workflow

Signed-off-by: Shubham Sharma<EMAIL_ADDRESS>Description
Upgrades the action version that contains a fix related to MacOS.
Issue reference
Please reference the issue this PR will close: #965
Checklist
Please make sure you've completed the relevant tasks for this PR, out of the following list:

[ ] Code compiles correctly
[ ] Created/updated tests
[ ] Extended the documentation

@mukundansundar the next run also worked in decent time limit! https://github.com/dapr/cli/runs/6077826027?check_suite_focus=true


feat: bundle and auto-load trusted setup

Motivation
Allows for easier initialization of library for Ethereum use cases.  Also bundles the trusted setup so that it does not need to be manually downloaded by consumers and stored separately.  Will simplify the lodestar use case.  Defaults to using the file passed by the user first.  If none is passed use the one found in the dist bundle (checks here for the prod case first).  If one is not found in the prod location fall back to the src location (for development purposes).  Still throws error if none is sourced (invalid bundle/build).
Description of Changes

Bundle trusted_setup.txt with the c-kzg deps for node.js bindings
Update kzg.js to functions to allow for passing a trusted setup or for loading the default setup from either the bundle or the repo src
Export getTrustedSetupFilepath for testing purposes but do not announce via types file.
Unit test getTrustedSetupFilepath to ensure proper loading.

@matthewkeil what does "enabling exceptions" do exactly and what are the implications?

@matthewkeil thanks for the explanation. I think this is a bit over my head. Could you split the exception changes into a separate PR and ask a teammate (or just someone that would know) to review it?

@jtraglia exceptions moved to #423


UFAL/FE-Bottom menu during submission creation must be fixed

Problem description
Operations panel is still at the bottom of the submission steps. It should be pinned at the bottom of the UI.

This update destroyed the footer and header style: https://github.com/dataquest-dev/dspace-angular/commit/50034e4d95956f07d7b0942749f4f99e680c493b#diff-9d93d545793ff34b0432fa3b56db41c7187bf83c1f8d08932b33762683f061c1R10


Support QCOW2 for hostDisk

The qcow2 format can support backing file, and hostDisk support for qcow2 is useful when using local storage

@lxm it is an old topic, please have a look to this past issue

@lxm it is an old topic, please have a look to this past issue

When using hostDisk, want to use the backing file feature in the qcow2 format

well, you won't be able to do clones or snapshots, for you will require a CSI plugin that supports qcow backend. Otherwise, you could use the ephemeral disk. This creates an ephemeral snapshot on top of a PVC (this PVC could reference your hostdisk). A more complicated scenario would require backing file tracking and management. That's one of the reasons why we don't directly support qcow and the default is raw.

well, you won't be able to do clones or snapshots, for this you will require a CSI plugin that supports Qcow backend. Otherwise, you could use the ephemeral disk. This creates an ephemeral snapshot on top of a PVC (this PVC could reference your hostdisk). A more complicated scenario would require backing file tracking and management. That's one of the reasons why we don't directly support qcow and the default is raw.

ephemeral disk requires raw, backing file disk.raw was hard coded in the source.

well, you won't be able to do clones or snapshots, for this you will require a CSI plugin that supports Qcow backend. Otherwise, you could use the ephemeral disk. This creates an ephemeral snapshot on top of a PVC (this PVC could reference your hostdisk). A more complicated scenario would require backing file tracking and management. That's one of the reasons why we don't directly support qcow and the default is raw.

ephemeral disk requires raw, backing file disk.raw was hard coded in the source.

Yes, the source will be raw but KubeVirt will create a qcow layer for you on top of the raw image.

If you really require a CSI storage driver that support qcow2 format, then you need to use an ad-hoc CSI storage driver.


Automate minify

I use LESS wich generates a new CSS file everytime I hit save. It would be nice
if minify would automaticly generate the minified CSS. Now I have to manualy do
it before I see the results.

Love this plug-in

Henry Hekman

Original issue reported on code.google.com by<EMAIL_ADDRESS>on 30 Sep 2014 at 7:17

Hey @GoogleCodeExporter , yo wanna this feature still?

Afaik minify on save is still available.


I tried to search something in the addon and I get this

It may help to post an actual log of the event, as they give far more information than this type of popup could hope to.

if it is a fresh install it is possible, i have forgot to add database code
i do a new release today, then you have to reinstall


Fixing bugs with some GET and TTL update paths

Calls TTL update only if the GET succeeded
Records server level errors on GetBlobOperation and GetBlobInfoOperation

Codecov Report

Merging #1005 into master will decrease coverage by 0.12%.
The diff coverage is 100%.

@@             Coverage Diff              @@
##             master    #1005      +/-   ##
============================================
- Coverage     68.34%   68.22%   -0.13%
+ Complexity     4657     4649       -8
============================================
  Files           378      378
  Lines         29645    29650       +5
  Branches       3761     3761
============================================
- Hits          20262    20228      -34
- Misses         8373     8402      +29
- Partials       1010     1020      +10

Impacted Files
Coverage Δ
Complexity Δ

...ava/com.github.ambry.router/NonBlockingRouter.java
82.24% <ø> (ø)
40 <0> (ø)
:arrow_down:

...java/com.github.ambry.router/GetBlobOperation.java
90.98% <100%> (+0.44%)
34 <0> (ø)
:arrow_down:

.../com.github.ambry.router/GetBlobInfoOperation.java
83.42% <100%> (+1.45%)
39 <0> (+2)
:arrow_up:

.../main/java/com.github.ambry.router/EncryptJob.java
92.1% <0%> (-5.27%)
4% <0%> (-1%)

...c/main/java/com.github.ambry.network/Selector.java
78.4% <0%> (-3.6%)
44% <0%> (-1%)

.../main/java/com.github.ambry.store/HardDeleter.java
79.67% <0%> (-2.91%)
40% <0%> (-2%)

...java/com.github.ambry.store/CompactionManager.java
86.75% <0%> (-2.65%)
19% <0%> (ø)

...b.ambry.network/BlockingChannelConnectionPool.java
62.6% <0%> (-2.18%)
7% <0%> (ø)

.../src/main/java/com.github.ambry.store/Journal.java
89.83% <0%> (-1.7%)
20% <0%> (-1%)

.../java/com.github.ambry.router/DeleteOperation.java
92.19% <0%> (-1.42%)
47% <0%> (-1%)

... and 7 more

Continue to review full report at Codecov.

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

@cgtz @jsjtzyy Comments addressed.


Ignore constructors in @typescript-eslint/explicit-member-accessibility

@typescript-eslint/explicit-member-accessibility by default is forcing us to add public before every constructor, even though 99.9% of the time the implicit public is expected.
We could set [ { overrides: { constructors: 'no-public' } } ] to change this: https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md#disallow-the-use-of-public-on-a-given-member

We agreed not to require public on constructors. We decided to prefer turning off enforcement (to avoid churn) rather than enforcing that there should be no modifier.
@rajsite to own turning this decision into a config change.


Fix string formatting in log_msg

same as https://github.com/prestodb/presto-admin/pull/165

looks good

merged


Transparency support

Would be cool to see how pattern looks when overlaid on each other.

Ок, I will add this feature to the GFXP.

nice @ivansergeev , probably better there than in here

Ok, ready!

That was fast @ivansergeev ! You added random as well? That's awesome. I'll get it put into the Viewer ASAP

Yes, random is also available.


Import-Excel Extended HeaderName functionality

I was using Import-Excel on a file and found that I don't like the headers names and that I don't need them all, I tried to use -HeaderName but it was not doing exactly what I needed. First It depends on the headers position and not name, and also I can't skip columns I don't need.
So I added the option to send HashTable to it (In addition to the existing array option) with the columns you want to get and there new name, this lets you do 3 things:

Select only the Columns you want (By name).
Reorder them if you need.
Rename them if you need.

Example of getting only (Process Name, Start, Path) https://github.com/ili101/ImportExcel/blob/Import-ExcelExtendedHeaderName/Examples/Import-ExcelWithHeaderName.ps1
I don't know if this is the best way to do it, or if the implementation is good, So what do you think? I will like to get your opinions.

Hi, The last line of the code is not working for me
Import-Excel -Path $path -HeaderName ([Ordered]@{Name = 'Process Name' ; StartTime = 'Start'; Path = 'Path'})
Windows 10
Powershell 5.1.16299.1146
Import Excel :5.4.4
Output:
System.Collections.Specialized.OrderedDictionary
acwebbrowser
acwebbrowser
acwebbrowser
AdAppMgrSvc
ApplicationFrameHost
armsvc
audiodg

@cprograemer84 I think you are running my example code on the original version and not on the version from my PR.
Get the version from https://github.com/ili101/ImportExcel/tree/Import-ExcelExtendedHeaderName (with git or just download from here https://github.com/ili101/ImportExcel/archive/Import-ExcelExtendedHeaderName.zip)
Then make sure it's loaded by running Import-Module [Path to extracted module version] -Force
Then run the example code (Update us if it works for you 👍)


[bug] visible config doesn't work

Describe the bug
I created app using tauri with react
to avoid the initial white blank screen, I set the app to visible: false in tauri.ocnfig.json
and in react I invoke command which open the window and set it to visible
The issue is that although I set visible to false in the config file,
the window it still open for few moments and then closing when the app starts.
You can see the whole repo here
tauri.config.json
main.rs
Reproduction
Download the latest release from here
Open the app and you will see that it opens laggy when it starts, because it opens for half a second and immediately close, before it should open at all.
Expected behavior
The app should not open at all when I set visible to false in the config, and it will open only after I tell it to open from react using invoke
Platform and versions
[✔] Environment
    - OS: Windows 10.0.22621 X64
    ✔ WebView2: 115.0.1901.203
    ✔ MSVC: Visual Studio Community 2022
    ✔ rustc: 1.71.0 (8ede3aae2 2023-07-12)
    ✔ Cargo: 1.71.0 (cfd3bbd8f 2023-06-08)
    ✔ rustup: 1.26.0 (5af9b9484 2023-04-05)
    ✔ Rust toolchain: stable-x86_64-pc-windows-msvc (environment override by RUSTUP_TOOLCHAIN)
    - node: 18.17.1
    - npm: 9.6.7

[-] Packages
    - tauri [RUST]: 1.4.1
    - tauri-build [RUST]: 1.4.0
    - wry [RUST]: 0.24.3
    - tao [RUST]: 0.16.2
    - @tauri-apps/api [NPM]: 1.4.0
    - @tauri-apps/cli [NPM]: 1.4.0

[-] App
    - build-type: bundle
    - CSP: unset
    - distDir: ../dist
    - devPath: http://localhost:1420/
    - framework: React
    - bundler: Vite

Stack trace
No response
Additional context
By the way, currenly I set decorations to false so at least it doesn't opens with the topbar so it's less noticeable

I'm also see a 'tao window' appear, despite setting .visible(false):
    .setup(|app| {
      #[cfg(debug_assertions)]
      {
        app.get_window("main").unwrap().open_devtools();
      }

      let hidden = tauri::WindowBuilder::new(
        app, "hidden", tauri::WindowUrl::App("hidden.html".into())
      )
      .visible(false)
      .build()?;
      // hidden.open_devtools();

      Ok(())
    })

I solved it.
the real problem is - if you choose hidden: true along with maximized: true on window config in config.tauri.json,
the window isn't hidden in the startup of the application because of the minimized option ,
I solved it by removing the minimized from the config, and manually send command from frontend when the app starts to maximize the window and make it visible.

I commented out my .setup() code and added this config section for a second window. What did I do wrong here? I've getting a panic on build.
    "windows": [
      {
        "fullscreen": false,
        "height": 600,
        "resizable": true,
        "title": "main",
        "width": 800
      },
      {
        "fullscreen": false,
        "height": 200,
        "resizable": false,
        "title": "hidden",
        "visible": false,
        "width": 800
      }
    ]

I also tried setting other attributes on the window before commenting out my .setup() code, adding .maximized(true) and .decorations(false). I noticed the window flashed to maximized before being restore to 800 x 600, not sure if that means something is running after .build()?; and overriding attributes set in code beforehand.

@gabcoh
Just use my existing solution
See here:
https://github.com/thewh1teagle/happy/blob/main/rust/src-tauri/src/main.rs#L26
https://github.com/thewh1teagle/happy/blob/main/rust/src-tauri/tauri.conf.json
https://github.com/thewh1teagle/happy/blob/main/rust/src/App.tsx#L45

Thanks for linking your source. My app requires a second hidden window, I'll try triggering the window creation from the JS side via invoking a command fn as you have done.

@gknapp
This will solve you two problems:

Flashing window when starting
White screen when starting until the frontend loads

I believe that's worked, I'm still confirming as when .visible(false), dev tools are not opened for the second window. I'm about to send an IPC message from the hidden to the main and verify.
I thought I'd add that I have this tauri plugin in my .toml config that is probably interfering with window attributes on start-up:
tauri-plugin-window-state

I'm hitting a similar problem in dioxus, in which wry::webview::WebViewBuilder::with_visible seems to have no effect. Here is the full code from dioxus:
pub fn build(
    cfg: &mut Config,
    event_loop: &EventLoopWindowTarget<UserWindowEvent>,
    proxy: EventLoopProxy<UserWindowEvent>,
) -> (WebView, WebContext) {
    let builder = cfg.window.clone();
    let window = builder.build(event_loop).unwrap();
    let file_handler = cfg.file_drop_handler.take();
    let custom_head = cfg.custom_head.clone();
    let index_file = cfg.custom_index.clone();
    let root_name = cfg.root_name.clone();

    // We assume that if the icon is None in cfg, then the user just didnt set it
    if cfg.window.window.window_icon.is_none() {
        window.set_window_icon(Some(
            tao::window::Icon::from_rgba(
                include_bytes!("./assets/default_icon.bin").to_vec(),
                460,
                460,
            )
            .expect("image parse failed"),
        ));
    }

    let mut web_context = WebContext::new(cfg.data_dir.clone());

    let mut webview = WebViewBuilder::new(window)
        .unwrap()
        .with_transparent(cfg.window.window.transparent)
        .with_url("dioxus://index.html/")
        .unwrap()
        .with_ipc_handler(move |window: &Window, payload: String| {
            // defer the event to the main thread
            if let Ok(message) = serde_json::from_str(&payload) {
                _ = proxy.send_event(UserWindowEvent(EventData::Ipc(message), window.id()));
            }
        })
        .with_custom_protocol(String::from("dioxus"), move |r| {
            protocol::desktop_handler(r, custom_head.clone(), index_file.clone(), &root_name)
        })
        .with_file_drop_handler(move |window, evet| {
            file_handler
                .as_ref()
                .map(|handler| handler(window, evet))
                .unwrap_or_default()
        })
        .with_web_context(&mut web_context);

    #[cfg(windows)]
    {
        // Windows has a platform specific settings to disable the browser shortcut keys
        use wry::webview::WebViewBuilderExtWindows;
        webview = webview.with_browser_accelerator_keys(false);
    }

    if let Some(color) = cfg.background_color {
        webview = webview.with_background_color(color);
    }

    // These are commented out because wry is currently broken in wry
    // let mut web_context = WebContext::new(cfg.data_dir.clone());
    // .with_web_context(&mut web_context);

    for (name, handler) in cfg.protocols.drain(..) {
        webview = webview.with_custom_protocol(name, handler)
    }

    if cfg.disable_context_menu {
        // in release mode, we don't want to show the dev tool or reload menus
        webview = webview.with_initialization_script(
            r#"
                        if (document.addEventListener) {
                        document.addEventListener('contextmenu', function(e) {
                            e.preventDefault();
                        }, false);
                        } else {
                        document.attachEvent('oncontextmenu', function() {
                            window.event.returnValue = false;
                        });
                        }
                    "#,
        )
    } else {
        // in debug, we are okay with the reload menu showing and dev tool
        webview = webview.with_devtools(true);
    }

    (webview.with_visible(false).build().unwrap(), web_context)
                      // ^^^^ this doesn't do anything
}

@HKalbasi that should be fixed in the next release of wry

This should be fixed by now, let me know if the issue still exists

Turns out, if the tauri-plugin-window-state plugin (v0.1.1) is present, it opens a hidden window.

I encountered the same issue. When using tauri-plugin-window-state = "2.0.0-rc", it causes the default hidden window to be opened. In the .window-state.json, I can see that it is set to visible.


Consider Storage Options

Storage
The app will need different storage solutions dependent upon whether it is packaged for desktop (Electron), web or mobile.
Electron

https://github.com/cheton/is-electron
https://github.com/sindresorhus/electron-store

Dexie.js also works for Electron, and is the implementation that is currently being used. Perhaps it will also work on mobile if the app is wrapped up in NativeScript...
Web

Probably Dexie.js. I've used it before and I really like it.

Mobile
Cross that bridge when we come to it, I guess. I believe it will be harder to have an "Export Article" feature on mobile, though not impossible... It will likely be preferable to simply have publishing options.

Dexie is suitable for our purposes, now and until server integration.

Dexie is suitable for our purposes, now and until server integration.


How to define uniqueFileID on load() function

This is the api situation for me.
image url: http://..../media/4a37-91cb-365a967328be.png
post: http://...api/v1/photos
delete: http://...api/v1/photos/{uniqueFileID}
Now, based on the above situation, i've modified the process() and revert() functions.
I cant get my head around the load() function, the source would be image url but how can i define its uniqueFileId so it calls the appropriate url for deletion.
my init files are
myFiles = [
        {
            // the server file reference
            source: '12345',
            // source: 'http://..../media/4a37-91cb-365a967328be.png', // doesn't work // Cannot read property 'name' of undefined.
            serverId: '67890',

            // set type to local to indicate an already uploaded file
            options: {
                type: 'local',
                // file: {
                //     name: 'my-file.png',
                //     size: 3001025,
                //     type: 'image/png'
                // }
            }
        }
    ];

EDIT
So, i found i could use FilePoster plugin, now it loads the image needed for display and i can keep the source with its id. Now the question is, how to make it delete? when i click on the X icon on image it just removes image locally, does not initiate delete api request.
Also, i noticed that FilePoster needs file object with size property in it. I think FilePoster can get content-length when it loads the image url and use it as size. This way if we dont indicate the filesize manually, FilePoster can take care of it.

The source property is the serverId and will be passed to the load endpoint to restore the file from the server.
The server object has both a remove and revert endpoint for removal of the file.
FilePoster is for showing a preview image or different image from the actual file data. To show an image preview you need the ImagePreview plugin.
Please read the documentation carefully.


chore: remove aws-lambda dependency

The aws-lambda package is actually a standalone CLI (lambda) unrelated to the aws-lambda import path used in lambdas.
The types for imports of "aws-lambda" do in fact come from the @types/aws-lambda package but do not describe the aws-lambda npm package (rather AWS makes it available at run time).
This just removes the dependency.

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

v7.67.6
GitHub release

Your semantic-release bot :package::rocket:


No intellisense with multiple resources in one file

When multiple resources are in one file (seperated by "---" for instance), no intellisense is available at all.
Example file

apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  hostname: fred
  containers:
  - name: myapp
    image: <Image>
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
    ports:
      - containerPort: 80
---
apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  containers:
  - name: myapp
    image: <Image>
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
    ports:
      - containerPort: <Port>

I've made a note of this here but because the issue occurs locally as well, I am opening a new issue.

Curses.  I thought we had fixed ages ago but evidently not.  Or it came back when I did the live schemas thing.  I'll take a look - thanks for letting us know.

Possible regression in the Red Hat YAML language service, maybe due to a big architectural change they did a few months back.  It may be that there's a new contract we are meant to use to access multi-document schemas; otherwise this may require a fix upstream.
https://github.com/redhat-developer/yaml-language-server/pull/81#issuecomment-544325131

Sorry @brandonkal, we're still trying to get clarity on this - we have a possible replacement approach but it's one that we rejected before because it caused other bugs, but it might be working now.
A possible workaround is to downgrade the YAML extension to 0.4.1. To do this, open the command palette (using Ctrl+Shift+P or F1 depending on your OS), choose Install Specific Version of Extension... and choose the YAML extension version 0.4.1.  I haven't tested it, but that was the last version before they did the major rework that removed the way we were doing this, and multi-document was definitely working before then...!

I believe this should now be fixed - the YAML extension updated a few days ago - check you have 0.6.1 of the YAML extension and let us know if the issue is still occurring.
Sorry this has taken a while - it's a non-trivial dependency chain unfortunately - many thanks to Josh from Red Hat for figuring out how to fix the regression after a significant architectural rework.

Thank you @itowlson
I can confirm that it suggestions are available control + Space.


Refactoring: Move localStore utils to design-system package

Context
Move localStore utils to design-system package
Summary

Relevant Technical Choices

To-do

User-facing changes

Testing Instructions

QA

[x] This is a non-user-facing change and requires no QA

This PR can be tested by following these steps:

UAT

[x] UAT should use the same steps as above.

This PR can be tested by following these steps:

Reviews
Does this PR have a security-related impact?

Does this PR change what data or activity we track or use?

Does this PR have a legal-related impact?

Checklist

[ ] This PR addresses an existing issue and I have linked this PR to it in ZenHub
[x] I have tested this code to the best of my abilities
[ ] I have verified accessibility to the best of my abilities (docs)
[ ] I have verified i18n and l10n (translation, right-to-left layout) to the best of my abilities
[x] This PR contains automated tests (unit, integration, and/or e2e) to verify the code works as intended (docs)
[ ] I have added documentation where necessary
[x] I have added a matching Type: XYZ label to the PR

Related: https://github.com/google/web-stories-wp/pull/8573#discussion_r682431484
https://github.com/google/web-stories-wp/pull/8561

There's now a tiny merge conflict


KDE WALLET

VSCode Version:1.47.3
OS Version:kubuntu 20.04

Steps to Reproduce:

linux kubuntu 20.04  set kwallet to password ""
Open vscode keyring message comes up.. but it is not keyring on KDE.
It  wants the sudo password.  it also locks up the whole system.  I am wondering if this is a security breach because my keyring is managed by kwallet so it does not exist as keyring.  The password is "" for kwallet not the sudo password.  It locks up the system until you type the sudo password.  SOMETHING IS VERY FISHY!!!!
I want it to stop asking me.. and I don't need to type the password unless I push.  I want to manually do this now.. it is more trouble than worth what you save me.. and there is no option not to abort the so called "keyring." as you call it.

Does this issue occur when all extensions are disabled?: Yes/No
YES

Think this is related to auth?

@bksubhuti What is the keyring message that comes up in step 2?

I'll have to get back to you.  It does not do this "every time"  but almost every time.  I cannot take a screen shot because my whole system is locked until I type the sudo password.  It says something like...  please type your password to unlock the keyring.  However, it does not say kwallet, and I have deleted my kwallets and created a new one with "" password.  It still asks for the keyring password and only stops on the sudo pwd.

Here is the situation.. my wallet was deleted and then created with "" as password which should negate every request.
It does not do this all the time either.. In any case.. while you are working on this.. how do I disable this and type in my password manually like before.  The amount of pushes I do are very low.

@bksubhuti - I haven't used kwallet but I have used gnome-keyring, and that looks to me like the gnome-keyring dialog that I'm used to seing. Perhaps gnome-keyring is installed on your system and therefore VS Code is trying to use it to look up your SSH key passphrase, rather than kwallet. If gnome-keyring is installed, you can run the "seahorse" program to change its keyring password. Change the keyring password for gnome-keyring to be the same as your login password and that should make it automatically unlock on login. Or if you're using automatic logins, which are NOT a good idea security-wide but some people use them anyway, then you might have to set the gnome-keyring password to '' (empty) to disable it. But that is INSECURE, just as setting your kwallet password to '' is insecure, so use that option at your own risk.
Here's a link to read more about the "seahorse" command:
https://wiki.archlinux.org/index.php/GNOME/Keyring#Troubleshooting

I did notice that gnome keyring was installed but seahorse was not installed using synaptic.  It could have been that originally when I first had this problem, I installed seahorse to set the user pwd to "" as a possible fix that didn't work.  I guess I should have done that wit kwallet.  But now that i did that with kwallet, gnome keyring was still installed.  Just a guess..  Perhaps when I uninstalled seahorse g keyring remained.
I took a chance and removed gnome keyring hoping it would not mess up the current wallet.. seems okay for now.
I'll update if this problem persists.. I think it will be fixed.  I guess it would be impossible for keyring to come up if it does not exist.

have not had any problems now.. closed.

Now that I "actually" want to check in something it won't let me.  This is really a big problem.  Why can't I just do this manually like before.. ?  Please just make this an option for those who have trouble .  I saw this
https://github.com/microsoft/vscode/issues/92972#issuecomment-625751232
and it is full circle.
Does not work with KDE .

okay.. this solved my problem.. preferences.. git don't use automatic auth

kwallet has no Secret Service implementation, because of this vscode uses GNOME keyring.
https://rtfm.co.ua/en/what-is-linux-keyring-gnome-keyring-secret-service-and-d-bus/

https://bugs.kde.org/show_bug.cgi?id=313216

Could VSC support KWallet?

Please support KWallet. I don`t want to be required to install gnome-keyring

I tried doing the keyring thing.. it worked but it messes up the kde thing.
For me the only solution was disabling the github save password.
I don't push often so, this is the solution for me rather than doing the
wallet thing every time i boot up
Bhante Subhuti
https://AmericanMonk.org
https://withmetta.net
On Sat, 19 Dec 2020 at 16:59, Konstantin Dyachenko<EMAIL_ADDRESS>wrote:

Please support KWallet. I don`t want to be required to install
gnome-keyring
https://askubuntu.com/questions/1256345/cant-connect-to-github-with-vs-code
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/microsoft/vscode/issues/104319#issuecomment-748454656,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEKXQWFWILIEZN3RRWOVVG3SVR6B5ANCNFSM4PY6X5HA
.

Any progress on this? I really don't like having to run GNOME Keyring alongside KWallet.

Any progress on this? I really don't like having to run GNOME Keyring alongside KWallet.

is this a kwallet limitation or vscode lacking integration with kwallet?

I'm pretty sure it is lack of integration and lack of support for kde.
I checked what is the most popular DE and it seems that Gnome wins while those on the reddit forum discussion said that KDE was their preferred (like myself).  Plus I would guess it is preferred among other distros like manjaro and arch.  Certainly #2 would be a good guess.  https://www.reddit.com/r/linux/comments/9m5i7p/most_popular_linux_desktop_environment/

is this a kwallet limitation or vscode lacking integration with kwallet?

Unfortunately, the answer is a limitation of KDE Wallet. Namely, KDE Wallet doesn't support the FreeDesktop.org secrets interface, which is what VSCode uses for storing keys. Right now I believe GNOME Keyring is the only existing implementation of that interface, but the "correct" solution to this problem is that KDE Wallet needs to support that interface.

Even after disabling the setting to use automatic git authentication if you sign in manually to use some extension such as Git lens, the window to access or create the "Default" keyring is still shown.

https://invent.kde.org/frameworks/kwallet/-/merge_requests/11

I would to add here that vscode with XFCE on Arch Linux has the same problem, requiring to install gnome things would messy my system. There is not a way to fix this without installing gnome stuff?

Wonder if this would be of any help in the mean time: https://aur.archlinux.org/packages/kwallet-secrets

Hi all 👋 I just wanted to provide a summary on this...
Secrets on Linux in vscode (provided by keytar) are stored using org.freedesktop.secrets which is suppose to be an abstraction layer over keyrings that implement it properly.
With that said, I've never had much success in understanding if KDE has a keyring/wallet that is compatible, even though my reading says that the primary use case was for abstracting over gnome and KDE and others... I can tell you for sure that gnome-keyring works, but I need some help from folks who use KDE to understand if KDE actually has an alternative or not and that status of that.
This link:
https://forum.authpass.app/t/what-is-the-provider-of-org-freedesktop-secrets-for-kde-plasma-5/162
Says:

Here’s a current answer from a KDE developer, so I consider this to the be official answer. He said:

KWallet still doesn’t implement org.freedesktop.secrets, and KSecretService is dead.

That's from August 2021.
I have seen several folks mention that KeePassXC is apparently a solution (although they don't mention it in the context of vscode) so that might be a valid alternative for us.
In short, my recommendation is:

provide feedback to KDE to finish their implementation of org.freedesktop.secrets
use gnome-keyring or give KeePassXC a try and let me know how it goes!

provide feedback to KDE to finish their implementation of org.freedesktop.secrets

KDE's implementation is now complete, it's just waiting on testing/merging. Any testing (and associated feedback) would be appreciated.

Wonder if this would be of any help in the mean time: https://aur.archlinux.org/packages/kwallet-secrets

I believe this is the merge request I've linked above, just bundled into an AUR package. I can also confirm it works well for me :+1:

Thank you for the update @matthew-jones-uk!

Can you confirm this is working for the kde that ships with kubuntu 22.04 ?  I would very much like to go back to kde.  I moved to gnome/ubuntu because of this issue.

IDK, probably not because it first needs to be merged and then released and April is almost over but I can confirm that the basics seem to work if the patch is applied to a recent version.

Appreciated.
Okay.. looks like I'll stay on Gnone for a while longer.  I don't use the rolling KDE Neon (it was a nightmare).

Writing login information to the keychain failed with error 'GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files'.

@matthew-jones-uk do you know what version of KDE that made it into (or will make it into)? I'm on Opensuse Tumbleweed and I'm still seeing this issue. At the moment I'm running KDE Framework 5.94.0. I haven't seen any activity on that merge request for 4 weeks, and if I'm reading it right it's still up in the air?

I'm on gnome now and I think I will be for quite a long time now.  I'm starting to like pure ubuntu better than kde now as well.
I just want things to work and Ubuntu is better for that.  Perhaps I will test to PopOS one day which has a better rep for "just working"..

note another possible workaround:

in User\Extension\Git disable Use Integrated Ask Pass
in bashrc set GIT_ASKPASS:

if [ x"$GIT_ASKPASS" = x ]; then
export GIT_ASKPASS=/usr/lib/ssh/ssh-askpass
fi

restart vscode / session
git push
assuming ksshpassword is the launched handler
unselect save option for the prompt for Username (if you embed user name in git remote url, you won't be prompted)
select save option for the prompt for Password

no prompt will be displayed for future actions.
one entry is added in the wallet keyed as<EMAIL_ADDRESS>if you have different PAT for different work, clearly this won't work for you.

Hi all wave I just wanted to provide a summary on this...
Secrets on Linux in vscode (provided by keytar) are stored using org.freedesktop.secrets which is suppose to be an abstraction layer over keyrings that implement it properly.
With that said, I've never had much success in understanding if KDE has a keyring/wallet that is compatible, even though my reading says that the primary use case was for abstracting over gnome and KDE and others... I can tell you for sure that gnome-keyring works, but I need some help from folks who use KDE to understand if KDE actually has an alternative or not and that status of that.
This link: https://forum.authpass.app/t/what-is-the-provider-of-org-freedesktop-secrets-for-kde-plasma-5/162
Says:

Here’s a current answer from a KDE developer, so I consider this to the be official answer. He said:

KWallet still doesn’t implement org.freedesktop.secrets, and KSecretService is dead.

That's from August 2021.
I have seen several folks mention that KeePassXC is apparently a solution (although they don't mention it in the context of vscode) so that might be a valid alternative for us.
In short, my recommendation is:

provide feedback to KDE to finish their implementation of org.freedesktop.secrets
use gnome-keyring or give KeePassXC a try and let me know how it goes!

This doesnt seem to work exactly on debian bullseye headless (no desktop)p either. I get the same dbus error, even after installing gnome-keyring and manually starting gnome-keyring-daemon.
dbus-monitor of install/uninstall of gnome-keyring and trying several different ways to get the secretservice to work, restarting the keyring daemon, unlocking it and/or logging into it, replacing it, and doing all of these things both with pseudo root and without.
Spam follows, because there are some variations with the sent signals but not many:
dbus-monitor
signal time=1657117256.852264 sender=org.freedesktop.DBus -> destination=:1.18 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.18"
signal time=1657117256.852364 sender=org.freedesktop.DBus -> destination=:1.18 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.18"
method call time=1657117352.682666 sender=:1.15 -> destination=org.freedesktop.DBus serial=6 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
   string "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'"
method return time=1657117352.682687 sender=org.freedesktop.DBus -> destination=:1.15 serial=13 reply_serial=6
signal time=1657117352.683493 sender=org.freedesktop.DBus -> destination=:1.15 serial=5 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.15"
signal time=1657117352.683505 sender=org.freedesktop.DBus -> destination=(null destination) serial=9 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.15"
   string ":1.15"
   string ""
method call time=1657117352.887788 sender=:1.19 -> destination=org.freedesktop.DBus serial=1 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=Hello
method return time=1657117352.887829 sender=org.freedesktop.DBus -> destination=:1.19 serial=1 reply_serial=1
   string ":1.19"
signal time=1657117352.887874 sender=org.freedesktop.DBus -> destination=(null destination) serial=10 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.19"
   string ""
   string ":1.19"
signal time=1657117352.887936 sender=org.freedesktop.DBus -> destination=:1.19 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.19"
method call time=1657117352.888342 sender=:1.19 -> destination=org.gnome.keyring serial=2 path=/org/gnome/keyring/daemon; interface=org.gnome.keyring.Daemon; member=GetControlDirectory
method return time=1657117352.888540 sender=:1.4 -> destination=:1.19 serial=57 reply_serial=2
   string "/run/user/1000/keyring"
method call time=1657117352.890140 sender=:1.19 -> destination=org.freedesktop.DBus serial=3 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RequestName
   string "org.gnome.keyring"
   uint32 0
method return time=1657117352.890156 sender=org.freedesktop.DBus -> destination=:1.19 serial=3 reply_serial=3
   uint32 2
method call time=1657117352.890414 sender=:1.19 -> destination=org.gnome.SessionManager serial=4 path=/org/gnome/SessionManager; interface=org.gnome.SessionManager; member=Setenv
   string "GNOME_KEYRING_CONTROL"
   string "/run/user/1000/keyring"
error time=1657117352.890443 sender=org.freedesktop.DBus -> destination=:1.19 error_name=org.freedesktop.DBus.Error.ServiceUnknown reply_serial=4
   string "The name org.gnome.SessionManager was not provided by any .service files"
method call time=1657117352.890598 sender=:1.19 -> destination=org.gnome.SessionManager serial=5 path=/org/gnome/SessionManager; interface=org.gnome.SessionManager; member=Setenv
   string "SSH_AUTH_SOCK"
   string "/run/user/1000/keyring/ssh"
error time=1657117352.890620 sender=org.freedesktop.DBus -> destination=:1.19 error_name=org.freedesktop.DBus.Error.ServiceUnknown reply_serial=5
   string "The name org.gnome.SessionManager was not provided by any .service files"
method call time=1657117352.891007 sender=:1.19 -> destination=org.freedesktop.DBus serial=6 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'"
method return time=1657117352.891032 sender=org.freedesktop.DBus -> destination=:1.19 serial=6 reply_serial=6
method call time=1657117352.891343 sender=:1.19 -> destination=org.freedesktop.DBus serial=7 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RequestName
   string "org.freedesktop.secrets"
   uint32 0
method return time=1657117352.891374 sender=org.freedesktop.DBus -> destination=:1.19 serial=7 reply_serial=7
   uint32 2
method call time=1657117407.100849 sender=:1.4 -> destination=org.freedesktop.DBus serial=58 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
   string "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'"
method return time=1657117407.100875 sender=org.freedesktop.DBus -> destination=:1.4 serial=29 reply_serial=58
method call time=1657117407.100887 sender=:1.14 -> destination=org.freedesktop.DBus serial=8 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
   string "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'"
method return time=1657117407.100900 sender=org.freedesktop.DBus -> destination=:1.14 serial=11 reply_serial=8
method call time=1657117407.100906 sender=:1.12 -> destination=org.freedesktop.DBus serial=6 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
   string "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'"
method return time=1657117407.100915 sender=org.freedesktop.DBus -> destination=:1.12 serial=10 reply_serial=6
method call time=1657117407.100921 sender=:1.8 -> destination=org.freedesktop.DBus serial=6 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
   string "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'"
method return time=1657117407.100932 sender=org.freedesktop.DBus -> destination=:1.8 serial=14 reply_serial=6
method call time=1657117407.102725 sender=:1.19 -> destination=org.freedesktop.DBus serial=8 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
   string "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'"
method return time=1657117407.102764 sender=org.freedesktop.DBus -> destination=:1.19 serial=8 reply_serial=8
signal time=1657117407.102776 sender=org.freedesktop.DBus -> destination=:1.8 serial=6 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.8"
signal time=1657117407.102792 sender=org.freedesktop.DBus -> destination=(null destination) serial=7 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.8"
   string ":1.8"
   string ""
signal time=1657117407.103004 sender=org.freedesktop.DBus -> destination=:1.12 serial=8 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.12"
signal time=1657117407.103030 sender=org.freedesktop.DBus -> destination=(null destination) serial=9 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.12"
   string ":1.12"
   string ""
signal time=1657117407.104798 sender=org.freedesktop.DBus -> destination=:1.4 serial=10 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string "org.freedesktop.secrets"
signal time=1657117407.104860 sender=org.freedesktop.DBus -> destination=(null destination) serial=11 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string "org.freedesktop.secrets"
   string ":1.4"
   string ":1.14"
signal time=1657117407.104923 sender=org.freedesktop.DBus -> destination=:1.14 serial=12 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string "org.freedesktop.secrets"
signal time=1657117407.104960 sender=org.freedesktop.DBus -> destination=:1.4 serial=12 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string "org.gnome.keyring"
signal time=1657117407.104997 sender=org.freedesktop.DBus -> destination=(null destination) serial=13 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string "org.gnome.keyring"
   string ":1.4"
   string ":1.14"
signal time=1657117407.105028 sender=org.freedesktop.DBus -> destination=:1.14 serial=13 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string "org.gnome.keyring"
signal time=1657117407.105045 sender=org.freedesktop.DBus -> destination=:1.4 serial=14 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.4"
signal time=1657117407.105063 sender=org.freedesktop.DBus -> destination=(null destination) serial=15 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.4"
   string ":1.4"
   string ""
signal time=1657117407.105092 sender=org.freedesktop.DBus -> destination=:1.19 serial=16 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.19"
signal time=1657117407.105115 sender=org.freedesktop.DBus -> destination=(null destination) serial=17 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.19"
   string ":1.19"
   string ""
signal time=1657117407.105199 sender=org.freedesktop.DBus -> destination=:1.14 serial=18 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string "org.freedesktop.secrets"
signal time=1657117407.105210 sender=org.freedesktop.DBus -> destination=(null destination) serial=19 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string "org.freedesktop.secrets"
   string ":1.14"
   string ""
signal time=1657117407.105220 sender=org.freedesktop.DBus -> destination=:1.14 serial=20 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string "org.gnome.keyring"
signal time=1657117407.105224 sender=org.freedesktop.DBus -> destination=(null destination) serial=21 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string "org.gnome.keyring"
   string ":1.14"
   string ""
signal time=1657117407.105232 sender=org.freedesktop.DBus -> destination=:1.14 serial=22 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.14"
signal time=1657117407.105240 sender=org.freedesktop.DBus -> destination=(null destination) serial=23 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.14"
   string ":1.14"
   string ""

@miigotu kwallet support for org.freedesktop.secrets is implemented in a submitted patch but languishing in acceptance in KDE upstream.
It should come eventually but the patch needs to be reviewed and accepted, I believe.

I don't use any desktop software or frameworks at all, its a headless server.

@miigotu pardon my confusion, but why does vscode's behavior with respect to secrets matter if you don't have a GUI?

@matthew-jones-uk the MR you refered to is now out in the wild, how do I enable vscode to use that new feature ?

I think it should just work if you have kwallet enabled and running.

Thanks @SuperSandro2000
I do have it enabled

But when I do a git pull within code I get prompted for my ssh key password in the terminal itself
± % git pull                                                                                !9925
Enter passphrase for key '/home/adel/.ssh/id_rsa':

I'm waiting for the support of vscode for KDE wallet in Kubuntu 22.04 and got curious about when it will work. Here are some dates that I've found some far.
Short version: It seems the MR that @matthew-jones-uk referred [^1] could come out in KDE 5.26 that is now in beta and will be released in October 6th [^2]. I couldn't find when it will come to Linux distributions though.
Long version:

The MR was merged in July 7th and it's present in the tag v5.97.0 [^3] of August 7th, where it looks like v5.97.0 corresponds to the tag of KDE Frameworks.
It was announced in KDE Frameworks 5.97 the introduction of the secrets service API [^4].
KDE Frameworks 5.98 (KF5) is being included in all KDE Plasma packages like Plasma Workspace [^5] so it's likely this change might land in KDE Plasma 5.26.

[^1]: KWallet Framework MR 11: org.freedesktop.secrets DBus API initial support
[^2]: KDE Plasma Future releases
[^3]: KWallet Framework tags
[^4]: KDE Frameworks 5.97 announcement
> Introduce Secret Service API

[^5]: Plasma Workspace: Update kf5 version requirement to 5.98.0

Voidlinux ships a fresh enough KDE and Kwallet, and vscode authentication using kwallet works as expected on that distro and without bugs from vscode.
The problem is essentially solved it seems

I can confirm it works well with Kubuntu 22.10. I upgraded today. Now I don't need to use KeePassXC anymore for VSCode authentication. Here are my versions:
Operating System: Kubuntu 22.10
KDE Plasma Version: 5.25.5
KDE Frameworks Version: 5.98.0
Qt Version: 5.15.6
Kernel Version: 5.19.0-23-generic (64-bit)
Graphics Platform: Wayland

In Kubuntu 22.10, this issue has been resolved. I just upgraded my machine.
Operating System: Kubuntu 22.10
KDE Plasma Version: 5.25.5
KDE Frameworks Version: 5.98.0
Kernel Version: 5.19.0-23-generic (64-bit)

Given this is finally showing up in KDE versions, I feel confident in closing this since there's no more action items for the VS Code team. Excited to see more usage of libsecret!


FAQ - Add Where can I find help? question

Description
Add the question "Where can I find help?" to the conda.org FAQ (docs/faq.md) and answer it.

Hi @kathatherine i want to work on this issue ,can you please assign me this.

Hi @kathatherine I have added the required faq section. Please review the PR #84

Thanks for taking this initiative on this @ankushbhardwaj408.

Thanks @travishathaway for the all the suggestions. Please assign me some more issues so that i can contribute to Conda and improve my skills.


[SREFTP-4698] [BUGFIX] - Fix trimming of name resulting in a trailing hyphen

Remove any trailing hyphen in the name-env string trimmed to 20 chars

@vicendominguez Please merge and release tag v3.0.1


"fix : Implement a Simple File Reader/Writer Class and Methods in C++"

Implemented  the FileHandler class in FileHandler.h file and  the FileHandler::ReadFile method, FileHandler::WriteFile method, FileHandler::AppendFile method and FileHandler::FileExists method in FileHandler.cpp
Completed the task to read/write/append files (file handling)

Merged

This is an automated message from Fork, Commit, Merge [BOT].

Thank you for your contribution! Your pull request has been merged. The files have been reset for the next contributor.
What's next?
If you're looking for more ways to contribute, I invite you to check out my other projects. Just click here to find more. These projects contain real issues that you can help resolve. You can also check out the Influences section in the README to find more projects similar to this one.
Also please leave a star to this project if you feel it helped you, i would really appreciate it.
I look forward to seeing your contributions!


Pronouns section needed

Hi everyone, I tried to insert my pronouns (he/him) in as the Display name, but the result is quite ugly.
Also I think it would be neccesary discuss it, and also make it clear that this IS a possibility, writting pronouns is obviously personal and optional, but it would be useful to avoid people feeling unseen.
In my case, when searching for predoctoral scientist part, it appears like this:

and when looking it inside the profile it looks like this.

There's a way that could add this section under the profile and would only be visible if the author adds this information on the front matter of index.md. It's in the to do list.

I have added an optional field that you can include in your author _index.md page to specify the pronouns.
Follow this schema:
pronouns: "*(xx/xx)*"

Closing.

Thank you so much Pablo, even if this seems little, it really makes a huge change for many.
You're the best!!!


Move email content into templates

Reviewer Notes
Is there anything you would like reviewers to give additional scrutiny?
Setup
make clean
make server_run
make client_run
make office_client_run

Please keep eye on server logs in your command line for the email content.
Scenario 1
Go through the process of making a move and verify "move submitted" email is formatted correctly.
https://docs.google.com/document/d/1QOCFZ4w003ouJxPYXdnCtTWqBR3MGTDqCBtqjtpXpkE
Scenario 2
As an office user, find the move you submitted and approve it. Verify the "move approved" email is formatted correctly.
https://docs.google.com/document/d/1gIQZprWzJJE_sAAyg5NViPwy9ckL5RK37gFq1fEfipU
Scenario 3
As an office user, find another move that has been submitted and cancel it. Verify the "move canceled" email is formatted correctly.
https://docs.google.com/document/d/1gIQZprWzJJE_sAAyg5NViPwy9ckL5RK37gF
Code Review Verification Steps

[ ] Request review from a member of a different team.
[ ] Have the Pivotal acceptance criteria been met for this change?

References

Pivotal story for this change

The server tests are failing b/c they don't use the constructor, so not going to have access to the templates unless you manually inject them, so probably need to update those to use the constructor, something like below.
NewMoveApproved(suite.DB(), suite.logger, &auth.Session{UserID: approver.ID, ApplicationName: auth.OfficeApp}, "milmovelocal", move.ID)


Raising Environment Error on Single Node Clusters

This addresses #39 - would appreciate some feedback as I'm not sure if this is a great idea or not.
Currently, if you start client = dask_databricks.client() on a single node databricks cluster, it'll allow you to, but then hang indefinitely if you try to carry out any tasks (makes sense since there are no workers to do them).
My thinking is it would be handy to throw an error if we can since if we're on a single-node cluster we already know that any attempted use of the dask_databricks client is going to end badly.
I wanted to implement this a little like this:
if os.getenv("NUMNODES") == "1":
    raise EnvironmentError(
        "You appear to be running dask-databricks on a "
        "single-node cluster. Dask requires at least one worker node "
        "in order to function as expected."
    )

But databricks doesn't appear to have an environment variable like "NUMNODES" - it does have a "MASTER" environment variable, which for single node clusters tells you the core working as the driver (such as local[4]) and in distributed clusters gives you the tcp url.
I've used that to implement it like this:
if os.getenv("MASTER") and "local[" in os.getenv("MASTER"):

My thinking is that this is a pretty conservative check (owing to the fact that databricks could hypothetically change this implementation detail at some point, and I can't find any documentation of it). If there is no MASTER variable, nothing will get raised, so the only possible false positive is if local[4] is set as MASTER in a multi-node cluster which I don't think is possible?
It's still a little hackier than I'd of liked though, but does boost the user-friendliness for beginners. Any thoughts?

Thanks for the review!


npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>

When i do npm install, i get warning;
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none was installed.
My dependencies looks like:
{
    "angular": "1.5.9",
    "grunt": "^1.0.1",
    "grunt-angular-translate": "^0.3.0",
}

Your environment

version of angular-translate
0.3.0
version of angular
"1.5.9"

@firehist any idea what causes this?


Finding where and how to change remote server connections is not intuitive

From a marketplace review (From Abhay Prakash Tiwari on 3/31/2022). Here's the relevant comment:
"2. not documented well to modify server url"
While the Jupyter: Specify Jupyter server for connections allows me to specify a different server, remembering and finding this command could be made more intuitive. Perhaps provide a choice in the kernel picker to change your remote server?
This may dovetail into the work we're doing here: https://github.com/microsoft/vscode/issues/146942

Blocked on lazy controllers.

Fixed with the new kernel picker


Install yamlfmt, if its not available

It could be more user-friendly to install yamlfmt for the user, if it's not already installed on the system

I wanted this extension to format my github-actions-workflow files, but not having Go installed I had to find another way to install yamlfmt
so I used https://github.com/Araxeus/vendorfiles (installed using bun/nodejs) to install and keep it updated from github releases

with the following config:
  yamlfmt:
    version: v0.12.1
    repository: https://github.com/google/yamlfmt
    vendorFolder: "{vendorFolder}"
    files:
      - "{release}/yamlfmt_{version}_Windows_x86_64.tar.gz":
          - yamlfmt.exe

I write this hoping it can help someone in my situation


Add class "ui-layout-hidden" for hidden containers

This PR adds a ui-layout-hidden class to hidden containers elements.
The motivation for this PR is that, if a container has content with absolute positioning and non-zero padding, the contents of the containers overlap if either of them gets collapsed. (tested under Chrome 46.0)
The ui-layout-hidden class allows us to handle hidden containers via CSS, e.g., using display: none.
I've created a simple plunkr here. You can try to uncomment either of the two <script ..> imports to see the difference:
http://plnkr.co/edit/mNYI8S6FBReKm5hOC9sj?p=preview

Great idea!

Fantastic work with the Plunker, makes my job as a reviewer so much easier.
As far as I know, it'd be wise to add this:
.ui-layout-hidden {
  display: none;
}```

to ui-layout.css

Anyone against?

+1

@whummer if you can add that into this PR (and rebase it all down to a single commit with a message that follows this), I'm all ready to bring this into core.  Thanks again!

@SomeKittens: updated the PR, should be ready to merge. thanks.

Fantastic!

Landed in e7103c4


46: load this plugin after quartz else quartz schedulers are not read…

Must load after quartz plugin or we mess up the scheduler thread management

ok thanks


Edit button always edits expression

Testing #114345
I can set an expression and a hit count on function breakpoints:

but the ✏ button only changes the expression.
If there is only 1 button, I would have expected it to either:

edit the function name
only hsve 1 button if either expression or hit count was set and 2 buttons if both expression and hit count were set (the second button to edit the hit count)

As it stands I have to realize that the edit button only edits the expression and then cancel and right click if I want to edit the hit count or function name.

@TylerLeonhardt I like the dea of having two buttons, however would you expect different icons? Since I think showing two of the same icon does not really work, or does it?
fyi @misolori

@TylerLeonhardt I like the dea of having two buttons, however would you expect different icons? Since I think showing two of the same icon does not really work, or does it?
fyi @misolori

however would you expect different icons?

Yes I'd expect different icons. I don't have any suggestions for what they should look like though... maybe an expression is something like [?]✎ but then [#]✎ is hit count? (where the pencil is in front of a piece of paper with ? or # on it)

however would you expect different icons?

Yes I'd expect different icons. I don't have any suggestions for what they should look like though... maybe an expression is something like [?]✎ but then [#]✎ is hit count? (where the pencil is in front of a piece of paper with ? or # on it)

might need a 3rd button for log points... not sure.

might need a 3rd button for log points... not sure.

What about giving the edit button an alt command as well? With #101995 implemented the tooltip would convey both.
IIRC there was a recent request for these buttons to support a dropdown list of commands from which to pick. Pinging @eamodio as I think it may have come from him.

What about giving the edit button an alt command as well? With #101995 implemented the tooltip would convey both.
IIRC there was a recent request for these buttons to support a dropdown list of commands from which to pick. Pinging @eamodio as I think it may have come from him.

Could the edit button show a dropdown with the edit options? I'd really like to avoid making icons complicated as they will slow the user down as they parse what it means.

Could the edit button show a dropdown with the edit options? I'd really like to avoid making icons complicated as they will slow the user down as they parse what it means.

With the recent submenu work, we can support these actions being drop down menus.

With the recent submenu work, we can support these actions being drop down menus.

@misolori Yeah I like that idea!
Assigning optimisticaly to January and might push out to february

@misolori Yeah I like that idea!
Assigning optimisticaly to January and might push out to february

Pushing this out to next milestone since I did not have time for this in endgame.
fyi @weinand and @connor4312 for the submenu idea

Pushing this out to next milestone since I did not have time for this in endgame.
fyi @weinand and @connor4312 for the submenu idea

@isidorn yes, let's try a submenu.

To verify:
Have a function breakpoint, make sure that clikcing on the Edito action shows the menu as shown in the picture


Update scoring queries with default point based thresholds

@JHUAPL-hjg1 I get this error on the /api/scoring/model-runs/ endpoint -
    raise FieldError(
django.core.exceptions.FieldError: Unsupported lookup 'min_spatial_distance_threshold' for ManyToOneRel or join on the field not permitted.

I pulled down the latest main branch of the metrics testing repo and applied the migrations - is there a different branch I should be using?

@JHUAPL-hjg1 I get this error on the /api/scoring/model-runs/ endpoint -
    raise FieldError(
django.core.exceptions.FieldError: Unsupported lookup 'min_spatial_distance_threshold' for ManyToOneRel or join on the field not permitted.

I pulled down the latest main branch of the metrics testing repo and applied the migrations - is there a different branch I should be using?

@mvandenburgh Should be fixed with https://github.com/ResonantGeoData/RD-WATCH/pull/426/commits/ddc0317553721e11f129af680972cd3c06e9d0df


Build and push photos binary to aws

This change is

Nice, so an up to date binary will always be present on a successful build. This will be potentially handy for demos.
LGTM

yup. although most of this PR (and the many many commits) was about making circle-ci work again


DocsArchive-<IP_ADDRESS>Auto archive content

Please don't merge this PR until target archive repo PR https://github.com/OPS-E2E-PPE/docs-archive-test-target/pull/294 is merged into live branch.
Auto archive content to https://github.com/OPS-E2E-PPE/docs-archive-test-target.git

Docs Build status updates of commit d4e3fcb:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error]

Cannot sync git repo to specified commit because branch Release_Archive_master_2020-01-14-06-47-49 has been deleted or has been force pushed: fatal: couldn't find remote ref refs/heads/Release_Archive_master_2020-01-14-06-47-49

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


Add autocorrection for Style/CombinableLoops

As long as the offense is not a false positive, I believe this autocorrection would be safe.
What I am a little concerned about now is what the outcome should be if there are comments in between 🤔

Before submitting the PR make sure the following are checked:

[x] The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences.
[x] Wrote good commit messages.
[ ] Commit message starts with [Fix #issue-number] (if the related issue exists).
[x] Feature branch is up-to-date with master (if not - rebase it).
[x] Squashed related commits together.
[x] Added tests.
[x] Ran bundle exec rake default. It executes all tests and runs RuboCop on its own code.
[x] Added an entry (file) to the changelog folder named {change_type}_{change_description}.md if the new code introduces user-observable changes. See changelog entry format for details.

What I am a little concerned about now is what the outcome should be if there are comments in between 🤔

I guess such comments should be moved before the combined loop, but after any comments that might have been preceding the original first loop.


Added background color to spell checker demo. Fixed order of shapes s…

Fix for issue #407:
Added background color to spell checker demo.
Fixed order of shapes so that underlines are shown even if a background shape is used.

@afester the fix has the side effect that the underlines are now painted over the text (e.g. if text contains "gyqp" characters)
I think it would better to use:
getChildren().add(1, underlineShape);

Then the underlines are painted over the background, but under the text.

@JFormDesigner I know - but is that not the expected behavior? For example, Eclipse paints the spell checking line over the text:

and MS Word shows the same behavior.
Anyway, getChildren().add(1, underlineShape); would work - the background nodes and the underline nodes for each segment would then be inserted alternately at the beginning of the ParagraphBox (followed by the selection and the caret shape, followed by the segment nodes). (Note: another effect is then that the underline is hidden by a text selection).

@afester OK, sorry, you're right. It's better to have the underlines paint over all other, especially the text selection.

👍


Add TravisCI configuration

Once TravisCI is enabled for the repository we should add its configuration. Something like:
dist: xenial
language: python
python:
    - 2.7
    - 3.5
    - 3.6
    - 3.7
install:
    - pip install -r requirements.txt
    - pip install -r requirements-dev.txt
    - pip install -e .
script:
    - flake8
    - pytest --cov

TravisCI is set up. And this seems like a reasonable CI config to me!

Fixed by 7fd899e.
Thanks @jordan-wright!


Customized order form 469

task - 469
Create a customized order form
A custom order form consists of the following elements:
Name of product
Photo
Description
Cost
A custom order form is divided into 3 columns
Below each photo, a field for filling out the number of the needed product is created

https://codifi.atlassian.net/browse/BGCMMSHPFY-469


add Phive

Phi, curiously, can also be expressed all in fives as:
5 ^ .5 * .5 + .5 = Φ
This provides a great, simple way to compute phi on a calculator or spreadsheet!

Great use of five() 👍 :shipit: