TensorFlow import cause an error

If TensorFlow package is imported before or after importing tensorflow_logger, this error is raised:

TypeError: Couldn't build proto file into descriptor pool!

Thanks for reporting the bug @perone ! Which TensorFlow version are you using? When does the error happen, when you import TensorFlow or tensorboard_logger? Do you have the full traceback?

Hi, sure, I'm using the TensorFlow 1.1.0 and installed tensorboard_logger using pip. I'm on Ubuntu. To reproduce it is very simple:
In [1]: import tensorflow as tf

In [2]: tf.__version__
Out[2]: '1.1.0'

In [3]: import tensorboard_logger as tblogger
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-193949510255> in <module>()
----> 1 import tensorboard_logger as tblogger

/home/chper_local/.virtualenvs/perone/local/lib/python2.7/site-packages/tensorboard_logger/__init__.py in <module>()
      1 # -*- coding: utf-8 -*-
      2
----> 3 from .tensorboard_logger import *

/home/chper_local/.virtualenvs/perone/local/lib/python2.7/site-packages/tensorboard_logger/tensorboard_logger.py in <module>()
      9 import six
     10
---> 11 from .tf_protobuf import summary_pb2, event_pb2
     12 from .crc32c import crc32c
     13

/home/chper_local/.virtualenvs/perone/local/lib/python2.7/site-packages/tensorboard_logger/tf_protobuf/summary_pb2.py in <module>()
     20   package='tensorflow',
     21   syntax='proto3',
---> 22   serialized_pb=_b('\n,tensorboard_logger/tf_protobuf/summary.proto\x12\ntensorflow\"\x87\x01\n\x0eHistogramProto\x12\x0b\n\x03min\x18\x01 \x01(\x01\x12\x0b\n\x03max\x18\x02 \x01(\x01\x12\x0b\n\x03num\x18\x03 \x01(\x01\x12\x0b\n\x03sum\x18\x04 \x01(\x01\x12\x13\n\x0bsum_squares\x18\x05 \x01(\x01\x12\x18\n\x0c\x62ucket_limit\x18\x06 \x03(\x01\x42\x02\x10\x01\x12\x12\n\x06\x62ucket\x18\x07 \x03(\x01\x42\x02\x10\x01\"\x84\x04\n\x07Summary\x12(\n\x05value\x18\x01 \x03(\x0b\x32\x19.tensorflow.Summary.Value\x1aX\n\x05Image\x12\x0e\n\x06height\x18\x01 \x01(\x05\x12\r\n\x05width\x18\x02 \x01(\x05\x12\x12\n\ncolorspace\x18\x03 \x01(\x05\x12\x1c\n\x14\x65ncoded_image_string\x18\x04 \x01(\x0c\x1a}\n\x05\x41udio\x12\x13\n\x0bsample_rate\x18\x01 \x01(\x02\x12\x14\n\x0cnum_channels\x18\x02 \x01(\x03\x12\x15\n\rlength_frames\x18\x03 \x01(\x03\x12\x1c\n\x14\x65ncoded_audio_string\x18\x04 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x05 \x01(\t\x1a\xf5\x01\n\x05Value\x12\x11\n\tnode_name\x18\x07 \x01(\t\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x16\n\x0csimple_value\x18\x02 \x01(\x02H\x00\x12&\n\x1cobsolete_old_style_histogram\x18\x03 \x01(\x0cH\x00\x12*\n\x05image\x18\x04 \x01(\x0b\x32\x19.tensorflow.Summary.ImageH\x00\x12+\n\x05histo\x18\x05 \x01(\x0b\x32\x1a.tensorflow.HistogramProtoH\x00\x12*\n\x05\x61udio\x18\x06 \x01(\x0b\x32\x19.tensorflow.Summary.AudioH\x00\x42\x07\n\x05valueB\x03\xf8\x01\x01\x62\x06proto3')
     23 )
     24 _sym_db.RegisterFileDescriptor(DESCRIPTOR)

/home/chper_local/.virtualenvs/perone/local/lib/python2.7/site-packages/google/protobuf/descriptor.pyc in __new__(cls, name, package, options, serialized_pb, dependencies, public_dependencies, syntax, pool)
    822         # TODO(amauryfa): use the pool passed as argument. This will work only
    823         # for C++-implemented DescriptorPools.
--> 824         return _message.default_pool.AddSerializedFile(serialized_pb)
    825       else:
    826         return super(FileDescriptor, cls).__new__(cls)

TypeError: Couldn't build proto file into descriptor pool!
Invalid proto descriptor for file "tensorboard_logger/tf_protobuf/summary.proto":
  tensorflow.HistogramProto.min: "tensorflow.HistogramProto.min" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.HistogramProto.max: "tensorflow.HistogramProto.max" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.HistogramProto.num: "tensorflow.HistogramProto.num" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.HistogramProto.sum: "tensorflow.HistogramProto.sum" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.HistogramProto.sum_squares: "tensorflow.HistogramProto.sum_squares" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.HistogramProto.bucket_limit: "tensorflow.HistogramProto.bucket_limit" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.HistogramProto.bucket: "tensorflow.HistogramProto.bucket" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.HistogramProto: "tensorflow.HistogramProto" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.value: "tensorflow.Summary.value" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Image.height: "tensorflow.Summary.Image.height" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Image.width: "tensorflow.Summary.Image.width" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Image.colorspace: "tensorflow.Summary.Image.colorspace" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Image.encoded_image_string: "tensorflow.Summary.Image.encoded_image_string" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Image: "tensorflow.Summary.Image" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Audio.sample_rate: "tensorflow.Summary.Audio.sample_rate" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Audio.num_channels: "tensorflow.Summary.Audio.num_channels" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Audio.length_frames: "tensorflow.Summary.Audio.length_frames" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Audio.encoded_audio_string: "tensorflow.Summary.Audio.encoded_audio_string" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Audio.content_type: "tensorflow.Summary.Audio.content_type" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Audio: "tensorflow.Summary.Audio" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.value: "tensorflow.Summary.Value.value" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.node_name: "tensorflow.Summary.Value.node_name" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.tag: "tensorflow.Summary.Value.tag" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.simple_value: "tensorflow.Summary.Value.simple_value" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.obsolete_old_style_histogram: "tensorflow.Summary.Value.obsolete_old_style_histogram" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.image: "tensorflow.Summary.Value.image" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.histo: "tensorflow.Summary.Value.histo" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.audio: "tensorflow.Summary.Value.audio" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value: "tensorflow.Summary.Value" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary: "tensorflow.Summary" is already defined in file "tensorflow/core/framework/summary.proto".
  tensorflow.Summary.Value.image: "tensorflow.Summary.Image" seems to be defined in "tensorflow/core/framework/summary.proto", which is not imported by "tensorboard_logger/tf_protobuf/summary.proto".  To use it here, please add the necessary import.
  tensorflow.Summary.Value.histo: "tensorflow.HistogramProto" seems to be defined in "tensorflow/core/framework/summary.proto", which is not imported by "tensorboard_logger/tf_protobuf/summary.proto".  To use it here, please add the necessary import.
  tensorflow.Summary.Value.audio: "tensorflow.Summary.Audio" seems to be defined in "tensorflow/core/framework/summary.proto", which is not imported by "tensorboard_logger/tf_protobuf/summary.proto".  To use it here, please add the necessary import.
  tensorflow.Summary.value: "tensorflow.Summary.Value" seems to be defined in "tensorflow/core/framework/summary.proto", which is not imported by "tensorboard_logger/tf_protobuf/summary.proto".  To use it here, please add the necessary import.

Aha, I see, thanks! That's definitely worth fixing.
Btw, what is your use-case for tensorboard_logger? The idea behind it is to be able to log values in tensorboard format without using tensorflow (e.g. from a different framework or if you don't want tensorflow dependency). In which case do you want to import both?

It really seems a strange case, why would I use tensorboard_logger if I'm using TensorFlow ?
However my problem lies on dependencies. I have an external requirement that for some reason imports TensorFlow and causes this problem.

That makes sense, thanks!

Unfortunately I wasn't able to reproduce the bug, it might depend on some other environment differences, but I see how it could happen. So I tried to make a fix in the run-with-tf branch (see linked commit above) - any chance you could try it out and see if this fixes the bug for you?

I tested with the run-with-tf branch and it is working fine now, thanks a lot and congrats for the project.

I'm getting more or less the same error without importing tensorflow anywhere.
Traceback (most recent call last):
File "train.py", line 16, in
import tensorboard_logger as tb_logger
File "/home/sxr8618/.local/lib/python2.7/site-packages/tensorboard_logger/init.py", line 3, in
from .tensorboard_logger import *
File "/home/sxr8618/.local/lib/python2.7/site-packages/tensorboard_logger/tensorboard_logger.py", line 22, in
from .tf_protobuf import summary_pb2, event_pb2
File "/home/sxr8618/.local/lib/python2.7/site-packages/tensorboard_logger/tf_protobuf/summary_pb2.py", line 22, in
serialized_pb=_b('\n,tensorboard_logger/tf_protobuf/summary.proto\x12\ntensorflow"\x87\x01\n\x0eHistogramProto\x12\x0b\n\x03min\x18\x01 \x01(\x01\x12\x0b\n\x03max\x18\x02 \x01(\x01\x12\x0b\n\x03num\x18\x03 \x01(\x01\x12\x0b\n\x03sum\x18\x04 \x01(\x01\x12\x13\n\x0bsum_squares\x18\x05 \x01(\x01\x12\x18\n\x0c\x62ucket_limit\x18\x06 \x03(\x01\x42\x02\x10\x01\x12\x12\n\x06\x62ucket\x18\x07 \x03(\x01\x42\x02\x10\x01"\x84\x04\n\x07Summary\x12(\n\x05value\x18\x01 \x03(\x0b\x32\x19.tensorflow.Summary.Value\x1aX\n\x05Image\x12\x0e\n\x06height\x18\x01 \x01(\x05\x12\r\n\x05width\x18\x02 \x01(\x05\x12\x12\n\ncolorspace\x18\x03 \x01(\x05\x12\x1c\n\x14\x65ncoded_image_string\x18\x04 \x01(\x0c\x1a}\n\x05\x41udio\x12\x13\n\x0bsample_rate\x18\x01 \x01(\x02\x12\x14\n\x0cnum_channels\x18\x02 \x01(\x03\x12\x15\n\rlength_frames\x18\x03 \x01(\x03\x12\x1c\n\x14\x65ncoded_audio_string\x18\x04 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x05 \x01(\t\x1a\xf5\x01\n\x05Value\x12\x11\n\tnode_name\x18\x07 \x01(\t\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x16\n\x0csimple_value\x18\x02 \x01(\x02H\x00\x12&\n\x1cobsolete_old_style_histogram\x18\x03 \x01(\x0cH\x00\x12*\n\x05image\x18\x04 \x01(\x0b\x32\x19.tensorflow.Summary.ImageH\x00\x12+\n\x05histo\x18\x05 \x01(\x0b\x32\x1a.tensorflow.HistogramProtoH\x00\x12*\n\x05\x61udio\x18\x06 \x01(\x0b\x32\x19.tensorflow.Summary.AudioH\x00\x42\x07\n\x05valueB\x03\xf8\x01\x01\x62\x06proto3')
File "/usr/local/lib/python2.7/dist-packages/google/protobuf/descriptor.py", line 878, in new
return _message.default_pool.AddSerializedFile(serialized_pb)
TypeError: Couldn't build proto file into descriptor pool!
Invalid proto descriptor for file "tensorboard_logger/tf_protobuf/summary.proto":
tensorflow.HistogramProto.min: "tensorflow.HistogramProto.min" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.HistogramProto.max: "tensorflow.HistogramProto.max" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.HistogramProto.num: "tensorflow.HistogramProto.num" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.HistogramProto.sum: "tensorflow.HistogramProto.sum" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.HistogramProto.sum_squares: "tensorflow.HistogramProto.sum_squares" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.HistogramProto.bucket_limit: "tensorflow.HistogramProto.bucket_limit" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.HistogramProto.bucket: "tensorflow.HistogramProto.bucket" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.HistogramProto: "tensorflow.HistogramProto" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.value: "tensorflow.Summary.value" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Image.height: "tensorflow.Summary.Image.height" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Image.width: "tensorflow.Summary.Image.width" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Image.colorspace: "tensorflow.Summary.Image.colorspace" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Image.encoded_image_string: "tensorflow.Summary.Image.encoded_image_string" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Image: "tensorflow.Summary.Image" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Audio.sample_rate: "tensorflow.Summary.Audio.sample_rate" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Audio.num_channels: "tensorflow.Summary.Audio.num_channels" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Audio.length_frames: "tensorflow.Summary.Audio.length_frames" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Audio.encoded_audio_string: "tensorflow.Summary.Audio.encoded_audio_string" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Audio.content_type: "tensorflow.Summary.Audio.content_type" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Audio: "tensorflow.Summary.Audio" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.value: "tensorflow.Summary.Value.value" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.node_name: "tensorflow.Summary.Value.node_name" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.tag: "tensorflow.Summary.Value.tag" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.simple_value: "tensorflow.Summary.Value.simple_value" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.obsolete_old_style_histogram: "tensorflow.Summary.Value.obsolete_old_style_histogram" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.image: "tensorflow.Summary.Value.image" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.histo: "tensorflow.Summary.Value.histo" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.audio: "tensorflow.Summary.Value.audio" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value: "tensorflow.Summary.Value" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary: "tensorflow.Summary" is already defined in file "tensorflow/core/framework/summary.proto".
tensorflow.Summary.Value.image: "tensorflow.Summary.Image" seems to be defined in "tensorflow/core/framework/summary.proto", which is not imported by "tensorboard_logger/tf_protobuf/summary.proto".  To use it here, please add the necessary import.
tensorflow.Summary.Value.histo: "tensorflow.HistogramProto" seems to be defined in "tensorflow/core/framework/summary.proto", which is not imported by "tensorboard_logger/tf_protobuf/summary.proto".  To use it here, please add the necessary import.
tensorflow.Summary.Value.audio: "tensorflow.Summary.Audio" seems to be defined in "tensorflow/core/framework/summary.proto", which is not imported by "tensorboard_logger/tf_protobuf/summary.proto".  To use it here, please add the necessary import.
tensorflow.Summary.value: "tensorflow.Summary.Value" seems to be defined in "tensorflow/core/framework/summary.proto", which is not imported by "tensorboard_logger/tf_protobuf/summary.proto".  To use it here, please add the necessary import.


Handling comments for pretty-printing

Currently, comments are ignored for pretty-printing and are not tracked by the AST.
@HarrisonGrodin suggests attaching comments to the current (or next) expression or declaration in the AST. Then, we can pretty-print by e.g. printing the comment before its attached node, which is idempotent.
For example below, comment A would attach to fun foo, comment B would attach to case, and C and D would attach to 0 and 1:
(* A *)
fun foo x = ...

fun bar x =
  case x of (* B *)
    NONE => (* C *) 0
  | SOME y => y + (* D *) 1

Some additional discussion from Slack:
It seems pretty important to not screw up typical uses of comments such as commenting/uncommenting code. A good example is this, where the code author may later reactive the Baz branch:
case exp of
  Foo x => ...
| Bar y => ...
(*| Baz z => ...*)
| _ => ...

To handle this behavior, one idea would be to ensure that comments don't move across tokens when pretty-printed. We could implement this by attaching comments to individual tokens. The AST currently stores all tokens, so this actually wouldn't be a huge change. Then the pretty-printer just has to handle "reflowing" the comment, e.g. adjusting indentation.

I've done a little digging. Unsurprisingly, lots of people have dealt with the same issue. The umbrella concept is a concrete syntax tree aka CST.
For example:

Python LibCST https://github.com/Instagram/LibCST
Javascript CST https://github.com/cst/cst

The most popular solution appears to just be to store everything explicitly. Nothing fancy. I'm inclined to go in this direction for the sake of simplicity, and because it aligns well with the current strategy of "storing every token". In some sense, our Ast type is already halfway to a CST.
The simplest thing to do now would be to start by adding an additional Token variant for whitespace. (We already have a Comment variant.) Then we put this "extra" stuff into the Ast, and perhaps change its name to Cst.
The type of each "extra" element would be Token.t Seq.t where each token is a comment or whitespace.

One way to put extra stuff into the Ast is to identify it at the shallowest possible node. The result is that we see extra elements "between" items.
For example, Ast.Exp.IfThenElse could be changed to look like below. Note that there isn't any extra at the beginning, nor at the end. This is pretty verbose, and would require changing every Ast node. But certainly it is very self explanatory, and the span (leftmost and rightmost source pos) of each node is as "compact" as possible.
datatype exp =
  ...
| IfThenElse of
    { iff: Token.t
    , extra_after_iff: extra
    , exp1: exp
    , extra_after_exp1: extra
    , thenn: Token.t
    , extra_after_thenn: extra
    , exp2: exp
    , extra_after_exp2: extra
    , elsee: Token.t
    , extra_after_elsee: extra
    , exp3: exp
    }
| ...

To cut down on the verbosity, we could reuse the same trick as how "delimiters" are stored in the AST, where we use a sequence of N-1 things to go between each of N things.
With the approach, most Ast nodes get just a single additional field of extra_between items.
For example with IfThenElse:
| IfThenElse of
    { iff: Token.t
    , exp1: exp
    , thenn: Token.t
    , exp2: exp
    , elsee: Token.t
    , exp3: exp
    , extra_between: extra Seq.t   (** length 5 *)
    }

The alignment is:
if   exp1   then   exp2   else   exp3
   ^      ^      ^      ^      ^           (5 things between)

A more interesting example might be the Ast.Exp.DecMultiple node which is for sequences of core declarations. The "elems" are individual declarations and the "delims" are the (optional) semicolons between them. We would then have an additional sequence of "extra" stuff:
    (** dec [[;] dec ...] *)
    | DecMultiple of
        { elems: dec Seq.t
        , delims: Token.t option Seq.t
        , extra_between: extra Seq.t    (** whitespace and comments between every elem and delim *)
        }

The idea here is that for N declarations, there would be N-1 delimiters, and 2*(N-1) extra elements:
elems         dec1   dec2   dec3      ...  dec(N-1)   decN
delims             ;      ;       ;   ...           ;
extra_between     ^ ^    ^ ^     ^ ^  ...          ^ ^

Note that this is equivalent to what I described in the previous comment, but is much less verbose in how the type is written. I'm not convinced it's much of an improvement, though.

Okay, it's been a few days. These previous ideas were a bit too deep-fried... the effort required would be massive for such a small gain. I'm beginning to believe that whitespace/comments really aren't tree-structured at all, and might not belong in the CST.
So, here's a nice alternative idea. We augment tokens with these additional functions (when the Lexer creates tokens, it needs to set up support for these):
val prevToken: token -> token option
val nextToken: token -> token option
val commentsAndWhitespaceBeforeToken: token -> token seq
val commentsAndWhitespaceAfterToken: token -> token seq

Then, the CST will be unchanged, and yet we still have the same functionality as putting whitespace/comments into the CST: at any token, we can look up any comments/whitespace immediately before and after.

So, here's a nice alternative idea. We augment tokens with these additional functions (when the Lexer creates tokens, it needs to set up support for these):
val prevToken: token -> token option
val nextToken: token -> token option
val commentsAndWhitespaceBeforeToken: token -> token seq
val commentsAndWhitespaceAfterToken: token -> token seq

This is now implemented in 4860dcd1580572778e229881192bfbcb3f214f9d.
The next step is to use these functions in the pretty-printer to preserve comments in the output.

I'm now moving forward with inserting comments automatically in pretty-printing. To do so, I'm introducing an
"intermediate representation" for pretty-printing whose structure is similar to a PrettySimpleDoc.t, but whose leaf elements have type Token.t. This will allow us to do a pass over this "IR" to insert comments.

There is still more work to do (e.g. #28), but it will be useful to keep those as separate issue threads.
Progress!


Add refinement connections

Right now the particle_handler is only connected to the partition signal of the triangulation, it should also be connected to the refinement signals. This PR fixes that. It is not relevant for our current version of deal.II, but will be for future versions.

I have no comments.

Is that not a comment? :p !


Black formatting on django settings.py

I'm not sure why I ended up seeing in my cruft-generated template since black gets called as a post-gen hook, but doesnt hurt to resolve it in the source.


Add new api/v1/posts endpoint

https://github.com/muchdogesec/history4feed/issues/104

@fqrious feed


How to run this project?

Describe the issue
I saw the scene described in the video, which seems to be running on the command line and obtaining API access methods through dialogue. But I didn't find where to run it to get such results. Do I need to train first or do I need to run a specific Python file? Please advise..

That is our demo on Gorilla Spotlight! Please join our waitlist here: https://forms.gle/T9P298Z4Pvok2v6MA and stay tuned! Thanks for your patience!

I have already applied to join the waiting list. Thank you for your project and timely response.


Create the design system

What should be done:

Decide on the design system
Attach a figma file to this issue

https://www.figma.com/file/QZ32sJwqbpJVZumFiY8vPq/Styles?type=design&node-id=0-1&t=FRBRHVF1d5Zy8O59-0


Bump deps and modernize code

Bump and remove deps where it makes sense
Infer types where possible

Retriggering CI


node-red hangs on deployment

Hi
I have been using node-red for a few years now and just recently ran into what I believe is a bug. The issue is when I try to deploy changes it never completes and I have to stop and start node-red. Even the node-red-stop does not complete properly and times out. See below.
The flow in question is just a simple mysql query that is trying to pull data from a mysql db on the same Raspberry Pi.
I am running nr v0.19.4
Node.js v8.11.1
npm 1.4.21
Linux 4.14.98-v7+ arm LE
Chrome
To reproduce this issue I just need to connect a function or injection node to the mysql node then try to deploy. I would expect the changes to be deployed.
I have removed all non-core node-modules except mysql and dashboard and all flows but the one I am working on.
Here is the flow:
myflow.txt
One oddity regarding the logs is that some things appear to be duplicated in the output as shown.
Starting as a systemd service.
Started Node-RED graphical event wiring tool.
Started Node-RED graphical event wiring tool.
13 Jun 12:35:53 - [info]
Welcome to Node-RED
13 Jun 12:35:53 - [info]
Welcome to Node-RED
13 Jun 12:35:53 - [info] Node-RED version: v0.19.4
13 Jun 12:35:53 - [info] Node.js  version: v8.11.1
13 Jun 12:35:53 - [info] Linux 4.14.98-v7+ arm LE
13 Jun 12:35:53 - [info] Node-RED version: v0.19.4
13 Jun 12:35:53 - [info] Node.js  version: v8.11.1
13 Jun 12:35:53 - [info] Linux 4.14.98-v7+ arm LE
13 Jun 12:35:56 - [info] Loading palette nodes
13 Jun 12:35:56 - [info] Loading palette nodes
13 Jun 12:35:56 - [debug] Module: node-red-dashboard 2.15.4
13 Jun 12:35:56 - [debug] Module: node-red-dashboard 2.15.4

I believe I found the issue. It appears one of my functions contains an infinite loop.


Add separate commands for changing the height and width of a view (not both)

I would like to have a command that increases the height of the current view, but not its width. The closest command I can find is workbench.action.increaseViewSize, which increases both the height and the width at once.
My use case: I like to have a large number of splits, both horizontal and vertical. This allows me to quickly switch among a group of files without using the mouse or searching by filename. However, I usually want my current view to be maximized vertically (so I can see more code) but not horizontally (because my files have fixed line lengths, so there's no point in making the view any wider).
Essentially I want to reproduce the Vim command Ctrl+W _ ("maximize the current view's height"). Having a command to do this directly would be nice, but a vertical-only equivalent of workbench.action.increaseViewSize would also work and might be more general. The current behavior of workbench.action.increaseViewSize seems like it really only makes sense if you have horizontal or vertical splits, but not both.
After skimming the code, this seems like it might not be hard to implement, so if the maintainers support the idea and time permits I might be able to submit a PR.
Thanks!

I tried to verify this, but reopening due to the following:

I could not make this commands to work in general. They only work if I have multiple editors in a split view. If I have an editor and at the bottom the panel, the editor will not be resized
These commands are only active when an editor is focused. Should the commands have a different name then?
I do not really inderstand why do we need new commands compared to the already present

@isidorn sorry about the confusion here. when I tested, I thought the context key was working properly because the commands were still accessible via recent commands in the command palette, but we cannot use the focus context key for the cmd palette visibility.
I've updated the commands to be titled referencing the editor instead as you mention, and they should now work even if the editor is not focused.
the new commands especially useful any time the editor is split in both directions. currently, in a two by two editor situation, the increase view size command makes an individual editor group bigger in both directions when it is most likely true that you'd rather increase the height only.

Thank you for adding this, @sbatten!

I have these commands mapped as follows:
    {
      "key": "ctrl+=",
      "command": "workbench.action.increaseViewSize",
      "when": "editorFocus"
    },
    {
      "key": "ctrl+-",
      "command": "workbench.action.decreaseViewSize",
      "when": "editorFocus"
    },

With 2 or more tabs open horizontally and the terminal across the bottom, prior to v1.51.1 when I increased or decreased it would affect only the width of my active editor tab. Which makes perfect sense.
But now it also affects the height. Or more accurately is affects the height of the terminal. This is super annoying.  Was this an intentional change?
The terminal should be treated as a fixed overlay.
I can open a new issue for this if necessary.


Bigger radius of search or zoom

Bot needs to give user opportunity to zoom or make bigger radius of search neighboors pokemon.

Probably best decision will be to make circles around starting point in coordinates system. And then give user additional optional argument in /nearpoke and /mayspawn. Like 1, 2, 3, 4 and execute this circles in code of search. on('location) should be default to 2 or 3.


An approach to a string-free API

This change is to support a string-free API to create rewrites as discussed in https://github.com/egraphs-good/egg/issues/219
I do need this functionality to use egg with my own IR, so it would be great if it landed.
However, if supporting a string-free API is better done using some other approach, I'm happy to do that instead. Just doing this to illustrate the idea.
Changes

Make ENodeOrVar::Var(V), adding a generic V in place of Var(GlobalSymbol)
all the associated fallout of adding a generic across the type signatures in the codebase (Note though that no existing test needed to be changed to support this, as V defaults to Var)
Add a "No Strings" test to illustrate and prove the API

Concerns
Trait constraints generally
Trait constraints generally are slapdash and could be reduced, I'll put in the work to clean this up if this approach to the change is approved.
Adds a constraint to struct definition
I'm not happy about this specific change, hoping it is not needed:
pub struct SearchMatches<'a, L: Language, V = Var>
where
    V: Clone,

Explanation::check_rewrite type inference
For some reason, this caused type inference for N to fail in a few spots forExplanation::check_rewrite(), so it is explicitly specified here.

Oh, one more thing, just thought I'd highlight the actual API here so people don't have to dig through the diff, it looks like this:

define_language! {
    enum NoStrings {
        Num(i32),
        "🦑" = Squid([Id; 2]),
        "🐝" = Bee(Id),
        Symbol(Symbol),
    }
}

fn make_rules() -> Vec<Rewrite<NoStrings, (), i32>> {
    let searcher: Pattern<NoStrings, _> = Pattern::new(RecExpr::from(vec![
        ENodeOrVar::Var(12 as i32),
        ENodeOrVar::Var(13 as i32),
        ENodeOrVar::ENode(NoStrings::Squid([0.into(), 1.into()])),
    ]));
    let applier: Pattern<NoStrings, _> = Pattern::new(RecExpr::from(vec![
        ENodeOrVar::Var(13 as i32),
        ENodeOrVar::ENode(NoStrings::Bee(0.into())),
    ]));
    vec![crate::Rewrite::new("squid to bee".to_string(), searcher, applier).unwrap()]
}

#[test]
fn simple_tests() {
    assert_eq!(
        simplify(RecExpr::from(vec![
            NoStrings::Num(77 as i32),
            NoStrings::Num(88 as i32),
            NoStrings::Squid([0.into(), 1.into()]),
        ])),
        RecExpr::from(vec![NoStrings::Num(88 as i32), NoStrings::Bee(0.into()),])
    );
}

I'm not sure if this is relevant to your use case @robert-chiniquy but in order to have a truly string-free API I think the e-graph to be parameterized by the rule names used in explanations as they currently need to be GlobalSymbols

@robert-chiniquy, what type will you be plugging in for V in your application? Is it "integer-like"?

Yep, i am currently. I feel like that should work for at least almost all use cases.

Ok. I'm really hesitant to make changes to egg's user-facing API at this point, since most of the egg folks (including me) are spending most of our time on other projects at the moment. Are you worried about the performance overhead of serializing your V types to a string? I think it shouldn't be too bad, especially since it only has to be done upfront for the rewrite rules.

Right, I understand. I had kind of thought the way I did this (with default Var for the generic V in all sites) would be sufficient to not change the user-facing API for existing users. I understand your concern there though if I missed something there.
Just like anyone, I care about performance— but yeah, if it were just serializing to string as the cost, the compute performance hit on that wouldn't be that bad.
Aren't I right though that if I serialize to string to use GlobalSymbol, then my strings are permanently interned? My use case involves long-running processes (and memory-constrained systems); when using a usize, as the value is there to uniquely represent a quantification, no additional external storage for the usize outside of the egraph is required. If each number I use is serialized to string and permanently interned, my memory usage will grow (more or less) without bound— the hit on memory is much worse than on compute. Or am I wrong about that?
I think in my original post, option 5 (something hacky like Var::from_fake_global_symbol(usize)) could definitely be used to avoid changing the user-facing API at all, and option 3 (simplifying Var so the global symbol usize values are reduced to/from usize where strings are input/output) could probably be done with no impact there at all (less sure about that).
Don't feel that I'm demanding or even expecting this change though— for the time being, I'm writing against my own fork of egg (a really bad habit of mine is hacking changes into upstream crates "for now"). So I'm ok, at least until the next round of improvements lands upstream. I just needed to figure out the "no strings attached" model for Egg for my own purposes, and I wanted to put the questions in the original issue to rest a bit.

Coming back to this after a while: what about just allowing direct construction of Vars from u32, no interning or anything like that. Would that solve your use case? Would you need a way to get that number "back out" of the var?

Yep, that was more or less my option 5 from the discussion ticket. I would need to be able to get the usize back out. But that would do it.
It's awesome that you're coming back to this. Hopeful for more egg in the future!

I would love to keep the storage to u32, since that's what it's already
based on. Would that work for your use case?
On Fri, Mar 22, 2024 at 12:54 PM Robert Chiniquy @.***>
wrote:

Yep, that was more or less my option 5 from the discussion ticket. I would
need to be able to get the usize back out. But that would do it.
It's awesome that you're coming back to this. Hopeful for more egg in the
future!
—
Reply to this email directly, view it on GitHub
https://github.com/egraphs-good/egg/pull/287#issuecomment-2015807925,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AANTPTC44A2PA67F2ET6ROTYZSD7XAVCNFSM6AAAAABAPID6SWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAMJVHAYDOOJSGU
.
You are receiving this because you commented.Message ID:
@.***>

Oh yeah absolutely, sorry just been writing usize a lot. Any non-FP number type is great.


Cache is evicting files even when the maximum size hasn't reached

Rubix uses Guava cache internally to figure out which files to evict. Currently it is evicting files even though the maximum size of the cache hasn't reached. This is very random in nature. This is affecting performance of the jobs using Rubix as its expecting the data to be already cached.

Found this.
https://stackoverflow.com/questions/10236057/guava-cache-eviction-policy
This is happening because
Guava caches are segmented into concurrencyLevel different hash tables to allow multiple concurrent reads and writes. The default concurrencyLevel is 4. Basically, if your maximumSize is set to 100, then that actually only results in each of the four segments getting a maximumSize of 25. This is why the maximumSize documentation states:

The theory is we put the disk space  dummy key in the cache and that item goes in one segment. So if we have 4 segments, the cache should start evicting data when its 1/4th full. We should run experiment and validate this theory. One its validated, we can make changes to put total size/ num segments as weight for the dummy key

Fixed by 61bba2afdf5eb300acce6051bcf3420e2e8472de


Build(deps-dev): Bump lint-staged from 12.3.3 to 12.3.4 (#2740)

Pull request opened by the merge tool on behalf of #2740

Merged in a10588bd88a2f9e47381e4f065b9b01a829efcd5


BelongsToMany Pivot Model Global Scopes are never run.

Laravel Version: 9.42.2
PHP Version: 8.1.11
Database Driver & Version: MySQL 8.0.30

Description:
BelongsToMany Pivot Model Global Scope is never run.
As of Laravel 5.8, Pivots are basically models. You can call them easily using the using() method, however even though the "withGlobalScope" is run in the Pivot's booted method, the global scopes of the Pivot are never called, thus never actually get run.
Steps To Reproduce:
Relationship (works correctly):
// Call the relationship, using the Pivot
public function classes()
{
    return $this
        ->belongsToMany(SchoolClass::class)
        ->using(SchoolClassSchoolStudent::class);
}

Pivot model:
<?php

namespace App\Models\SchoolPublisher\Pivots;

use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Query\Builder;
use XYZ\ABC\Scopes\SyncActive;

class SchoolClassSchoolStudent extends Pivot
{
    public $timestamps = true;

    protected $table = 'school_class_school_student';

    protected static function booted()
    {
        // Test manually
        static::addGlobalScope('test2', function (Builder $builder) {
            dd('never applied.');
            $builder->where('sync_active', '=', true);
        });

        // Test using class scope, doesn't work either.
        static::addGlobalScope(new SyncActive());
    }
}

Interestingly enough, the global scope is applied when running code like, as the detach doesn't want to work and there is no way that I can find that I can use ->using(SchoolClassSchoolStudent::class) and remove the global scope either - the withoutGlobalScopes() doesn't remove the scope on the pivot model:
$schoolStudent->classesWithoutGlobalScopes()->detach($schoolClass->uuid);

Usage:
@foreach ($schoolStudent->classes as $key => $schoolClass)
  // Standard loop usage, issue is that it's showing both inactive & active rows,
  // despite global scope, as it is never called.
@endforeach

Workaround:
I have found that the basic ->wherePivot() method works if you apply it directly after ->using().
I think I'm also better off not using a Pivot model at all as even when I use global scope, as explained above, I can't find a way to remove it as required.
Is there something I'm missing here?

In this case I'd suggest to just use an Eloquent model. There are some limitations to Pivot models and events/scopes are one of them. For example, the soft delete trait on pivot models also doesn't work: https://laravel.com/docs/9.x/eloquent-relationships#defining-custom-intermediate-table-models
If you run into limitations on pivot models then the best choice is always to convert it to an Eloquent model.

@driesvints Yeah I tried soft deletes and found that too, ended up coding a solution for soft deletes with pivots but I think you're right there, I'll just use an Eloquent model.
Thanks mate :)


[BUG] Manager listens only to one address in dual-stack cluster

Describe the bug
In dual-stack cluster pod status might have multiple IPs
$ kubectl describe pod longhorn-manager-wg867
Name:                 longhorn-manager-wg867
...
Status:               Running
IP:                   <IP_ADDRESS>
IPs:
  IP:           <IP_ADDRESS>
  IP:           fd01::11e9:d415:68f4:c5ca

But longhorn-manager only listens to one of them as per
    Environment:
      POD_IP:                 (v1:status.podIP)

For this reason other pieces of the puzzle fail to connect to the pod as they receive IPv6 address from DNS.
To Reproduce
Steps to reproduce the behavior:

Set up dual-stack kubernetes cluster with service preference to IPv6 over IPv4
Deploy longhorn 1.1.0 helm chart
Observe wait-manager tasks waiting for ever.
Observe ui not able to make contact with API. Nginx logs are filled with timeouts to manager ipv6 address

Expected behavior
Manager should listen to all pod IPs and the system should start
Log
time="2021-04-07T17:02:20Z" level=info msg="Listening on <IP_ADDRESS>:9500"

Environment:

Longhorn version: 1.1.0
Installation method (e.g. Rancher Catalog App/Helm/Kubectl): Helm
Kubernetes distro (e.g. RKE/K3s/EKS/OpenShift) and version: 3 node HA microk8s
Node config

OS type and version: Ubuntu Server 21.04
CPU per node: 4
Memory per node: 16
Disk type(e.g. SSD/NVMe): NVMe and SSD
Network bandwidth between the nodes: 2Gbps

Underlying Infrastructure (e.g. on AWS/GCE, EKS/GKE, VMWare/KVM, Baremetal): Baremetal
Number of Longhorn volumes in the cluster: 0 thus far

Additional context
Proper fix would most likely be to alter manager to listen on all IPs.
env:
- name: POD_IPS
  valueFrom:
    fieldRef:
      fieldPath: status.podIPs

I fixed this for my own cluster by defining services as IPv4 single-stack. See https://github.com/longhorn/longhorn/pull/2451

related ipv6 support #2259 #1723

Thank you for the PR, I left some comments.

Just to reaffirm: The PR made by me is not a proper fix to the issue, but more like a workaround that works in dual-stack clusters.

Waits for other team members to review.


internal api

This will enable machine to be used as a lib and lay the groundwork for machine server.
Refs: #550

Before we jump headlong into implementing a server, perhaps a good intermediate step would be to create (and dogfood) some good Go bindings / library?  @ibuildthecloud expressed an interest in that for their use case and I think it would be good to get people going / using it right away until the API fully takes shape.

That is what this is.

Sorry I was responding to your email which had a different comment.
Yes, this is the placeholder for an internal, non-http API to be used as a lib.

[ ] Share flags
[ ] Driver structure
[ ] Metadata
[ ] Error handling
[ ] Logging

@sthulb added your checklist to the description -- thx!

Yep, I realized that after my first comment so I updated it to just say we should loop potential consumers of the API / bindings in on it.

Updated scope to be more manageable for this first pass.  We can iterate after feedback.

This is pending #699 as they both affect the backend provisioning.


Open a modal Popover from inside a modal DropdownMenu

Bug report
I'm trying to open Popover when clicking a DropdownMenu.Item. Both the DropdownMenuand the Popover should be modal.
Current Behavior

I haven't been able to achieve the desired behaviour:

not sure about the order in which the different React components should be nested
Pointer/Keyboard focus behaviour doesn't seem to be working as expected:

by default, clicking on the popover contents triggers the dropdownmenu to close, which also closes the popover
adding onSelect with preventDefault() on the menu item seems to fix the above, but then I'm unable to open the popover using the keyboard (pressing enter/spacebar on the popover trigger doesn't open the popover)
additionally, focus doesn't seem to be moved correctly to the popover when it's opened, and pressing tab doesn't cycle through the focusable elements inside the popover.

Expected behavior

Dropdown menu can be interacted with with as usual, including its modal features (focus trap, disabled pointer events on the rest of the page, etc)
I should be able to specify a DropdownMenu.Item also as a Popover.Trigger
Clicking or pressing enter/space on the item causes the popover to open
Focus is moved and trapped to the popover correctly
Closing the popover (including pressing ESC) closes the popover, but leaves the dropdown open

Reproducible example
https://codesandbox.io/p/sandbox/vigilant-leaf-55gmxj
Suggested solution

Additional context

Your environment

Software
Name(s)
Version

Radix Package(s)
@radix-ui/react-dropdown-menu, @radix-ui/react-popover
2.0.5, 1.0.6

React
n/a
18.2.0

Browser
Chrome
114

Assistive tech

Node
n/a

npm/yarn

Operating System

@ciampo these are DropdownMenu + Dialog composition examples, but it's the same for DropdownMenu + Popover: https://codesandbox.io/s/dropdownmenu-dialog-items-r9sq1q


Hoverfly does not match on scheme

Currently, the scheme field is ignored by matchers. It should be matched on like the remaining fields.

Should this be added while we're at v6? dropping the scheme from matchers when simulation's version is lower than v6 (printing a warning if scheme is provided) and keeping it for v6+?
@tommysitu

@ns3777k don't worry about this one, it's really non-essential.

I have a similiar issue, but with query field.
On one pair object I have this:
"request" : {
...
          "query": {
            "account_numbers": [
              {
                "matcher": "exact",
                "value": "ACC001"
              }
            ]
          }
...
}

And in other Pair, this:
"request" : {
...
          "query": {
            "account_numbers": [
              {
                "matcher": "exact",
                "value": "ACC002"
              },
              {
                "matcher": "exact",
                "value": "ACC003"
              }
            ]
          }
...
}

No matter what query parameters are used in the request, it always matches the first pair, I can also change the order and will retrieve whichever was set as the first pair.
So both:
http://url/endpoint/?account_numbers=ACC001 or
http://url/endpoint/?account_numbers=ACC002&account_numbers=ACC003
will retrieve the same response.

Hi @jiss2891, for query params with multiple values, the current way to do it is this:
"request" : {
...
          "query": {
            "account_numbers": [
              {
                "matcher": "exact",
                "value": "ACC002;ACC003"
              }
            ]
          }
...
}

Thanks for answer me. I'll try this!

Still getting this:
WARNING: data.pairs[1] is not added due to a conflict with the existing simulation

I think that the query field is not being considered to differentiate two pairs from each other.

Hey @jiss2891, I can't reproduce the issue. can you join Gitter https://gitter.im/SpectoLabs/hoverfly please? we can discuss there.

Just left a comment there.


Add support to favicon.ico

It's can be a start yellow ★ or a icon of image.
Bio
https://en.wikipedia.org/wiki/Favicon

Done!


Issue between Pydantic v.2.5.3 and LangChain 0.0.148

Initial Checks

[X] I confirm that I'm using Pydantic V2

Description
Pydantic has upgraded from v.1 to v.2 but LangChain is still using v.1, meanwhile, if I downgrade Pydantic, Gradio needs v.2 of Pydantic.
This is my error if I try to upgrade pydantic:
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behavior is the source of the following dependency conflicts.
langchain 0.0.148 requires pydantic<2,>=1, but you have pydantic 2.5.3 which is incompatible.
This is my error if I try to downgrade Pydantic:
gradio 4.12.0 requires pydantic>=2.0, but you have pydantic 1.8.2 which is incompatible.
openai 1.6.1 requires pydantic<3,>=1.9.0, but you have pydantic 1.8.2 which is incompatible.
Which version of Pydantic should I use, that is compatible with LangChain?
Example Code
from pydantic.main import ModelMetaclass

Python, Pydantic & OS Version
pydantic version: 2.5.3
        pydantic-core version: 2.14.6
          pydantic-core build: profile=release pgo=false

               python version: 3.9.2 (v3.9.2:1a79785e3e, Feb 19 2021, 09:06:10)  [Clang 6.0 (clang-600.0.57)]
                     platform: macOS-10.16-x86_64-i386-64bit
             related packages: fastapi-0.108.0 typing_extensions-4.8.0

Thanks @lets-japa for reporting this.
You need to install a newer version of langchain. langchain 0.0.353 is compatible with Pydantic V2.

Thanks a lot @hramezani !
Don't know how I missed that


Improve uploading of large zip files by chunking

[ ] fix Uppy height
[ ] automatically start uploading when file selected
[ ] remove "Done" button/bar at end of upload
[ ] revert to djproxy
[ ] test files > chunk size
[ ] test that unzipping the files still works
[ ] cypress test for zip uploading

Have got a basic cypress test for the zip uploader working, but want to talk about the right way to handle test fixtures as I don't really want to put a 13Mb zipfile into the repo

The purpose of the test is to avoid regressions in how we incorporate Uppy in UI, and in how we interface with tusd in the backend. A success, even on a small file, requires several reqs/resps between frontend and tusd. I don't think we therefore need to test the chunking protocol (and if we do we could set an unrealistically small chunk size). As such, I don't see why we shouldn't just use a small, single-image zip file.

ok no worries, will make one.


edited mr̥dukomala

@danbalogh : could you check this entry in the prosodicPatterns?
@andreaacri : the xml and prosodic codes in the <item> for this meter that were in the "from Andrea's file" part contained some errors that have now been corrected. the whole item has been moved among the items with 18 syllables in the main part of the prosodicPatterns file. please check the relevant canto(s) in Pārthayajña for conformity with the mr̥dukomala pattern.

I've checked; not attested in Apte. I've made some changes in the XML file (see comment there) and added it to the EGD appendix. I'll leave it to Andrea to close this thread when he is done.

Corrected PYñ file (changed mṛdukomala to candravartma)

I am confused. Looking briefly at the cantos in question, the meter in canto 38 is indeed 12-syllabic and seems to show the candravartma pattern. But the meter in canto 39 is 18-syllabic so candravartma cannot be correct (and anyhow we do not expect the same meter in two consecutive cantos). are you sure it is not mr̥dukomala? please check again.

39 is Mṛdukomala indeed—I've corrected that

I see this in your latest commit. You seem to have forgotten the final a.

corrected!


Has Tudor stopped supporting easygrid?

Hi Tudor,
Like many I am just curious if you have stopped supporting your excellent easygrid plugin. I hope you are in good health of course.
Migrating to grails 3 without easygrid would be disappointing!

looks like it.
Maybe he needs some help supporting it.

Does anyone know if this will be migrated to Grails 3?
I have an application that needs to go to Grails 3 that is using this plugin.


Add detection for unsupported GDB versions

I'm trying to improve the error messaging in Visual Studio when GDB versions 7.12-1, 7.12-2, 7.12-3, and 7.12.1-1 are used for debugging. These specific versions of GDB have a bug that causes them to terminate early in MinGW when invoked with the --interpreter=mi flag. The current Visual Studio error message in this case is somewhat cryptic, and this PR adds more detail. The new parts are in bold.

Unable to start debugging. GDB version 7.12.1 is not supported. Consider upgrading.
Unable to establish a connection to GDB. The following message was written to stderr:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
See Output Window for details.

@pieandcakes do you want to take a look also?

@pieandcakes Thanks. I think this is ready to merge.

Talked to @benmcmorran offline, he is going to follow up on two more small items and will let me know.

@pieandcakes Telemetry added. I think this is ready for final review and merge.


Website not reachable from certain locations

neither arcology.nyc nor its IP address are reachable from certain locations.
So far it is not clear whether it is specific to a particular device or platform, but multiple sporadic reports have come in.
the solution may be to migrate from current DNS.

i'm not really working on this, haha.

Haha no worries @salvillalon45 I think WebFaction DNS was the problem :)
I switched to GoDaddy DNS can you try accessing http://arcology.nyc now?


Support 'lenient' parsing mode

In this mode, any errors that occur during parsing (including unknown options, missing required arguments, validation errors, and exceptions thrown during type conversion) should be captured and collected in a list of exceptions that can be retrieved from the ParseResult.
This would allow

better integration with JVM languages that where exceptions are not idiomatic (like Clojure, see parse-opts)
parsing partial input, which in turn allows generating appropriate JLine completions (#242) for the options parsed so far.

Index: src/main/java/picocli/CommandLine.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/picocli/CommandLine.java	(revision )
+++ src/main/java/picocli/CommandLine.java	(revision )
@@ -3374,6 +3374,7 @@
             /** Returns true if options with attached arguments should not consume subsequent arguments and should not validate arity. */
             public boolean aritySatisfiedByAttachedOptionParam() { return aritySatisfiedByAttachedOptionParam; }
             /** Returns true if exceptions during parsing should be collected instead of thrown.
+             * Multiple errors may be encountered during parsing. These can be obtained from {@link ParseResult#errors()}.
              * @since 3.2 */
             public boolean collectErrors()                     { return collectErrors; }

@@ -3397,6 +3398,7 @@
             /** @see CommandLine#setUnmatchedOptionsArePositionalParams(boolean) */
             public ParserSpec unmatchedOptionsArePositionalParams(boolean unmatchedOptionsArePositionalParams) { this.unmatchedOptionsArePositionalParams = unmatchedOptionsArePositionalParams; return this; }
             /** Sets whether exceptions during parsing should be collected instead of thrown.
+             * Multiple errors may be encountered during parsing. These can be obtained from {@link ParseResult#errors()}.
              * @since 3.2 */
             public ParserSpec collectErrors(boolean collectErrors)                         { this.collectErrors = collectErrors; return this; }


ROX-10215 Update Dashboard to use URL Search params instead of redux

Description
This updates the Dashboard page to use URL Parameters to store search state instead of Redux. User facing functionality should be nearly identical except for the following changes:

Search parameters are reflected in the URL of the main dashboard page when the search filter is changed
Links from the charts to the Violations page now correctly apply search filters
Links from the pie charts also apply a "Cluster" filter on the Violations page*

(* This was not the behavior of the old, broken links, but is consistent with the way links are handled from the bar chart. This also seems like more consistent UX since the pie charts are affected by the cluster filter, so it seems like the violations shown on the Violations page should match the data the user is coming from.)
There are a handful of follow up PRs that I'd like to make separate after this one is merged.

Clean up now dead code from Redux/reducers/sagas
Clean up handling of useEffect to avoid memory leaks pending team discussion on how best to approach this
Convert these files to TS if time allows

Checklist

[ ] Investigated and inspected CI test results

Testing Performed
Test that all cluster data loads on initial page visit:

Test that search filter correctly filters data for overall violation counts and charts:
Cluster: production

Cluster: security

Test that links from bar graph correctly apply filters on Violations page

Test that links from pie graph correctly apply filters on Violations page

Test that "Top Risky Deployments" widget matches the deployment order on the "Risk" page

Failing e2e tests... 👀


The ext3 filesystem leads to issues with Docker containers filling up the disks

After running a worker for some days, this is the state of the disks:
[root@dev1-worker-003 ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda2     ext3       25G   24G     0 100% /
devtmpfs       devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs          tmpfs     3.7G     0  3.7G   0% /dev/shm
tmpfs          tmpfs     3.7G  940M  2.8G  25% /run
tmpfs          tmpfs     3.7G     0  3.7G   0% /sys/fs/cgroup
/dev/xvda1     ext3      240M  109M  119M  48% /boot

Running out of disk means the Mesos agent stops, Marathon gets confused and lots of weird stuff happens.
We try to delete the leftover docker containers manually but the disk space isn't freed.
I think we're hitting on https://github.com/docker/docker/issues/3182 because of ext3. People say it should be fixed in ext4. Any change we can upgrade?

Thanks for opening this, it has been a problem in some of our clusters. Adding @altvnk and @sehqlr to this issue.
Here are our plans, please let me know what you think:

Deploy a docker cleanup package

install in /etc/cron.hourly
docker rm && docker rmi
docker cleanup volumes

Move from loopback to LVM storage for device mapper until overlayfs is in better shape

Move /var/lib/docker to an external block device so that it doesn't affect root.

Sounds good to me!

@stevendborrelli What we've done in our own cluster and may be a good idea is to set up a chronos task to do this. There's a few ways to cleverly use regular expressions/sorting to only remove unused images.

@loshkovskyi Have ansible playbooks to setup docker storage on separate volume with LVM. We decided that loopbacks if not safe and brings a lot of issues.
Regarding image cleanup: no matter what docker storage type is used, cleanup is still an issue. Here is example Chronos job i've used:
{
  "schedule": "R/2015-10-19T20:00:00Z/PT1H",
  "name": "delete_old_containers",
  "ownerName": "Alexander Litvinenko",
  "description": "Deletes exited containers on slaves",
  "owner"<EMAIL_ADDRESS>  "container": {
    "type": "DOCKER",
    "image": "spotify/docker-gc",
    "network": "BRIDGE",
    "volumes": [
      {
        "containerPath": "/var/run/docker.sock",
        "hostPath": "/var/run/docker.sock",
        "mode": "RW"
      },
      {
        "containerPath": "/etc",
        "hostPath": "/etc",
        "mode": "RW"
      }
    ]
  },
  "cpus": "0.1",
  "mem": "64",
  "disk": "",
  "uris": [],
  "command": ""
}

The only thing is Chronos don't have appropriate constrains (like Marathon's) to let it run on EVERY slave. So in my case it runs every hour on RANDOM slaves and it's enough for me, but YMMV.

@altvnk you can use the mesos rest api to retrieve all workers at:
master-url/master/slaves
it returns json with everything you need

Sure, but if you will try to make all these jobs with the same schedule in Chronos you will face with issue that actually runs only one of them, and it's annoying. Anyway, there is might be another way to do that, i'm finished with this config and pretty happy now.

I'd just like to have the cleanup run on the nodes locally via cron.hourly. That we we only have to drop a few scripts in a directory.

So then it can be simple docker run, check source repo for instructions. That image is pretty smart in removing containers.

30 окт. 2015 г., в 17:25, Steven Borrelli<EMAIL_ADDRESS>написал(а):
I'd just like to have the cleanup run on the nodes locally via cron.hourly. That we we only have to drop a few scripts in a directory.
—
Reply to this email directly or view it on GitHub.

We can run a couple of docker images to clean the volumes, so the /etc/cron.hourly scripts can just be a couple of docker run commands.

spotify/docker-gc
https://github.com/chadoe/docker-cleanup-volumes (https://hub.docker.com/r/martin/docker-cleanup-volumes/builds/). I've been running this one for a while on two of our clusters.

Hey all, I've tested out a solution to this issue, following @stevendborrelli's idea with the local cron job. I added it to https://github.com/asteris-llc/mantl-packaging as the docker-cleanup package. It uses the spotify/docker-gc image, and it removes containers that have exited for more than an hour. This container supports adding text files to /etc to build a whitelist of images/containers.
What do you think?

The error I'm hitting on means you can delete docker containers, but the disk space isn't actually freed. So that has to be solved too.

@eirslett is the space being used in volumes?

@sehqlr

Can we make the volume mount a little more fine-grained? -v/etc/:etc basically gives the container full access to the host configuration.
We'll need to add volume cleanup in addition. Docker 1.9 includes some volume options but until it gets into Centos (might be a few months), we'll need to use a script.

We could just have /etc/docker-gc:/etc. That way, we don't need to change the env for the container. I will test this in a different branch.
When I was reading this, I realized that the spotify and martin docker containers were doing different things. I've added them both to the script now, and this should fix the volume problem.

@eirslett is the space being used in volumes?

No, I have no idea what the space was used for actually...
If you look at the docker issue I linked to, a number of people have written instructions on how to reproduce the problem.
(1) check disk info (2) pull/run docker image (3) check disk info (4) remove docker image (5) check disk info.
Can you reproduce it in your mantl clusters as well?

@eirslett I was just running through your process, and I ran an additional step of checking my solution. I can show you the numbers if you want. From my tests, my solution works as expected, and so I plan on getting this RPM package in our repo by the end of today.

Got 100% of disk usage after running in about a day
# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     ext4       30G   30G     0 100% /
none           tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
udev           devtmpfs  3.9G   12K  3.9G   1% /dev
tmpfs          tmpfs     799M  604K  798M   1% /run
none           tmpfs     5.0M     0  5.0M   0% /run/lock
none           tmpfs     3.9G     0  3.9G   0% /run/shm
none           tmpfs     100M     0  100M   0% /run/user

docker directories:
91M	/var/lib/docker/volumes/
33G	/var/lib/docker/devicemapper/
59M	/var/lib/docker/containers/

Downloaded images allocate about 5-6GB at all, volumes only 91M, where is the rest space?
# docker info
Containers: 19
Images: 126
Storage Driver: devicemapper
 Pool Name: docker-202:1-398075-pool
 Pool Blocksize: 65.54 kB
 Backing Filesystem: extfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 29.91 GB
 Data Space Total: 107.4 GB
 Data Space Available: 16.78 MB
 Metadata Space Used: 23.99 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 16.78 MB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.77 (2012-10-15)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-48-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 2
Total Memory: 7.797 GiB
Name: ip-172-30-1-53
ID: T2I6:OT4L:GKDK:D6PL:4GEM:AP6E:ECQQ:OBPU:ZNXD:VCDY:4XOX:2HAF
WARNING: No swap limit support

Hey, @ndelitski. I have a solution for this, but unfortunately, I haven't been able to upload my package to our bintray yet. Here is the contents of the cron.hourly job I'm using for it:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v /etc/docker-cleanup:/etc/ --rm spotify/docker-gc
docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup-volumes

Try running this command, and it should be able to clean up your disk.

thix @sehqlr for sharing this scripts, but this didn't much help me...
before running scripts
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       40G   18G   20G  48% /

after running first
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       40G   18G   20G  48% /

$ du -sh /var/lib/docker/*
82M	/var/lib/docker/containers
33G	/var/lib/docker/devicemapper
14M	/var/lib/docker/graph
16K	/var/lib/docker/linkgraph.db
4.0K	/var/lib/docker/repositories-devicemapper
4.0K	/var/lib/docker/tmp
4.0K	/var/lib/docker/trust
91M	/var/lib/docker/volumes

after running second
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       40G   18G   20G  48% /
$ du -sh /var/lib/docker/*
82M	/var/lib/docker/containers
33G	/var/lib/docker/devicemapper
14M	/var/lib/docker/graph
16K	/var/lib/docker/linkgraph.db
4.0K	/var/lib/docker/repositories-devicemapper
4.0K	/var/lib/docker/tmp
4.0K	/var/lib/docker/trust
91M	/var/lib/docker/volumes

ohhh thats crazy devicemapper what you doing with me...
Hey guys! Maybe anyone could share his experience on what docker storage setup is suitable for production(i mean frequent container restarts, parallel starts, high layers speed)? Maybe i should take a look at direct-lm(But i don't wanna to attach 100gb disk on every my host)?

We've addressed this issue in a couple of ways:

Docker cleanup for containers, images and volumes has been added to 0.5
We're using xfs on our docker filesystem

Please make sure you are using the newest kernel.

Please make sure you are using the newest kernel.

Maybe the ansible playbook should do a sanity check on this, and fail fast if the kernel is older than what is supported?


[DRAFT][MB-16990] Update RequestedServiceItemsTable stories

MB-16990
Summary
Is there anything you would like reviewers to give additional scrutiny?
this article explains more about the approach used.
Verification Steps for the Author
These are to be checked by the author.

[ ] Have the Jira acceptance criteria been met for this change?
[ ] Merge/coordinate with https://dp3.atlassian.net/browse/MB-16987 and https://dp3.atlassian.net/browse/MB-16988 work, and update this PR

Verification Steps for Reviewers
These are to be checked by a reviewer.
Setup to Run the Code

Instructions for starting storybook
Instructions for starting the MilMove application
Instructions for running tests

How to test

yarn storybook
go to http://localhost:6006/?path=/story/office-components-requestedserviceitemstable--default
Once https://dp3.atlassian.net/browse/MB-16987 and https://dp3.atlassian.net/browse/MB-16988 are complete, merge into this branch and verify entry and departure date also show up

Screenshots

Warnings

:warning:
This PR does not include changes to unit tests, even though it affects app code.

Messages

:book:
:link: MB-16990

  Generated by :no_entry_sign: dangerJS against fc9423c1e1352ee379a85aaa729fb09657041c7f


Python Examples

As per the documentation , Python examples should be present in examples directory.  I couldn't find them. Would be helpful if you could update this in documentation.

Hello!
DAAL has python interfaces (and examples for them), but in commercial version only.
Andrey

what about the Pydaal package in conda ?
The introductory video sort of mislead me to believe that this was opensource :disappointed:


Auth: improve iframe support

fixes https://github.com/evcc-io/evcc/issues/13893

switched to SameSite: None do allow cookies to be set from inside an iframe
added partitioned attribute to comply with anti-tracking measures of major browsers. see https://developers.google.com/privacy-sandbox/3pcd/chips

General note: when using evcc in an iframe (e.g. in another HA system)  it's recommended to use https since browsers are quite strict with security features like cookies.

Ok, does seem more complicated. None requires Secure and thereby HTTPS to be active in Chrome. Chrome and Firefox also reject cookies with partitioned over HTTP when not(!) in an iframe.
Currently I don't see a good solution for how do reliably use auth-cooke inside of an iframe over http.


Export FactoryUtilsLIbraryContract

Pull Request Test Coverage Report for Build 7331

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 7317:
0.0%

Covered Lines:
1477

Relevant Lines:
1477

💛  - Coveralls


Add the {{prev_version}} variable

It's replaced by the crate version before cargo-release changes it in any way (ie. the version read straight from the Cargo.toml).
This can be used, for example, to automatically create links to the diffs between two versions in a changelog.

Good addition! Thanks! I'll create a release soon.


fix: dependency in mp_loadformat test and strict mode issue in mm_deletelibrary

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


TMC

Approximated TMC implementaion.

@giacomomagni Do you want to keep this? Otherwise I would just close it

As you wish, we are not bound to follow Yadims...


Add cache to Transform calculation

Description
As the inverse of NumPy array calculation is expensive I have added cache to transforms. Now moving mouse over canvas does not make processor going in 400%

@Czaki why not just used cached_property here?

There is a need to cache __getitem__ output where I cannot use cached_property.
Also logic for cleaning cache_property is for me less readable than own caching mechanism.

I made a few suggestions for tests in https://github.com/Czaki/napari/pull/31
And also fixed the failing tests here related to the removal of cached_property.
Feel free to merge those or copy whatever is useful.


'make proto' now requires a <1 week old docker image

This is a bit different than what I'd originally proposed (locking the version of the protobuf compiler that make proto uses) but I went with this approach because:

My curl request to get the latest commit in e.g. github.com/golang/protobuf got rate-limited almost immediately. To get a higher rate limit I would've had to put some kind of auth credentials in the curl command, and as this script is checked in to our public repo, I wasn't comfortable putting auth creds in it (even an OAuth token that can't do anything could be used by others and count against our rate limit) and having one credential used by whole company didn't seem scalable anyway
Deliberately checking out an old commit in these repos seemed like the kind of thing we would never update, and we'd miss major releases because of it
This approach (using date) is extremely simple, and seems like it gives us basically what we want

I tested this manually by changing etc/proto/Dockerfile:14 to RUN date --date="2 weeks ago" +%s >/last_run_time and confirming that make proto fails. I also tested the process for updating the docker image (by running make proto and confirming that the protobuf compiler was re-downloaded). Given that this is purely a convenience feature and internal-only, I didn't think it made sense to try and set up any kind of automated test.
Finally, I also ran an updated version of make proto and updated all of our generated .pb.go files

Update: A few months ago, golang/protobuf made a change that caused it to generate backwards-incompatible go structs: https://github.com/golang/protobuf/issues/607
To get this change to build, I've also had to update our code to handle the new generated structs


Integration stopped working after 0.2.0 update

After updating to 0.2.0, integration no longer started. It kept retrying without success. This is what was in the logs:
2024-09-09 20:55:29.843 ERROR (MainThread) [custom_components.opnsense] Unexpected error fetching HUNSN RJ34 OPNsense state data
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 354, in _async_refresh
self.data = await self._async_update_data()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 271, in _async_update_data
return await self.update_method()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/opnsense/__init__.py", line 98, in async_update_data
await hass.async_add_executor_job(lambda: data.update())
File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/opnsense/__init__.py", line 98, in <lambda>
await hass.async_add_executor_job(lambda: data.update())
^^^^^^^^^^^^^
File "/config/custom_components/opnsense/__init__.py", line 317, in update
self._state["telemetry"] = self._get_telemetry()
^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/opnsense/__init__.py", line 226, in inner
response = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/opnsense/__init__.py", line 250, in _get_telemetry
return self._client.get_telemetry()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/opnsense/pyopnsense/__init__.py", line 104, in inner
raise err
File "/config/custom_components/opnsense/pyopnsense/__init__.py", line 101, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/opnsense/pyopnsense/__init__.py", line 926, in get_telemetry
telemetry["system"] = self._get_telemetry_system()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/opnsense/pyopnsense/__init__.py", line 104, in inner
raise err
File "/config/custom_components/opnsense/pyopnsense/__init__.py", line 101, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/opnsense/pyopnsense/__init__.py", line 1132, in _get_telemetry_system
raise ValueError("Invalid uptime format")
ValueError: Invalid uptime format

Removed the whole entry and tried to add it again, but adding the device fails with another error after entering the URL, key, secret, firewall name and trying to go forward:
2024-09-09 22:11:35.900 ERROR (SyncWorker_36) [custom_components.opnsense.pyopnsense] Invalid data returned from exec_php for get_system_info. TypeError: string indices must be integers, not 'str'. Ensure the OPNsense user connected to HA either has full Admin access or specifically has the 'XMLRPC Library' privilege.
2024-09-09 22:11:36.001 ERROR (MainThread) [custom_components.opnsense.config_flow] Unexpected err=KeyError('device_id'), type(err)=<class 'KeyError'>

What OPNsense firmware are you running? If it is <24.7, please try the pre-release v0.2.1-beta.1 or wait until the next release.
How to enable pre-release versions for an integration in HACS

I was originally using an older version, but updated to 24.7.3_1 which did not fix the issue. After your comment though I looked a bit more into this. Tested the beta version etc. Finally found two separate issues. The Home Assistant plugin in OPNsense showed a notification that it has an invalid configuration, so I reinstalled it which got rid of the error. The integration still didn't work though so after investigating a bit more, I noticed that the API key I was using, was for a user that did not have admin rights. I don't know if admin rights is a new requirement, or if it has been there before but OPNsense screwed something up during the update. In any case, adding admin privileges in OPNsense for the user finally fixed the problem. Closing this issue as it ended up being a user error.

I was originally using an older version, but updated to 24.7.3_1 which did not fix the issue. After your comment though I looked a bit more into this. Tested the beta version etc. Finally found two separate issues. The Home Assistant plugin in OPNsense showed a notification that it has an invalid configuration, so I reinstalled it which got rid of the error. The integration still didn't work though so after investigating a bit more, I noticed that the API key I was using, was for a user that did not have admin rights. I don't know if admin rights is a new requirement, or if it has been there before but OPNsense screwed something up during the update. In any case, adding admin privileges in OPNsense for the user finally fixed the problem. Closing this issue as it ended up being a user error.

I don't know if admin rights is a new requirement

Since v0.2.0 we recommend admin privileged account, but we also documented (but not recommended) granular privileges. You can find details here.


[sealed] annotation for methods - will disallow overriding a method by disabling dynamic dispatch

[sealed]
def method
  puts "call to this method will save the time spend on dynamic method lookup"
end

Interesting idea, but we are not going to add our own language feature to Ruby language.
Propose to the Ruby language itself, not mruby.
FYI, [sealed] conflicts with existing Ruby syntax.


Disable tracker from controller

Hi, looked through code and it seems there's no way to disable tracker from specific controller action? If that's the current case what would be the cleanest way to implement it?

@DonSchado maybe you can help?

you could "configure" this in a proc.
sorry, that this feature (or maybe workaround?) is still not documented
you can find examples in these issues:

https://github.com/railslove/rack-tracker/issues/34
https://github.com/railslove/rack-tracker/issues/10

hope this helped? closing this issue for now.
any recommendations or a PR with documentation for this would be welcome.


upcoming meeting view should use Meeting.end_date() method

Describe the issue
The upcoming() view in ietf.meeting.views assigns an end attribute to each meeting. The Meeting.end_date() method performs the same calculation.
Replace the ad hoc end attribute with calls to end_date to get rid of the redundant code.
Code of Conduct

[X] I agree to follow the IETF's Code of Conduct

Closing as Complete - re-open if there's still something not done.


Only a few nodes can access NodePort services through node_port

Each node and pod are capable of running normally, and all nodes can be connected to the pod_IP of dns. The nginx service utilizes NodePort, but only a few nodes can have access to nginx through their ports.
Expected Behavior

kubectl get svc
default       service/nginx                  NodePort    <IP_ADDRESS>            80:31781/TCP    63m   app=nginx,tier=backend
curl -v --connect-timeout 10 http://hostname:31781
<IP_ADDRESS>               : ok=2    changed=1    unreachable=0    failed=0
<IP_ADDRESS>               : ok=1    changed=0    unreachable=0    failed=1
<IP_ADDRESS>               : ok=1    changed=0    unreachable=0    failed=1
<IP_ADDRESS>               : ok=2    changed=1    unreachable=0    failed=0
<IP_ADDRESS>               : ok=2    changed=1    unreachable=0    failed=0
<IP_ADDRESS>               : ok=1    changed=0    unreachable=0    failed=1
<IP_ADDRESS>               : ok=2    changed=1    unreachable=0    failed=0
<IP_ADDRESS>               : ok=1    changed=0    unreachable=0    failed=1
As we can see, only a few nodes can be accessed through the specified Node_Port, which is apparently abnormal, thus I utilize the type of Node Port

All nodes can be accessed through the specified Node_Port, rather than just a few irregular nodes.
Current Behavior

ssh  <IP_ADDRESS>   'tcpdump  -i tunl0'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tunl0, link-type RAW (Raw IP), capture size 262144 bytes
11:12:23.449434 IP JH-Api-JHCloudSH-Kubernate-Master1.38116 > <IP_ADDRESS>.http: Flags [S], seq 532698513, win 43690, options [mss 65495,sackOK,TS val 5635621 ecr 0,nop,wscale 7], length 0
11:12:24.451578 IP JH-Api-JHCloudSH-Kubernate-Master1.38116 > <IP_ADDRESS>.http: Flags [S], seq 532698513, win 43690, options [mss 65495,sackOK,TS val 5636624 ecr 0,nop,wscale 7], length 0
11:12:26.455585 IP JH-Api-JHCloudSH-Kubernate-Master1.38116 > <IP_ADDRESS>.http: Flags [S], seq 532698513, win 43690, options [mss 65495,sackOK,TS val 5638628 ecr 0,nop,wscale 7], length 0
ssh  <IP_ADDRESS>   'tcpdump  -i tunl0'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tunl0, link-type RAW (Raw IP), capture size 65535 bytes
Through package capturing analysis, we can find that the data package was sent from the tunnel, but the other server system cannot receive it. In this case, there are only a few servers systems suffering from this condition. Oddly, it is unsuccessful from server A to server B, but from server B to server A can actually work properly. According to these operating problems, I think that it is not reasonable.

After a package is sent through a tunnel and forwarded through iptables, The node with specified IP should be able to make the response.
Possible Solution

Steps to Reproduce (for bugs)

Context

Your Environment

Calico version
version:       3.4.0
Image:         quay.io/calico/cni:v3.4.0

Orchestrator version (e.g. kubernetes, mesos, rkt):
kubernetes version:   1.13.1

Operating System and version:
CentOS Linux release 7.3.1611

Link to your project (optional):

I believe it is possible to have a NodePort service that only "works" on hosts that have the service endpoint pods. Do the hosts that the NodePort works on also have one of the backend pods? Can you check the configuration of the node port service to make sure it should work on all hosts?

Yeah, I'd first check if the service has externalTrafficPolicy: Local set


Cloudformation links broken

On many samples the "launch stack" button results in an S3 error and inability to launch the stack. Going to the S3 link direct results in a forbidden message.

@zachelliottwx , i just merged in the change, do you mind checking if it fixes it for you (i've verified it myself already but always good to get the issue reporter to check) :)

Looks good. Thank you.


Questionnaire with :status: maintennace does not work properly

If a questionnaire status is set to maintenance. The exercise is listed in the table of content and it allows the students to submit answers as normal.
MWE
.. questionnaire:: status_maintenance
  :title: Question with a ``maintenance`` status. The questionnaire is hidden along with the previous submissions.
  :submissions: 4
  :category: Status
  :status: maintenance

  .. pick-one:: 10
    :required:

    What is 1+1?

    a. 1
    *b. 2
    c. 3

    !b § Count again!
    b § That is correct!
    c § Too much

Listed in the table of content

Allow student submission

Actually,  the questionnaire is only in a maintenance mode when the user accesses the questionnaire directly.

I think the idea with the maintenance mode has been

to show the exercise in the table of contents as normal,
to hide the exercise description from students, and
to prevent any new submissions to the exercise.

If exercises in chapters do not respect the maintenance status, then that should be fixed.
Maintenance mode is not used much. One of the problems is that teachers would often want to show  the exercise, but prevent new submissions and show a warning that submissions will be enabled soon once the grader is fixed. Currently, the exercise description is always hidden in the maintenance status. I wouldn't change that now. There are needs for both hiding and showing the exercise description, but this has very low priority.

I think the idea with the maintenance mode has been

to show the exercise in the table of contents as normal,
to hide the exercise description from students, and
to prevent any new submissions to the exercise.

If exercises in chapters do not respect the maintenance status, then that should be fixed.
Maintenance mode is not used much. One of the problems is that teachers would often want to show  the exercise, but prevent new submissions and show a warning that submissions will be enabled soon once the grader is fixed. Currently, the exercise description is always hidden in the maintenance status. I wouldn't change that now. There are needs for both hiding and showing the exercise description, but this has very low priority.


Expose public API GetSyntaxString()

Resolves #179
cc @SummerSun

@jongeller do you know what are these test failures?
[-] Error occurred in Context block 6.37s
      ActionPreferenceStopException: The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Cannot process command because of one or more missing mandatory parameters: platyPSHijack.
      at <ScriptBlock>, <No file>: line 26
      at Get-HelpPreview<Process>, C:\projects\markdown-maml\out\platyPS\platyPS.psm1: line 780
      at <ScriptBlock>, C:\projects\markdown-maml\test\Pester\FullLoop.Tests.ps1: line 139
   Context Output SMA into C:\projects\markdown-maml\out\sma-maml

@jongeller same error repros in master after triggering the rebuild of previosly green 640d80eb32f4f650821a5d961fb44d1f169e9e77
Previous green: https://ci.appveyor.com/project/PowerShell/markdown-maml/build/<IP_ADDRESS>4
Now red: https://ci.appveyor.com/project/PowerShell/markdown-maml/build/<IP_ADDRESS>1

I just saw the text PlatyPS highjack in the code you copied above. I'm not sure what that is.
I can investigate sometime this week, but slammed with things today. (Maybe I can see to it tonight)

@vors  I could not repro this on my machine, but it's obviously happening.... I'll need more time, but I cannot delve into this more due to time constraints.
@sankethka we may want to spent some time on this.

I got repro after running Update-Help

It's weird, I'm running the code from my branch locally, and executing all of the tests, everything passes. I just did update help too, still nothing. I'll try pulling in your branch and the master branch and repro again.

@vors delete the branch if you are okay with the changes submitted.


Tweaks to word cloud controls

SUMMARY
Minor changes to word cloud

Codecov Report

Merging #7212 into master will increase coverage by 7.74%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #7212      +/-   ##
==========================================
+ Coverage   64.62%   72.37%   +7.74%
==========================================
  Files         422       78     -344
  Lines       20596    10652    -9944
  Branches     2253        0    -2253
==========================================
- Hits        13311     7709    -5602
+ Misses       7162     2943    -4219
+ Partials      123        0     -123

Impacted Files
Coverage Δ

superset/dataframe.py
83.03% <0%> (-11.61%)
:arrow_down:

superset/db_engine_specs.py
55.85% <0%> (-1.53%)
:arrow_down:

superset/utils/core.py
88.04% <0%> (-0.18%)
:arrow_down:

superset/assets/src/components/Checkbox.jsx

...ations/deckgl/layers/Polygon/PolygonChartPlugin.js

...ets/src/dashboard/components/dnd/DragDroppable.jsx

...c/visualizations/deckgl/layers/Polygon/Polygon.jsx

...ssets/src/visualizations/presets/MapChartPreset.js

superset/assets/src/components/EditableTitle.jsx

superset/assets/src/setup/setupPlugins.js

... and 336 more

Continue to review full report at Codecov.

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

+1


docs: Adds documentation and cleans up ESLint rules

Summary of Changes
Adds docs about a11y and semantic markup
Documentation
Added content to Developer guide
CheckList
Make sure you have checked all steps below to ensure a timely review.

[x] PR title addresses the issue accurately and concisely. Example: "Updates the version of Flask to v1.0.2"

In case you are adding a dependency, check if the license complies with the ASF 3rd Party License Policy.

[x] PR includes a summary of changes, including screenshots of any UI changes.
[x] PR adds unit tests, updates existing unit tests, OR documents why no test additions or modifications are needed.
[x] In case of new functionality, my PR adds documentation that describes how to use it.

All the public python functions and the classes in the PR contain docstrings that explain what it does

[x] PR passes all tests documented in the developer guide

Codecov Report

Merging #489 into master will decrease coverage by 5.62%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #489      +/-   ##
==========================================
- Coverage   80.96%   75.33%   -5.63%
==========================================
  Files         223       42     -181
  Lines        5532     1784    -3748
  Branches      643      167     -476
==========================================
- Hits         4479     1344    -3135
+ Misses        989      392     -597
+ Partials       64       48      -16

Impacted Files
Coverage Δ

...pplication/static/js/ducks/tableMetadata/api/v0.ts

...pplication/static/js/ducks/notification/reducer.ts

...en_application/static/js/ducks/dashboard/api/v0.ts

...n/static/js/components/common/EntityCard/index.tsx

...omponents/TableDetail/TableHeaderBullets/index.tsx

...lication/static/js/components/BrowsePage/index.tsx

...static/js/components/common/FlashMessage/index.tsx

...tic/js/components/common/EditableText/constants.ts

...sen_application/static/js/config/config-default.ts

amundsen_application/static/js/interfaces/index.ts

... and 169 more

Continue to review full report at Codecov.

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


Add minimal support for melange

For now this is a minimal patch to allow consuming the library from dune / melange. It is based on 0.13.6 as that's the version we were using at Ahrefs.
We will tackle further improvements down the line.

Still not done, merged master but still have to fix:

bs-fetch errors: will prob vendor fetch bindings inside melange-webapi as suggested by @davesnx
remove more warnings for empty external names

Would be nice to also add a GH action that runs the test and example builds in ci, prob in the future 😅


[Grid] Inside Table In IE11 Should Render To Correct Width

E.g. https://jsfiddle.net/e1obpc3u/1/
**Expected behavior: ** The lorum ipsum text should wrap at the edge of the screen (and does in most browsers).
**Actual behavior: ** in IE11 the text renders off-screen.
The display:flex CSS rule seems to be to blame, but only when the grid is inside a table element. I was able to boil my problem down to as simple an example as I could (above). In one instance where this was causing me problems, I was able to remove the table, but in general we're using grids inside components that may get used anywhere.

Hi @cp1880, thanks, we’ll take a look. Setting table-layout: fixed; with width: 100%; on a table element seems to be fixing it, but can be undesirable.


Add loyalty score to actors

Based on the optional Loyalty rule in the DMG, NPCs should have a field for tracking loyalty that is only visible to GMs. This would be a value between 0 and 20. The DMG also states that the value is capped by the maximum charisma score in the party which could be enforceable if a primary party is defined.
This value should also be visible (and perhaps editable) for any NPCs added to the party actor.
It may also be a good idea to add this to PCs for GMs who like to use character actors for their NPCs.

Seems like there's a need for a general "point" system for npcs/characters.

Loyalty (capped at 20, GM only)
Piety (no cap, visible to all)
Hero Points (see comments: https://github.com/foundryvtt/dnd5e/issues/2466)

It may also be a good idea to add this to PCs for GMs who like to use character actors for their NPCs.

strongly :pray:ing for this. For any NPC important enough to have loyalty, I use a character actor.

Seems like there's a need for a general "point" system for npcs/characters.

Loyalty (capped at 20, GM only)
Piety (no cap, visible to all)
Hero Points (see comments: Support for a 'Piety' score on the character sheet #2466)

I know that this is something legacy resources covered; spell points & psi points are hard to handle with item uses if there's any weird multiclass interactions for determining the cap.