RunAs no-root in alluxio change the permission of UFS

Alluxio Version:
What version of Alluxio are you using?
alluxio-fuse:2.3.0-SNAPSHOT-f83f51e
Describe the bug
A clear and concise description of what the bug is.
I deploy fluid in my cluster,in dataset.yaml,I set mountPoint: local:///tmp,owner uid=844,gid=844,and in runtime.yaml I set runAs:uid=844,gid=844,after I create the dataset and runtime,the UFS /tmp permisson all change to 844,
To Reproduce
Steps to reproduce the behavior (as minimally and precisely as possible)
Expected behavior
A clear and concise description of what you expected to happen.
alluxio should not change the permission of UFS
Urgency
Describe the impact and urgency of the bug.
Additional context
Add any other context about the problem here.

It's fixed by https://github.com/fluid-cloudnative/fluid/pull/143

resolved


LogEventInfo.MessageTemplate - Subset of LogEventInfo.Properties

Ordered by position (instead of hashcode).
It is possible to override these properties using the standard LogEventInfo-Properties-IDictionary-interface.
Allows capture of Microsoft FormattedLogValues without loosing the order given in the MessageTemplate. https://github.com/NLog/NLog.Extensions.Logging/pull/125

@304NotModified Have fixed merge conflicts, so we can continue the journey.

Al lot of actions are now O(n)? - which is a bit unfortunate, what the use of the dictionary then ;)

As long the number for MessageTemplateProperties is below 100 parameters, then you will not notice O(n). Normal Properties will still work as O(1).

Correct me if I didn't understand it correctly.

I want to have a property that works just like Microsofts FormattedLogValues, Serilogs MessageTemplate.Tokens / PropertyBinder.ConstructProperties or NLog StructuredEvents Template.Holes.
And using a standard array is much more optimal memory-wise than a dynamic container like a dictionary. Since we have to merge two containers (user-defined-properties + message-defined-properties). Then I suggest that the message-defined-properties uses the most optimal sub-container.

@304NotModified Alternative then we should just leave the Properties-dictionary alone, and just create a new merged-readonly-view of Properties and MessageTemplateProperties. Then just change all locations to use the merged-readonly-view by default instead of the Properties-dictionary.

@304NotModified Changed the PropertiesDictionary so it always allocates and uses the dictionary. This gives extra allocation for structured-logging, but gives O(1) lookup speed for both property-types.

Thanks! These kind of PRs are a bit hard to review, but will try to look at it soon.

Thanks! These kind of PRs are a bit hard to review, but will try to look at it soon.

It is a key-stone for the implementation of structured logging, so it mostly depends on how fast you want the structured logging up and running for NLog ver. 4.5.

 Why isn't the current logeventInfo.Properties not enough? AFAIK we are missing the following features when using logeventInfo.Properties:

the ordering of the messageProperties is lost
the info of what is from the template and what not is lost.

I prefer adding all properties to the current properties collection and maybe add some more metadata if we need it for the ordering.

I prefer adding all properties to the current properties collection and maybe add some more metadata if we need it for the ordering.

That is what the PropertiesDictionary is doing.

That is what the PropertiesDictionary is doing.

true, but i'm not keen on the logEventInfo.MessageTemplateProperties option.

Why do we need a separate collection for the messageProperties? Why isn't the current logeventInfo.Properties not enough? AFAIK we are missing the following features when using (only) logeventInfo.Properties:
the ordering of the messageProperties is lost
the info of what is from the template and what not is lost.

Is this sound and complete?

true, but i'm not keen on the logEventInfo.MessageTemplateProperties option.

You are welcome to suggest a different name, or a different approach for providing the messagetemplate-properties in the correct order.
The ordering is important, when logging to Json or a no-sql-database.

@304NotModified We could also make the parsed MessageTemplate fully public (Like you did for NLog 4.5 Alpha) if that is more acceptable. Could properly make it so it is just a single array allocation of PropertyEntries-struct (Name + Value + Format)

@304NotModified Else we can replace MessageTemplateProperties with a public method called LogEventInfo.AddProperties(IList<KeyValuePair<string, object>> properties) ?

Yes, Something like that. I'm now creating a small (non-code) proposal

I'm guessing 9 out of 10 doesn't use a combination of structured-logging-properties and custom-properties. And

I think also this is true

@304NotModified We could also make the parsed MessageTemplate fully public (Like you did for NLog 4.5 Alpha) if that is more acceptable.

I like this, but I could understand this is a memory eater. Less keep this as plan B

We can then consider to give a small life-boat, by extending the different property-layoutrenders to dive in and only output the property-subset found in PositionDictionary.MessageProperties

Could you elaborate on this? Which layout renderers should we change? I think ${event-properties} and ${all-event-properties}?

Could you elaborate on this? Which layout renderers should we change? I think ${event-properties} and ${all-event-properties}?

Yes, and also JsonLayout.IncludeAllProperties and Log4JXmlEventLayout.IncludeAllProperties

I was thinking of something like this:

In code:
    public interface IProperties : IDictionary<object, object>
    {
        ///
        /// Add propery to the end of the collection
        ///
        /// <param name="key"></param>
        /// <param name="value"></param>
        void AddOrderedPropery(string key, object value);

        ///
        /// Add properies to the end of the collection
        ///
        /// <param name="properties"></param>
        void AddOrderedProperies(IEnumerable<KeyValuePair<string, object>> properties);

        ///
        /// Remove ordered property by key
        ///
        /// <param name="key"></param>
        /// <returns>found?</returns>
        bool RemoveOrderedProperty(string key);

        ///
        /// Get ordered properties in order of the template
        ///
        /// <returns></returns>
        IList<object> GetOrderedProperties();

        ///
        /// Get all properties which aren't in the template
        ///
        /// <returns></returns>
        IDictionary<object, object> GetNonOrderedProperties();

    }

  public class EventProperties : IProperties
    {
        ///
        /// Dict from key to index
        ///
        private Dictionary<string, int> _propertyIndexes;

        private Dictionary<object, object> _allProperties;

        public EventProperties()
        {
            _propertyIndexes = new Dictionary<string, int>(); //todo lazy init?
            _allProperties = new Dictionary<object, object>();//todo lazy init?
        }

        #region delegate _allProperties

        /// Returns an enumerator that iterates through the collection.
        /// <returns>An enumerator that can be used to iterate through the collection.</returns>
        public IEnumerator<KeyValuePair<object, object>> GetEnumerator()
        {
            return _allProperties.GetEnumerator();
        }

        /// Returns an enumerator that iterates through a collection.
        /// <returns>An <see cref="T:System.Collections.IEnumerator" /> object that can be used to iterate through the collection.</returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return ((IEnumerable)_allProperties).GetEnumerator();
        }

        /// Copies the elements of the <see cref="T:System.Collections.ICollection" /> to an <see cref="T:System.Array" />, starting at a particular <see cref="T:System.Array" /> index.
        /// <param name="array">The one-dimensional <see cref="T:System.Array" /> that is the destination of the elements copied from <see cref="T:System.Collections.ICollection" />. The <see cref="T:System.Array" /> must have zero-based indexing. </param>
        /// <param name="index">The zero-based index in <paramref name="array" /> at which copying begins. </param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="array" /> is null. </exception>
        /// <exception cref="T:System.ArgumentOutOfRangeException">
        /// <paramref name="index" /> is less than zero. </exception>
        /// <exception cref="T:System.ArgumentException">
        /// <paramref name="array" /> is multidimensional.-or- The number of elements in the source <see cref="T:System.Collections.ICollection" /> is greater than the available space from <paramref name="index" /> to the end of the destination <paramref name="array" />.-or-The type of the source <see cref="T:System.Collections.ICollection" /> cannot be cast automatically to the type of the destination <paramref name="array" />.</exception>
        public void CopyTo(Array array, int index)
        {
            ((ICollection)_allProperties).CopyTo(array, index);
        }

        /// Gets an object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection" />.
        /// <returns>An object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection" />.</returns>
        public object SyncRoot => ((ICollection)_allProperties).SyncRoot;

        /// Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection" /> is synchronized (thread safe).
        /// <returns>true if access to the <see cref="T:System.Collections.ICollection" /> is synchronized (thread safe); otherwise, false.</returns>
        public bool IsSynchronized => ((ICollection)_allProperties).IsSynchronized;

        /// Determines whether the <see cref="T:System.Collections.IDictionary" /> object contains an element with the specified key.
        /// <returns>true if the <see cref="T:System.Collections.IDictionary" /> contains an element with the key; otherwise, false.</returns>
        /// <param name="key">The key to locate in the <see cref="T:System.Collections.IDictionary" /> object.</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="key" /> is null. </exception>
        public bool Contains(object key)
        {
            return ((IDictionary)_allProperties).Contains(key);
        }

        /// Gets a value indicating whether the <see cref="T:System.Collections.IDictionary" /> object has a fixed size.
        /// <returns>true if the <see cref="T:System.Collections.IDictionary" /> object has a fixed size; otherwise, false.</returns>
        public bool IsFixedSize => ((IDictionary)_allProperties).IsFixedSize;

        /// Adds the specified key and value to the dictionary.
        /// <param name="key">The key of the element to add.</param>
        /// <param name="value">The value of the element to add. The value can be null for reference types.</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="key" /> is null.</exception>
        /// <exception cref="T:System.ArgumentException">An element with the same key already exists in the <see cref="T:System.Collections.Generic.Dictionary`2" />.</exception>
        public void Add(object key, object value)
        {
            _allProperties.Add(key, value);
        }

        /// Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1" />.
        /// <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1" />.</param>
        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only.</exception>
        public void Add(KeyValuePair<object, object> item)
        {
            _allProperties.Add(item.Key, item.Value);
        }

        /// Removes all keys and values from the <see cref="T:System.Collections.Generic.Dictionary`2" />.
        public void Clear()
        {
            _allProperties.Clear();
        }

        /// Determines whether the <see cref="T:System.Collections.Generic.ICollection`1" /> contains a specific value.
        /// <returns>true if <paramref name="item" /> is found in the <see cref="T:System.Collections.Generic.ICollection`1" />; otherwise, false.</returns>
        /// <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1" />.</param>
        public bool Contains(KeyValuePair<object, object> item)
        {
            throw new NotImplementedException();
        }

        /// Copies the elements of the <see cref="T:System.Collections.Generic.ICollection`1" /> to an <see cref="T:System.Array" />, starting at a particular <see cref="T:System.Array" /> index.
        /// <param name="array">The one-dimensional <see cref="T:System.Array" /> that is the destination of the elements copied from <see cref="T:System.Collections.Generic.ICollection`1" />. The <see cref="T:System.Array" /> must have zero-based indexing.</param>
        /// <param name="arrayIndex">The zero-based index in <paramref name="array" /> at which copying begins.</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="array" /> is null.</exception>
        /// <exception cref="T:System.ArgumentOutOfRangeException">
        /// <paramref name="arrayIndex" /> is less than 0.</exception>
        /// <exception cref="T:System.ArgumentException">The number of elements in the source <see cref="T:System.Collections.Generic.ICollection`1" /> is greater than the available space from <paramref name="arrayIndex" /> to the end of the destination <paramref name="array" />.</exception>
        public void CopyTo(KeyValuePair<object, object>[] array, int arrayIndex)
        {
            throw new NotImplementedException();
        }

        /// Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1" />.
        /// <returns>true if <paramref name="item" /> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1" />; otherwise, false. This method also returns false if <paramref name="item" /> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1" />.</returns>
        /// <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1" />.</param>
        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only.</exception>
        public bool Remove(KeyValuePair<object, object> item)
        {
            throw new NotImplementedException();
        }

        /// Determines whether the <see cref="T:System.Collections.Generic.Dictionary`2" /> contains the specified key.
        /// <returns>true if the <see cref="T:System.Collections.Generic.Dictionary`2" /> contains an element with the specified key; otherwise, false.</returns>
        /// <param name="key">The key to locate in the <see cref="T:System.Collections.Generic.Dictionary`2" />.</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="key" /> is null.</exception>
        public bool ContainsKey(object key)
        {
            return _allProperties.ContainsKey(key);
        }

        /// Determines whether the <see cref="T:System.Collections.Generic.Dictionary`2" /> contains a specific value.
        /// <returns>true if the <see cref="T:System.Collections.Generic.Dictionary`2" /> contains an element with the specified value; otherwise, false.</returns>
        /// <param name="value">The value to locate in the <see cref="T:System.Collections.Generic.Dictionary`2" />. The value can be null for reference types.</param>
        public bool ContainsValue(object value)
        {
            return _allProperties.ContainsValue(value);
        }

        /// Implements the <see cref="T:System.Runtime.Serialization.ISerializable" /> interface and returns the data needed to serialize the <see cref="T:System.Collections.Generic.Dictionary`2" /> instance.
        /// <param name="info">A <see cref="T:System.Runtime.Serialization.SerializationInfo" /> object that contains the information required to serialize the <see cref="T:System.Collections.Generic.Dictionary`2" /> instance.</param>
        /// <param name="context">A <see cref="T:System.Runtime.Serialization.StreamingContext" /> structure that contains the source and destination of the serialized stream associated with the <see cref="T:System.Collections.Generic.Dictionary`2" /> instance.</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="info" /> is null.</exception>
        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            _allProperties.GetObjectData(info, context);
        }

        /// Implements the <see cref="T:System.Runtime.Serialization.ISerializable" /> interface and raises the deserialization event when the deserialization is complete.
        /// <param name="sender">The source of the deserialization event.</param>
        /// <exception cref="T:System.Runtime.Serialization.SerializationException">The <see cref="T:System.Runtime.Serialization.SerializationInfo" /> object associated with the current <see cref="T:System.Collections.Generic.Dictionary`2" /> instance is invalid.</exception>
        public void OnDeserialization(object sender)
        {
            _allProperties.OnDeserialization(sender);
        }

        /// Removes the value with the specified key from the <see cref="T:System.Collections.Generic.Dictionary`2" />.
        /// <returns>true if the element is successfully found and removed; otherwise, false.  This method returns false if <paramref name="key" /> is not found in the <see cref="T:System.Collections.Generic.Dictionary`2" />.</returns>
        /// <param name="key">The key of the element to remove.</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="key" /> is null.</exception>
        public bool Remove(object key)
        {
            return _allProperties.Remove(key);
        }

        /// Gets the value associated with the specified key.
        /// <returns>true if the <see cref="T:System.Collections.Generic.Dictionary`2" /> contains an element with the specified key; otherwise, false.</returns>
        /// <param name="key">The key of the value to get.</param>
        /// <param name="value">When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the <paramref name="value" /> parameter. This parameter is passed uninitialized.</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="key" /> is null.</exception>
        public bool TryGetValue(object key, out object value)
        {
            return _allProperties.TryGetValue(key, out value);
        }

        /// Gets the <see cref="T:System.Collections.Generic.IEqualityComparer`1" /> that is used to determine equality of keys for the dictionary.
        /// <returns>The <see cref="T:System.Collections.Generic.IEqualityComparer`1" /> generic interface implementation that is used to determine equality of keys for the current <see cref="T:System.Collections.Generic.Dictionary`2" /> and to provide hash values for the keys.</returns>
        public IEqualityComparer<object> Comparer => _allProperties.Comparer;

        /// Gets the number of key/value pairs contained in the <see cref="T:System.Collections.Generic.Dictionary`2" />.
        /// <returns>The number of key/value pairs contained in the <see cref="T:System.Collections.Generic.Dictionary`2" />.</returns>
        public int Count => _allProperties.Count;

        /// Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only.
        /// <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns>
        public bool IsReadOnly { get; }

        /// Gets or sets the value associated with the specified key.
        /// <returns>The value associated with the specified key. If the specified key is not found, a get operation throws a <see cref="T:System.Collections.Generic.KeyNotFoundException" />, and a set operation creates a new element with the specified key.</returns>
        /// <param name="key">The key of the value to get or set.</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="key" /> is null.</exception>
        /// <exception cref="T:System.Collections.Generic.KeyNotFoundException">The property is retrieved and <paramref name="key" /> does not exist in the collection.</exception>
        public object this[object key]
        {
            get => _allProperties[key];
            set => _allProperties[key] = value;
        }

        /// Gets an <see cref="T:System.Collections.Generic.ICollection`1" /> containing the keys of the <see cref="T:System.Collections.Generic.IDictionary`2" />.
        /// <returns>An <see cref="T:System.Collections.Generic.ICollection`1" /> containing the keys of the object that implements <see cref="T:System.Collections.Generic.IDictionary`2" />.</returns>
        public ICollection<object> Keys { get; }

        /// Gets an <see cref="T:System.Collections.Generic.ICollection`1" /> containing the values in the <see cref="T:System.Collections.Generic.IDictionary`2" />.
        /// <returns>An <see cref="T:System.Collections.Generic.ICollection`1" /> containing the values in the object that implements <see cref="T:System.Collections.Generic.IDictionary`2" />.</returns>
        public ICollection<object> Values { get; }

        #endregion

        #region Implementation of IProperties

        ///
        /// Add propery to the end of the collection
        ///
        /// <param name="key"></param>
        /// <param name="value"></param>
        public void AddOrderedPropery(string key, object value)
        {
            _allProperties[key] = value;
            _propertyIndexes[key] = _propertyIndexes.Count;
        }

        ///
        /// Add properies to the end of the collection
        ///
        /// <param name="properties"></param>
        public void AddOrderedProperies(IEnumerable<KeyValuePair<string, object>> properties)
        {
            foreach (var property in properties)
            {
                AddOrderedPropery(property.Key, property.Value);
            }
        }

        ///
        /// Remove ordered property by key
        ///
        /// <param name="key"></param>
        /// <returns>found?</returns>
        public bool RemoveOrderedProperty(string key)
        {
            var removed = _allProperties.Remove(key);

            if (removed)
            {
                _propertyIndexes.Remove(key);
            }
            return removed;
        }

        ///
        /// Get ordered properties in order of the template
        ///
        /// <returns></returns>
        public IList<object> GetOrderedProperties()
        {
            var arr = new object[_propertyIndexes.Count];
            foreach (var prop in _propertyIndexes)
            {
                arr[prop.Value] = _allProperties[prop.Value];
            }

            return arr;
        }

        ///
        /// Get all properties which aren't in the template
        ///
        /// <returns></returns>
        public IDictionary<object, object> GetNonOrderedProperties()
        {
            var dict = new Dictionary<object,object>();

            foreach (var prop in _allProperties)         {
                if (!_propertyIndexes.ContainsKey(prop.Value)) //todo handle string?
                {
                    dict.Add(prop.Key, prop.Value);
                }
            }
            return dict;
        }

        #endregion
    }

notes:

I renamed it to orderedProperty, but maybe templateProperty is better.
I've generated a lot of the delegating code with Resharper (haven't checked it yet)
I'm not sure sure if the orderedProperties names are always strings, anyway this gives issues in GetNonOrderedProperties (see code)
if I'm missing something, please let me know
feel free to edit / counter propose. Your expertise on memory usage is really appreciated! (i'm more a code complexity guy)

Will this new IEventProperties-interface have a new LogEventInfo-property, and the old LogEventInfo-property will just point to this one?

The idea is that LogEventInfo.Property type will be changed from IDictionary<object, object> to IProperties. As this property is getter only, it's backwards comp.

Was think it would cause issues, but if not then fine with me.
I have now implemented the new interface and removed LogEventInfo.MessageTemplateProperties

The idea is that LogEventInfo.Property type will be changed from IDictionary<object, object> to IProperties. As this property is getter only, it's backwards comp.

Think it is only compatible when doing a recompile, when just replacing an old NLog-assembly with the new that have changed the return-type of the Properties-property, then one get this exception:
Unhandled Exception: System.MissingMethodException: Method not found: 'System.Collections.Generic.IDictionary`2<System.Object,System.Object> NLog.LogEventInfo.get_Properties()'.
   at TestApplication.Program.Main(String[] args)

This is my advanced test application:
        static void Main(string[] args)
        {
            var hello = new NLog.LogEventInfo();
            hello.Properties["Hello"] = "Goodbye";
            Console.ReadKey();
        }

Think it is only compatible when doing a recompile, when just replacing an old NLog-assembly with the new that have changed the return-type of the Properties-property, then one get this exception:

Oops, binary breaking change I think. See https://github.com/dotnet/corefx/blob/c02d33b18398199f6acc17d375dab154e9a1df66/Documentation/coding-guidelines/breaking-change-rules.md#signatures
Not sure if we could fix this by also adding IDictionary<object, object> LogEventInfo.Properties and implicit interface implementation (we need also a new interface I think)

Oops, binary breaking change I think.

Just like I was expecting. Guess we need to keep the LogEventInfo.Properties unchanged. Now we just have to figure out how this OrderedProperties should work.

Should it only return the properties marked as ordered ?
Should it just be an IList or be a custom interface that by default return all properties, but has a property to return the subset of ordered-properties?

Just like I was expecting. Guess we need to keep the LogEventInfo.Properties unchanged.

Or considering moving to NLog 5. (well replacing NLog 5's current state with this)

Or considering moving to NLog 5.

The only reason for getting this OrderedProperties or MessageTemplateProperties or NamedParameters is to have an interface to correctly capture the structured logging details from other frameworks like Microsoft Extension Logging. And maybe also use the interface to correctly forward the structured logging details to another logging framework (can see that logging frameworks often have adapters to each other).
Still confused why we can have LogEventInfo.Parameters and LogEventInfo.Properties, but we cannot have LogEventInfo.NamedParameters.

Still confused why we can have LogEventInfo.Parameters and LogEventInfo.Properties, but we cannot have LogEventInfo.NamedParameters (optimized to point to the same PropertiesDictionary).

Is it a NamedParameters? Or NamedButAlsoOrderedParameters? The latter is really a bit confusing.

Maybe time for Plan B - MessageTemplate-object. Then Microsoft Extension Logging will just have to pay the penalty of allocating the MessageTemplate-object to correctly forward the structured-logging-details.

Is the MessageTemplate as class or struct? Is the allocating penalty high?

Is the MessageTemplate as class or struct? Is the allocating penalty high?

Will probably be the same as allocating a List-object with an internal array of hole-structs (Name + Value + Format + possible message-string-indexof). Will probably be an interface, that we will implemented by the PropertiesDictionary.
I'm guessing you would have a better idea of this interface, since you created NLog.StructuredEvents that I have based the logic upon (So think the Template-object but without the Literals-array)

@304NotModified Now changed the PropertiesDictionary to also implement IList (that only returns the positional properties, and added LogEventInfo.NamedParameters.

So a namedparameter is a kind of property? I have difficulties to explain that to someone.
Counter proposal: drop namedparameter property and add a method: GetPropertiesDefinedInTemplate (work name) that returns the IList, or maybe event better a new IOrdererDictionary (custom made interface). Maybe we need also an "add" method then.

So a namedparameter is a kind of property? I have difficulties to explain that to someone.

As easy to explain as MessageTemplate is also kind of a property-collection :). Actually just noticed that Serilog doesn't ensure the Properties-collection is sorted (though it usually is), but Serilog LogEvent.Properties automatically includes the properties in MessageTemplate.

As easy to explain as MessageTemplate is also kind of a property-sub-collection :).

true, but it not visible now from the code. 2 properties that are changing the same stuff doesn't look right.

true, but it not visible now from the code. 2 properties that are changing the same stuff doesn't look right.

But you want this. Since you want the Properties to include the MessageTemplate-properties.

All I want is 2 kind properties on the logeventinfo (named and unnamed), not 3.

All I want is 2 kind properties on the logeventinfo (named and unnamed), not 3.

Lets make the MessageTemplate then. Then Seq will also be very happy.

but that one was slow?

but that one was slow?

Can make something that is fast. Will work just like now then instead of IList then it will be IMessageTemplate.

So
Adding LogEventInfo.MessageTemplate with type IMessageTemplate, correct?
Will IMessageTemplate have the full template or is it the IList of KeyValue pairs?

Will IMessageTemplate have the full template or is it the IList of KeyValue pairs?

Something like this:
    struct NamedParameter
    {
        public readonly string Name;
        public readonly string Format;
        public readonly object Value;
    }

    interface IMessageTemplate
    {
        string Message { get; }
        bool Positional { get; }
        IList<NamedParameter> NamedParameters { get; }
    }

What about (only names changed):
    struct TemplateParameter
    {
        public readonly string Name;
        public readonly string Format;
        public readonly object Value;
    }

    interface IMessageTemplate
    {
        string Template { get; }
        bool Positional { get; }
        IList<TemplateParameter> Parameters{ get; }
    }

What about (only names changed):

Works for me. Should we keep IList or make it IEnumerable ? Can make it implicit readonly by throwing not supported on Add, Remove, etc.

Works for me. Should we keep IList or make it IEnumerable ?

Good one. The IEnumerable  is really small and throwing runtime exceptions is bad. What about creating a NLog.IReadonlyList (which inherits from IEnumerable )?

Else we can make it like this:
interface IMessageTemplateParameterList : IEnumerable<MessageTemplateParameter>
{
        MessageTemplateParameter this[int index] { get; }
        int Count { get; }
}

And just have this property on LogEventInfo:
IMessageTemplateParameterList  MessageTemplateParameterList { get; set; }

I was thinking now:
class LogEventInfo
{
   ...
  IMessageTemplate MessageTemplate {get;}
}

interface IMessageTemplateParameterList : IEnumerable<MessageTemplateParameter>
{
        MessageTemplateParameter this[int index] { get; }
        int Count { get; }
}

    struct TemplateParameter
    {
        public readonly string Name;
        public readonly string Format;
        public readonly object Value;
    }

    interface IMessageTemplate
    {
        string Template { get; }
        bool Positional { get; }
        IMessageTemplateParameterList Parameters{ get; }
    }

I have made some small hacks that might need extra scrutiny:

LogEventInfo implements IMessageTemplate (as it already has the Message-property).
MessageTemplate is an example of how to implement the IMessageTemplate. It inherits directly from List to minimize allocation. Right now only used for testing, but maybe others will find it useful (Like NLog Extension Logging).

LogEventInfo implements IMessageTemplate

Is this needed (for performance?), its a bit strange. I would remove it if not needed. Also, is the message of the logevent the same as the template's message? Isn't the first one rendered?

LogEventInfo implements IMessageTemplate

Is this needed (for performance?), its a bit strange. I would remove it if not needed.

After a good nights sleep, then I have removed this oddity, and changed it to an allocation of MessageTemplateReadOnly

Also, is the message of the logevent the same as the template's message? Isn't the first one rendered?

LogEventInfo.FormattedMessage is one already rendered. LogEventInfo.Message is the raw message. MessageTemplate.Message is the raw messsage.

Also, do we still need the propertiesdictionary (and interface)? It was needed with the 2 properties on logeventinfo, but now we have 3 parameters.

Also, do we still need the propertiesdictionary (and interface)?

PropertiesDictionary ensures LogEventInfo.Properties includes the parameters from LogEventInfo.MessageTemplate.

Have been jumping through many hoops so far, without anything being decided yet.

Sorry, it's hard to discuss things, slow-chatting and while the code evolves all the time.  I prefer also a decision before building.

Reason why I have now reverted to introducing LogEventInfo.MessageTemplate was that you selected this solution yourself in NLog 4.5 Alpha.

I think that's the best design when the perf is good enough.

Was hoping we could continue on and stop the interface-fight, and focus on implementation.

In my opinion that's just i'm trying to do currently.
I think we not on the same line now. Sorry about that. What do we think we still have to decide?

I think we not on the same line now. Sorry about that. What do we think we still have to decide?

Well comments like "we still need the propertiesdictionary?", usually make me think that we are still stuck in the decision phase :)

LogEventInfo.MessageTemplate - I think that's the best design when the perf is good enough.

Well I think the performance of this PR is good. Maybe considering to provide internal access to the actual LogEventInfo.PropertiesDictionary and change its enumerator to struct. Then the enumeration would be allocation free for the internal NLog-logic. But that optimization is for a different day.
I cheated in #2208 where I dropped the MessageTemplate completely, because of its overhead. Now the current interface allows me to have it without a serious performance hit.

ps updated my reaction ;)

Also like simple code, but I don't like open questions about design without any counter-suggestion, then one is left in the dark trying to find the light-switch.

Fair enough. But keep in mind it's hard to give good suggestions if code is submitted which isn't clear from itself. Don't get me wrong, but it takes a lot of time to understand some parts and i'm currently have to limited time for that.
Maybe it's a better idea, that would work better for me, to create a PR with only non-optimized code (just a clear API, small changes), and in another PR a (memory optimized) change.   Design is now mixed with (highy)optimized changes.

Maybe it's a better idea, that would work better for me, to create a PR with only non-optimized code

The logic that ensures LogEventInfo.Properties is a combined dictionary of both, and allows replacing of the MessageTemplate.Parameters is quite complicated. Not sure I can make it less complicated.
If you just want to see the new public API, then you just have to look at LogEventInfo.MessageTemplate. Everything else is the same.
You are welcome to present your own simple implementation of the LogEventInfo.MessageTemplate and its interaction with LogEventInfo.Properties.

hi @snakefoot
I thought about this and checked the code more in-depth.
In my opinion it's a bit strange that the LogEventInfo.MessageTemplate has a setter. I think this is a result of earlier dissensions (probably mine ;) )
Also I really like the idea behind the PropertyDictionary but as we can't use it well without breaking changes (no PropertiesDictionary Properties in LogEventInfo, I;m doubting if we really need it in a new impl.
I have a different, out-of-the-box, proposal, please let me know what you think:
Only add to the LogEventInfo:
 public IPropertiesMetaInfo PropertiesMetaInfo { get; }

Which holds the extra info which is now in the PropertiesDictionary
The interface:
    public interface IPropertiesMetaInfo : IDictionary<string, IPropertyMetaInfo>
    {

    }

    public interface IPropertyMetaInfo
    {
        int Position {get;}

        string Format { get; }
    }

Downside is that it's a bit more work for the client to enumerate all properties in the template, but we could add a helper (dunno where).
If you think the current design is better, I really like to know!

I don't understand what you are trying to solve with your proposal besides making Nlog more difficult to use (dictionary interface is not simple).
The reason why I have a MessageTemplate setter is because of Microsoft Extensions Logging. We can remove the setter by creating a new LogEventInfo constructor. Then we don't have the need to support only removing the messagetemplate properties. This will simplify the logic, but not get rid of PropertiesDictionary as I want the ordered guarantee
Sent from my Samsung device
-------- Original message --------
From: Julian Verdurmen<EMAIL_ADDRESS>Date: 30/09/2017 23:14 (GMT+01:00)
To: NLog/NLog<EMAIL_ADDRESS>Cc: Rolf Kristensen<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [NLog/NLog] LogEventInfo.MessageTemplate - Subset of   LogEventInfo.Properties (#2262)
hi @snakefoothttps://github.com/snakefoot
I thought about this and checked the code more in-depth.
In my opinion it's a bit strange that the LogEventInfo.MessageTemplate has a setter. I think this is a result of earlier dissensions (probably mine ;) )
Also I really like the idea behind the PropertyDictionary but as we can't use it well without breaking changes (no PropertiesDictionary Properties in LogEventInfo, I;m doubting if we really need it in a new impl.
I have a different, out-of-the-box, proposal, please let me know what you think:
Only add to the LogEventInfo:
public IPropertiesMetaInfo PropertiesMetaInfo { get; }
Which holds the extra info which is now in the PropertiesDictionary
The interface:
public interface IPropertiesMetaInfo : IDictionary<string, IPropertyMetaInfo>
{

}

public interface IPropertyMetaInfo
{
    int Position {get;}

    string Format { get; }
}

Downside is that it's a bit more work for the client to enumerate all properties in the template, but we could add a helper (dunno where).
If you think the current design is better, I really like to know!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/NLog/NLog/pull/2262#issuecomment-333336327, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AK-fnGaLMkoWhGCbMeFqeXK0QE0wu8Xvks5snq8YgaJpZM4PAffU.

@304NotModified I have now removed the ability to modify the MessageTemplateParameters after they have been initialized, by using a LogEventInfo-constructor. And now it is only possible to access the MessageTemplateParameters if using NET4_5 or NETSTANDARD (Because of IReadOnlyList)

I don't understand what you are trying to solve with your proposal besides making Nlog more difficult to use (dictionary interface is not simple).

As for the API design, it's then not clear that the templateParameters is a subset of properties.
The perfect design as we didn't need any changes to the logeventinfo, and use the logeventinfo properties. This was not the case for the position number and so I have created a new property, the metainfo (in earlier design I added it the the PropertiesDictionary, but that wasn't backwardscomp too bad).

As for the API design, it's then not clear that the templateParameters is a subset of properties.

Please review my new proposal. I think it satisfies your requirement of not having several ways to modify LogEventInfo.Properties.

@304NotModified Have squashed the commits, and made the suggested changes.
Had to re-introduce the DictionaryAdapter, as I could not ensure that it would return an enumerator of DirectoryEntry-objects.

merged! If you have time to response to my comments, that would be great!


removed one redirect in links

removed one redirect in links

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

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

Looks good. @SychevIgor Thanks for submitting this update.


Remove CocoaPods from the Xcode projects.

Same as: https://github.com/twilio/voice-quickstart-objc/pull/46

Let CocoaPods do this at install time, and support manual integration.

Thanks for the late review! Merging.


[opencv[cuda]] build failure. Error: Building package leptonica:x64-windows

Host Environment

OS: Windows 10 (Version 10.0.19041 Build 19041)
Compiler: VS2019 16.8.4
Vcpkg version: 2021-01-13-768d8f95c9e752603d2c5901c7a7c7fbdb08af35

To Reproduce
Steps to reproduce the behavior:
./vcpkg install opencv[core,cuda]:x64-windows
Failure logs
vcpkg install opencv[cuda]
Computing installation plan...
The following packages will be built and installed:
  * leptonica[core]:x64-windows -> 1.80.0#1
  * libarchive[bzip2,core,libxml2,lz4,lzma,lzo,openssl,zstd]:x64-windows -> 3.4.3#3
  * libxml2[core]:x64-windows -> 2.9.10#2
    opencv[core,cuda,dnn,jpeg,png,quirc,tiff,webp]:x64-windows -> 4.5.1
  * opencv4[contrib,core,cuda,dnn,jpeg,png,quirc,tiff,webp]:x64-windows -> 4.5.1
  * protobuf[core]:x64-windows -> 3.14.0#1
  * tesseract[core]:x64-windows -> 4.1.1#6
Additional packages (*) will be modified to complete this operation.
Detecting compiler hash for triplet x64-windows...

-- Using cached D:/Dev/vcpkg/downloads/DanBloomberg-leptonica-1ac72c93fef1a5eb76b76d6723d2aee843dd6e51.tar.gz
-- Cleaning sources at D:/Dev/vcpkg/buildtrees/leptonica/src/e843dd6e51-82c465ff89.clean. Use --editable to skip cleaning for the packages you specify.
-- Extracting source D:/Dev/vcpkg/downloads/DanBloomberg-leptonica-1ac72c93fef1a5eb76b76d6723d2aee843dd6e51.tar.gz
-- Applying patch fix-cmakelists.patch
-- Applying patch find-dependency.patch
-- Applying patch fix-find-libwebp.patch
-- Using source at D:/Dev/vcpkg/buildtrees/leptonica/src/e843dd6e51-82c465ff89.clean
-- Configuring x64-windows
CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:108 (message):
    Command failed: ninja -v
    Working Directory: D:/Dev/vcpkg/buildtrees/leptonica/x64-windows-rel/vcpkg-parallel-configure
    Error code: 1
    See logs for more information:
      D:\Dev\vcpkg\buildtrees\leptonica\config-x64-windows-out.log

Call Stack (most recent call first):
  scripts/cmake/vcpkg_configure_cmake.cmake:319 (vcpkg_execute_required_process)
  ports/leptonica/portfile.cmake:15 (vcpkg_configure_cmake)
  scripts/ports.cmake:128 (include)

Error: Building package leptonica:x64-windows failed with: BUILD_FAILED
Please ensure you're using the latest portfiles with `.\vcpkg update`, then
submit an issue at https://github.com/Microsoft/vcpkg/issues including:
  Package: leptonica:x64-windows
  Vcpkg version: 2021-01-13-768d8f95c9e752603d2c5901c7a7c7fbdb08af35

Additionally, attach any relevant sections from the log files above.

Additional context
The trouble seems to be with leptonica[core]:x64-windows -> 1.80.0#1, which can be tested with vcpkg install leptonica (and produces the same error.

Looks like the issue was cause by a missing file. Will clean and rebuild:
CMake Error at D:/Dev/vcpkg/installed/x64-windows/share/WebP/WebPTargets.cmake:102 (message):
  The imported target "WebP::webpdecoder" references the file

     "D:/Dev/vcpkg/installed/x64-windows/debug/bin/webpdecoderd.dll"```

From `vcpkg/buildtrees/leptonica/config-x64-windows-out.log`:

[1/2] cmd /c "cd .. && "D:/Dev/vcpkg/downloads/tools/cmake-3.19.2-windows/cmake-3.19.2-win32-x86/bin/cmake.exe" "D:/Dev/vcpkg/buildtrees/leptonica/src/e843dd6e51-82c465ff89.clean" "-DSW_BUILD=OFF" "-DSTATIC=0" "-DCMAKE_REQUIRED_INCLUDES=D:/Dev/vcpkg/installed/x64-windows/include" "-DCMAKE_MAKE_PROGRAM=D:/Dev/vcpkg/downloads/tools/ninja/1.10.1-windows/ninja.exe" "-DBUILD_SHARED_LIBS=ON" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=D:/Dev/vcpkg/scripts/toolchains/windows.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" "-DVCPKG_SET_CHARSET_FLAG=ON" "-DVCPKG_PLATFORM_TOOLSET=v142" "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" "-DCMAKE_VERBOSE_MAKEFILE=ON" "-DVCPKG_APPLOCAL_DEPS=OFF" "-DCMAKE_TOOLCHAIN_FILE=D:/Dev/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" "-DVCPKG_CXX_FLAGS=" "-DVCPKG_CXX_FLAGS_RELEASE=" "-DVCPKG_CXX_FLAGS_DEBUG=" "-DVCPKG_C_FLAGS=" "-DVCPKG_C_FLAGS_RELEASE=" "-DVCPKG_C_FLAGS_DEBUG=" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_LINKER_FLAGS=" "-DVCPKG_LINKER_FLAGS_RELEASE=" "-DVCPKG_LINKER_FLAGS_DEBUG=" "-DVCPKG_TARGET_ARCHITECTURE=x64" "-DCMAKE_INSTALL_LIBDIR:STRING=lib" "-DCMAKE_INSTALL_BINDIR:STRING=bin" "-D_VCPKG_ROOT_DIR=D:/Dev/vcpkg" "-D_VCPKG_INSTALLED_DIR=D:/Dev/vcpkg/installed" "-DVCPKG_MANIFEST_INSTALL=OFF" "-G" "Ninja" "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=D:/Dev/vcpkg/packages/leptonica_x64-windows""
FAILED: ../CMakeCache.txt
cmd /c "cd .. && "D:/Dev/vcpkg/downloads/tools/cmake-3.19.2-windows/cmake-3.19.2-win32-x86/bin/cmake.exe" "D:/Dev/vcpkg/buildtrees/leptonica/src/e843dd6e51-82c465ff89.clean" "-DSW_BUILD=OFF" "-DSTATIC=0" "-DCMAKE_REQUIRED_INCLUDES=D:/Dev/vcpkg/installed/x64-windows/include" "-DCMAKE_MAKE_PROGRAM=D:/Dev/vcpkg/downloads/tools/ninja/1.10.1-windows/ninja.exe" "-DBUILD_SHARED_LIBS=ON" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=D:/Dev/vcpkg/scripts/toolchains/windows.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" "-DVCPKG_SET_CHARSET_FLAG=ON" "-DVCPKG_PLATFORM_TOOLSET=v142" "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" "-DCMAKE_VERBOSE_MAKEFILE=ON" "-DVCPKG_APPLOCAL_DEPS=OFF" "-DCMAKE_TOOLCHAIN_FILE=D:/Dev/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" "-DVCPKG_CXX_FLAGS=" "-DVCPKG_CXX_FLAGS_RELEASE=" "-DVCPKG_CXX_FLAGS_DEBUG=" "-DVCPKG_C_FLAGS=" "-DVCPKG_C_FLAGS_RELEASE=" "-DVCPKG_C_FLAGS_DEBUG=" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_LINKER_FLAGS=" "-DVCPKG_LINKER_FLAGS_RELEASE=" "-DVCPKG_LINKER_FLAGS_DEBUG=" "-DVCPKG_TARGET_ARCHITECTURE=x64" "-DCMAKE_INSTALL_LIBDIR:STRING=lib" "-DCMAKE_INSTALL_BINDIR:STRING=bin" "-D_VCPKG_ROOT_DIR=D:/Dev/vcpkg" "-D_VCPKG_INSTALLED_DIR=D:/Dev/vcpkg/installed" "-DVCPKG_MANIFEST_INSTALL=OFF" "-G" "Ninja" "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=D:/Dev/vcpkg/packages/leptonica_x64-windows""
CMake Deprecation Warning at CMakeLists.txt:11 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument  value or use a ... suffix to tell
CMake that the project does not need compatibility with older versions.
-- The C compiler identification is MSVC 19.28.29336.0
-- The CXX compiler identification is MSVC 19.28.29336.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found GIF: D:/Dev/vcpkg/installed/x64-windows/lib/gif.lib (found version "5.1.4")
-- Found JPEG: optimized;D:/Dev/vcpkg/installed/x64-windows/lib/jpeg.lib;debug;D:/Dev/vcpkg/installed/x64-windows/debug/lib/jpegd.lib (found version "62")
-- Found ZLIB: optimized;D:/Dev/vcpkg/installed/x64-windows/lib/zlib.lib;debug;D:/Dev/vcpkg/installed/x64-windows/debug/lib/zlibd.lib (found version "1.2.11")
-- Found PNG: optimized;D:/Dev/vcpkg/installed/x64-windows/lib/libpng16.lib;debug;D:/Dev/vcpkg/installed/x64-windows/debug/lib/libpng16d.lib (found version "1.6.37")
-- Found TIFF: optimized;D:/Dev/vcpkg/installed/x64-windows/lib/tiff.lib;debug;D:/Dev/vcpkg/installed/x64-windows/debug/lib/tiffd.lib (found version "4.1.0")
-- Looking for pthread.h
-- Looking for pthread.h - not found
-- Found Threads: TRUE
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
CMake Error at D:/Dev/vcpkg/installed/x64-windows/share/WebP/WebPTargets.cmake:102 (message):
The imported target "WebP::webpdecoder" references the file
 "D:/Dev/vcpkg/installed/x64-windows/debug/bin/webpdecoderd.dll"

but this file does not exist.  Possible reasons include:

The file was deleted, renamed, or moved to another location.

An install or uninstall procedure did not complete successfully.

The installation package was faulty and contained
"D:/Dev/vcpkg/installed/x64-windows/share/WebP/WebPTargets.cmake"

but not all the files it references.
Call Stack (most recent call first):
D:/Dev/vcpkg/installed/x64-windows/share/WebP/WebPConfig.cmake:30 (include)
D:/Dev/vcpkg/scripts/buildsystems/vcpkg.cmake:653 (_find_package)
CMakeLists.txt:73 (find_package)
-- Configuring incomplete, errors occurred!
See also "D:/Dev/vcpkg/buildtrees/leptonica/x64-windows-rel/CMakeFiles/CMakeOutput.log".
See also "D:/Dev/vcpkg/buildtrees/leptonica/x64-windows-rel/CMakeFiles/CMakeError.log".
[2/2] cmd /c "cd ../../x64-windows-dbg && "D:/Dev/vcpkg/downloads/tools/cmake-3.19.2-windows/cmake-3.19.2-win32-x86/bin/cmake.exe" "D:/Dev/vcpkg/buildtrees/leptonica/src/e843dd6e51-82c465ff89.clean" "-DSW_BUILD=OFF" "-DSTATIC=0" "-DCMAKE_REQUIRED_INCLUDES=D:/Dev/vcpkg/installed/x64-windows/include" "-DCMAKE_MAKE_PROGRAM=D:/Dev/vcpkg/downloads/tools/ninja/1.10.1-windows/ninja.exe" "-DBUILD_SHARED_LIBS=ON" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=D:/Dev/vcpkg/scripts/toolchains/windows.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" "-DVCPKG_SET_CHARSET_FLAG=ON" "-DVCPKG_PLATFORM_TOOLSET=v142" "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" "-DCMAKE_VERBOSE_MAKEFILE=ON" "-DVCPKG_APPLOCAL_DEPS=OFF" "-DCMAKE_TOOLCHAIN_FILE=D:/Dev/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" "-DVCPKG_CXX_FLAGS=" "-DVCPKG_CXX_FLAGS_RELEASE=" "-DVCPKG_CXX_FLAGS_DEBUG=" "-DVCPKG_C_FLAGS=" "-DVCPKG_C_FLAGS_RELEASE=" "-DVCPKG_C_FLAGS_DEBUG=" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_LINKER_FLAGS=" "-DVCPKG_LINKER_FLAGS_RELEASE=" "-DVCPKG_LINKER_FLAGS_DEBUG=" "-DVCPKG_TARGET_ARCHITECTURE=x64" "-DCMAKE_INSTALL_LIBDIR:STRING=lib" "-DCMAKE_INSTALL_BINDIR:STRING=bin" "-D_VCPKG_ROOT_DIR=D:/Dev/vcpkg" "-D_VCPKG_INSTALLED_DIR=D:/Dev/vcpkg/installed" "-DVCPKG_MANIFEST_INSTALL=OFF" "-G" "Ninja" "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_INSTALL_PREFIX=D:/Dev/vcpkg/packages/leptonica_x64-windows/debug""
FAILED: ../../x64-windows-dbg/CMakeCache.txt
cmd /c "cd ../../x64-windows-dbg && "D:/Dev/vcpkg/downloads/tools/cmake-3.19.2-windows/cmake-3.19.2-win32-x86/bin/cmake.exe" "D:/Dev/vcpkg/buildtrees/leptonica/src/e843dd6e51-82c465ff89.clean" "-DSW_BUILD=OFF" "-DSTATIC=0" "-DCMAKE_REQUIRED_INCLUDES=D:/Dev/vcpkg/installed/x64-windows/include" "-DCMAKE_MAKE_PROGRAM=D:/Dev/vcpkg/downloads/tools/ninja/1.10.1-windows/ninja.exe" "-DBUILD_SHARED_LIBS=ON" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=D:/Dev/vcpkg/scripts/toolchains/windows.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" "-DVCPKG_SET_CHARSET_FLAG=ON" "-DVCPKG_PLATFORM_TOOLSET=v142" "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" "-DCMAKE_VERBOSE_MAKEFILE=ON" "-DVCPKG_APPLOCAL_DEPS=OFF" "-DCMAKE_TOOLCHAIN_FILE=D:/Dev/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" "-DVCPKG_CXX_FLAGS=" "-DVCPKG_CXX_FLAGS_RELEASE=" "-DVCPKG_CXX_FLAGS_DEBUG=" "-DVCPKG_C_FLAGS=" "-DVCPKG_C_FLAGS_RELEASE=" "-DVCPKG_C_FLAGS_DEBUG=" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_LINKER_FLAGS=" "-DVCPKG_LINKER_FLAGS_RELEASE=" "-DVCPKG_LINKER_FLAGS_DEBUG=" "-DVCPKG_TARGET_ARCHITECTURE=x64" "-DCMAKE_INSTALL_LIBDIR:STRING=lib" "-DCMAKE_INSTALL_BINDIR:STRING=bin" "-D_VCPKG_ROOT_DIR=D:/Dev/vcpkg" "-D_VCPKG_INSTALLED_DIR=D:/Dev/vcpkg/installed" "-DVCPKG_MANIFEST_INSTALL=OFF" "-G" "Ninja" "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_INSTALL_PREFIX=D:/Dev/vcpkg/packages/leptonica_x64-windows/debug""
CMake Deprecation Warning at CMakeLists.txt:11 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument  value or use a ... suffix to tell
CMake that the project does not need compatibility with older versions.
-- The C compiler identification is MSVC 19.28.29336.0
-- The CXX compiler identification is MSVC 19.28.29336.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found GIF: D:/Dev/vcpkg/installed/x64-windows/debug/lib/gif.lib (found version "5.1.4")
-- Found JPEG: optimized;D:/Dev/vcpkg/installed/x64-windows/lib/jpeg.lib;debug;D:/Dev/vcpkg/installed/x64-windows/debug/lib/jpegd.lib (found version "62")
-- Found ZLIB: optimized;D:/Dev/vcpkg/installed/x64-windows/lib/zlib.lib;debug;D:/Dev/vcpkg/installed/x64-windows/debug/lib/zlibd.lib (found version "1.2.11")
-- Found PNG: optimized;D:/Dev/vcpkg/installed/x64-windows/lib/libpng16.lib;debug;D:/Dev/vcpkg/installed/x64-windows/debug/lib/libpng16d.lib (found version "1.6.37")
-- Found TIFF: optimized;D:/Dev/vcpkg/installed/x64-windows/lib/tiff.lib;debug;D:/Dev/vcpkg/installed/x64-windows/debug/lib/tiffd.lib (found version "4.1.0")
-- Looking for pthread.h
-- Looking for pthread.h - not found
-- Found Threads: TRUE
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
CMake Error at D:/Dev/vcpkg/installed/x64-windows/share/WebP/WebPTargets.cmake:102 (message):
The imported target "WebP::webpdecoder" references the file
 "D:/Dev/vcpkg/installed/x64-windows/debug/bin/webpdecoderd.dll"

but this file does not exist.  Possible reasons include:

The file was deleted, renamed, or moved to another location.

An install or uninstall procedure did not complete successfully.

The installation package was faulty and contained
"D:/Dev/vcpkg/installed/x64-windows/share/WebP/WebPTargets.cmake"

but not all the files it references.
Call Stack (most recent call first):
D:/Dev/vcpkg/installed/x64-windows/share/WebP/WebPConfig.cmake:30 (include)
D:/Dev/vcpkg/scripts/buildsystems/vcpkg.cmake:653 (_find_package)
CMakeLists.txt:73 (find_package)
-- Configuring incomplete, errors occurred!
See also "D:/Dev/vcpkg/buildtrees/leptonica/x64-windows-dbg/CMakeFiles/CMakeOutput.log".
See also "D:/Dev/vcpkg/buildtrees/leptonica/x64-windows-dbg/CMakeFiles/CMakeError.log".
ninja: build stopped: subcommand failed.


How to publish on Vercel

Hi! First of all, I wanted to congrat for the great product you're creating, it's super valuable!
I was trying to publish it on Vercel, but I'm going through a few problems (mostly due to the fact that it's my first time working with turbo and bun, so I'm still in the learning process), such as:

Build & Development Settings. How to set them up? Is the output directory that Vercel should expose the one in apps/nextjs/.nest?
Environment Variables. Is there some more automated or suggested way to load them, considering also Vercel's environments (development, preview, production)? And especially for the preview environment, the NEXT_PUBLIC_APP_URL, could it be substituted with the one provided by Vercel such as NEXT_PUBLIC_VERCEL_URL?

Hi @tianzx ! love saasfly, where's the vercel deployment template? My trpc router works locally but fails on vercel.  I see some others having this problem too but no idea whats the solution. Similar issue https://github.com/t3-oss/create-t3-app/issues/1639


Make home page mobile responsive.

On mobile the screen tries to show 3 columns

Looks good, Ed. Do you want this issue closed?

I'm good with that.
On Sun, Oct 4, 2020, 11:43 AM Erik Dodge<EMAIL_ADDRESS>wrote:

Looks good, Ed. Do you want this issue closed?
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub
https://github.com/opennebraska/landlord/issues/45#issuecomment-703282265,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AASQF7PUUIJC6FXI4IYPZBDSJCQ2JANCNFSM4SDM2AFQ
.


[PE-D][Tester A] Behaviour of find command differs from user guide

User guide says that multiple tags of type o/ and n/ can be used, but when testing, only 1 tag of type o/ can be used

Labels: severity.Medium type.FunctionalityBug
original: Clarenceeey/ped#5

parameters in [ ]  means optional, as indicated in the user guide's features section. valid use of multiple tags of the same type is not mentioned at all.


TLSV1_ALERT_PROTOCOL_VERSION error when using pip from bash terminal

VSCode Version: 1.15.1
OS Version: OSX Sierra 10.12.6

TLSV1_ALERT_PROTOCOL_VERSION  occurs for pip install  commands. Same commands function okay in native bash.
Steps to Reproduce:

Open built in terminal
Run any pip install command

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

Works for me, I'll need more details to repro:

Maybe your shell isn't configured correctly. Have you tried changing to a non-login shell? Add to settings:
"terminal.integrated.shellArgs.osx": []


[Bug] [Kubernetes] ConfigMap volume mount on worng path

There is a path on registry.rc.yaml is different from registry/Dockerfile.
# registry.rc.yaml
volumeMounts:
- mountPath: /etc/docker/registry

# Dockerfile
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/etc/registry/config.yml"]

It would cause that registry cannot configure everything correctly (like storage.filesystem.rootdirectory).
So that, I will loss my image when I restart my container at other machine in Kubernetes cluster.

I found this path has been changed at #3530 , but I don't know why.

Thanks for raising this, we'll handle it.


core: Fix handling of logon errors during nla_client_begin

Under certain circumstances InitializeSecurityContext returns an error if a wrong password was provided. This PR checks the returned status code and correctly sets the last error code. This allows a client application to ask the user again for credentials.
A scenario where this happens is when a user tries to connect with a wrong password and both machines are joined to the same domain.

@freerdp-bot test please


[Feature request] [google_maps_flutter] : Support for custom tiles

Hi,
My native app versions (iOS & Android) are using the tile overlay feature.
Android:
https://developers.google.com/maps/documentation/android-sdk/tileoverlay#add
iOS:
https://developers.google.com/maps/documentation/ios-sdk/tiles#use_gmsurltilelayer_to_fetch_tiles_from_urls
It would be great to use it from the Flutter side as well, simply call these native APIs.
In case it's not too hard to say, I'd like to know what is your estimation for this kind of feature to be production-ready (or shall I ask about google_maps_flutter 1.0.0 first), because it influences my production release timeline (I'm considering to rewrite these two apps in Flutter only).
Thanks!

Looks like #25161

Hi @zoechi, thank you for the reference.
Yes, almost. It does look like it but in #25161 the developer (@WoodenPC) wants to use Leaflet as a third party while I wish to use the original GoogleMaps's support for my custom tiles.
Many thanks for the labelling.

Update from @cyanglaz: This is on his radar as per the milestone.

Update from @cyanglaz: This is on his radar as per the milestone.

Is any example to add wmts from geoserver to google map?


corrected code for helloworld!.cpp

The code had two problems that I edited.

The header file for input and output stream was wrong- this was a major error and would not give any output.
Added "return 0 " statement.

Thank you for correcting it

Hello.
Thanks for accepting my Pull Request. But I got one issue that I observed
just now- is the repository not participating in Hacktoberfest? The label
is not there and also the Hactoberfest website is showing it as "ineligible
repository"- I am a bit confused by all this.
Thank you.
On Mon, 12 Oct, 2020, 3:57 PM Bhavesh Lohana<EMAIL_ADDRESS>wrote:

Thank you for correcting it
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/bhaveshlohana/HacktoberFest2020-Contributions/pull/1304#issuecomment-707033839,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AREP6NMORRCQEUVTE5BDRR3SKLKY5ANCNFSM4SLP6SAA
.


Several memory leaks at exit of any nappgui application

Hello, thank you for this interesting project!
In osmain_win.h add the following include:
#include <crtdbg.h>

In the osmain macro, add the following line to the bottom of WinMain:
    ...
    _CrtDumpMemoryLeaks(); \
    return 0; \
}

This will report unfreed memory blocks at program exit. Running the "HelloWorld" demo with these changes will print an output similar to this:
The thread 0x5b00 has exited with code 1 (0x1).
[13:39:09] [OK] Heap Memory Staticstics
[13:39:09] ============================
[13:39:09] Total a/dellocations: 290, 290
[13:39:09] Total bytes a/dellocated: 23470, 23470
[13:39:09] Max bytes allocated: 19232
[13:39:09] Effective reallocations: (0/5)
[13:39:09] Real allocations: 1 pages of 65536 bytes
[13:39:09] ============================
[13:39:09] Config: Debug
[13:39:09] You have an execution log in: 'C:\Users\penho\AppData\Roaming\HelloWorld\log.txt'
Detected memory leaks!
Dumping objects ->
Z:\dv\nappgui_src\src\sewer\win\bmem_win.c(145) : {86} normal block at 0x000002633B4AA900, 39 bytes long.
 Data: <  J;c           > 00 A9 4A 3B 63 02 00 00 ED ED ED ED ED ED ED ED
Z:\dv\nappgui_src\src\sewer\win\bmem_win.c(145) : {85} normal block at 0x000002633B4AA890, 39 bytes long.
 Data: <  J;c           > 90 A8 4A 3B 63 02 00 00 ED ED ED ED ED ED ED ED
Z:\dv\nappgui_src\src\sewer\win\bmem_win.c(145) : {84} normal block at 0x000002633B4AA970, 39 bytes long.
 Data: <p J;c           > 70 A9 4A 3B 63 02 00 00 ED ED ED ED ED ED ED ED
Z:\dv\nappgui_src\src\sewer\win\bmem_win.c(145) : {83} normal block at 0x000002633B4AA7B0, 39 bytes long.
 Data: <  J;c           > B0 A7 4A 3B 63 02 00 00 ED ED ED ED ED ED ED ED
Z:\dv\nappgui_src\src\sewer\win\bmem_win.c(145) : {80} normal block at 0x000002633B4AAC10, 39 bytes long.
 Data: <  J;c           > 10 AC 4A 3B 63 02 00 00 ED ED ED ED ED ED ED ED
Z:\dv\nappgui_src\src\sewer\win\bmem_win.c(145) : {79} normal block at 0x000002633B4AA6D0, 39 bytes long.
 Data: <  J;c           > D0 A6 4A 3B 63 02 00 00 ED ED ED ED ED ED ED ED
Object dump complete.

I added _CrtSetBreakAlloc(86) to the top of WinMain to try to track down the leaky allocation which causes the debugger to break at this point:

Stack trace:
HelloWorld.exe!_sewer_atexit(void(*)() func) Line 166
	at Z:\dv\nappgui_src\src\sewer\sewer.c(166)
HelloWorld.exe!blib_atexit(void(*)() func) Line 436
	at Z:\dv\nappgui_src\src\sewer\blib.c(436)
HelloWorld.exe!draw2d_start() Line 73
	at Z:\dv\nappgui_src\src\draw2d\draw2d.c(73)
HelloWorld.exe!osgui_start() Line 77
	at Z:\dv\nappgui_src\src\osgui\osgui.c(77)

Apologies, after further investigation I think I understand now that this check occurs before i_atexit is run, which should free the allocated blocks. In my application I still get memory leaks reported after i_atexit, because nappgui already calls _CrtDumpMemoryLeaks in _bmem_exit. I think nappgui is reporting a false positive here as I am using some library in my application which has yet to finish its cleanup of some static objects.


Made when and unless return the result of the callbacks

More akin to the way in which the Laravel versions work
https://github.com/laravel/framework/blob/5.6/src/Illuminate/Support/Collection.php#L485
Example use case:
const only = ['a']
const filtered = collect(['a', 'b', 'c'])
  .when(only.length, collection => collection.only(only))
console.log(filtered)

// Before change
undefined

// After change
Collection { items: [ 'a' ] }

Hi, @benswinburne
Do you have a PHP example to provide?

/* $only = ['b', 'c']; */
$only = [];
$filtered = collect(['a', 'b', 'c', 'd'])
    ->when($only, function ($collection) use ($only) {
        return $collection->intersect($only);
    })->all();

dd($filtered); // ['a', 'b', 'c', 'd']

I realised only was a bad example in my above javascript code as it works on excluding keys.
The point is, if you use something like
collection.when(true, collection => collection.push('foo'))

it's fine because push modifies the existing collection, but if you want to use something which returns a new collection like intersect it breaks. Even if you did
collection = collection.when(true, collection => collection.push('foo'))

// collection === undefined

Anything which uses when in a chain will end up with undefined
const example = collect(['a', 'b', 'c'])
  .when(true, collection => collection.push('d'))
console.log(example) // undefined

Also, side note, looks like travis timed out in the tests above as opposed to them failing.

Sorry the late response, I was on vacation.
Could you implement a test for both when and unless that proves that we return the value?
Also, don't require when.js into unless.


Fix websites for Comtrya and chezmoi

The website property for Comtrya and chezmoi were not set, meaning that their star counts were not being updated. This PR fixes that.
Copyright Assignment

[x] This document is covered by the MIT License, and I agree to contribute this PR under the terms of the license.

Thanks for the contribution, I can use the help clearly :-)


Update MAINTENANCE.md

Update the topic areas and responsible internal team members

We don't have the issue supervisor role anymore... (See the begining of the document)

We don't have the issue supervisor role anymore... (See the begining of the document)

Do we want to get rid of that @Gedochao ?

We don't have the issue supervisor role anymore... (See the begining of the document)

Do we want to get rid of that @Gedochao ?

Sure. Either here, or a subsequent PR.
Technically, the issue supervisor's part is still there in a way, as it got merged into the Product Manager role.
As in, I guess we can just mention it's me doing it.

Technically, the issue supervisor's part is still there in a way, as it got merged into the Product Manager role

But all of this is outdated
https://github.com/scala/scala3/blob/main/MAINTENANCE.md?plain=1#L27-L62


Dynamically adjust the amount of sections in regard to Screensize

Currently, sections become way to narrow if the screens width is small. The sections should be adjusted in size in regard to the screen-width, not number of available columns. This would also help with a better mobile experience.

closed with #9


Auto-completions spec conformance for the ReceiveAction

Description:
$title

This has been addressed in the current implementation.


It is possible to create duplicate dataset entries via questionnaire

If you choose to create a new certificate for an already existing dataset, the survey doesn't check that a dataset with the same documentation_url already exists.
This results in 2 Dataset models with the same documentation_url.
The api prevents this so I think this counts as a defect.

A way of merging certificates, and defining ownership more clearly is probably worth looking into.
We can let duplicates build up provided there is a way to join them in the future, since we don't ask for the documentation_url immediately up front always it's hard to avoid duplicates.


UpdateManager.Instance.BaseUrl is not accessible

I want to write my own UpdateTask
MyUpdateTask : UpdateTaskBase
In my UpdateTask I need access to UpdateManager.Instance.BaseUrl as it is done in FileUpdateTask
string baseUrl = UpdateManager.Instance.BaseUrl;
but BaseUrl is internal :(
Could you make it public?
Thanks

If you want to submit a PR we will gladly accept it


How to not suppress _id

I'm trying to read data from one collection to another and need the object _ids to propagate. I can't get my find queries to return _ids. I looked at #8 to do this by setting {_id: 1} in the projection but it does not return the _id as well. Any ideas?

This is resolved. Its was caused by an issue in NR 0.16.0 and fixed.
https://github.com/node-red/node-red/issues/1144#issuecomment-278595002


Fixed QuestionnaireResponse.item.text for boolean questions

Coverage increased (+0.007%) to 94.666% when pulling df13d7c06b56f76ac385bb423a6a548dbcff72bd on cody-fix-boolean-questionnaire-response-item-text into 0206d0dc74d0fb6890ffe4138a8cf9b73ce67614 on main.


Creating a new user with autologin is not idempotent

* macos_user[add administrative account] action create
           * execute[add user admin] action run (skipped due to not_if)
           * plist[set true to DidSeeSiriSetup] action set (up to date)
           * plist[set true to DidSeeCloudSetup] action set (up to date)
           * plist[set 10.13.3 to LastSeenCloudProductVersion] action set (up to date)
           * plist[set user "admin" to login automatically] action set
             - convert "com.apple.loginwindow.plist" to binary
             * execute[/usr/bin/plutil, -convert, binary1, /Library/Preferences/com.apple.loginwindow.plist] action run
        - execute ["/usr/bin/plutil", "-convert", "binary1", "/Library/Preferences/com.apple.loginwindow.plist"]

           * file[/etc/kcpassword] action create (up to date)

       Running handlers:
       First chef run should have reached a converged state.
       Resources updated in a second chef-client run:
       - macos_user[add administrative account]
       [2018-02-15T13:27:13-08:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 9 (KILL)
       [2018-02-15T13:27:13-08:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 9 (KILL)

This actually appears to be related to #15, and may have been resolved preemptively. It is unclear at this point if this is due to a race condition, is an issue within the macos_user resource, or is an issue with the plist resource itself.

Closing this issue. We're currently not able to reproduce this issue anymore, but it appears to be resolved with #47.


[POC] Change theme charter

Use the new color charter.

The rendering is too flashy.

New theme proposition:

https://jamstackthemes.dev/theme/gatsby-starter-forty/
https://jamstackthemes.dev/theme/gatsby-casper/
https://jamstackthemes.dev/theme/gatsby-material-kit-react/
https://jamstackthemes.dev/theme/gatsby-starter-spectral/
https://jamstackthemes.dev/theme/gatsby-starter-tailwindplay/
https://jamstackthemes.dev/theme/gatsby-starter-casual/
https://jamstackthemes.dev/theme/gatsby-starter-scientist/
https://jamstackthemes.dev/theme/headless-gatsby-multilang/

UI example that I would have for our site: https://www.sketch.com/

ℹ the surge preview may fail with Error: Resource not accessible by integration
This will be fixed when #542 is merged.

Home page

Model Generation Application page

News page

Blog page

404 page

All changes has been implemented in separated PRs.


Push to S3 now pushes to latest/ folder

This should fix the automatic redirection from http://openpathsampling.org

Works now!  Merging.


OnRemoving not trigger by backspace and drag remove

I'm submitting a ...  (check one with "x")
[x] bug report => search github for a similar issue or PR before submitting
[ ] feature request
[ ] support request/question

Current behavior

OnRemoving is triggered by clicking x but not triggered by backspace and drag remove.
Expected behavior

OnRemoving is triggered by both x and backspace and drag remove.
Minimal reproduction of the problem with instructions (if applicable)

What is the motivation / use case for changing the behavior? (if applicable)

What do you use to build your app? (SystemJS, Webpack, angular-cli, etc.). Please specify the version

angular-cli 1.0.0
PHP Storm
Angular version:

angular 4.0.2
ng2-tag-input version:

1.2.8
Browser: [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ]

Chrome

https://github.com/Gbuomprisco/ng2-tag-input/pull/413

There are still some issues with the update.

Backspace tag removal seems to be triggering onSelect instead of onRemoving.
dragZone does not work with this update. The onRemoving will be triggered when trying to drag the tags between fields.

I guess it's because:

the tag gets first selected, and then (once it is selected) the onRemoving will be triggered.
yeah I think dragZone won't work with this as the item is removed right away when the dragging starts. I am not sure we can get the event of the item being dropped before removing it which would be ideal.


Use rename-context in place of set-context

Simple fix for #13!

Lol @googlebot… signed!

Well, that requires updating the --help message, function names and deleting the "Aliased ..." message. :)

@ahmetb  hah… never as straightforward as it sounds, right? I'll get to it :D

@ahmetb done!

Thanks @bnookala.


ask help: lr_scheduler has multi period? maybe a bug for local parallel train

Dear DingXiaoH, thanks for your innovative paper,
could you help me on this questions? thanks!
lr_scheduler = CosineAnnealingLR(optimizer=optimizer, T_max=args.epochs * IMAGENET_TRAINSET_SIZE // args.batch_size // ngpus_per_node)
In my local parallel GPU test, without  distributed training. batch_size is for all GPU with the orig code,  when we used n gpu, there will be n period change of cosineLR(0--PI, as one period)
Is this normal for such multi period CosineLR ?
thanks in advance!!

This training script works as expected. Please check the reproduced results reported in README. The results cannot be so good if there is such a big bug.


Change Indicative configurations

There is a way to change the adonis indicative configurations ?
I need to remove all body attributes that is not on the rules of my Validator, so I think it should be something like the removeAdditional of the configurations. I cant find a way using like
const Validator = use('Validator');
Validator.configure({ removeAdditional: true });

I saw that here the validator.configure is set by getting the validator config from the app.js file, but even adding validator: { removeAdditional: true } I have no success

I'm needing this as well. I didn't found a way to avoid not existing attributes to my validators, resulting in SQL error, when it tries to save an attribute that doesn't exist.


SVG thumbnails and "Invalid file dimensions, please rescan this file." error

This pull request checks to see if the file has the mime type of image/svg+xml before getting thumbnails, displaying the Thumbnail form row and Rescan button, and displaying a thumbnail error. It is based on this pull request https://github.com/concrete5/concrete5/pull/5069 being merged first.
Current:

Changes:

I feel like this ought to be refactored into some kind of method at the Type object level – something like
$type->supportsThumbnails()
And ideally you'd have an object representing SVG that would return false, while it extended the generic image type object that would return true. Thoughts? I'm not averse to pulling this in to solve the problem temporarily, but it might be worth discussion.

@aembler
I totally agree that my solution was not ideal.
Based on your suggestion, I updated the pull request to add a supportsThumbnails() method in the Type class.
I am afraid I don't understand the second part of your suggestion.

I was thinking that we might have an object that represented a specific file type like
AbstractFileType
and then JPEGFileType, PNGFileType, SVGFileType, etc... and this object would hold the icon of the file type, its capabilities, etc...
but that doesn't have to happen right now... this is sufficient and better than what we have. Thanks!


Could I use "Rate Limiting" with this?

Could I use Rate Limiting with this?
I would like to limit of 5 requests per 10 seconds for insert, update and remove

This package is no longer being updated or supported by Reaction.

thanks for your reply.


[WIP] Implement detecting and transforming index order of two body electronic integrals

[X] Support AO input matrix in chemists', physicists', "intermediate", or unknown index-order convention. Convert or raise an error for unsupported input.
[ ] Support spin-orbital input matrices.
[ ] Include changing spin-orbital index convention? Maybe a subsequent PR
[ ] Tests to cover changes.
[ ] Updated the documentation accordingly.
[ ] Release note.
[X] I have read the CONTRIBUTING document.

Summary
When constructing TwoBodyElectronicIntegrals validate the data and possibly correct it.
Closes #337
Details and comments
This PR will transform physicists' index-order convention to chemists'. It will also raise an error on detecting an unsupported format or an unrecognized format.

Thanks @jlapeyre, this looks like a very good start! I only skimmed through the code just now so no in detail comments yet. Just one question: I find the choice for the filename starting with _ a bit odd. Maybe we can find a more descriptive name? Since it's already inside of a utils folder I don't think we need the _utils at the end either.
What about two_body_symmetry_conversion.py? Or something along those lines?

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

48 of 53 (90.57%)  changed or added relevant lines in 3 files are covered.
1 unchanged line in 1 file lost coverage.
Overall coverage increased (+0.02%) to 83.617%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

qiskit_nature/properties/second_quantization/electronic/integrals/electronic_integrals_utils/two_body_symmetry_conversion.py
40
42
95.24%

qiskit_nature/properties/second_quantization/electronic/integrals/two_body_electronic_integrals.py
6
9
66.67%

Files with Coverage Reduction
New Missed Lines
%

qiskit_nature/drivers/second_quantization/psi4d/psi4driver.py
1
84.43%

Totals

Change from base Build<PHONE_NUMBER>:
0.02%

Covered Lines:
9233

Relevant Lines:
11042

💛  - Coveralls

The reason that this has not progressed further, is that I am awaiting the implementation of the PolynomialTensor (#756) and SparseLabelOp (#731) after which we can tackle #666 which is going to largely refactor the existing FermionicOp. Once this happens, we will always store the electronic integrals in physicist order, at which point these conversion utilities will come in very handy to simplify the construction of said integral containers.
I envision these utilities to be exposed very publicly to simplify the construction of PolynomialTensor instances which store electronic integrals. I am potentially even considering an electronic-dedicated subclass of this tensor class, which can handle these integral conversions as well as deal with symmetry reductions/expansions to/from 8-fold symmetry in the future.
Long story short, this will get unblocked once the above issues are resolved, at which point a good location for these utilities needs to be found in the new stack :+1:

I have updated this PR and moved the symmetry tools to qiskit_nature.second_q.operators.utils where it can live for now. I might change things a bit more when working on #666 which is next up on my todo list. When doing that and updating the electronic-structure related hamiltonians and properties to use that method, I will be making use of these tools for easier construction of the PolynomialTensor objects.


Modify the metrics for CS smokedetector setup

This change modifies metrics to align with Monarch definition

modifies attributes processor in monarch pipeline to remove commit tag in metrics before exporting

includes rg_reconcile_duration_seconds in Monarch pipeline for future SLI setup

clean up kcc_resource_count_total exclusion since the metric has been removed from Resource Group Controller

/hold
This change is blocked until a server side change is rolled out.

/unhold
Monarch change has rolled out, local test metric streaming with no issue.

@haiyanmeng Fixed the merge conflict, need lgtm again when you have time, thanks!


Initial idea for intro slides

Note: I will be presenting this in about 45 minutes, so I do not expect this to be merged in by then. :)
This PR attempts to introduce the audience to the git basics required to begin the TestFest:

Which repo to fork
How to fork
How to sync local, origin, and source repos

My audience for this are devs who are neither all that experienced with git nor used to working with multiple repos.
I might have more to add to this after the UG meeting tonight, depending on how this goes.
Bonus: I added a CSS selector to prevent nested lists from becoming increasingly larger in font-size.

Looks great. I'll leave the PR open in case you want to push more changes after tonight's meeting. Thanks!


do not treat modules with '!' in names any specially

fixes #5729

:+1:

:+1:

Just to confirm, this was originally to support systemjs loader plugins, no?

@weswigham i really do not know why this was there :) the issue is that SystemJs and requireJS have a different way to represent loaders. so what we have done in the past, is we do nothing :) we just treat it like a module name, obviously a file lookup will fail, but then we will look for an ambient external module with that name, and if you defined one, things should just work.

and it has fixed the issue...
Technically, it isn't RequireJS, it is the whole of AMD ;-)
I can understand why it might have seemed like a good idea, but the only approach I can envision is that the module resolution logic narrows to the bang instead of widening to the bang and/or if the module contains a bang, it looks at the ambient module space first before attempt to resolve to the file.
What was happening is that any MID like 'foo/bar!something' was trying to resolve to foo/bar and not considering anything else.  I don't think ideally that would have worked for SystemJS either, since the stuff after the bang affects the format of the return (where the reverse is true in AMD).
If I had a mid of some/file.txt!text in SystemJS, I would ideally have to interrogate the SystemJS config to figure out what text did, but in theory, I could match that to some sort of ambient declaration like this:
declare module 'text' {
  export default let text: string;
}

I might benefit from validating that I can actually resolve some/file.txt but really from TypeScript purposes, all I need to know is the ambient declaration.
For AMD it is reversed though, while we have just gotten used to declaring ambient modules for each different plugin, it would be nice to actually declare something like this:
declare module 'dojo/text' {
  export default let text: string;
}

And then have anything like 'dojo/text!some/file.txt' work, but the problem specifically I was running into though was that would have worked before this fix, but then when I had a module that returned different things based on the information past the bang, it would never find the ambient declaration.
If I really had my dreams filled, there would be some sort of globbing support for mids and ambient modules.  Maybe I should open an issue for that.

@kitsonk thanks for the details. question, would it possible that foo\bar!text and baz!text would have a different shapes? or is it guaranteed that they have the same shape?
would it be sufficient to for module names of the form [resource]![extension] to look up 1. ambient external module [resource]![extension]  (for back compat purposes) and if not found, lookup 2. ambient external module [extension]?

The shape can vary.  I opened #5787 to put forward a suggestion around this.


please check man page about  SSL_CTX_set_stateless_cookie_generate_cb

plese check this page: https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_stateless_cookie_generate_cb.html
It is unclear when I  want to get how to use TLS1.3 extension about cookie.
SSL_CTX_set_cookie_generate_cb and SSL_CTX_set_cookie_verify_cb need to be added, there are no any descriptions about SSL_CTX_set_stateless_cookie_generate_cb and SSL_CTX_set_stateless_cookie_verify_cb

I'm not sure I understand your question. The man page seems quite clear to me (but then I wrote it so I am probably blind to its deficiencies). Did you also read the SSL_stateless() man page (which is linked from the callback man page you referenced above):
https://www.openssl.org/docs/man1.1.1/man3/SSL_stateless.html
These two man pages need to be read together to understand how this mechanism works.

The synopsis are about SSL_CTX_set_stateless_cookie_generate_cb and SSL_CTX_set_stateless_cookie_verify_cb , but description are about SSL_CTX_set_cookie_generate_cb and SSL_CTX_set_cookie_verify_cb. both set different fileds.

I'm not sure I understand your question. The man page seems quite clear to me (but then I wrote it so I am probably blind to its deficiencies). Did you also read the SSL_stateless() man page (which is linked from the callback man page you referenced above):
https://www.openssl.org/docs/man1.1.1/man3/SSL_stateless.html
These two man pages need to be read together to understand how this mechanism works.

The synopsis are about SSL_CTX_set_stateless_cookie_generate_cb and SSL_CTX_set_stateless_cookie_verify_cb , but description are about SSL_CTX_set_cookie_generate_cb and SSL_CTX_set_cookie_verify_cb. both set different fileds.

Ah! Right - thanks. Now I understand the problem. I will update it.

Please keep this open, until I've actually committed a fix.

Please keep this open, until I've actually committed a fix.

ok


⚠ Bofrost.at has degraded performance

In 52268a1, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1295 ms

Resolved: Bofrost.at performance has improved in 46c2dbd after 9 minutes.


change management/error handling/onboarding research

Design or Research
High level description of what design or research needs to be accomplished.
Tasks

[ ] Something.

Additional Context
change management / error handling -> needs hospital
on-boarding - who are we onboarding (technically this is onboarding the PHL and HCO to connect, the reportstream onboarding uses a questionnaire to understand how the STLT will connect and the types of messages they will send/receive)
need to know who is actually sending message (who physically sends out the order?  a person pressing button?  automated somehow in the EHR?)

Merging with #470


Question: why app.tar not getting zipped?

https://github.com/dunglas/frankenphp/blob/0b4a427cac1da044518ada44345bbafd98a0bc04/build-static.sh#L226
Php project could be up to hundred megabytes in my experiences expecially using composer.
It look like tar -acf app.tar.gz -C "${EMBED}" . would save a lot of space.

@gonejack The whole binary (including the PHP files if I recall correctly) is already compressed using upx. Compressing the PHP files before compressing the binary will likely increase the final size.
We may add support for compression for Mac binaries however, as upx doesn't support Apple Silicon yet.


StreamK Grid Prediction Model

Implement Grid Model for StreamK which will predict the number of workgroups to launch for a given problem size.

It was mentioned that I should provide a guide for the grid model. The goal of the grid model is to predict the number of CUs that StreamK should be launched on, as it may not always be optimal to launch streamk on all CUs at once. The top level function is:
def grid_model(
    m: int, #Problem Size M
    n: int, #Problem Size N
    k: int, #Problem Size K
    blk_m: int, #Block Size M
    blk_n: int, #Block Size N
    blk_k: int, #Block Size K
    grid_start: int = 1, #The minimum number of SM to predict
    grid_end: int = 304, #The maximum number of SM to predict
    verbose: bool = False,
) -> int:

You can use it like this:
from grid_model import grid_model

M = 2048
N = 2048
K = 2048
blk_m = 256
blk_n = 256
blk_k = 64

predicted_grid = grid_model(
    m=M, n=N, k=K, blk_m=blk_m, blk_n=blk_n, blk_k=blk_k, grid_start=1, grid_end=304
)
print(f"Predicted grid for {M}X{N}X{K} : {predicted_grid}")

In this case "predicted grid" captures a subset of cases where it may be more efficient to launch streamk on less than the total number of CUs.
The use case for this would then be something like this:

predicted_grid=grid_model( m=M, n=N, k=K, blk_m=blk_m, blk_n=blk_n, blk_k=blk_k, grid_start=1, grid_end=304) #Get the predicted grid
streamk_gemm(M,N,K,blk_m,blk_n,blk_k,num_sm=predicted_grid.....) #use it when you launch streamk kernel


re #26 some minor code cleanup

resolves #26

Funny. I've been wondering if I would run into a difference in syntax support between node 12 and node 14. Looks like the ?? {} operator is the winning token.


when generating, update the pubspec version to match the protocol

We should update the pubspec to reflect the version of the protocol. Perhaps inject the major and minor version into the pubspec version, and keep the patch number (and build metadata) as is?

Do we want to support multiple versions of the protocol ? Perhaps generate libraries which include the version # in the library name and file name? E.g. vm_service_lib_2.dart contains library vm_service_lib_2 ?

Let's discuss. I'm not clear of the best way forward. It seems like the two problems are tools not being able to talk to n - 1 VMs (slightly older VMs), and when a new VM comes out (n + 1 protocol), none of the existing tools can talk to it.

Yes, not sure how to proceed on this. If we have access to the n+1 spec, we can do what we can to support protocol version n+1 in the version n codebase. That might be the right approach to give tools the longest support runway for any given version of this client.

Yeah, but I'm afraid we might not know about n+1 when we ship :)


added collated export

User request to optionally collate/group subspectra (processed, raw, dark, reference etc) in export files.
I didn't bother to extend to row-ordered, because I don't think anyone uses those.

Original and new formats attached.
Session-20230511-113454.csv
Session-20230511-113503.csv


Buildasaur get confused when creating multiple PR from the same branch

Consider the following scenario:
feature/1234 -> to merge into -> develop
feature/1234 -> to merge into -> release
Buildasaur create two different Xcode server bots, one for each PR.
When the first bot runs, everything is ok
When the second one start integrating, the first PR start writing many comments (repeated) and also the build status keep changing reflecting the status of the second bot.
It looks like buildasaur get confused because of the source branch being the same.

This looks like a bug, thanks for reporting! :+1:
(Shhh, I haven't tested this case at all, so it's very possible it's broken.)

it looks like every time buildasaur launch a check (15s) it posts a new comment.

Are you running Buildasaur from code and built locally or are you using a .app from a release here on GitHub?

I am using the app. 0.29 I think?
It's the latest you can download.

Okay, this is amazing. Such an interesting bug. Let me try to explain what is going on.
Let me explain the context:
GitHub's Statuses are only attached to commits, not to branches or pull requests. That means that if you have one branch as the head of two pull requests, both the pull requests will share the status (the little failing - red x, success - green checkmark and pending - yellow dot status icons). This is due to how GitHub treats code (it makes sense) - assuming you test code in one commit, and it succeeds, it's a piece of valid code. Doesn't matter how many PRs you create from it, it's always going to have the same status.
Now, Buildasaur uses the GitHub status disparity as a signal to post a comment or correct the status. Meaning that if our bot says the integration succeeds, we know it should be a success status on GitHub. If GitHub doesn't have a status on that commit yet, we post it. If it has a different one (like failure or pending), we post a change and also post a comment.
In short, whether a comment is posted and a new status set depends on the current status on GitHub. If it's already what it's supposed to be (e.g. we say it should be success and it already is on GitHub, we don't post anything).
Here comes the fun: when you have two pull requests, Builda creates two bots. Simple as that. But if those bots are on the same branch (btw, IMHO, having two PRs on the same branch is a strange git practice, but that's for a different discussion), the status of the commit will be set based on the last bot that tested on a branch with that commit. So basically these two bots and PRs are fighting over the status of that commit. Let's say bot A is running, it will try to set the commit's (and thus PR "A"'s) status to pending. But, at the same time, bot B already finished with success, so it wants to make sure the status is success. So they, in an arbitrary order, will change the status to what they want. Until the next sync, when the fight is all anew. And since, whenever a bot is finished and the GitHub status doesn't match, Builda posts a comment, you get those extra comments until both bots have finished running.
This "bug" is really an unfortunate outcome of the fundamental principles of GitHub, Xcode Server and Buildasaur. I can't think of an easy way to fix this at the moment, but be sure that I won't rest until I can prevent Builda from going crazy like this. This is a very interesting bug and thanks a lot for reporting this.
So - I'm sorry that you're having this issue. What I'd suggest in the meantime is to avoid having more than one PR from one branch at the same time. If you can first open one, test it, merge it, then open the other, that will work fine. (Obviously you can continue to have any number of PRs open at the same time, assuming they're all on a different branch.)
Hope you at least got the gist of what the issue is, if not, I'll try to rephrase the explanation :)

@czechboy0 thanks for looking into this, it's absolutely crystal clear. Unfortunately, the scenario is not that uncommon if you think about tools like Travis that not only test the branch, but instead they tests the resulting merged branch. In that case, in fact, the results of the two different integrations may differ (I mentioned that workflow on twitter already).
I can see the workaround for the moment to not create pull requests from the same commit at the same time.
Just to make sure I understood it properly.
GitHub doesn't set the status on PRs but on Commits instead. Therefore, you are saying that there is no way to have buildasaur (on each sync) to change the status of a PR. Assuming this is true, there is not much you can do.
It's a fun problem, isn't it?

but instead they tests the resulting merged branch. In that case, in fact, the results of the two different integrations may differ

I get it, but unfortunately this doesn't have much to do with Buildasaur, because AFAIK, Xcode Server does a normal git clone, which doesn't pull these merge branches from GitHub. There's nothing I can do :( (mentioned Twitter conversation)

Therefore, you are saying that there is no way to have buildasaur (on each sync) to change the status of a PR.

That's not the problem, rather we'd like to be able to decouple the status of the head commit of each PR, so that we can set their status separately. Since it's shared, the PRs start getting confused as well, because "someone" is changing their status under their hand - and when that happens and the build is done, we post a comment.

That's what I meant. Changing the status of a PR by id and not implicitly by the commit that basically may change multiple PR's statuses at once.

Yeah exactly. Unfortunately that's not possible :(

Well, anyway. I don't know how to fix this without completely changing the fundamentals of how Buildasaur works. Buildasaur is stateless right now, which means that it doesn't persist any data between syncs (which happen every 15 seconds by default). So everything it does when deciding what to do with each PR and Bot, it needs to read from GitHub and Xcode Server, respectively. It can't just "save" that it "already posted a comment" and not do it again, because you could stop Buildasaur and start it again, and that information wouldn't be there again (and persisting would bring another layer of complexity). I wanted to make sure that even if you restart Buildasaur at any moment and it runs on any machine, everything works as expected. Right now it doesn't matter if you stop Buildasaur on one machine and start on another, it will do the right thing. If we saved data to the local Buildasaur, this wouldn't be the case anymore. Which I'm not willing to give up unless there's a very good reason.
I understand that this particular case is not in any way working as expected, but the way GitHub treats statuses just makes it very difficult to change.
I will not make any changes right now. If I, or anyone else, can think of a reasonable way to minimize the damage caused in this case (extra comments in PRs), please comment here. Otherwise, I'm closing this as a won't fix for now.