Refactor Sprite XML loading code

Related: #739, #211
The Sprite XML loading code should be examined and refactored. One goal here is to limit the use of XML code, such that it can be largely decoupled from the NAS2D library. This may make it easier to remove the TinyXML dependency from direct inclusion, allowing us to switch to vcpkg dependency installation, while also making it easier to transition to TinyXML2.
One feature needed by the Sprite code that is absent from the Configuration code is the ability to process arrays of data (the frame list).
Similar to the Configuration code, we may need to report errors due to missing required keys, or for extra unexpected keys which are neither required nor optional. This is likely to be true whether the we use XML, or JSON, or some other text format to store the data, so such error detecting and reporting code may need to be general and accessible to all such text processing methods.

It would be helpful to have template code that could parameterized with an arbitrary struct, and then serialize that struct. Or at least convert between a struct and a Dictionary.
There is no reflection in C++ that would allow automatic extraction of struct field names. It's also entirely possible the field names in the serialized form will be different than the field names in the struct. As such, we may need to specify field names for the serialized form, which may differ from the struct field names.
Usage might look something like:
struct SomeData {
  int field1;
  std::string field2;
};

const auto someData = SomeData{1, "data"};
const auto dictionary = structToDictionary<"fieldName1", "fieldName2">(dataStruct);

EXPECT_EQ(Dictionary{{{"fieldName1", 1}, {"fieldName2", "data"}}}, dictionary);

To support the above, I was doing a bit of reading on templates. The structured binding feature can be used to some advantage here, though there is still a problem of determining how many fields are in any given struct. A long while back, I read a bit about the magic_get library, which seems to have come up again. Here are some relevant links:

Stack Overflow: get the number of fields in a class
Counting the number of fields in an aggregate in C++20
GitHub: magic_get
Boost.PFR

I was just thinking, if we require the programmer to specify text strings for each field name, then we can already infer the expected number of fields in a struct by matching it with the number of text strings provided. And if they ever don't match, we could (and probably should) declare a compile error. It's likely an easier problem to detect if a struct has a certain number of fields, then to try and count them.
Given the number of fields in the struct, the next problem would be to determine the type of each struct field by index. This may relate to determining the type of a std::tuple field by index. It is possible to convert between a struct and a std::tuple. One way appears to be considerably more involved than the other though, and the conversion may involve structured bindings. Though this may be getting away from the original problem, and perhaps the techniques for std::tuple can be borrowed and applied to struct types without any conversion to std::tuple.
References:
Mundane std::tuple tricks: Finding a type in a tuple
Stack Overflow: struct to/from std::tuple conversion


DOC: Improve clarity of documentation for scipy.sparse.dia_array/dia_matrix

Issue with current documentation:
As far as I understand, the format of data in the constructor for scipy.sparse.dia_array/dia_matrix is consistent with the BLAS/LAPACK general band format when offsets is a range. The current documentation does not attempt to explain the format required but completely delegates the issue to an example. I think this may be a bit confusing (see, e.g., https://github.com/scipy/scipy/issues/15069) and I believe a little bit more information in the documentation would be very helpful.
Idea or request for content:
I think the current documentation could be greatly improved by mentioning three basic facts:

That sub-diagonals are left-aligned among themselves and with the main diagonal while super-diagonals are right-aligned among themselves and with the main diagonal;
That columns of data become (subsets of) columns of the generated sparse array/matrix;
That the format of data in the generator for scipy.sparse.dia_array/dia_matrix is consistent with the BLAS/LAPACK general band format when offsets is a decreasing range:

import scipy.sparse as sp
from scipy.linalg.blas import dgbmv

data = np.array([[1., 2., 3., 4., 5.]]) + np.array([[10], [20], [30], [40]])
offsets = [1, 0, -1, -2]
A = sp.dia_array((data, offsets), shape=(5, 5))
x = np.array([-1., 1., -2., 3., 5.])
y = A @ x
z = dgbmv(m=5, n=5, kl=2, ku=1, alpha=1., a=data, x=x)
print('data =', data, 'offsets =', offsets, 'A =', A.toarray(),
      'x =', x, 'A @ x =', y, 'dgbmv(..., data, x) =', z, sep='\n')
---
data =
[[11. 12. 13. 14. 15.]
 [21. 22. 23. 24. 25.]
 [31. 32. 33. 34. 35.]
 [41. 42. 43. 44. 45.]]
offsets =
[1, 0, -1, -2]
A =
[[21. 12.  0.  0.  0.]
 [31. 22. 13.  0.  0.]
 [41. 32. 23. 14.  0.]
 [ 0. 42. 33. 24. 15.]
 [ 0.  0. 43. 34. 25.]]
x =
[-1.  1. -2.  3.  5.]
A @ x =
[ -9. -35. -13. 123. 141.]
dgbmv(..., data, x) =
[ -9. -35. -13. 123. 141.]

Additional context (e.g. screenshots, GIFs)
No response

Hey @lciti,
I came across issue #18871 regarding the documentation for the scipy.sparse.dia_array/dia_matrix functions. It seems like a great first-time issue for me to contribute to the project. I'd love to take on the task of updating the dissolve function's docstring to accurately document the functionality of the by parameter. This would involve clarifying its purpose and providing examples to help users understand its usage. Please let me know if there's anything else I need to do or consider while working on this.

Hey @lciti, I came across issue #18871 regarding the documentation for scipy.sparse.dia_array and scipy.sparse.dia_matrix, and it seems like a great first-time issue for me to contribute to the project. Please let me know if there's anything else I need to consider or any additional tasks related to this issue.

@anudeepadi I have no objection but I am just the reporter of this issue. You may want to wait for one of the maintainers to give the green light.

+1 for improving the DIA format documentation as you've described, which should be sufficient to close gh-15069.
One slight caveat: the sparse documentation is undergoing some changes at the moment due to the array/matrix split (see gh-18898) so we may want to hold off on updating the docs until that settles down.

@perimosocordiae Ok sure let me know if you need help with something else I am open to contributing.


de-dot filter not working on json codec

I've configured my logstash agent (which does NOT have the de-dot filter) to send logs to Redis.
        file {
                type => "myapplog"
                path => ["/var/log/myapp/application/*.log"]
                exclude => ["*.gz"]
		codec => "json"
        }

On the Server side, my logstash server HAS the de-dot filter installed. It pulls data from redis and pushes into elasticsearch, But my logs are filled with errors related to "." character. I have three fields that are dodgy and I'm expecting de-dot filter to handle them
{:timestamp=>"2015-12-08T15:35:31.908000+0000", :message=>"Failed action. ", :status=>400, :action=>["index", {:_id=>nil, :_index=>"logstash-2015.12.08", :_type=>"tomcatapplog", :_routing=>nil}, #<LogStash::Event:0x5e4eb538 @metadata={"retry_count"=>0}, @accessors=#<LogStash::Util::Accessors:0x265ef763 @store={"@timestamp"=>"2015-12-08T14:16:00.215Z", "@version"=>1, "message"=>"Refreshing WebApplicationContext for namespace 'health-check-dispatcher-servlet': startup date [Tue Dec 08 14:16:00 UTC 2015]; parent: Root WebApplicationContext", "logger_name"=>"org.springframework.web.context.support.AnnotationConfigWebApplicationContext", "thread_name"=>"localhost-startStop-1", "level"=>"INFO", "level_value"=>20000, "HOSTNAME"=>"ip-10-0-0-10", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|timestamp"=>"1449584159077", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|transactionID"=>"[t-2024875724-1]", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|commitTimestamp"=>"1449584159077", "caller_class_name"=>"org.springframework.context.support.AbstractApplicationContext", "caller_method_name"=>"prepareRefresh", "caller_file_name"=>"AbstractApplicationContext.java", "caller_line_number"=>510, "service"=>"myservice", "host"=>"ip-10-0-0-10", "path"=>"/var/log/tomcat8/application/myservice.log", "type"=>"tomcatapplog", "TemplateTagName"=>"___TEST___", "Application"=>"General", "Cluster"=>"_Tomcat_", "InstanceId"=>"i-1172069a", "InstancePrivateIp"=>"<IP_ADDRESS>"}, @lut={"type"=>[{"@timestamp"=>"2015-12-08T14:16:00.215Z", "@version"=>1, "message"=>"Refreshing WebApplicationContext for namespace 'health-check-dispatcher-servlet': startup date [Tue Dec 08 14:16:00 UTC 2015]; parent: Root WebApplicationContext", "logger_name"=>"org.springframework.web.context.support.AnnotationConfigWebApplicationContext", "thread_name"=>"localhost-startStop-1", "level"=>"INFO", "level_value"=>20000, "HOSTNAME"=>"ip-10-0-0-10", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|timestamp"=>"1449584159077", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|transactionID"=>"[t-2024875724-1]", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|commitTimestamp"=>"1449584159077", "caller_class_name"=>"org.springframework.context.support.AbstractApplicationContext", "caller_method_name"=>"prepareRefresh", "caller_file_name"=>"AbstractApplicationContext.java", "caller_line_number"=>510, "service"=>"myservice", "host"=>"ip-10-0-0-10", "path"=>"/var/log/tomcat8/application/myservice.log", "type"=>"tomcatapplog", "TemplateTagName"=>"___TEST___", "Application"=>"General", "Cluster"=>"_Tomcat_", "InstanceId"=>"i-1172069a", "InstancePrivateIp"=>"<IP_ADDRESS>"}, "type"]}>, @data={"@timestamp"=>"2015-12-08T14:16:00.215Z", "@version"=>1, "message"=>"Refreshing WebApplicationContext for namespace 'health-check-dispatcher-servlet': startup date [Tue Dec 08 14:16:00 UTC 2015]; parent: Root WebApplicationContext", "logger_name"=>"org.springframework.web.context.support.AnnotationConfigWebApplicationContext", "thread_name"=>"localhost-startStop-1", "level"=>"INFO", "level_value"=>20000, "HOSTNAME"=>"ip-10-0-0-10", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|timestamp"=>"1449584159077", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|transactionID"=>"[t-2024875724-1]", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|commitTimestamp"=>"1449584159077", "caller_class_name"=>"org.springframework.context.support.AbstractApplicationContext", "caller_method_name"=>"prepareRefresh", "caller_file_name"=>"AbstractApplicationContext.java", "caller_line_number"=>510, "service"=>"myservice", "host"=>"ip-10-0-0-10", "path"=>"/var/log/tomcat8/application/myservice.log", "type"=>"tomcatapplog", "TemplateTagName"=>"___TEST___", "Application"=>"General", "Cluster"=>"_Tomcat_", "InstanceId"=>"i-1172069a", "InstancePrivateIp"=>"<IP_ADDRESS>"}, @metadata_accessors=#<LogStash::Util::Accessors:0x27c58846 @store={"retry_count"=>0}, @lut={}>, @cancelled=false>], :response=>{"create"=>{"_index"=>"logstash-2015.12.08", "_type"=>"myapplog", "_id"=>"AVGCO7whlPprfuh1wD8C", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"Field name [com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|commitTimestamp] cannot contain '.'"}}}, :level=>:warn}

e.g.
"reason"=>"Field name [com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|commitTimestamp] cannot contain '.'"}}}, :level=>:warn}

same problem
input {
  udp {
    codec => json
    port => 5505
    buffer_size => 64000
    }
}

filter {
  de_dot {
    nested => true
    add_field => {
      "fix_me" => "migrate-logstash-2"
    }
  }
}
output {
  elasticsearch {
         hosts => "localhost:9200"
    }
}

in logstah log:
{:timestamp=>"2015-12-08T19:04:40.622000+0000", :message=>"Failed action. ", :status=>400, :action=>["index", {:_id=>nil, :_index=>"logstash-2015.12.08", :_type=>"logs", :_routing=>nil}, #<LogStash::Event:0x27cc2b23 @metadata={}, @accessors=#<LogStash::Util::Accessors:0x4d241b3e @store={........... "fix_me"=>"migrate-logstash-2"}, @metadata_accessors=#<LogStash::Util::Accessors:0x5ba3b0e3 @store={}, @lut={}>, @cancelled=false>], :response=>{"create"=>{"_index"=>"logstash-2015.12.08", "_type"=>"logs", "_id"=>"AVGC-zeXoj8F4_hONA08", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"Field name [q.op] cannot contain '.'"}}}, :level=>:warn}

@mogadanez @pkr1234 which version of the plugin are you using?
/opt/logstash/bin/plugin list --verbose logstash-filter-de_dot
logstash-filter-de_dot (0.1.1)

There has been one update since release that fixed a number of issues.  If you're still using 0.1.0, please upgrade to 0.1.1 by doing the following:
sudo /opt/logstash/bin/plugin update logstash-filter-de_dot
[sudo] password for user:
Updating logstash-filter-de_dot
Updated logstash-filter-de_dot 0.1.0 to 0.1.1

just installed it today, 0.1.1

in my case "dotted" filed is nested deep in source JSON
{
...
"query_options:{
 "q.op": "AND"
}
...
}

Can you include gist/pastebin of some sample events so I can try to overcome this with actual data?

reproduced simple:
logstash.conf:
input {
  stdin {
    codec => json
    }
}
filter {
  de_dot {
  }
}
output {
  elasticsearch {
         hosts => "localhost:9200"
    }
}

run
bin/logstash -f logstash.conf

positive case
type: { "message":"test"}
output:

{
       "message" => "test",
      "@version" => "1",
    "@timestamp" => "2015-12-08T20:46:26.385Z",
          "host" => "ip-10-0-0-46"
}

negative case
type: { "inner": { "q.op":"and" } }
output:

{
         "inner" => {
        "q.op" => "and"
    },
      "@version" => "1",
    "@timestamp" => "2015-12-08T20:46:59.076Z",
          "host" => "ip-10-0-0-46"
}
Failed action.  {:status=>400, :action=>["index", {:_id=>nil, :_index=>"logstash-2015.12.08", :_type=>"logs", :_routing=>nil}, #<LogStash::Event:0x225840d4 @metadata={}, @accessors=#<LogStash::Util::Accessors:0x50082fe9 @store={"inner"=>{"q.op"=>"and"}, "@version"=>"1", "@timestamp"=>"2015-12-08T20:46:59.076Z", "host"=>"ip-10-0-0-46"}, @lut={"host"=>[{"inner"=>{"q.op"=>"and"}, "@version"=>"1", "@timestamp"=>"2015-12-08T20:46:59.076Z", "host"=>"ip-10-0-0-46"}, "host"], "inner"=>[{"inner"=>{"q.op"=>"and"}, "@version"=>"1", "@timestamp"=>"2015-12-08T20:46:59.076Z", "host"=>"ip-10-0-0-46"}, "inner"]<EMAIL_ADDRESS>"@version"=>"1", "@timestamp"=>"2015-12-08T20:46:59.076Z", "host"=>"ip-10-0-0-46"}, "@version"], <EMAIL_ADDRESS>"@version"=>"1", "@timestamp"=>"2015-12-08T20:46:59.076Z", "host"=>"ip-10-0-0-46"}, "@timestamp"], "type"=>[{"inner"=>{"q.op"=>"and"}, "@version"=>"1", "@timestamp"=>"2015-12-08T20:46:59.076Z", "host"=>"ip-10-0-0-46"}, "type"]}>, @data={"inner"=>{"q.op"=>"and"}, "@version"=>"1", "@timestamp"=>"2015-12-08T20:46:59.076Z", "host"=>"ip-10-0-0-46"}, @metadata_accessors=#<LogStash::Util::Accessors:0x7acc8678 @store={}, @lut={}>, @cancelled=false>], :response=>{"create"=>{"_index"=>"logstash-2015.12.08", "_type"=>"logs", "_id"=>"AVGDWOT2TNCWSez1DP5q", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"Field name [q.op] cannot contain '.'"}}}, :level=>:warn}

I'm sorry for the confusion, but this is an expected behavior.
Please see the documentation for the fields directive:

The fields array should contain a list of known fields to act on. If undefined, all top-level fields will be checked. Sub-fields must be manually specified in the array. For example: ["field.suffix","[foo][bar.suffix]"] will result in "field_suffix" and nested or sub field ["foo"]["bar_suffix"]
Warning: This is an expensive operation.

(Emphasis added).
When writing the de_dot filter, it became immediately apparent that crawling recursively down all possible sub-objects would be a very expensive operation which would result as a major hit to the events per second throughput.  The compromise we went with to get this out the door was to fix all top-level field names, but require manual naming of any deeper sub-object field names to reduce the overhead.

not sure how to use it right
tried
fields => [ "inner" ]
and
fields => [ "[inner]" ]
but it not works

it should not impact throughput

Unfortunately it does impact throughput, drastically.  The operation is very expensive as the event has to have fields added and removed in stages.  It would still have to recurse any sub-field to guarantee that the entire object structure is properly built, even if you gave the parent object field as a helper.  This will dramatically slow down the number of events per second that Logstash can handle.

probably this section in doc need more detailed examples

We put a bit more (not much) in the release blog.  Feel free to edit the docs (not the blog) and submit a pull request to improve them, or submit an issue with suggestions.
Likewise, if you'd like to submit a pull request to add functionality to recurse downward through specified sub-fields, I'd be happy to review and merge it.  Tests are required for merge, even if you don't add them yourself.

can you explain, if I provide definition how to recurse, why it should do more?
so, simplified it  do:
for  field in root_fields
{
replaceDots()
}

with sub-roots it will be:
for  field in root_fields
{
  replaceDots(
  if ( filed in sub_fileds )
  for  sub-field in filed.sub_fields
  {
     replaceDots()
   }
}

so only number of subnodes will be added.
if I have 100 root fields, specify 5 subnodes  each have 10 fields = 150 checks in total
not dramatically IMO, especially keeping in mind that I specify it directly, so it not affect default configuration

The pseudo-code fits your use case, @mogadanez.  But as I read it, it only allows it to work against 1-level deep sub-fields.  I can't add an option that only traverses 1-level deep.  If it's going to do sub-fields, it has to be able to get all sub-objects, and further sub-objects, etc. under a given sub-object.
The real issue here is that if we allow 1-level deep, then we need to anticipate unmet expectations regarding why it doesn't do n-level deep.  If someone wanted to write the recursive (or to recurse only named sub-objects) I'd be happy to review and merge it.  We discussed this plugin as a team and determined that this was the best initial way forward.  We're receptive to submissions improving the filter, but making it recursive is not very high on our list of priorities at this moment.

@pkr1234 I haven't heard back from you yet.  Has the discussion here answered any of your questions?

I not suggest specify "some-field" and replace it on levels, I suggest  relax path for one level.
fields => [ "[inner1]",  "[inner2][inner2-2]"  ]
{
"inner1" : {  "with.dot":"1"  }  //will be replaced
"inner2" : {
"with.dot" ,

   }

}

@mogadanez I understand perfectly, but I just don't think that a single additional level is sufficient.  A working solution should be able to traverse all, not just "the next" level.

I don't think it is working even at the first level. My log event is
{
"@timestamp":"2015-12-09T08:38:59.922+00:00",
"@version":1,
"message":"Fetching all SuperCategories",
"logger_name":"com.xx.yy.category.service.impl.myImpl",
"thread_name":"http-nio-8080-exec-5",
"level":"DEBUG",
"level_value":10000,
"HOSTNAME":"ip-10-0-0-1",
"com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|timestamp":"1449650339914",
"com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|transactionID":"[t-2091028360-2]",
"com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|commitTimestamp":"1449650339914",
"username":"jonl",
"cID":"5d71e91b-da39-4e08-b004-234242534534",
"caller_class_name":"com.xx.yy.category.service.impl.myImpl",
"caller_method_name":"getSuperCategories",
"caller_file_name":"Category.java",
"caller_line_number":38,
"service":"my-service"
}

As you can see there are three dodgy fields starting with com.cc. .. but the de-dot filter does not replace it.  These are not buried "n" levels deep. It is at the top level.
Also the choice to act upon all levels should be made by users. If we have to specify all fields (which we may or may not know in advance), then the de-dot plugin is not useful. You should provide an option to act on all fields (nested or not). The choice should be up to users whether they want to take a performance hit or not.

Right. I've tested it and it only works if I add the following in my logstash server configuration.
filter {
        de_dot {
                fields => ["com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|timestamp", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|transactionID", "com.cc.sqllogging.mysqlinterceptors.v1.services.impl.SLF4JLogService|commitTimestamp"]
        }
}

So it does not  work as documented. It is supposed to work at the top level without specifying the fields.
My point still stands. The choice to take a performance hit should be with the users. It would be better if you retain the existing functionality AND provide an option to operate on all (or maybe allow users to specify levels) nested fields.

Actually if i need specify all fields, I can use old mutate filter with same result

@pkr1234 I'm guessing that the issue with your field name is the pipe character and its effect on the regular expression.  I will test this soon to verify.
Any reason why you keep that?

If deep recursion would be useful as a feature, we can add it in and just note that it has probably-very-bad performance impact.

@untergeek  Not under my control unfortunately. We are getting the java developers to fix it but it will take time.

@jordansissel Please add it but disable by default. Users can enable, if required. If we could specify levels to go deep (if it helps the performance), that would be even better.

@untergeek
I'm also having an issue with "[]" characters in the fieldname-
filtering
{"a.b.c[0].d[1]": "value"}
Doesn't remove the dots.

@ofirnn That's an interesting one.  Are those [] arrays?  That's something that would need to be properly processed as a JSON object before it could be handled by the de_dot filter.  Even then, you'd have to manually specify the full path to each sub-object in the fields directive, as outlined above, and in the documentation.  Deep recursion is not yet available.  It was omitted as it would affect out of the box performance severely.
If they are not arrays, then that's probably unacceptable JSON notation, as that's what [] indicates.

@untergeek
Thanks for the quick reply..
These fields are not arrays in the source message - just field with brackets inside name (valid in JSON).
(example:  {"a.b.c[0].d[1]": "singlevalue"} )
After some checks - it seems that logstash json codec had changed and builds them as arrays - so de_dot doesn't work (nested) - so I assume that's the main problem.
I've opened logstash-json-codec issue - link below:
https://github.com/logstash-plugins/logstash-codec-json/issues/19

It seems to me those would have to be escaped in JSON, otherwise how would that be able to determine between an actual array and not an array?

When you send logs, especially from 3rd party tools,  its hard and requires
recursive traverse. For doesnt matter where to do this traverse on sending
side or receiving, total throughput  will be same.
It seems to me those would have to be escaped in JSON, otherwise how would
that be able to determine between an actual array and not an array?
—
Reply to this email directly or view it on GitHub
https://github.com/logstash-plugins/logstash-filter-de_dot/issues/6#issuecomment-164570581
.

I believe this issue has gone in the direction of adding a feature to limit/optimize the amount of recursion for de_dotting nested structures..should this be closed and reopened as such?
Or am I seeing this wrong and there's an actual bug?

@jsvd @untergeek how is it possible to access certain fields in array?  Trying both of the following did not work:
 de_dot {
  fields => ["[blah][groups][columns][field.with.dots]"]
 }

 de_dot {
  fields => ["[blah][groups][0][columns]field.with.dots]"]
 }

  "blah": [
         {
            "name": "asdf",
            "groups": [
               {
                  "name": "blah blah",
                  "columns": {
                     "col1": {
                        "newValue": "yada yada"
                     },
                     "notes": {
                        "newValue": ""
                     },
                     "some_field": {
                        "newValue": "(RED)"
                     },
                     "field.with.dots": {
                        "newValue": ""
                     }
                  }
               },
               {
                  "name": "blah blah",
                  "columns": {
                     "something": {
                        "oldValue": "3",
                        "newValue": "3",
                        "doNotDisplay": 3
                     }
                  },
                  "doNotDisplay": true
               }
            ]
         }
      ]

Reproduces for me also with latest de-dot and Logstash on deeply nested fields


Useful updates for future improvement

Hello,
I have updated the pyOxygen package with new features:

The fetchElog function, in case of an error from ':ELOG:FETCH?' would return an empty list (Can happen if elog has not yet started). I have modified it to return the value False, as is the case from 'NONE'.
It is possible that, connecting to Oxygen, some transfer channels, as well as elog channels were already configured from a previous session. Therefore the attributes channelList and elogChannelList are updated at the __init__ using the helper functions _getTransferChannels and _getElogChannels.
For the setElogTimestamp method, only the 'REL' and 'ABS´ arguments were available. the 'ELOG' was included.
A new attribute called _localElogStartTime was created and included at __init__. This attribute is updated with the current datetime every time that the method startElog is called. The reason for that is to have a time reference to when the elog started so that functions in the future could be implemented, those functions will use this reference to stop the logging if a certain amount of time is reached.
Added the elogContext method, which is a context manager that can be used in a with statement. The context manager starts the ELOG and stops it either when exiting the context or when an Exception occurs within the context. The following snipped exemplifies its usage:

with mDevice.elogContext():
    # Here elog is started, from here the fetchElog method can be called.
    time.sleep(10)
    data = mDevice.fetchElog()
    raise Exception
# Here stopElog is called even if the Exception is raised

I hope you find these changes useful. If so, I would like to improve more by creating another module containing functions that
record values from the Oxygen using multithreads or coroutines, while other instruments can be controlled and recorded as well.
Best regards
Danton

Hello,
With the new commits, I have changed/ included the following:

Issue with fetchElog() method: Previously, it fetched a big string and divided the comma-separated values evenly by the number of channels + 1 (timestamp), but if no elog timestamp is set (or "OFF"), this division makes was erroneous. I added a condition that the +1 should be there only if there are timestamps.
For the above-mentioned issue to be fixed, a new method called _getElogTimestamp() was created to get the timestamp from the command ":ELOG:TIM?" this saves the elog timestamp into an attribute called elogTimestamp. This method is also called at each connection.
A new private method called _convertElogArray() that converts a single array of string values from a fetchElog() list of arrays to an array of float values or datetime timestamps for the absolute timestamps. A new parameter was added to fetchElog(), called raw_string, which convert each row from the returned value using _convertElogArray() if False, the default is True for backwards compatibility.
A new method called fetchElogAccumulated() that blocks the execution and keeps calling fetchElog(), appending fetched values until a fetched timestamp is higher than the timestamp saved with the function call.

I hope you find these modifications useful and I am looking forward to keep contributing. Please let me know if there are any
questions.
Best regards
Danton


Entity changes

Includes ticdijson-entity branch changes.

Add basic keycloak auth
Add admin templates page that requires admin role, displays info on existing templates and allows admin to upload templates
Add template module to backend, includes an entity which stores template data/metadata in the db.
Add admin module to Nest frontend
Major entity/module changes
Uploading templates + generating documents functionality

DEV deployments have completed successfully!
Backend available
Frontend available

Your Pull Request code is being promoted!  Please follow the link below.
Main Merge Workflow


Add support for Gedmo TranslationEntity annotation

Modified the getTranslationClass to search the Gedmo (Gedmo\Mapping\Annotation\TranslationEntity) annotation to define the translation class to be used.

Thanks for contribute but except a reborn of the abandoned refactoring of the Translatable feature like started in https://github.com/Atlantic18/DoctrineExtensions/tree/wip-v2.4.0, this bundle will not manage Gedmo


Discord fails to build on unstable

Discord fails to build on unstable
searching for dependencies of /nix/store/rqvq2j27zd5qbbqy5jcjxq22jq8if2yf-discord-0.0.10/opt/Discord/.Discord-wrapped
  libuuid.so.1 -> not found!

CC @ldesgoui @MP2E  @tadeokondrak
Metadata
 - system: `"x86_64-linux"`
 - host os: `Linux 5.6.16-hardened, NixOS, 20.09pre229574.0a146054bdf (Nightingale)`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.3.6`
 - channels(elf): `"nixpkgs-20.03.1619.ab3adfe1c76"`
 - channels(root): `"nixos-20.09pre229574.0a146054bdf, home-manager"`
 - nixpkgs: `/home/elf/.nix-defexpr/channels/nixpkgs`

attribute: pkgs.discord

It appears that @rtldg already fixed that yesterday. :-)
If you do not want to wait till the unstable channel is updated, you can use:
nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/master.tar.gz -p discord


Added restrictAccess flag to enable/disable behavior of botkube.

This flag will control user's access to botkube via configured channel. If set to true, it will allow user to talk to botkube only through configured channel. In other case, botkube will be accessible from all channels.
Signed-off-by: Mahendra Bagul<EMAIL_ADDRESS>ISSUE TYPE

Bug fix Pull Request

SUMMARY

Fix for https://github.com/infracloudio/botkube/issues/235

Merged! Thanks @mahendrabagul for the PR


Fix multiple channels test.

This fixes the test added in d7f71bbbcc45a75b792e23b59c4e3f5ad149cf9c by setting the id that the test expects.
It probably got lost when I resolved the merge conflict with which repository the test runs from.

No problem. I wish GitHub would support variable expansion inside uses…


on-chain address is referenced on the signal provider's website

Hi there, I'm looking to be listed as a signal provider and just had a question regarding:
The on-chain address is referenced on the signal provider's website (enforced 2023-03-31)
Is this absolutely necessary? If I'm listed before 2023-03-31 (enforcement date) is this still required? Thank you

It'll be enforced from 2023-03-31, for all providers.


[BUG] Page not loading

System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Windows 12
Python version (python --version): Python 3.9.12
FiftyOne version (fiftyone --version): FiftyOne v0.18.0, Voxel51, Inc.
FiftyOne installed from (pip or source): pip

Commands to reproduce
python -m venv venv

.\venv\Scripts\activate

pip install fiftyone

fiftyone app launch

Describe the problem
When I try to open fiftyone with Firefox or Chrome, it does not work, as you can see in the screenshots below:

I'm pretty sure the problem is with my PC, but I thought I should post it anyway.
I already had to change the mime type in my registry (HKEY_CLASSES_ROOT.js) from text/plain to application/javascript. But it did not solve the problem.
Fiftyone works with Jupyter and the desktop application, so I can still work with it.
What areas of FiftyOne does this bug affect?

[x] App: FiftyOne application issue
[ ] Core: Core Python library issue
[ ] Server: FiftyOne server issue

Willingness to contribute
The FiftyOne Community encourages bug fix contributions. Would you or another member of your organization be willing to contribute a fix for this bug to the FiftyOne codebase?

[ ] Yes. I can contribute a fix for this bug independently
[ ] Yes. I would be willing to contribute a fix for this bug with guidance from the FiftyOne community
[x] No. I cannot contribute a bug fix at this time

Hi @Sa-Schmi looks like an issue with SSE (Server Sent Events). Adding polling to the URL may fix things, as that enables the HTTP polling fallback.
http://localhost:5151/?polling

Hi @benjaminpkane thank you very much, it really was that simple.
Can you help me solve this problem, or should I just use polling all the time?

Hi @Sa-Schmi. Apologies. I recommend using polling. We will likely transition to polling only approach in the future

Ok thank you for your help!


Add a requirements.txt

We should add a requirements.txt to make sure that we have the appropriate versions for all packages

It looks like this is covered adequately by setup.py. I modified setup.py in this PR (https://github.com/quantopian/alphalens/pull/214) to be up-to-date with more current pandas.


feat(cmds): #11 support running any cargo cmd(s)

Add support for running arbitrary cargo commands.
For example:
cargo watch "test ex_ —release"

will run cargo test ex_ —release.
Also supports multiple arguments:
cargo watch build test

will run cargo build followed by cargo test.
I've been using this for the last few days and haven't run into any issues.
Let me know any changes and I'll incorporate.

I'd prefer to have either the syntax cargo watch "command" or cargo watch --command "command". Both, maybe. Adding a *sub-*sub-command makes no sense at all here.
The cargo watch "command" syntax could then allow invocations like:
$ cargo watch run
$ cargo watch build
$ cargo watch test bench
$ cargo watch "test ex_ --etc"

as what was proposed originally in #11.

Given above comments, this will be a breaking change, bringing us to v3.

Thanks for the comments! I agree that makes sense. I'll incorporate those changes.

I've updated the PR, much simpler logic now!

Sorry for the wait, holidays :)

No worries, thanks!


Attemped out of bounds Tuple access

When I compile following grammar I get an out of bounds error for define_to_directive:
http://pastebin.com/HpihTNDF
The generated code shows that it tries to access element 2 and 3 of the tuple although the type signature has only two elements.

Hello! First of all, thank you for trying out my library, I'm really happy I got a user ;-)
Could you add the code referenced by the following use-statements please?
use super::Directive;
use super::IfElse;

Also you can write an identifier with the rule identifier = !["0-9"] ["a-zA-Z0-9_"]*, therefore you can use stringify and remove stringify2.


Jesse: Watch bestwritefirst.com

Jesse requests the watch of the watch_keyword bestwritefirst\.com. See the MS search here and the Stack Exchange search in text, in URLs, and in code.

bestwritefirst\.com has been seen in 1 true positive, 0 false positives, and 0 NAAs.

Approved by Jeff Schaller in Charcoal HQ


Add Matrix room

Thanks!

@psibi Could we also add a Matrix icon to the footer?

I added it in #39


Behavior weird after upgraded to Glide 4.4

In my project, blur effect seems not working after upgraded to Glide 4.4.
Anyone meet the same issue here?

It would have to be something you're doing wrong on your end and not the library itself as I have gotten this working out of the box with Glide 4.4.
Glide 4.4 introduces some changes to the way effects are applied. See below for an example of how to blur an ImageView:
//Blur Image
if (dataArray.get(position).shouldBeBlurred()) {
Glide.with(getContext()).load(dataArray.get(position).getImageURL()).apply(RequestOptions.bitmapTransform(new BlurTransformation(25))).into(holder.imageView);
} else {
Glide.with(getContext()).load(dataArray.get(position).getImageURL()).into(holder.imageView);
}


[FEATURE] Allow more functions in services to be overridden

Is your feature request related to a problem? Please describe.
Some functions and getters in services cannot be overridden using the current version of the plugin.
Describe the solution you'd like
Make certain getters and functions able to be overridden to improve ease of implementation.
Describe alternatives you've considered
The implementing project could just reimplement these functions that cannot be overridden, but the reimplementation would only introduce minor differences from the plugin's implementation.
Additional context

Hi @roberlander2. Everything looks pretty good in the issues/ID-1 branch so far. I appreciate the way you have taken: to create an issue and do the work in a standalone branch for this issue. I just wanted to give you a hint that if you add "#1" in your commit texts GIT will associate this commit to the referred issue number and you will see it listed in the issue's history. You could take a look at any of the illinois-app repo issues to see this feature in action.

Hi @mihail-varbanov, I want to ask about the notification strings used by notification_service.dart.
Does the prefix need to match the application ID of a client implementing the plugin?
For example, if a client with app ID new_app implements the plugin, would static const String notifyLoginSucceeded    = "edu.illinois.rokwire.auth2.login.succeeded"; need to be overridden to be "new_app.auth2.login.succeeded"?
If the prefixes of these strings do not need to match the app ID, can we remove the prefixes to make this clearer?
Please let me know your opinion on this. Thanks!

Hi @roberlander2,
The notification names can take arbitrary values. The only requirement is they to be unique so that to avoid conflicts when two independant services that do not know each other use the same notification name.
For example, consider the case if Styles and Config services use  content.changed as notification name when they get updated. A listener for Config updates would get notified when Styles service gets changed, that is not good.
Please consider another case - a Flutter application includes a number of different plugins, each of which uses notification service to fire some events. In order to avoid a conflict between different packages it is good to include the package name/identifier inside the notification name. That's why the notification names in the plugin always start with edu.illinois.rokwire, then we have a service identifier (e.g. config, inbox, etc.), and only then the name of the actual event.
In OSF Oncall Connect app it is fine to listen for any plugin events, e.g. edu.illinois.rokwire.config.changed. In your app side, if you need to define your own notification I would recommend to use the same model, e.g. com.rokmetro.osf.oncall.connect.config.something_happen if you override Rokwire's Config service and need to fire some different config name, or com.rokmetro.osf.oncall.connect.health.illnesses.changed that your Health service currently fires.
Once again, this is not some strong requirement, this is just some a naming convention for avoiding conflicts in notification names.

@mihail-varbanov, thank you for the clarification!

Thanks @mihail-varbanov, I will keep this in mind for future updates. I created a PR for my changes now that I have gotten my build working. Please let me know if you would rather not merge the "environment" typo fix, this change is not required for my build.


Using %sil-opt is inconsistent with the rest of the tests in this directory

Using %sil-opt is inconsistent with the rest of the tests in this directory which use %target-sil-opt. This causes problems if some lit systems don't recognize %sil-opt and only recognize %target-sil-opt. Updating for consistency.

@swift-ci please test

@swift-ci please smoke test


feat: initial commit

Initial implementation ready for some feedback. Start at the README and let me know what you think!

@dcaiafaISP I pushed up some fixes for one-of support, but there is a test that will fail until we merge https://github.com/istreamlabs/huma/pull/16, just FYI.


Fix "TypeError: "query" is read-only" in dataController.js

As a const cannot be redefined, and query is redefined a few lines further, we were getting a TypeError: "query" is read-only error in dataController.js.
This patch switches it to a let and the error is gone.
Version used: 10.0.4

Thanks man, good catch! 👍


Added dislike and test cases

Made the following changes:

implemented a dislike action in routes.py

added test cases

In routes.py, line 317 should be  """Disliking a recommendation adds 1 to dislike"""
Other parts are great!


Combi chart

I have adopted the changes in documentation, and styles for documentation.
I have trouble with the changes to mui - these specific changes don't seem to change anything.
I also am reluctant to accept the changes for combi-chart. combi-chart is supposed to become a playground to explore dimple features - this combi-chart has some very specific changes that essentially turns the combi-chart into a time series chart. I think it would be better to keep these kinds of specific changes in your own, separate visualization plugin.


Reverts calico update to 3.2.0, fixes #3223

As asked by @ant31 a PR with the fix for #3223
Reverts upgrade of calico to 3.2.0 done in #3140
Tested on my local cluster and it works again :)

ci check this

@ant31 I have the CLA already signed but it doesn't seem tot recognize it. The force push is with the email address matching the CLA so that might be the issue :)

the email signed the cla should match the email from the commit. can you retry signing the cla ?

@ant31 Tried everything just yet to resign the CLA but I have the idea the email has been sent before and can't be resent. I mailed the support for help :'(
If this is blocking I have no problem with you proposing the same PR just to get it merged.


UI bug because of long translations

The following bug happens when clicking on the button Create new sharing link, when the sharing is already active:
In the french translation (maybe in some others), the translation of "Allow adoption" text label ("Autoriser l'ajout de partage") is so long that we can't see the buttons at the bottom of the pannel.
 We are then forced to force close the app to have access to it again.
And we can't scroll in any way to make these buttons come to the screen.

Sorry for not getting back to you earlier on this. I've had a lot to do this summer.
A similar issue was raised in #127 but I apparently forgot about this dialog box. Fixed it now, this will be live in the next update. Thanks for reporting!


Quantics fourier transform

This MR adds a method quanticsfouriertto that generates a tensor train operator for the quantics fourier transform.

@shinaoka can I merge this, or is the repo not ready yet?


Add dsl configuration support for trigger setup section of ghprb plugin

Add dsl configuration support for trigger setup section of ghprb plugin

Thank you for a pull request! Please check this document for how the Jenkins project handles pull requests

please update the documentation as part of your pull request and squash your commits to a single one

close this and will start another one soon

You do not need to close a pull request, just force push to the branch after doing some cleanup.


Need to set up a production copy of expertiza on ncsu VCL or aws

We have an EC2 instance now on AWS for production testing.


Read messages from public folders

Version (e.g. 1.0, dev-master):
PHP version: 5.6
Microsoft Exchange version: 2013
It is possible to read messages (header and body) from public folders?
Thanks for help.

Also curious. I noticed a few things, but even using EWS Editor, how do you obtain the folder ID and is there no way it can be done using this library instead or PowerShell on the server?

I don't get the folder ID. I try to list all folders and the public folders are not listes. It seems to that it is not possible to access to public exchange folders...

Hi, its too long time ago. But look here: https://www.jamesarmes.com/php-ews/doc/0.1/examples/folder-list.html


Example notebook Using_a_pretrained_model_for_inference error with TRUNK_PARAMS

Instructions To Reproduce the 🐛 Bug:
Example notebook Using_a_pretrained_model_for_inference does not run in my local environment. If downloaded as-is, the first crash occurs with the line
model = build_model(cfg.config.MODEL, cfg.config.OPTIMIZER)
which reports the error
---> 67         self.trunk_config = self.model_config.TRUNK.TRUNK_PARAMS.RESNETS
68         self.depth = SUPPORTED_DEPTHS(self.trunk_config.DEPTH)
69         self.width_multiplier = self.trunk_config.WIDTH_MULTIPLIER

What seems to be wrong and my suggestion for how to fix it

Both pip and conda will install v0.1.5, but the links in the notebook download the 'master' branch version of the yaml files
To match the versions, wget the v0.1.5 versions of the yaml files instead. I'd suggest putting both options into the notebook with a note about v0.1.5 versus master
To check the installed version, use
print(vissl.__version__)

If you somehow have the 'master' version of files like vissl/models/trunks/resnext.py, fetch these yaml files as currently shown in the notebook:
!wget -q -O configs/config/simclr/simclr_8node_resnet.yaml https://raw.githubusercontent.com/facebookresearch/vissl/master/configs/config/pretrain/simclr/simclr_8node_resnet.yaml
!wget -q -O vissl/config/defaults.yaml https://raw.githubusercontent.com/facebookresearch/vissl/master/vissl/config/defaults.yaml

If you did a conda or pip install and your vissl.__version__ shows that you have v0.1.5:
wget -q -O configs/config/simclr/simclr_8node_resnet_v015.yaml https://raw.githubusercontent.com/facebookresearch/vissl/v0.1.5/configs/config/pretrain/simclr/simclr_8node_resnet.yaml
wget -q -O vissl/config/defaults_v015.yaml https://raw.githubusercontent.com/facebookresearch/vissl/v0.1.5/vissl/config/defaults.yaml

Note that I've opted to change the name of the file as it is saved locally. This means there are 2 small changes later in the notebook to use the _v015 versions of the yaml files.
config = OmegaConf.load("configs/config/simclr/simclr_8node_resnet_v015.yaml")
default_config = OmegaConf.load("vissl/config/defaults_v015.yaml")

Hi @jshaffer94247 yes you are right about all of this. We are going to be cleaning up the tutorials and specifically the versioning in our next minor release.

Hi @jshaffer94247 sorry for the delay, but all of our tutorials are now fixed and in working order.
You can see: https://vissl.ai/tutorials/Using_a_pretrained_model_for_inference_V0_1_6.


Adapt tools to Morning Glory

Morning Glory Release notes
Known things affecting the tools

[ ] Something
[ ] Something else

Changes to Schemas

[ ] Something
[ ] Someting else

Programming tasks
(to become own Github Issues)

[x] Remove Kiwi references from the code base
[x] Add FOLIO Release Enum for Morning Glory in configuration

Broke "Add FOLIO Release Enum for Morning Glory in configuration" out into https://github.com/FOLIO-FSE/folio_migration_tools/issues/414

Added #421 as well. @branchedelac when adding the new flower release, I think it makes sense to try to remove the deprecated ones from the code base as well..

@fontanka16 @branchedelac Would we consider this issue complete, seeing as how we're onto Nolana now 😄 ?


Refactor cabinet ministers controller

Description
This breaks out the CabinetMinistersController#update action into 4 separate endpoints which handle updating each of the 4 reorderable lists on the cabinet ministers show page.
Each of these have a separate page to reorder them, but currently share the same endpoint which handles updating them. Due to this there's a bunch of logic that figures out which reorder page has hit the endpoint and uses the referrer to constuct the anchor for the redirect.
It's pretty hacky and quite tricky to parse. Separate endpoints which handle updating that specific subset of ministerial roles with are slightly more verbose seems preferable.
For now i've left a good amount of duplication in each update order actions. The next thing i'm working on is going to be a refactor for all the reorder endpoints. If i'm unable to refactor the logic from these controller actions elsewhere i'll consider a direct refactor of the endpoints.
Trello card
https://trello.com/c/JoE5X6uD/2205-at-least-one-workflow-in-whitehall-relies-on-skipping-validations-as-some-organisations-are-known-to-be-invalid
⚠ This repo is Continuously Deployed: make sure you follow the guidance ⚠
Follow these steps if you are doing a Rails upgrade.

Great spot i'll update those for consistency now. Thanks so much for the review!


docs(cognitive-services): change custom vision image classification l…

…ibrary path
Although, quick-start step installs @azure/cognitiveservices-customvision-..., code sample was requiring azure-cognitiveservices-customvision-...
Fixes to the correct path.

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

#sign-off


Rolling windows borders

Hi,
I'm working with VerticaPy 0.8.1 (new versions 0.12 is tested but not yet available for me).
And I've some trouble understanding the rolling method used with specific windows.
For example with a toy dataset of 8 lines:

I want to average the column value by idt with the value of the 3 preceding months (without the actual one). So I run the rolling method with window = ("-3months", "-1months") and this is the result I have:

And I was expected on another value for the column avg_value for idt=1 and date='2023-02-01'. For me it should average the 3 preceding months so give back the average of 85, 80 and 75 so 80 and not 77.5. It seems that it doens't take the value of 2022-11-01 but 3 months before 2023-02-01 is exactly 2022-11-01 so I don't understand why it is not taken in the result.
Is it a normal behavior?
Thanks in advance for your response and thanks for your work,
Antoine

Hi @antoinemertz,
Weird. It seems to be more server-side oriented. Maybe they translate 'month' to a well defined unit (like number of seconds ...) and during this translation there are some wrong assumptions like 1 month = 90 days. @mat-shyR can you please investigate?
We will come back to you when we get the answer.

@afard & @glarik can you please look at this issue and see what we can do?


README made more explanatory

The README file was a bit complicated and I got confused in the installation, so I wanted to help a little bit.

Thankyou :)


⚠ Bofrost.lu has degraded performance

In 20e83f3, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 5455 ms

Resolved: Bofrost.lu performance has improved in 31f3575 after 6 minutes.


Issue when running the application

When I run the application in Xcode I get this message:
An App ID with Identifier 'com.jeffkreeftmeijer.UitzendingGemist' is not available. Please enter a different string.
I was logged in with my own Apple developer ID.

You need to make the identifier unique. So add your own string like 'com.vanbemmel.jeffkreeftmeijer.UitzendingGemist' and it will work.
I will add better installation instructions to the readme tonight.

Thanks for helping out @iAmRenzo!
@vanbemmel did you get it to work?
I'm closing this for now. If anyone has any more questions about this, please don't hesitate to reopen this issue.


Truffle support added and CLI updated

Added Truffle support

@therealharpaljadeja I checked, React 18 looks good on my side. Did you face any issues?


Bug: Null reference exception in home

⏱ Before you start...

[X] Have you updated FluentHub? You might be using an old version.
[X] Have you checked if a similar issue has already been reported?

🪟 What version of Windows is this issue present?
Windows 11 Dev
🔢 What version/architecture of FluentHub are you on?
<IP_ADDRESS> | X64 | RELEASE
📄 Description
I have an error saying Object reference not set to an instance of an object. Im on the latest build from the microsoft store
🪜 Steps To Reproduce
not sure
🤔 Expected behavior
I expected it to load up as usual
📟 Stack Trace
Stack trace details
  at FluentHub.Octokit.Queries.Users.NotificationQueries.<GetAllAsync>d__0.MoveNext() + 0x8b8
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x21
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0x70
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x38
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task) + 0x17
   at FluentHub.Uwp.ViewModels.Home.UserHomeViewModel.<LoadHomeContentsAsync>d__25.MoveNext() + 0x36b
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x21
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0x70
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x38
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task) + 0x17
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult() + 0xb
   at FluentHub.Uwp.ViewModels.Home.UserHomeViewModel.<LoadUserHomePageAsync>d__24.MoveNext() + 0x1e0
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x21
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0x70
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x38
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task) + 0x17
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult() + 0xb
   at Microsoft.Toolkit.Mvvm.ComponentModel.ObservableObject.<>c__DisplayClass20_0`1.<<SetPropertyAndNotifyOnCompletion>g__MonitorTask|0>d.MoveNext() + 0xab

📸 Assets

v5 alreasy published in the store.


[NEW ICON] kali linux

kali linux for penetration testing and ethical hacking

already in the project, please make the searches before making an issue, thanks


Add heartbeat request

The very basic implementation of heartbeart request, but this should be good enough for us:

uses Cassandra OPTIONS request for a heartbeat - https://github.com/apache/cassandra/blob/trunk/doc/native_protocol_v3.spec#L278
just check every X seconds whether any data was transferred to a socket in Y seconds

We can easily make that configurable whenever we want (just don't run erlang:send_after(HeartbeatInterval, self(), heartbeat_check), in client's init then).
CT still pass, tested in dev env.
@loucash @spirytus please review

@zbigniewpekala ❤ I'd love to see it in action 🚀


Try to cache dependencies

Hey, tried this out here https://github.com/scaleapi/nucleus-python-client/pull/194 and saw no improvement in time. Closing for now.


CalibrateGyro() gives poor results

Setting Gyroscope bias offsets with CalibrateGyro() gives poor results as compared to manually entered values from trial and error.

This seems to be related to changing the gyro's data rate before and/or after accumulating and averaging the samples.
Some chips' datasheet state a requirement of putting the chip in a standby or sleep state when modifying certain registers, although this one doesn't seem to mention anything like that.


Fix cors origin error in the CLI

Modifications

Added a validation in /config/index.js to fix a bug introduced in the previous pull request. The validation checks if argv.cors is falsy and ensures that the cors origin whitelist is set correctly based on the command line argument -c or the environment variable CORS_ORIGIN_WHITELIST only if they are defined:
   cors: {
       origin: argv.cors?.split(',') ||
       envVars.CORS_ORIGIN_WHITELIST?.split(',') || ['*'],
    },

Modified the code in src/index.js to fix the issue with CORS not allowing access from all origins when the user passes * from the CLI:
  const corsOrigin = config.cors.origin
  const corsOptions = {
      origin: corsOrigin[0] === '*' ? '*' : corsOrigin
   };
  app.use(cors(corsOptions))

Hello @thevahidal,
Could you please review this PR at your earliest convenience? When I submitted the last PR, there were some errors that prevented the CORS from allowing all origins when passing * to the -c flag. However, I have since fixed and tested everything. I would greatly appreciate it if you could review the changes I have made.
Thank you.

Hey @AbegaM, Sorry for the late response, I'll merge it asap.

Hi @thevahidal
I have fixed the issues, please review my changes when you have time and let me know if there is anything that needs to be modified.

Hi @thevahidal
I have pushed two commits and have fixed the issues, please review my changes when you have time and let me know if there is anything that needs to be modified.

@thevahidal, please let me know when you publish the changes to npm


Fix and update dependencies to 0.3

Summary
Latest version is not building. We should target published crates instead of github branches so we can publish a new version for this crate
Problem Definition
Unpublished branches are harder to manage and keep track of semver/latest updates
Proposal
Fix minor issues and prepare to release

For Admin Use

[ ] Not duplicate issue
[ ] Appropriate labels applied
[ ] Appropriate contributors tagged
[ ] Contributor assigned/self-assigned

@Pratyush This seems to have been closed by https://github.com/arkworks-rs/poly-commit/pull/93

@huitseeker yes now we should target 0.4.
There's a branch called "catch-up-algebra" that's WIP to get there.


[bug]: Counter increment on the stepper

Describe the bug
Stepper increments happen on ::before elements for the stepper. This creates wrong numbers in certain cases, when navigating back to previous steps.
To Reproduce
Design System Version used: 7.1
Reproducible in an internal Angular application, write @gfellerph or Pfeuti Andreas for more infos.
Expected behavior
Step increments are always correct.
Screenshots

Additional context
Proposed fix: move counter-increment from the ::before element to the li element. Fix works on the internal application.

@gfellerph is there a link to the page where the behavior can be observed?


chore: Remove handling of new_provides from mender_client_authentication_work_function()

It just doesn't belong in there, it's now handled in the update module state machine as part of the DOWNLOAD and COMMIT states.
Ticket: MEN-7498
Changelog: none

@danielskinstad please double-check this is being properly done in https://github.com/mendersoftware/mender-mcu/blob/feature-update_modules/core/src/mender-client.c#L1322-L1331 and https://github.com/mendersoftware/mender-mcu/blob/feature-update_modules/core/src/mender-client.c#L1405-L1423 instead.