Support Python 3.x

Related: #41, #43, #57

Remaining steps (in order of severity):

[ ] Upgrade Thrift for Python 3 support (I believe this is not going to be a backwards compatible change)
[ ] Fix make test errors [0]
[ ] opentracing_instrumentation is not Python 3 compatible, and it is a tests requirement (ModuleNotFoundError: No module named 'urlparse')

[0] Some test errors / failures that needs resolving:

opentracing.propagation.InvalidCarrierException: carrier not a collection
 TypeError: '<=' not supported between instances of 'MagicMock' and 'MagicMock'
TypeError: '>' not supported between instances of 'NoneType' and 'int'
Several others ...

As far as Thrift upgrade, we currently require unbound thrift. If possible, I would like to keep it this way, and install different versions in the Travis matrix build. If we need to regenerate the files under jaeger_client/thrift_gen, then we may need to create subdirs for different Thrift versions.
The main reason for this is that many services at Uber pin Thrift to older versions, and pip-compile won't be able to resolve it if we require thrift>=0.10
Re opentracing_instrumentation - it would be good to make it Py3 compatible as well. I don't think it uses Jaeger directly, it should only use basic-tracer which should be Py3 compatible.

I've got a collection of patches that I used to make jaeger-client 3.4.0 and opentracing_instrumentation 2.2.0 run on Python 3, attached here. A number of these were covered by #57, but there are a few that are not. I was only trying to support Python 3 rather than both, so they're not applicable as-is, but hopefully this helps!
diff --git jaeger_client/codecs.py jaeger_client/codecs.py
index d25eb69..b4fca65 100644
--- jaeger_client/codecs.py
+++ jaeger_client/codecs.py
@@ -20,7 +20,7 @@

 from __future__ import absolute_import

-import urllib
+import urllib.parse

 from opentracing import (
     InvalidCarrierException,
@@ -64,29 +64,29 @@ class TextCodec(Codec):
             parent_id=span_context.parent_id, flags=span_context.flags)
         baggage = span_context.baggage
         if baggage:
-            for key, value in baggage.iteritems():
+            for key, value in baggage.items():
                 if self.url_encoding:
-                    encoded_value = urllib.quote(value)
+                    encoded_value = urllib.parse.quote(value)
                 else:
                     encoded_value = value
                 carrier['%s%s' % (self.baggage_prefix, key)] = encoded_value

     def extract(self, carrier):
-        if not hasattr(carrier, 'iteritems'):
+        if not hasattr(carrier, 'items'):
             raise InvalidCarrierException('carrier not a collection')
         trace_id, span_id, parent_id, flags = None, None, None, None
         baggage = None
         debug_id = None
-        for key, value in carrier.iteritems():
+        for key, value in carrier.items():
             uc_key = key.lower()
             if uc_key == self.trace_id_header:
                 if self.url_encoding:
-                    value = urllib.unquote(value)
+                    value = urllib.parse.unquote(value)
                 trace_id, span_id, parent_id, flags = \
                     span_context_from_string(value)
             elif uc_key.startswith(self.baggage_prefix):
                 if self.url_encoding:
-                    value = urllib.unquote(value)
+                    value = urllib.parse.unquote(value)
                 attr_key = key[self.prefix_length:]
                 if baggage is None:
                     baggage = {attr_key.lower(): value}
@@ -94,7 +94,7 @@ class TextCodec(Codec):
                     baggage[attr_key.lower()] = value
             elif uc_key == self.debug_id_header:
                 if self.url_encoding:
-                    value = urllib.unquote(value)
+                    value = urllib.parse.unquote(value)
                 debug_id = value
         if not trace_id and baggage:
             raise SpanContextCorruptedException('baggage without trace ctx')
@@ -137,7 +137,7 @@ def span_context_to_string(trace_id, span_id, parent_id, flags):
     :param parent_id:
     :param flags:
     """
-    parent_id = parent_id or 0L
+    parent_id = parent_id or 0
     return '{:x}:{:x}:{:x}:{:x}'.format(trace_id, span_id, parent_id, flags)

@@ -154,7 +154,7 @@ def span_context_from_string(value):
             raise SpanContextCorruptedException(
                 'trace context must be a string or array of 1: "%s"' % value)
         value = value[0]
-    if not isinstance(value, basestring):
+    if not isinstance(value, str):
         raise SpanContextCorruptedException(
             'trace context not a string "%s"' % value)
     parts = value.split(':')
@@ -162,9 +162,9 @@ def span_context_from_string(value):
         raise SpanContextCorruptedException(
             'malformed trace context "%s"' % value)
     try:
-        trace_id = long(parts[0], 16)
-        span_id = long(parts[1], 16)
-        parent_id = long(parts[2], 16)
+        trace_id = int(parts[0], 16)
+        span_id = int(parts[1], 16)
+        parent_id = int(parts[2], 16)
         flags = int(parts[3], 16)
         if trace_id < 1 or span_id < 1 or parent_id < 0 or flags < 0:
             raise SpanContextCorruptedException(
diff --git jaeger_client/constants.py jaeger_client/constants.py
index fa53dec..ae18fe8 100644
--- jaeger_client/constants.py
+++ jaeger_client/constants.py
@@ -33,10 +33,10 @@ DEFAULT_SAMPLING_INTERVAL = 60
 DEFAULT_FLUSH_INTERVAL = 1

 # Name of the HTTP header used to encode trace ID
-TRACE_ID_HEADER = b'uber-trace-id'
+TRACE_ID_HEADER = 'uber-trace-id'

 # Prefix for HTTP headers used to record baggage items
-BAGGAGE_HEADER_PREFIX = b'uberctx-'
+BAGGAGE_HEADER_PREFIX = 'uberctx-'

 # The name of HTTP header or a TextMap carrier key which, if found in the
 # carrier, forces the trace to be sampled as "debug" trace. The value of the
diff --git jaeger_client/sampler.py jaeger_client/sampler.py
index 6131b48..ad61b15 100644
--- jaeger_client/sampler.py
+++ jaeger_client/sampler.py
@@ -317,7 +317,7 @@ class AdaptiveSampler(Sampler):
                 ProbabilisticSampler(self.default_sampling_probability)

     def close(self):
-        for _, sampler in self.samplers.iteritems():
+        for _, sampler in self.samplers.items():
             sampler.close()

     def __str__(self):
diff --git jaeger_client/span.py jaeger_client/span.py
index 385dbb4..0675d52 100644
--- jaeger_client/span.py
+++ jaeger_client/span.py
@@ -54,7 +54,7 @@ class Span(opentracing.Span):
         self.tags = []
         self.logs = []
         if tags:
-            for k, v in tags.iteritems():
+            for k, v in tags.items():
                 self.set_tag(k, v)

     def set_operation_name(self, operation_name):
diff --git jaeger_client/thrift.py jaeger_client/thrift.py
index 878bd5c..90fe981 100644
--- jaeger_client/thrift.py
+++ jaeger_client/thrift.py
@@ -30,8 +30,8 @@ from .thrift_gen.zipkincore.constants import LOCAL_COMPONENT

 _max_signed_port = (1 << 15) - 1
 _max_unsigned_port = (1 << 16)
-_max_signed_id = (1L << 63) - 1
-_max_unsigned_id = (1L << 64)
+_max_signed_id = (1 << 63) - 1
+_max_unsigned_id = (1 << 64)

 def ipv4_to_int(ipv4):
@@ -61,13 +61,15 @@ def port_to_int(port):
 def id_to_int(big_id):
     # zipkincore.thrift defines ID fields as i64, which is signed,
     # therefore we convert large IDs (> 2^63) to negative longs
+    if big_id is None:
+        return None
     if big_id > _max_signed_id:
         big_id -= _max_unsigned_id
     return big_id

 def make_endpoint(ipv4, port, service_name):
-    if isinstance(ipv4, basestring):
+    if isinstance(ipv4, str):
         ipv4 = ipv4_to_int(ipv4)
     port = port_to_int(port)
     if port is None:
@@ -117,7 +119,7 @@ def timestamp_micros(ts):
     :param ts:
     :return:
     """
-    return long(ts * 1000000)
+    return int(ts * 1000000)

 def make_zipkin_spans(spans):
diff --git jaeger_client/thrift_gen/agent/Agent.py jaeger_client/thrift_gen/agent/Agent.py
index af7aa2f..88df0bd 100644
--- jaeger_client/thrift_gen/agent/Agent.py
+++ jaeger_client/thrift_gen/agent/Agent.py
@@ -8,7 +8,7 @@

 from thrift.Thrift import TType, TMessageType, TException, TApplicationException
 import logging
-from ttypes import *
+from .ttypes import *
 from thrift.Thrift import TProcessor
 from thrift.transport import TTransport
 from thrift.protocol import TBinaryProtocol, TProtocol
@@ -46,7 +46,7 @@ class Client(Iface):
       try:
         frame = yield self._transport.readFrame()
       except TTransport.TTransportException as e:
-        for future in self._reqs.itervalues():
+        for future in self._reqs.values():
           future.set_exception(e)
         self._reqs = {}
         return
@@ -177,7 +177,7 @@ class emitZipkinBatch_args(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
diff --git jaeger_client/thrift_gen/agent/constants.py jaeger_client/thrift_gen/agent/constants.py
index 12e384e..4c2e970 100644
--- jaeger_client/thrift_gen/agent/constants.py
+++ jaeger_client/thrift_gen/agent/constants.py
@@ -7,5 +7,5 @@
 #

 from thrift.Thrift import TType, TMessageType, TException, TApplicationException
-from ttypes import *
+from .ttypes import *

diff --git jaeger_client/thrift_gen/sampling/SamplingManager.py jaeger_client/thrift_gen/sampling/SamplingManager.py
index 5144fc7..b9d06a3 100644
--- jaeger_client/thrift_gen/sampling/SamplingManager.py
+++ jaeger_client/thrift_gen/sampling/SamplingManager.py
@@ -8,7 +8,7 @@

 from thrift.Thrift import TType, TMessageType, TException, TApplicationException
 import logging
-from ttypes import *
+from .ttypes import *
 from thrift.Thrift import TProcessor
 from thrift.transport import TTransport
 from thrift.protocol import TBinaryProtocol, TProtocol
@@ -46,7 +46,7 @@ class Client(Iface):
       try:
         frame = yield self._transport.readFrame()
       except TTransport.TTransportException as e:
-        for future in self._reqs.itervalues():
+        for future in self._reqs.values():
           future.set_exception(e)
         self._reqs = {}
         return
@@ -189,7 +189,7 @@ class getSamplingStrategy_args(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -254,7 +254,7 @@ class getSamplingStrategy_result(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
diff --git jaeger_client/thrift_gen/sampling/constants.py jaeger_client/thrift_gen/sampling/constants.py
index 12e384e..4c2e970 100644
--- jaeger_client/thrift_gen/sampling/constants.py
+++ jaeger_client/thrift_gen/sampling/constants.py
@@ -7,5 +7,5 @@
 #

 from thrift.Thrift import TType, TMessageType, TException, TApplicationException
-from ttypes import *
+from .ttypes import *

diff --git jaeger_client/thrift_gen/sampling/ttypes.py jaeger_client/thrift_gen/sampling/ttypes.py
index 4c81edd..7d0cd76 100644
--- jaeger_client/thrift_gen/sampling/ttypes.py
+++ jaeger_client/thrift_gen/sampling/ttypes.py
@@ -89,7 +89,7 @@ class ProbabilisticSamplingStrategy(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+         for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -156,7 +156,7 @@ class RateLimitingSamplingStrategy(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+         for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -239,7 +239,7 @@ class OperationSamplingStrategy(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+         for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -345,7 +345,7 @@ class PerOperationSamplingStrategies(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -454,7 +454,7 @@ class SamplingStrategyResponse(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
diff --git jaeger_client/thrift_gen/zipkincore/ZipkinCollector.py jaeger_client/thrift_gen/zipkincore/ZipkinCollector.py
index 72d84f5..371acda 100644
--- jaeger_client/thrift_gen/zipkincore/ZipkinCollector.py
+++ jaeger_client/thrift_gen/zipkincore/ZipkinCollector.py
@@ -8,7 +8,7 @@

 from thrift.Thrift import TType, TMessageType, TException, TApplicationException
 import logging
-from ttypes import *
+from .ttypes import *
 from thrift.Thrift import TProcessor
 from thrift.transport import TTransport
 from thrift.protocol import TBinaryProtocol, TProtocol
@@ -46,7 +46,7 @@ class Client(Iface):
       try:
         frame = yield self._transport.readFrame()
       except TTransport.TTransportException as e:
-        for future in self._reqs.itervalues():
+        for future in self._reqs.values():
           future.set_exception(e)
         self._reqs = {}
         return
@@ -198,7 +198,7 @@ class submitZipkinBatch_args(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -271,7 +271,7 @@ class submitZipkinBatch_result(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
diff --git jaeger_client/thrift_gen/zipkincore/constants.py jaeger_client/thrift_gen/zipkincore/constants.py
index 7b72c2b..57e37ba 100644
--- jaeger_client/thrift_gen/zipkincore/constants.py
+++ jaeger_client/thrift_gen/zipkincore/constants.py
@@ -7,7 +7,7 @@
 #

 from thrift.Thrift import TType, TMessageType, TException, TApplicationException
-from ttypes import *
+from .ttypes import *

 CLIENT_SEND = "cs"
 CLIENT_RECV = "cr"
diff --git jaeger_client/thrift_gen/zipkincore/ttypes.py jaeger_client/thrift_gen/zipkincore/ttypes.py
index 6898ec2..7eac0f4 100644
--- jaeger_client/thrift_gen/zipkincore/ttypes.py
+++ jaeger_client/thrift_gen/zipkincore/ttypes.py
@@ -144,7 +144,7 @@ class Endpoint(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -243,7 +243,7 @@ class Annotation(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -367,7 +367,7 @@ class BinaryAnnotation(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -589,7 +589,7 @@ class Span(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
@@ -656,7 +656,7 @@ class Response(object):

   def __repr__(self):
     L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
+      for key, value in self.__dict__.items()]
     return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

   def __eq__(self, other):
diff --git jaeger_client/tracer.py jaeger_client/tracer.py
index a84fab0..1d53560 100644
--- jaeger_client/tracer.py
+++ jaeger_client/tracer.py
@@ -132,7 +132,7 @@ class Tracer(opentracing.Tracer):
                 if sampled:
                     flags = SAMPLED_FLAG
                     tags = tags or {}
-                    for k, v in sampler_tags.iteritems():
+                    for k, v in sampler_tags.items():
                         tags[k] = v
             else:  # have debug id
                 flags = SAMPLED_FLAG | DEBUG_FLAG
@@ -159,7 +159,7 @@ class Tracer(opentracing.Tracer):

         if (rpc_server or not parent_id) and (flags & SAMPLED_FLAG):
             # this is a first-in-process span, and is sampled
-            for k, v in self.tags.iteritems():
+            for k, v in self.tags.items():
                 span.set_tag(k, v)

         self._emit_span_metrics(span=span, join=rpc_server)
diff --git jaeger_client/utils.py jaeger_client/utils.py
index 3e7c97c..44099eb 100644
--- jaeger_client/utils.py
+++ jaeger_client/utils.py
@@ -74,7 +74,7 @@ def local_ip():
     if ip.startswith('127.'):
         # Check eth0, eth1, eth2, en0, ...
         interfaces = [
-            i + str(n) for i in ('eth', 'en', 'wlan') for n in xrange(3)
+            i + str(n) for i in ('eth', 'en', 'wlan') for n in range(3)
         ]  # :(
         for interface in interfaces:
             try:
@@ -90,7 +90,7 @@ def interface_ip(interface):
     sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     return socket.inet_ntoa(
         fcntl.ioctl(
-            sock.fileno(), 0x8915, struct.pack('256s', interface[:15])
+            sock.fileno(), 0x8915, struct.pack('256s', interface.encode('utf-8')[:15])
         )[20:24]
     )
     # Explanation:

diff --git opentracing_instrumentation/client_hooks/tornado_http.py opentracing_instrumentation/client_hooks/tornado_http.py
index 431c1c6..51dcfec 100644
--- opentracing_instrumentation/client_hooks/tornado_http.py
+++ opentracing_instrumentation/client_hooks/tornado_http.py
@@ -22,7 +22,7 @@ from __future__ import absolute_import

 import functools
 import logging
-import urlparse
+import urllib.parse

 from tornado.httputil import HTTPHeaders
 from opentracing_instrumentation.http_client import AbstractRequestWrapper
@@ -158,7 +158,7 @@ class TornadoRequestWrapper(AbstractRequestWrapper):

     @property
     def host_port(self):
-        res = urlparse.urlparse(self.full_url)
+        res = urllib.parse.urlparse(self.full_url)
         if res:
             return split_host_and_port(host_string=res.netloc,
                                        scheme=res.scheme)
diff --git opentracing_instrumentation/client_hooks/urllib.py opentracing_instrumentation/client_hooks/urllib.py
index 4222cb2..ad3035c 100644
--- opentracing_instrumentation/client_hooks/urllib.py
+++ opentracing_instrumentation/client_hooks/urllib.py
@@ -32,15 +32,15 @@ log = logging.getLogger(__name__)

 @singleton
 def install_patches():
-    import urllib
-    import urlparse
+    import urllib.request
+    import urllib.parse

     log.info('Instrumenting urllib methods for tracing')

-    class TracedURLOpener(urllib.FancyURLopener):
+    class TracedURLOpener(urllib.request.FancyURLopener):

         def open(self, fullurl, data=None):
-            parsed_url = urlparse.urlparse(fullurl)
+            parsed_url = urllib.parse.urlparse(fullurl)
             host = parsed_url.hostname or None
             port = parsed_url.port or None

@@ -59,7 +59,7 @@ def install_patches():
                 # TODO add callee service name
                 # TODO add headers to propagate trace
                 # cannot use super here, this is an old style class
-                fileobj = urllib.FancyURLopener.open(self, fullurl, data)
+                fileobj = urllib.request.FancyURLopener.open(self, fullurl, data)
                 if fileobj.getcode() is not None:
                     span.set_tag('http.status_code', fileobj.getcode())

@@ -68,4 +68,4 @@ def install_patches():
         def retrieve(self, url, filename=None, reporthook=None, data=None):
             raise NotImplementedError

-    urllib._urlopener = TracedURLOpener()
+    urllib.request._urlopener = TracedURLOpener()
diff --git opentracing_instrumentation/client_hooks/urllib2.py opentracing_instrumentation/client_hooks/urllib2.py
index 84bb5a1..fac2847 100644
--- opentracing_instrumentation/client_hooks/urllib2.py
+++ opentracing_instrumentation/client_hooks/urllib2.py
@@ -34,8 +34,8 @@ log = logging.getLogger(__name__)

 @singleton
 def install_patches():
-    import httplib
-    import urllib2
+    import http.client as httplib
+    import urllib.request as urllib2

     log.info('Instrumenting urllib2 methods for tracing')

@@ -82,9 +82,9 @@ def install_patches():

         @property
         def host_port(self):
-            host_string = self.request.get_host()
+            host_string = self.request.host
             return split_host_and_port(host_string=host_string,
-                                       scheme=self.request.get_type())
+                                       scheme=self.request.type)

     class TracedHTTPHandler(build_handler(urllib2.HTTPHandler)):

diff --git opentracing_instrumentation/http_client.py opentracing_instrumentation/http_client.py
index 8d185df..d390770 100644
--- opentracing_instrumentation/http_client.py
+++ opentracing_instrumentation/http_client.py
@@ -62,7 +62,7 @@ def before_http_request(request, current_span_extractor):
         opentracing.tracer.inject(span_context=span.context,
                                   format=Format.HTTP_HEADERS,
                                   carrier=carrier)
-        for key, value in carrier.iteritems():
+        for key, value in carrier.items():
             request.add_header(key, value)
     except opentracing.UnsupportedFormatException:
         pass
diff --git opentracing_instrumentation/http_server.py opentracing_instrumentation/http_server.py
index 62d726e..2a7756f 100644
--- opentracing_instrumentation/http_server.py
+++ opentracing_instrumentation/http_server.py
@@ -21,7 +21,7 @@
 from __future__ import absolute_import

 import logging
-import urllib
+import urllib.parse
 import opentracing
 from opentracing import Format
 from opentracing.ext import tags
@@ -65,7 +65,7 @@ def before_request(request, tracer=None):
     operation = request.operation
     try:
         carrier = {}
-        for key, value in request.headers.iteritems():
+        for key, value in request.headers.items():
             carrier[key] = value
         parent_ctx = tracer.extract(
             format=Format.HTTP_HEADERS, carrier=carrier
@@ -209,8 +209,8 @@ class WSGIRequestWrapper(AbstractRequestWrapper):
                 if environ['SERVER_PORT'] != '80':
                     url += ':' + environ['SERVER_PORT']

-        url += urllib.quote(environ.get('SCRIPT_NAME', ''))
-        url += urllib.quote(environ.get('PATH_INFO', ''))
+        url += urllib.parse.quote(environ.get('SCRIPT_NAME', ''))
+        url += urllib.parse.quote(environ.get('PATH_INFO', ''))
         if environ.get('QUERY_STRING'):
             url += '?' + environ['QUERY_STRING']
         return url

@dsludwig interesting - so you did not have to upgrade thrift-generated classes, just fix them up a bit? Or did you still have to use higher version of thrift?

I still needed a higher version of thrift at runtime, but I did not end up regenerating the thrift classes.

I still needed a higher version of thrift at runtime, but I did not end up regenerating the thrift classes.

That's good to know. I started applying your patch to opentracing_instrumentation but got too busy with other things. Want to get that out of the way first.

https://github.com/uber-common/opentracing-python-instrumentation/pull/28
Currently breaks on urllib2, I don't think it's the correct approach to replace urllib2 with urllib.request from future, because it assumes the end-user code is also using future. It needs a bit more experimentation. There must be two sets of tests, using urllib2 in py2 and using urllib.request in py2 and py3.

@dsludwig would you be able to test this? uber-common/opentracing-python-instrumentation#28
I didn't port all of your changes, e.g. this one
         @property
         def host_port(self):
-            host_string = self.request.get_host()
+            host_string = self.request.host
             return split_host_and_port(host_string=host_string,
-                                       scheme=self.request.get_type())
+                                       scheme=self.request.type)

Does anyone know if there will be a new release in the near future?

@olevold 3.6.1 was released on Sep 26, there have been no changes since then.

The get_host() and get_type() change was made to opentracing-python-instrumentation in https://github.com/uber-common/opentracing-python-instrumentation/commit/5ade4a5a3002468dc4c08a488dd4b39f4a5bfa4a#diff-ef3e0ebde91ef405f72ce139bc8cd5ef

I made #99 to hopefully move this along

Same question, what's left to be done here? Which help is needed?

There are still some tests failing, most of them around unicode handling. We had an outage internally caused by unicode in python, it's currently being investigated, I am hoping it will finally reveal what was causing httplib to blow up, then we can have a proper fix and it should be easy to port to py3.

I also see that we have some logic that skips installing tchannel when running in a py3 environment, yet the tests still are run.
______________________________ ERROR collecting tests/test_crossdock.py _______________________________
tests/test_crossdock.py:22: in <module>
    from crossdock.server import server
crossdock/server/server.py:33: in <module>
    from tchannel import TChannel, thrift
E   ModuleNotFoundError: No module named 'tchannel'

It looks like tchannel is not ready for py3, since if you install it, you end up with another error.
______________________________ ERROR collecting tests/test_crossdock.py _______________________________
lib/python3.6/site-packages/_pytest/python.py:611: in _importtestmodule
    mod = self.fspath.pyimport(ensuresyspath=importmode)
lib/python3.6/site-packages/py/_path/local.py:668: in pyimport
    __import__(modname)
<frozen importlib._bootstrap>:971: in _find_and_load
    ???
<frozen importlib._bootstrap>:955: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:656: in _load_unlocked
    ???
<frozen importlib._bootstrap>:626: in _load_backward_compatible
    ???
lib/python3.6/site-packages/_pytest/assertion/rewrite.py:171: in load_module
    py.builtin.exec_(co, mod.__dict__)
tests/test_crossdock.py:22: in <module>
    from crossdock.server import server
crossdock/server/server.py:33: in <module>
    from tchannel import TChannel, thrift
lib/python3.6/site-packages/tchannel/__init__.py:30: in <module>
    from .response import Response  # noqa
lib/python3.6/site-packages/tchannel/response.py:25: in <module>
    from . import schemes
lib/python3.6/site-packages/tchannel/schemes/__init__.py:37: in <module>
    from .json import JsonArgScheme  # noqa
lib/python3.6/site-packages/tchannel/schemes/json.py:32: in <module>
    from ..tracing import ClientTracer, TChannelOpenTracingClientInterceptor
E     File "/Users/scollins/src/jaeger-client-python/lib/python3.6/site-packages/tchannel/tracing.py", line 280
E       parent_id=carrier['parent_id'] or 0L,
E                                          ^
E   SyntaxError: invalid syntax

@sc68cal yeah. I don't think there's much chance tchannel would be ever support py3, it's in maintenance mode. We have two options for Py3:

skip running the crossdock tests (unit and Docker-based), or
implement some sort of wrapper for tchannel imports so that the code still compiles, and change unit + Docker tests to skip the tchannel-related tests, but keep http-related ones (so that they still run on py2)

Should be fixed by #154

Congrats ! @yurishkuro do you know when a new release with Python 3 support will be done ?

Planning to release it sometime this week.

I was mentioned in the  changelog, I just replicated as Github release https://github.com/jaegertracing/jaeger-client-python/releases/tag/v3.9.0


Extract :root variables into separate file

It would be great if there was a feature to automatically extract the :root {} variables out of the compiled tailwind.css file and have them stored in a separate file. Has anyone achieved this?

I have added a pull request for this feature, keen to get your feedback.
https://github.com/omarkhatibco/tailwind-css-variables/pull/11


health_check: request header formatting does not use dynamic request info

Title: health_check: request header formatting does not use dynamic request info
Description:
Using the command operators in http_health_check.request_headers_to_add will not work as intended. Specifically, for %UPSTREAM_METADATA()%, the lookup will fail and be replaced with an empty string.
For %DOWNSTREAM_LOCAL_ADDRESS% it segfaults... but this one (and the other DOWNSTREAM ones) doesn't actually make sense because there is no downstream for healthchecks (or the downstream is envoy itself?)
The problem boils down to the fact that the RequestInfo object is never populated with the current request info. https://github.com/envoyproxy/envoy/blob/master/source/common/upstream/health_checker_impl.cc#L159
(I haven't confirmed this, but based on the reading of the code %START_TIME% will also be wrong. It will always be the time that the REQUEST_INFO object was constructed)
Repro steps:
The simplest repro is to add the header to the health checker tests:
diff --git a/test/common/upstream/health_checker_impl_test.cc b/test/common/upstream/health_checker_impl_test.cc
index dc041e7..a8befdc 100644
--- a/test/common/upstream/health_checker_impl_test.cc
+++ b/test/common/upstream/health_checker_impl_test.cc
@@ -290,6 +290,9 @@ public:
             key: user-agent
             value: CoolEnvoy/HC
           append: false
+        - header:
+            key: downstream-local-address
+            value: "%DOWNSTREAM_LOCAL_ADDRESS%"
     )EOF";

     health_checker_.reset(new TestHttpHealthCheckerImpl(*cluster_, parseHealthCheckFromV2Yaml(yaml),

A more realistic repro is to use UPSTREAM_METADATA with EDS endpoints that actually have metadata.

Yeah I think we can do better here pretty easily. Marking bug/help wanted.

Have a rough idea on fixing this as suggested by the title, i.e.

Construct RequestInfo object and set onUpstreamHostSelected() whenever onInterval is called.
Handle DOWNSTREAM_*by checking if request_info.downstreamLocalAddress() is nullptr then return empty string.

However I find it challenging to mock host metadata() call to return metadata object to test the UPSTREAM_METADATA header formatter for health check call.


First Interaction GitHub Action

Objective
Configure the first interaction GitHub action to welcome new users to the project.

Welcome Bot would be the best option IMO.

@beeme1mr has anything been implemented?


[v2.8.0] forseti model list send an error when there is no model

version v2.8.0
module = model
error

forseti model list
Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
File "/usr/lib/python2.7/threading.py", line 754, in run
File "/usr/local/lib/python2.7/dist-packages/grpc/_channel.py", line 707, in channel_spin
File "/usr/local/lib/python2.7/dist-packages/grpc/_channel.py", line 174, in handle_event
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'get_fork_epoch'
Deployed with deployment manager

@BrunoReboul Can you list the commands you ran before forseti model list?
Additionally, do you have a handle on our Forseti Security Slack? We can work through troubleshooting  this issue on our Slack here: https://join.slack.com/t/forsetisecurity/shared_invite/enQtNDIyMzg4Nzg1NjcxLTJhYjI1YzY0MDg4YjRhMDhhZTMwZTg0MWExZjU1MTNiNWFmMmFlMWQ0MmI3OTE1MzczZTMwNTEzNDZiNDY3NTY

Seeing the same from time to time, using forseti scanner run:
Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
  File "/usr/lib/python2.7/threading.py", line 754, in run
  File "/usr/local/lib/python2.7/dist-packages/grpc/_channel.py", line 786, in channel_spin
  File "/usr/local/lib/python2.7/dist-packages/grpc/_channel.py", line 173, in handle_event
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'get_fork_epoch'

This issue is stale and has not had any recent activity. If this is still a concern please reopen the issue. Thanks!


Donations possible?

Thanks a lot for creating this template. It has saved me a ton of time and a bit of money (and it works like a charm!), because so far I was looking to buy a template and then integrating it into my app.
If there's a way of donating a bit to the project - buy you a coffee maybe - I'll happily do. Let me know if and how I can send you the money.

@yagooar Great to hear! Appreciate that. No donation needed but a coffee or beer is always appreciated. I added a donate button to the readme. Also if


Suggestion - use Courier New, not Courier for code blocks

Just a nitpick, but I think Courier New is clearer than Courier (examples below are on Mac, but you get similar results for Windows, Android and other platforms). Courier New is widely supported, and we can add a fallback.
Courier:

Courier New:

This is essentially the same as #1860

No — the other bug is a glitch.
What I'm suggesting here is that we make a change and use Courier New
instead of Courier.
On 25 Sep 2015 2:56 am, "Pete LePage"<EMAIL_ADDRESS>wrote:

This is essentially the same as #1860
https://github.com/google/WebFundamentals/issues/1860
—
Reply to this email directly or view it on GitHub
https://github.com/google/WebFundamentals/issues/1861#issuecomment-143100881
.

We should check to see what DevSite uses as well.

I don't see the difference between this bug and #1860
Please see other bug.

We're using Roboto Mono instead as it's the devsite official font.


"No Error" error when writing a shapefile

Expected behavior and actual behavior.
I was expecting fiona to write a shapefile via geopandas. Instead I get this error that says "No Error"
  File "fiona/ogrext.pyx", line 1058, in fiona.ogrext.WritingSession.start
  File "fiona/_err.pyx", line 270, in fiona._err.exc_wrap_pointer
fiona._err.CPLE_AppDefinedError: Failed to create file \\CHGOLDFS\Operations\DEV_Team\GIS\shapefiles\census_join_block_groups\census_join_bg.shp: No error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "//CHGOLDFS/Operations/DEV_Team/Steve/COVID_Response/SafeGraph/device_to_population_convert.py", line 28, in <module>
    df.to_file(Path('//CHGOLDFS/Operations/DEV_Team/GIS/shapefiles/census_join_block_groups/census_join_bg.shp'))
  File "C:\Users\SScott1\.conda\envs\condaenv8_3_7\lib\site-packages\geopandas\geodataframe.py", line 533, in to_file
    to_file(self, filename, driver, schema, index, **kwargs)
  File "C:\Users\SScott1\.conda\envs\condaenv8_3_7\lib\site-packages\geopandas\io\file.py", line 191, in to_file
    filename, "w", driver=driver, crs_wkt=crs_wkt, schema=schema, **kwargs
  File "C:\Users\SScott1\.conda\envs\condaenv8_3_7\lib\site-packages\fiona\env.py", line 398, in wrapper
    return f(*args, **kwargs)
  File "C:\Users\SScott1\.conda\envs\condaenv8_3_7\lib\site-packages\fiona\__init__.py", line 264, in open
    **kwargs)
  File "C:\Users\SScott1\.conda\envs\condaenv8_3_7\lib\site-packages\fiona\collection.py", line 157, in __init__
    self.session.start(self, **kwargs)
  File "fiona/ogrext.pyx", line 1066, in fiona.ogrext.WritingSession.start
fiona.errors.DriverIOError: Failed to create file \\CHGOLDFS\Operations\DEV_Team\GIS\shapefiles\census_join_block_groups\census_join_bg.shp: No error

Steps to reproduce the problem.
I read a shapefile into a geodataframe, merged the geodataframe with some csvs, and am trying to write the shapefile out.
Operating system
Window 10
Fiona and GDAL version and provenance
From Anaconda.
GDAL==3.0.4
Fiona==1.8.13

@SteveScott we don't have any tests of writing to a file specified by a windows UNC. As a work around can you try a filename with a drive letter instead?

Yes when I specify the local drive it works. So I can't save to a network
drive, huh...that is a problem for me. I suppose I could write to a scratch
drive and then use another python command to move the file.
On Thu, May 21, 2020 at 6:44 PM Sean Gillies<EMAIL_ADDRESS>wrote:

@SteveScott https://github.com/SteveScott we don't have any tests of
writing to a file specified by a windows UNC. As a work around can you try
a filename with a drive letter instead?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Toblerity/Fiona/issues/903#issuecomment-632383479,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABHLFSN5QAUNIKP5GZ5W33TRSWVFNANCNFSM4NHECNVA
.

--
From the personal email account of Steve Scott.

Sorry about that, @SteveScott. Few of our developers are Windows users and so tests for that platform are relatively thin. I haven't seen this "No error" error before... I suppose you are otherwise able to write other files to the network drive using Python APIs?

Okay, I am able to write shapefiles to the network drive after all. The
problem was I placed it into a folder that did not exist and Fiona did not
create a new folder for me.
On Sat, May 23, 2020 at 10:54 PM Sean Gillies<EMAIL_ADDRESS>wrote:

Sorry about that, @SteveScott https://github.com/SteveScott. Few of our
developers are Windows users and so tests for that platform are relatively
thin. I haven't seen this "No error" error before... I suppose you are
otherwise able to write other files to the network drive using Python APIs?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Toblerity/Fiona/issues/903#issuecomment-633170201,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABHLFSPLXDGXKB6NIOFESHLRTCD7NANCNFSM4NHECNVA
.

--
From the personal email account of Steve Scott.

@SteveScott thanks for following up. That's right, the GDAL/OGR format drivers won't create directories except where a directory is an aspect of the format. I'm glad you're unblocked!

Same error here. I make sure to create the folder first...

Just for the record. I was running import joblibs  with parallel runs using 10 cores (My machine has 6 physical and 12 logical). When I reduced to 5 cores. No problem at all. Awful these intermittent difficult to repeat errors!


Bump version to support devise 4.1.1

Can you bump the version to add support do last devise version?
The 0.1.37 version doesn't have support yet.
Thanks

Can't update my gems now, it says:
Bundler could not find compatible versions for gem "devise":
  In Gemfile:
    devise (>= 4.1.1, ~> 4.1)

    devise_token_auth (~> 0.1.37) was resolved to 0.1.37, which depends on
      devise (< 4.1, > 3.5.2)

Would love to have this working for devise 4.2!

I just bumped the gem to 0.1.38 on RubyGems. Seemed to work fine with Devise 4.2. Will be prioritizing any Rails 5 bugs.


Does not change the font in the context menu on 1.77.3

Version: 1.77.3 (user setup)
Commit: 704ed70d4fd1c6bd6342c436f1ede30d1cff4710
Date: 2023-04-12T09:16:02.548Z
Electron: 19.1.11
Chromium: 102.0.5005.196
Node.js: 16.14.2
V8: <IP_ADDRESS>-electron.0
OS: Windows_NT x64 10.0.22621
Sandboxed: No

The context menu is the system ui. I don't think the CSS can change that.

No, it's not the system ui. You can change it in the vs\workbench\workbench.desktop.main.js. Just need replace :host-context(.OS) { font-family: "Segoe WPC", "Segoe UI", sans-serif; } in the file.

@blackmann I fixed it here.

Hi @Bohatcom, I wrote an extension yesterday using ChatGPT - https://marketplace.visualstudio.com/items?itemName=everythingsucks.ui-font-changer
It's very janky, but it works.

@Bohatcom Thank you!

Since it did't updated, I looked for another extension, but it could only modify the context menu, and the interface of other extensions, e.g. Git Graph. So I'm using both of them at the same time right now😂. I hope the author will come back to accept this pull request.


Insert git-ref/sha1 at build time into the binary

[x] Modify CMake to call git-describe or similar to read git-ref / short-sha1
[x] Create a header file version.h
[ ] Print out the version at the start of hyperion-webos daemon
[ ] Add -v / --version cmdline switch
[x] Add "version" output to luna-service /status endpoint

Now I am unsure how to add this properly into getopt_long..

Implemented in #72


Exploritory keyboard mode?

@isidorn
Is there a keyboard mode similar to the NVDA explore keyboard mode which will tell me the function / command bound to any key that I press?
In NVDA, press NVDAKey+1 to toggle keyboard explore mode.

@RichCaloggero you can File > Preferences > keyboard shortcuts
There you can type the keybinding combination you would like to do and we should filter to commands that are bound to that keybinding.
Try it out and let me know how it goes. Thanks

OK, but not exactly easy or quick to use.

you need to type the symbolic keyname (control+t)

you then need to press tab a couple times to find the list

you then need to explore the list
I see why you may need to do things this way -- shortcuts are context sensative.

is there a "current context" variable / indicator you can use to filter on

if so, allow typing the actual key and write command name / description to live region
Have no idea if this is possible / feasible.

OK, this is sort of implemented, but very much oddly.

focus shortcut list
focus on a list item (default is nothing selected / focused)
press spacebar or enter

focus lands on "type desired key and press enter"
pressing keys now reports their definition and context
pressing enter redefined, escape gets you out

One oddity is that until you actually press space or enter on a shortcut item, there is no UI control to bind / rebind a key. After you press space / enter on a shortcut, then escape back to the list, pressing tab gets you a button with label "change key binding"

Thanks for the feedback. So let's try to make this concise :)
Can we try to make a list of things we could improve here?
Also here are docs regarding keybindings https://code.visualstudio.com/docs/getstarted/keybindings

We have no actionable plans for this item, thus closing.


Validate keys on a beta deploy + update danger

Not much going on :+1:

  | 1 Error
------------- | ------------
    :no_entry_sign: | No CHANGELOG changes made

  Generated by :no_entry_sign: danger

  | 1 Error
------------- | ------------
    :no_entry_sign: | No CHANGELOG changes made

  Generated by :no_entry_sign: danger

Alright this is :+1:


Cannot pin a chat if it contains no messages

If you haven’t already, check out our contributing guidelines for onboarding!

Platform - version:
Desktop & Web - 1.0.1-461
Action Performed (reproducible steps):
Press the + button to start a new chat with an individual who you have never messaged before.
Before sending any message, pin the chat.
Expected Result:
The chat should be pinned in the chat list on the left.
Actual Result:
The pin reflects in the chat list momentarily, but as soon as you click on another chat, it disappears.
https://github.com/Expensify/Expensify/issues/153409
https://www.upwork.com/jobs/~01dc4c143fd4be1b85

I would like to solve this problem.
Proposal

pass a configuration option such askeepEmptyPinnedReports:boolean to the createOptions method here.
https://github.com/Expensify/Expensify.cash/blob/a897058dc9059763f4ce7b6fcf7b9d647ea6e0b6/src/libs/OptionsListUtils.js#L150-160
Add the same config option following up to the method chain till the getSidebarOptions and setting its value true here.
In CreateOption
https://github.com/Expensify/Expensify.cash/blob/a897058dc9059763f4ce7b6fcf7b9d647ea6e0b6/src/libs/OptionsListUtils.js#L181-L185
Allow the reports if the keepEmptyPinnedReports is true.

##Proposal

I would first update the tests here to cover this bug:
https://github.com/Expensify/Expensify.cash/blob/a897058dc9059763f4ce7b6fcf7b9d647ea6e0b6/tests/unit/OptionsListUtilsTest.js#L307-L323
In line 182 I would add !reportOption.isPinned to the if statement.
https://github.com/Expensify/Expensify.cash/blob/a897058dc9059763f4ce7b6fcf7b9d647ea6e0b6/src/libs/OptionsListUtils.js#L181-L184

I don't think there is a feature that requires to turn this behaviour off so I wouldn't plan on adding a parameter to the getOptions unless you have a justification for it.
I recently worked on this getSidebarOptions() function for a feature so am familiar with writing tests for; and working in this area of the code.
I would also look at adding more test cases to cover off other options to improve maintainability and prevent future bugs.

Both of these proposals have the right idea. I agree with @anthony-hull's assessment

I don't think there is a feature that requires to turn this behaviour off so I wouldn't plan on adding a parameter to the getOptions() and getSidebarOptions() unless you have a justification for it.

Seems like we'd want this to be the default behavior so I think we would not need a keepEmptyPinnedReports option.

Thanks for the proposals, guys. Rajat, I see you're working on a few issues already, so @anthony-hull please proceed. Sending over an offer now.


Problem extracting gene expression data for a whole parcellation

Hello,
When I try to extract the Allen gene expression data using Siibra, when done for a whole parcellation it gives an endless string of warnings and finally returns an empty array. When done with a specific region it doesn't happen.
atlas = siibra.atlases['human']
julich_brain = atlas.get_parcellation("julich")
features = siibra.get_features(julich_brain, siibra.modalities.GeneExpression, gene=siibra.features.gene_names.GABARAPL2)

The warning is (just one example) :
[siibra:INFO] <class 'siibra.features.genes.GeneExpression'> matching against root node Julich-Brain Cytoarchitectonic Maps 2.9 of Julich-Brain Cytoarchitectonic Maps 2.9
[siibra:WARNING] Cannot test overlap of Point in MNI152 2009c nonl asym [-24.0,59.0,-15.0] with Julich-Brain Cytoarchitectonic Maps 2.9

thanks!!!
gus.-

Thanks. I can reproduce the problem. The root cause is that when querying spatial features for a region subtree, siibra will test wether this region is fully mapped in the space where the feature is defined. The test is done recursively, so all subtrees have to be mapped. This leads to many tests when querying a complete parcellation, and ultimately to zero features if any of the regions is not mapped. We will fix the problem.
Meanwhile I suggest to collect gene expressions by iterating over the leave region nodes:
import siibra
atlas = siibra.atlases['human']
julich_brain = atlas.get_parcellation("julich 2.9")
features = {}
gene = siibra.gene_names.GABARAPL2
for region in julich_brain.regiontree.leaves:
    with siibra.QUIET:
        try:
            features[region] = siibra.get_features(region, "geneexp", gene=gene)
        except:
            features[region] = []
    print(f"{len(features[region]):4} {region.name}")


MultiKVCrossAttention and VisionCrossAttentionLayer forwards do not match

Hey,
I was going through the code trying to understand it, but this seems strange to me.
https://github.com/cambrian-mllm/cambrian/blob/94824231dda385e2d1d0aef23f75a3dc97bbf085/cambrian/model/vision_sampler.py#L263 defines the self.cross_attention to be a instance of  MultiKVCrossAttention.
Which is called in the forward of VisionCrossAttentionLayer  at
https://github.com/cambrian-mllm/cambrian/blob/94824231dda385e2d1d0aef23f75a3dc97bbf085/cambrian/model/vision_sampler.py#L312.
This has three positional arguments.
While the definition of  MultiKVCrossAttention's forward method has the following signature:
https://github.com/cambrian-mllm/cambrian/blob/94824231dda385e2d1d0aef23f75a3dc97bbf085/cambrian/model/vision_sampler.py#L177
Best,
Wamiq

Nvm, missed the * in front of the arguments gathering all the stuff into a list.
Kinda confusing.

Nvm, missed the * in front of the arguments gathering all the stuff into a list.
Kinda confusing.


Running HA-Fusion as docker under Unraid consuming Docker allocation

The HA-Fusion is consuming Docker Allocation going up constantly.
I do run HA-Fusion as a docker under Unraid
Within a day it is growing from 37% to 79% and going on.
It looks like a kind of dataleak.
I stopped the container and the docker location immediatly returned to 37%

Are you using cameras by any chance?

Yes I am

Can you remove them and see if it still happens after some time?

I will do

After 4 Hrs the docker allocation is not growing and still 37% as it was in the beginning.
It looks like indeed that's something to do with camera's

I did add 2 camera's to the sidebar again. No increase of docker allocation so far:


Fixed permissions and added a Warning about the webhook

Otherwise everyone can upload emojis via >search without the permission.

Is there a reason why you didn't merge this already?
I can't do it because I don't have write access.


Legacy: naming

pyLCI is Python-based Linux Control Interface. However, this fork is becoming ZeroPhone-specific and moving further from the original pyLCI idea. The question is - what should be the ZeroPhone UI framework name?

Now, I had to create the documentation page, so I had to rename the project. Name had to be short and readable, and unique. ZeroUI is taken, ZeroPhone-UI is descriptive but verbose... ZPUI it is =D


round down for hfc conversion to coinsPerUTxOBytes

Very small PR.
When converting the Alonzo protocol parameter coinsPerUTxOWord to the Babbage coinsPerUTxOBytes at the time of the hard fork, we have decided to round down instead of up, in hopes that this causes less disruption, for example, to folks who have hard-coded values for token bundles, etc.

The mainnet value is 34488, which is divisible by 8 (rendering this change useless). I was confused since another network was using 34482.

Thanks to @kevinhammond it actually looks like the opposite. Mainnet value is 34482 and the Testnet value 34488. I don't understand what was the motivation behind using very slightly different values for utxoCostPerWord, but that is what seems to be the case.
Merging the PR as it does take care of the initial idea.


Lseg - Status "Inactive"

ENVIRONMENT: production
URL: https://scarpers.peviitor.ro
Browser: Microsoft Edge
Device: Laptop
OS: Windows 10
STEPS TO REPRODUCE:

Open the URL in the browser
Search for "Lseg" Company and Run scraper
Check the "Status"

EXPECTED RESULTS:
The status is "Active"
ACTUAL RESULTS:
The Status is "Inactive"

After retesting, the Status is "Active"

The bug reproduce again

After retesting, the Status is "Active"


Is lmpm semantic segmentation model or

instance segmentation model?

Hi,
Thank you for the question.
It depends:

The final output mask of LMPM is binary

If the given sentence refers to a single object, then LMPM outputs this object's mask, in this case, it can be viewed as instance segmentation.
If the given sentence refers to multiple objects, then LMPM outputs the fusion binary mask that covers all the target objects, in this case, it can be viewed as semantic segmentation, but the semantic class is "all the target objects indicated by the given sentence" instead of common semantic classes like "person".

Before the final mask fusion, i.e., before the upright * in Fig 5 in the paper, LMPM differentiates instances, from this perspective, it can be viewed as instance segmentation.

It is worth noting that MeViS dataset provides instance-level mask annotations, but for each sentence, its corresponding Ground Truth mask is a binary mask whose foreground region is the target object(s).


fix(Slider): layout styles break if parent have alignment

This fixes the issue where the bq-slider styles break when the parent container applies a display or text alignment CSS rule.

☁ Nx Cloud Report
We didn't find any information for the current pull request with the commit 1e82561536d18b9c612f251415e18af2c003dc34.
Please verify you are running the latest version of the NxCloud runner.
Check the Nx Cloud Github Integration documentation for more information.
Alternatively, you can contact us at<EMAIL_ADDRESS>
Sent with 💌 from NxCloud.


Replacement APIs for deprected API calls

Hello!
As part of trying to replace deprecated API calls and use OpenSSL 3 API calls instead I have come across a few issues when trying to convert a TPM 2 emulator code base:

While trying to replace EC_KEY_set_group() I ran into an issue with a bnp256 curve (see TCG TPM Algorithms registry here table 4). The problem seems to be that OpenSSL does not support this curve (at least on Fedora) and using the curve is rejected due to this gate here in EC_GROUP_new_from_params():

https://github.com/openssl/openssl/blob/cd870db16348d0d09cb05b7393cf9281509c7795/crypto/ec/ec_lib.c#L1712-L1716
I suppose there is no way to use this curve unless one keeps on using the deprecated EC_KEY_set_group() API call. Is this correct?

Do you happen to know of a better way to assign an existing EC_GROUP to an EVP_PKEY or EVP_PKEY_CTX than going through converting the EC_GROUP to OSSL_PARAM? I have a PR for the TPM 2 emulator here where I am going through the somewhat expensive conversion of the EC_GROUP to OSSL_PARAM in the function OpenSSLBuildEcParams() that I wished I could avoid.

Is there any way to reach the code of the deprecated EC_POINTs_mul() via a higher level API call?

Lastly and probably most important: I suppose that the deprecated API calls won't disappear any time soon. Am I right?

This looks like an OpenSSL bug to me. Looking at the implementation of ec_group_explicit_to_named it is supposed to return the input group in the event that the group is unrecognised (i.e. so that named_group == group). EC_GROUP_new_from_params() is then supposed to do the right thing and go on to return an explicit curve as a set of params.
Just from code inspection my guess is that  ec_group_explicit_to_named is actually finding a NID for the group, but then subsequently failing to create an EC_GROUP object for it (maybe support for the group is not compiled in, but the NID is still recognised??).

Fedora strictly limits the set of curves and implements countermeasures to provide any custom curves. So probably it's not an OpenSSL bug.

named_group = ec_group_explicit_to_named(group, libctx, propq, bnctx);

This should not reject an arbitrary explicit group. For such groups this function returns the group passed into it.
NULL return means there is something wrong with the parameters. You need to investigate further inside the ec_group_explicit_to_named() function what goes wrong there.

NULL return means there is something wrong with the parameters. You need to investigate further inside the ec_group_explicit_to_named() function what goes wrong there.

It indeed seems to be the case that Fedora's OpensSSL 3.0.8 must have been patched in a way that it behaves differently than upstream OpenSSL.
I have the following code here in ec_group_explicit_to_named that ends up returning NID_undef and using the curve unknown to OpenSSL ends up failing --- the else branch is important:
1417        if ((curve_name_nid = ossl_ec_curve_nid_from_params(dup, ctx)) != NID_undef) {
1418            /*
1419             * The input explicit parameters successfully matched one of the
1420             * built-in curves: often for built-in curves we have specialized
1421             * methods with better performance and hardening.
1422             *
1423             * In this case we replace the `EC_GROUP` created through explicit
(gdb)
1424             * parameters with one created from a named group.
1425             */
[...]
1460        } else {
1461            goto err;
1462        }

The OpenSSL repo for 3.0.8 has this:
https://github.com/openssl/openssl/blob/31157bc0b46e04227b8468d3e6915e4d0332777c/crypto/ec/ec_lib.c#L1460-L1462
Well, it's unfortunate...

To the other part of my question. Is there and alternative for the deprecated EC_POINTs_mul() function.
https://github.com/openssl/openssl/blob/73b0126150b298f4c9cdccd1baac154c49cbaf46/crypto/ec/ec_lib.c#L1066-L1070
To me it looks like EC_POINTs_mul() provides a superset of functionality compared to EC_POINT_mul() and from that perspective EC_POINT_mul() should be deprecated because working around deprecated EC_POINTs_mul() seems difficult.
https://github.com/openssl/openssl/blob/73b0126150b298f4c9cdccd1baac154c49cbaf46/crypto/ec/ec_lib.c#L1114-L1115

To the other part of my question. Is there an alternative for the deprecated EC_POINTs_mul() function?
https://github.com/openssl/openssl/blob/73b0126150b298f4c9cdccd1baac154c49cbaf46/crypto/ec/ec_lib.c#L1066-L1070
To me it looks like EC_POINTs_mul() provides a superset of functionality compared to EC_POINT_mul() and from that perspective EC_POINT_mul() should be deprecated because working around deprecated EC_POINTs_mul() seems difficult.
https://github.com/openssl/openssl/blob/73b0126150b298f4c9cdccd1baac154c49cbaf46/crypto/ec/ec_lib.c#L1114-L1115

Well the man page says this about the EC_POINTs_mul() deprecation: "Modern versions should instead use EC_POINT_mul(), combined (if needed) with EC_POINT_add() in such rare circumstances.". For reference the deprecation was implemented by #11807 based on an initial proposal in #8332.

So the man page gives this math here:
EC_POINT_mul calculates the value generator * n + q * m and stores the result in r.

Although deprecated in OpenSSL 3.0 and should no longer be used, EC_POINTs_mul calculates the value generator * n + q[0] * m[0] + ... + q[num-1] * m[num-1].

There are the scaling factors (m[0] ... m[num-1]) for the points it seems that seem to not allow a simple EC_POINT_add() unless the point was scaled before. It just seems a bit dangerous to get this wrong.

Hi,
@stefanberger In your use case, what does your point multiplication look like? If it looks like any of aGor bPor aG + bP, all three of those use cases are covered by EC_POINT_mul.

.. and maybe I missed it above, but if you share the code including the EC_POINTs_mul call, I'm happy to help shoehorning it into the API.

The code can be found here:
https://github.com/stefanberger/libtpms/blob/d08b929dede77bee05bd674d48c7a0548528ca9c/src/tpm2/crypto/openssl/TpmToOsslMath.c#L673-L700
LIB_EXPORT BOOL
BnEccModMult2(
	      bigPoint             R,         // OUT: computed point
	      pointConst           S,         // IN: optional point
	      bigConst             d,         // IN: scalar for [d]S or [d]G
	      pointConst           Q,         // IN: second point
	      bigConst             u,         // IN: second scalar
	      bigCurve             E          // IN: curve
	      )
{
    EC_POINT            *pR = EC_POINT_new(E->G);
    EC_POINT            *pS = EcPointInitialized(S, E);
    BIG_INITIALIZED(bnD, d);
    EC_POINT            *pQ = EcPointInitialized(Q, E);
    BIG_INITIALIZED(bnU, u);

    if(S == NULL || S == (pointConst)&(AccessCurveData(E)->base))
	EC_POINT_mul(E->G, pR, bnD, pQ, bnU, E->CTX);
    else
	{
	    const EC_POINT        *points[2];
	    const BIGNUM          *scalars[2];
	    points[0] = pS;
	    points[1] = pQ;
	    scalars[0] = bnD;
	    scalars[1] = bnU;
	    EC_POINTs_mul(E->G, pR, NULL, 2, points, scalars, E->CTX);
	}
[...]

Thanks for sharing. How do you actually reach this code through a cryptographic primitive?
I'm curious, because in about 15 years, this is the first time I've seen code calling EC_POINTs_mul where num != 1.

@bbbrumley I am not the author of the TPM 2 code... What I have is a pretty extensive test suite for the TPM 2 that also doesn't provide coverage for this particular code: https://coveralls.io/builds/57233185/source?filename=src%2Ftpm2%2Fcrypto%2Fopenssl%2FTpmToOsslMath.c#L693  So I am afraid I cannot easily answer this question, either.

Alright. Without a cryptographic use case, it's hard for me to say what a good way forward is.
But here's a guess, since this looks more like elliptic curve math functionality than crypto:

One EC_POINT_mul call for pS
One EC_POINT_mul call for pQ
One EC_POINT_add call to combine the two above outputs and get the result

You're right, it's not as smooth as the deprecated API. OTOH I am not aware of any libcrypto code that requires that level of generality.
Hope it helps,
BBB

The only caller that would invoke this function is from an SM2 related function here: https://github.com/stefanberger/libtpms/blob/master/src/tpm2/crypto/openssl/CryptEccKeyExchange.c#L360

Good find, thanks.
It seems one of the scalars is One == 1 there? So again just guessing, but it doesn't look like a "real" multi scalar multiplication. The programmer is just abusing the API like that.
(So in reality, to me, it looks like one point multiplication, and one point addition.)

But here's a guess, since this looks more like elliptic curve math functionality than crypto:
1. One `EC_POINT_mul` call for `pS`

2. One `EC_POINT_mul` call for `pQ`

3. One `EC_POINT_add` call to combine the two above outputs and get the result

	{
	    const EC_POINT        *points[2];
	    const BIGNUM          *scalars[2];
	    points[0] = pS;
	    points[1] = pQ;
	    scalars[0] = bnD;
	    scalars[1] = bnU;
	    EC_POINTs_mul(E->G, pR, NULL, 2, points, scalars, E->CTX);
	}

Since the generator is NULL this should translate to this here I suppose:
EC_POINT_mul(E->G, R1, NULL, pS, bnD, E->CTX);
EC_POINT_mul(E->G, R2, NULL, pQ, bnU, E->CTX);
EC_POINT_add(E->G, R, R1, R2, E->CTX);

looks right, yup!

Closing since this is marked as resolved.


DNS not resolving for anything

Issue Description:
I think that this issue is different than the others as the other posts seem to be related to not resolving certain domains, but mine won't resolve any to the local server - it just returns the real servers IP ... even cs.steampowered.com
My DNS settings are set (and checked) to only use <IP_ADDRESS> (the steamcache-dns)
I have run ipconfig /flushdns
I have tried with and without setting UPSTREAM_DNS
Any ideas? Thanks
Docker Container Output:
Setting up steam -> <IP_ADDRESS>
...
10-Nov-2018 11:04:36.624 zone cs.steampowered.com/IN: loaded serial<PHONE_NUMBER>

What do you get as the output from the following in windows cmd.exe
nslookup valve477.steamcontent.com <IP_ADDRESS>

The problem is that your server list is not complete...
It doesn't list Australian servers,
If I change my servers to the UK it works...
Not good for LANs though, since people have to manually set it to use UK or US over here.

Do you have a list of domains that are not listed for your region? If you do you can create a PR over at https://github.com/uklans/cache-domains and they will automatically get pulled by the DNS image at startup.
If we don't have a list of domains to add, we are unable to add them in.

Closing as inactive, plus due to new built in steam support - see https://github.com/lancachenet/monolithic/issues/85 - Steam should now redirect correctly to cache regardless of location.


Add support for new send a file features

Adds client support for the new 'confirm email before download' and 'custom retention period' features when sending a file by email.
Bumps the client to v5.2.0

What problem does the pull request solve?

Checklist

[x] I’ve used the pull request template
[x] I’ve written unit tests for these changes
[x] I’ve updated the documentation in

DOCUMENTATION.md
CHANGELOG.md

[x] I’ve bumped the version number in

package.json

[x] I've added new environment variables in

CONTRIBUTING.md
notifications-node-client/scripts/generate_docker_env.sh

Pulled in content from https://github.com/alphagov/notifications-node-client/pull/155


App not installing and keep redirecting.

For bug reporting only! If you're posting a feature request or discussion, please ignore.
Expected Behavior
The ngrok should install the app  and directed towars the installation folder
Current Behavior
Its keep redirecting to the public,auth ok,and itp ok url.

Failure Information
Please help provide information about the failure if this is a bug.
Steps to Reproduce
Please provide detailed steps for reproducing the issue.

First create project and set it up with osiset pakcage as you do always for creating new apps.
Now go the partners account and try to install that app on the store.
It wont install the app and keep redirecting on ngork towards the page but not open that

Context
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.

Package Version: v16.0.0
Laravel Version: v8.49.2
PHP Version: v7.3
Using a toolset (Docker, Laradock, Vagrant, etc.):

Failure Logs
Please include any relevant log snippets or files here.

v16 is cookie-based, it will not be accepted as an app by Shopify.
Ngrok is known to cause multiple issues with people as well.
I currently don't have the personal time to continue support for v16, given it does not support JWT in v16 as well, neither will Shopify :/


Fix false positives wrt RwLock deadlock detection

The current implementation doesn't keep track of which thread owns what, so any kind of lock contention will end up being reported as a deadlock.
This PR:

clones the original Mutex test suite and applies it to RWLocks to demonstrate the faulty behaviour
fixes the faulty behaviour by keeping track of thread IDs
adds an extra failing test suite for edge cases specific to RWLocks
augments the implementation to fully support RWLocks
improves the assert! output

(Commits follow that order, so might be easier to review commit by commit)

Example output
Trying to grab write-lock at:
             at src/mutex.rs:315:9
   1: epaint::mutex::rw_lock_impl::RwLock<T>::write
             at src/mutex.rs:298:39
   2: epaint::mutex::tests_rwlock::rwlock_read_foreign_read_write_reentrancy
             at src/mutex.rs:580:21
   3: epaint::mutex::tests_rwlock::rwlock_read_foreign_read_write_reentrancy::{{closure}}
             at src/mutex.rs:562:5
   4: core::ops::function::FnOnce::call_once
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/ops/function.rs:227:5
   5: core::ops::function::FnOnce::call_once
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/ops/function.rs:227:5
      test::__rust_begin_short_backtrace
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/test/src/lib.rs:574:5
   6: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/alloc/src/boxed.rs:1861:9
      <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/panic/unwind_safe.rs:271:9
      std::panicking::try::do_call
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:492:40
      std::panicking::try
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:456:19
      std::panic::catch_unwind
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panic.rs:137:14
      test::run_test_in_process
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/test/src/lib.rs:597:18
      test::run_test::run_test_inner::{{closure}}
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/test/src/lib.rs:491:39
   7: test::run_test::run_test_inner::{{closure}}
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/test/src/lib.rs:518:37

which is already held by current thread at:
             at src/mutex.rs:315:9
   1: epaint::mutex::rw_lock_impl::RwLock<T>::read::{{closure}}
             at src/mutex.rs:276:36
   2: std::collections::hash::map::Entry<K,V>::or_insert_with
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/collections/hash/map.rs:2386:43
   3: epaint::mutex::rw_lock_impl::RwLock<T>::read
             at src/mutex.rs:273:13
   4: epaint::mutex::tests_rwlock::rwlock_read_foreign_read_write_reentrancy
             at src/mutex.rs:568:21
   5: epaint::mutex::tests_rwlock::rwlock_read_foreign_read_write_reentrancy::{{closure}}
             at src/mutex.rs:562:5
   6: core::ops::function::FnOnce::call_once
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/ops/function.rs:227:5
   7: core::ops::function::FnOnce::call_once
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/ops/function.rs:227:5
      test::__rust_begin_short_backtrace
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/test/src/lib.rs:574:5
   8: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/alloc/src/boxed.rs:1861:9
      <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/panic/unwind_safe.rs:271:9
      std::panicking::try::do_call
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:492:40
      std::panicking::try
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:456:19
      std::panic::catch_unwind
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panic.rs:137:14
      test::run_test_in_process
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/test/src/lib.rs:597:18
      test::run_test::run_test_inner::{{closure}}
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/test/src/lib.rs:491:39
   9: test::run_test::run_test_inner::{{closure}}
             at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/test/src/lib.rs:518:37

Updated to properly handle all R/W edge cases (hopefully)

hot tip: you can run cargo clippy --all-features (or bacon) locally instead of waiting for CI :)


hwmv2: cmake: Use only one defconfig

Commit 84a7f75a4e86a10470ef9d273be72e5a3e4931ef enabled sourcing several defconfig files for a single board, ordered from least to most specific to the selected board variant. The assumption was: given two targets of the form <board>/<soc> and <board>/<soc>/<variant>, the latter would naturally inherit configuration from the former.
However, having multiple defconfigs doesn't make sense, and in practice, they tend to clash with each other, which complicates porting.
Another motivation for doing that was to make <board>_<soc>_defconfig optional, so that <board>_defconfig could be used instead, if present. This can still be achieved by constraining the _defconfig lookup to only use the most specific file available, just like .dts lookup.
Relevant changes to zephyr_file() have been reverted.
This means that <board>_<revision>.conf overlays, which were meant to be deprecated, are no longer replaced by revision-specific defconfigs, so they need to be un-deprecated. None of the currently ported (merged) boards are affected by this change.

to me it seems the content of the _defconfigs from #68792 (comment) should instead be properly adjusted:

qemu_cortex_a53/qemu_cortex_a53/smp produces Kconfig warnings, because qemu_cortex_a53_defconfig conflicts with qemu_cortex_a53_qemu_cortex_a53_smp_defconfig.

I see the problem.
warning: QEMU_ICOUNT_SHIFT (defined at boards/Kconfig:62) was assigned the value '4' but got the
value ''. Check these unsatisfied dependencies: QEMU_ICOUNT (=n).

we are disabling a dependency setting, so that QEMU_ICOUNT_SHIFT is no longer valid to set.
Will do some thinking.

actually, this is not a new issue.
Same issue exists with board Kconfig fragment, for example on zephyr/main, try creating:
# samples/hello_world/boards/qemu_cortex_a53.conf
CONFIG_QEMU_ICOUNT=n
CONFIG_QEMU_ICOUNT_SLEEP=n

and build hello_world as:
$ cmake -DBOARD=qemu_cortex_a53 -Bbuild samples/hello_world/
...
Parsing <path>/zephyr/Kconfig
Loaded configuration '<path>/zephyr/boards/arm64/qemu_cortex_a53/qemu_cortex_a53_defconfig'
Merged configuration '<path>/zephyr/samples/hello_world/prj.conf'
Merged configuration '<path>/zephyr/samples/hello_world/boards/qemu_cortex_a53.conf'
Configuration saved to '<path>/zephyr/build/zephyr/.config'
...
warning: QEMU_ICOUNT_SHIFT (defined at boards/Kconfig:67) was assigned the value '4' but got the
value ''. Check these unsatisfied dependencies: QEMU_ICOUNT (=n). See
http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_QEMU_ICOUNT_SHIFT and/or look up
QEMU_ICOUNT_SHIFT in the menuconfig/guiconfig interface. The Application Development Primer, Setting
Configuration Values, and Kconfig - Tips and Best Practices sections of the manual might be helpful
too.

so it's a more fundamental problem, and i'm not sure the right way to solve this is by increasing the complexity of board conf files.

So please explain why substituting a _defconfig with .conf file in above will make kconfig less conflicting ?

Outside of revisions, I didn't suggest anything about _defconfig vs. .conf. Obviously that wouldn't make a difference.
The real issue is "false inheritance". qemu_cortex_a53 must have its own defconfig, and qemu_cortex_a53//smp has a different defconfig, but the two aren't composable, as you've noticed in your second comment.
A similar problem occurs for mps3 and mps3//ns.
Therefore, it's wrong to assume that a board variant can always inherit configuration from its base.

when building for socA/foo, then plank_defconfig + plank_socA.conf, are used together.
(...)
If someone then adds plank_socA_foo_defconfig, then suddenly plank_socA.conf is no longer used.

I don't know what branch you're on, because none of that is applicable to collab-hwm today.

Therefore, it's wrong to assume that a board variant can always inherit configuration from its base.

just as wrong as to assume a boards/<board>.conf in a sample can always adjust a configuration for a board.
That is the root of the problem, and what we should be looking into.

I don't know what branch you're on, because none of that is applicable to collab-hwm today.

correct, but that would have to be the outcome if we want to support same behavior as for .dts + .overlay and ensure that it's possible to only make adjustments.
Just like a board revision conf would not support "removal" of QEMU_ICOUNT_SHIFT in the case above.

just as wrong as to assume a boards/<board>.conf in a sample can always adjust a configuration for a board.
That is the root of the problem, and what we should be looking into.

Firstly, that's not a problem specific to HWMv2; you can always create sample overlays that clash with board defconfigs. Secondly, no matter what the sample configuration is, the board configuration should be consistent within itself.
From another perspective, the root issue is: you can't unset an int in Kconfig. But that's not an issue I'm interested in solving.

Therefore, it's wrong to assume that a board variant can always inherit configuration from its base.

just as wrong as to assume a boards/<board>.conf in a sample can always adjust a configuration for a board. That is the root of the problem, and what we should be looking into.

seems to be an unintended side-effect of: https://github.com/zephyrproject-rtos/zephyr/pull/20742
One thing is to ensure we don't assign values to disabled fields in .conf files, another is to still allow users / samples to disable otherwise enabled settings.
The warning even occurs if someone tries to set CONFIG_QEMU_ICOUNT=n in prj.conf.

you can always create sample overlays that clash with board defconfigs.

or you can put it another way, a board defconfig should not prevent a sample from disabling a feature if that feature is not crucial to the board.
If looking at this specific case, the boards/qemu/qemu_cortex_a53/Kconfig.defconfig could instead be used to set a different default int value, like:
config QEMU_ICOUNT_SHIFT
        default 4
        depends on QEMU_ICOUNT

No reason to do this in _defconfig if it break inheritance or samples ability to adjust a value.
In fact, this pattern is exactly what is used by other Kconfig.defconfigs, such as: qemu_cortex_a9 and qemu_x86.

config QEMU_ICOUNT_SHIFT
        default 4
        depends on QEMU_ICOUNT

That works, although it would be nice if the migration script could make these kind of adjustments as well.
Applied in https://github.com/zephyrproject-rtos/zephyr/pull/68805 for now.


How to disable slack reporter from writing output to stdout

I am using configuration file and I am using spec and slack reporter. I want spec reporter to write to stdout and only one reporter in test Cafe can write output to stdout
What file extension shall I use if I want to save slack reporter output in some file ? I tried .txt and .json but empty file is getting created.
     {
        "name": "slack",
        "output": "./reports/slack-message.txt"
    },
    {
        "name": "spec"
    }

This version of plugin didn't allow you to remove reporter logs from stdout, unfortunately. This was one of my pain points, and I saw this repo is 2 years old with any updates, so I created my fork with few more features also, you can check this updated and maintained version of this reporter: https://github.com/marcinlesek/testcafe-reporter-slack
Quiet mode is what you're looking for 😄

Hi @marcinlesek ,
The quiet mode is good option but I want my spec reporter that comes by default with Test Cafe to write output to stdout instead of Slack reporter. If we have both spec and slack reporter as shown below in config file
 ```

{
"name": "slack",
},
{
"name": "spec"
}
Then when you will run the tests , you will get an error :
`ERROR Multiple reporters attempting to write to stdout: "slack, spec". Only one reporter can write to stdout.`

How this can be handles that spec reporter writes output to stdout and slack writes output to some file.

In this package you couldn't change Slack reporter output from console to file, because it's not using prepared by TestCafe API method to log but console.log(...) instead, unfortunately.
If you want spec reporter have in stdout and slack reporter into file, .testcaferc.json should looks like this:
"reporter": [
    {
      "name": "spec"
    },
    {
      "name": "slack",
      "output": "reports/slack.log",
    }
  ],

but it will still not work. If I'll get a while, I'll upgrade on my fork that logs will use predefined TestCafe API, so it could be forwarded to file.

@marcinlesek : I can see that your fork is having lot many changes as compared to original Repo which seems is not supported anymore.
I feel it would be good if you can publish it as a npm package.


number of model

Hi,
Thanks for sharing your great job;
Can we increase the number of generated models to more than 5? If yes, is there any chance to get a better model?
Thanks
Nasser

Hi there,
any opinions about aforementioned question would be really appreciated;
Thanks
Nasser

Hi Nasser,
The models that we provide are the best performing models that we could create. We have also provided models for predicting multimer structures - full details are in the readme here.
Let me know if that doesn't completely answer your question.
Regards,
Andrew

My reading of the original question is that Nasser is asking if more that 5 structural models can be output. It seems that the answer above refers to the number of ML models.
By the way, I am also curious if more than 5 structural models can be output for proteins that have significant flexibility.

To increase the number of structural models you could try running the same ML model with multiple random seeds, varying inference-only hyper-parameters such as the number of recycling, or hacking the input data (by adding or removing some of the MSA sequences or templates). This might bring more diversity in some cases, however we have not validated effects of this procedure in general.


fix: mediaVecCollect's organic vars weren't being multiplied by coef values + InputCollect print when no prophet country set

lgtm


Timeline events don't handle missing data well

Looks like missing rows are not being handled, causing artifically long timeline events for the timeline visual.

I think this is an enhacment request, not a bug, because it's not clear how missing events should be handled. At least with this current display its obvious there's something wrong, as opposed to may removing any phase on events that don't have a matching phase off.


How can I enable datadog trace and leave all http headers with span tag?

Welcome!

[X] Yes, I've searched similar issues on GitHub and didn't find any.
[X] Yes, I've searched similar issues on the Traefik community forum and didn't find any.

What did you do?
Only certain HTTP headers are specified as span tags when DATADOG TRACE is enabled
What did you see instead?
i got things like HTTP status codes and request headers.
What version of Traefik are you using?
v2.10.7
What is your environment & configuration?
tracing:
datadog:
debug: true
If applicable, please paste the log output in DEBUG level
No response

@nmengin
Can you explain?
It seems that traefik only collects certain http headers.


[wip] event-protocol: Add events & schemas for test runs

Summary
Add events to describe and monitor test runs.
Details
This PR adds a set of new events that describe the execution of a test run:

test-run-started
test-case-prepared
test-case-started
test-step-started
test-step-finished
test-case-finished

These were consumer-driven from the prototype GUI in #171.
Motivation and Context
These events allow us to build cross-platform formatters and other tools that process test results. The existing JSON format is messy, hard to write and hard to read. These events will replace them.
How Has This Been Tested?
The schemas are tested using make which runs each of the example events through the validator.
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue).
[x] New feature (non-breaking change which adds functionality).
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected).

Checklist:

[x] I've added tests for my code.
[x] My change requires a change to the documentation.
[x] I have updated the documentation accordingly.
[ ] Change actionLocation to actionRef as suggested by @brasmusson
[ ] Deal properly with the location of steps from scenario outlines - include examples of all three types of steps:

[ ] steps from a regular gherkin scenario
[ ] steps from a scenario outline
[ ] steps from code (i.e. a hook)

[ ] find a better name for test-run-starting so that it could work for gherkin-lint too
[ ] resolve the difference between cucumber-ruby and gherkin about how exactly to model / name a location.

Thanks for the feedback @aslakhellesoy.
You raise an interesting and valid point about ubiquitous language. In cucumber-ruby, we've been using the term "location" to refer to this combination of file-URI-and-line-number (the thing we used to call file_colon_line) for quite some time so I've become really used to it. I had spotted the discrepancy in language between cucumber-ruby and gherkin before, but this is the first time it's become clear as something we need to resolve.
I'd be happy to use a new name for it, but I do still think this concept - the combination of the coordinate position of the element within a file, and the location of the file itself - deserves a name of its own. It's very useful within a full set of test cases / features as the unique locator key for a given element or thing you want to be able to find. That's why we've always used file:line so much in the past.
The other puzzle I have around this is that we need to not only be able to use this to name the file:line of an element within a Gherkin document, but also a glue code method within a step definition file (what I've called actionLocation in this PR).
I guess we could just call those two attributes action and source and avoid naming the concept, but given that both of them will share the same structure, it makes sense to me to give it a name.
My instinct would to use the name location for the thing that includes the uri, and use the word position for the thing that's the line and maybe the column within the file. However I have a heavy bias from my current use of the word location, and I'm totally open to finding alternative names that work.

Test Steps can be created from:

Gherkin steps from Scenarios - then they have exactly one sourceLocation
Gherkin steps from Scenario Outlines - then they have two sourceLocation:s (which is explicitly represented in Pickle Steps, in Cucumber-Ruby this is mostly hidden, but it does surface clearly in exception backtraces)
Hooks - then they have no sourceLocation

In case of Test Steps from Scenario Outlines, it would make sense to only represent the uri once, but defined two line:s.
In Ruby and other interpreted languages file:line does make sense when it comes to reference the action. In compiled languages you may not know the the source code file, or the line in it, where the action (step definition) is coded. For instance Cucumber-JVM use the class name and the method signature as the "location" of the action. A string attribute actionReference would be a more generally applicable definition, in case of interpreted languages that string could contain file:line, for other languages is could contain something different.

@brasmusson I love the clarity you bring to these things!
You're right that a pickle from a scenario outline examples table row needs two source location pointers for us to be able to correctly identify the source. As a unique ID, however, we only need the Gherkin document's URI and the line of the row in the examples table, right?
So perhaps we need to stop conflating the "location" concept with the "identifier" concept - it's the latter I'm looking for here. The idea is that these test result messages just contain identifiers/pointers into the pickle / ast data that's already been sent. Once I have the identifier, I can use it to look up the pickle, which will tell me all the details of the source locations.
I hear you about actionReference - that sounds sensible. Could you give me a concrete example of what that would look like for a Java step definition?

In case of a Test Case, only the line of the Example Table row would be sufficient, but it inconsistent with the Pickle which have both the line of the Example Table row and the line of the Scenario Outline row:
    "locations": [
      {
        "column": 3,
        "line": 8
      },
      {
        "column": 1,
        "line": 3
      }

In case of a Test Step both the line of the Example Table row and the line of the Outline Step are needed, the latter is essential to determine the Keyword of the step (which is not represented in the Pickle, and therefore cannot be known to the Test Step either).

Could you give me a concrete example of what that would look like for a Java step definition?

This is a copy of the pretty formatter printout for a scenario of the java-calculator example in Cucumber-JVM:
  Scenario: Give correct change    # cucumber/examples/java/calculator/shopping.feature:3
    Given the following groceries: # ShoppingStepdefs.the_following_groceries(ShoppingStepdefs$Grocery>)
    When I pay 25                  # ShoppingStepdefs.i_pay(int)
    Then my change should be 4     # ShoppingStepdefs.my_change_should_be_(int)

Maybe those two could be grouped in an environment event?

Yeah, I wonder if we should just rename that event to be a bit more broadly applicable than just a test-run. Thinking of the environment suggestion, some other things I'd like to collect in it, potentially, are:

the command that was run (so we might be able to re-run it)
the platform / runtime / VM info (node, ruby, JVM version etc.)
environment variables
the current user
machine IP address

Essentially, this stream of events has been caused by us kicking off some kind of task / command / operation. What would be a better name for that? job-started?

I've now merged in the "exemplar" Ruby formatter into this branch from #173. It's helpful as I can use it to generate more examples.
I've updated the checklist with what I've identified as the remaining puzzles in this PR. I'm currently working on having better output around the location of scenario outline steps, as suggested by @brasmusson.
Work in progress.

Concerning location and uri, is there any reason why we are not following the RFC for URI scheme like file:///home/user/project/features/my.feature that would be fully compatible for files and web resources. Though, that would change to absolute resource locations, but it may make sense in general. And if we decide to go one step further, for example even when running gherkin CLI such resource uris would allow to run features from various sources like:

web: http://example.com/features/my.feature
file: file:///home/user/project/features/my.feature or relative features/my.feature

In order to produce events.

@l3pp4rd what you suggest makes sense. I feel as if relative paths would be better than absolute ones, since we really don't care about (and it almost feels a bit intrusive to broadcast) the users's containing folder structure. Are you allowed to use relative paths in formal RFC-compliant URLs?

@mattwynne with relative paths I only meant that gherkin CLI tools can treat it as usual files as before, but
construct events with absolute file URI instead, that was it about it.

I'm going to propose that we merge this as-is, and deal with any subsequent changes as separate PRs. It seems we probably need to start using it in earnest before we can iterate on it much more.
This will mean @charlierudolph build his JS implementation off of master, rather than off of this PR. We can still treat the overall protocol as draft even if we've merged this PR.
Any objections? Any last concrete suggestions for changes before this gets merged?

I think that the test-step-started and test-step-finished should have its own source locations - the same as the pickle steps has (when the test step comes from a pickle step), and not only be defined relative to the the test case. In general I expect test-case event and test-steps event to be like the pickles and pickle steps - plus some additional information.

Ok @brasmusson so we'd repeat the sourceLocation and actionRef (currently actionLocation but to be renamed) in each of the step events so you didn't have to listen for test-case-prepared unless you wanted to?
I'm fine with doing that 👍  as long as we also keep the pointer to it's position within the test case overall.

@aslakhellesoy @mattwynne @brasmusson
On cucumber-js, it was easy enough to get by without having sourceLocation, actionRef in the test-step events. I like the minimalism in the proposed events of this PR. The built in formatters use an "event data collector" which listens for stores almost all the event data in a way it can be queried easily enough.
Couple events I added so far as I am implementing the event protocol

test-step-attachment which has {testCase, index, data, media} used when attaching data to steps. I think the current attachment event should be renamed to source-attachment.
test-run-finished which has the structure {result: {success: true/false}} used to signal the finish of the run.

When defining events there is no doubt a lot of both philosophy and assumptions embedded in those definitions.
On the philosophy side there is the decision of to what extent, or which, events should be self contained. Some event should obviously (?) be self contained, like the Pickle event (which contains everything from the feature file needed to execute the Pickle), for many others its a matter of philosophy. One extreme is to avoid as much duplication between different events - which means that listeners need to collect basically all events of every event type to do something at all. The other extreme would be to make the events more or less self contained, so listeners need to listen to only a few of the event types to get the information they need.
In Cucumber-Ruby 2.0 the new formatter API (API calls later turned into event receptions) of before_test_case/after_test_case, before_test_step/after_test_step API methods, both the before and after methods received the TestCase/TestStep object, so everything that the before method could find out about the TestCase/TestStep, the after method could also find out. This has probably influenced by thinking to be more on the self contained side with respect of defining events.
An example of a design assumption going into the definition of an event, is the inclusion of the number of test cases to be executed in test_run_started event, which could be useful for some listeners to know, but which assumes that all feature files are parsed and compiled before any test case is executed. This in turn blocks a design that can perform the execution of test cases from one feature file in parallel with parsing other feature files.

@mattwynne what needs to be done to get this merged? I think is a great start and we can make improvements on this as we use it and build on top of it.

@charlierudolph I'd say we could merge this as-is and then iterate from there.
Next steps I think would be:

run checks for compliance with this protocol as part of the CI build for cucumber-js and cucumber-ruby's respective event plugins
resolve any inconsistencies we see in doing that

This has gone stale since we decided to go for protocol buffers. Protocol buffers have a built-in schema, so this is kind of solved anyway.


Update wrapper to rc5

@bot-gradle test and merge

I've triggered a build for you.

Pre-tested commit build failed.

@bot-gradle test and merge

I've triggered a build for you.


Harpoon quick menu launches with too wide of contents

This is how the require('harpoon.ui').toggle_quick_menu() menu shows up for me.

My installation is barebones, with just some keymaps. You can customize the menu dimensions, but it breaks as I move window sizes around. Would you happen to have any ideas on where I can look to fix this?

If you are using focus.nvim, I used to have this problem: https://github.com/beauwilliams/focus.nvim/issues/64
Not sure what I did to fix it, but it's not a problem for me any more.  Try disabling plugins until you find what is causing this.

Thanks so much, @catgoose! focus.nvim is the conflicting plugin.

For anyone who might see this in the future. Here is how I fixed it for me:
vim.keymap.set('n', '<C-e>', function()
  require('focus').focus_disable()
  require('harpoon.ui').toggle_quick_menu()
  require('focus').focus_enable()
end, opts('toggle UI'))

very clever @wassimk


Infinite character scanning

Current Behavior
When scanning characters, after reaching the last character in the list, the scanner will loop back around to the first one and start scanning everything again. I let it run for a while but decided to stop it once it reached 319 characters scanned.
Reproduced on fast (so far)
Expected Behavior
The scanner stops scanning
Reproducing a Behavior
Start a scan with the character scan option selected (in my case, had all "scan items" checked)
Video proof

Device OS
Windows 11
Genshin Impact Version
3.4
Inventory Kamera Version
1.3.7
Screen resolution, screen mode, and UI scale
2560x1440 (fullscreen) and 1920x1080 (windowed)
Additional notes and remarks
"Scanner loops infinitely on characters #422" by GH-Ben
Evidence
GoogleDrive - bug report + genshinData_GOOD.json
YouTube - Video proof
Preflight Checklist

[X] I have checked for similar issues in the issue page, and I have not found any similar to mine.
[X] I am using the latest version of the scanner.
[ ] I tried setting the scanning delay to maximum, and it still doesn't work.
[X] I have attached the video recording to the bug report.
[X] I have attached the error log to the bug report.
[ ] I am available to later explains the issue.
[X] I have disabled all screen filtering software or plugins (i.e. HDR, Image Sharpening) while scanning.
[X] I use default in-game keybindings or have configured keybindings for the scanner.

Newer versions of Inventory Kamera have released since this issue was created. Please reopen this issue if the problem still exists with newer versions.

i still get this issue with the latest version


Allow omitting the return type from sql_function!

I've been debugging the build failures, and realized that I wanted this
functionality. Seems like an oversight not to have it. Forcing -> ()
is a pain.

Review? @mfpiccolo @mcasper

:+1:


[Docs] Table of contents not showing

At https://blissfuljs.com/docs, the table of contents is supposed to show under "Contents", but it doesn't. No exception has occurred.

This project might be abandoned, which is a shame.

Not quite to that level, but certainly deprioritized. There is a near-complete rewrite to ESM in the v2 branch, but none of us had time to actually work on updating the website for v2. If any of you wants to help out, I'd be more than willing to provide guidance!