text:
Some Known Bugs or Proposals

global_vars.xact_manager

      TO_BE_CONTINUED = 0  # follow by previous page
      CHECKPOINT = 1
 -    COMMIT = 2
 -    ABORT = 3
 -    HEAP_INSERT = 4
 -    HEAP_DELETE = 5
 -    HEAP_INPLACE_UPDATE = 6
 +    BEGIN = 2
 +    COMMIT = 3
 +    ABORT = 4
 +    HEAP_INSERT = 5
 +    HEAP_DELETE = 6
 +    HEAP_INPLACE_UPDATE = 7
 +    BTREE_INSERT = 8
 +    BTREE_DELETE = 9
 +    BTREE_UPDATE = 10

 +INVALID_XID = 0
 +BOOTSTRAP_XID = 1
 +FROZEN_XID = 2
 +FIRST_NORMAL_XID = 3
 +MAX_XID = 0xffffffffffffffff  # 8 bytes

fix by the following patch:
diff --git a/andb/catalog/__init__.py b/andb/catalog/__init__.py
index e69de29..b27e8f7 100644
--- a/andb/catalog/__init__.py
+++ b/andb/catalog/__init__.py
@@ -0,0 +1,17 @@
+from .syscache import get_all_catalogs
+from .syscache import (
+    CATALOG_ANDB_TYPE,
+    CATALOG_ANDB_ATTRIBUTE,
+    CATALOG_ANDB_CLASS,
+    CATALOG_ANDB_DATABASE,
+    CATALOG_ANDB_TYPE,
+    CATALOG_ANDB_INDEX,
+)
+
+__all__ = ['get_all_catalogs',
+           'CATALOG_ANDB_TYPE',
+           'CATALOG_ANDB_ATTRIBUTE',
+           'CATALOG_ANDB_CLASS',
+           'CATALOG_ANDB_DATABASE',
+           'CATALOG_ANDB_TYPE',
+           'CATALOG_ANDB_INDEX', ]
diff --git a/andb/catalog/syscache.py b/andb/catalog/syscache.py
index 46d0e37..9c6ab5a 100644
--- a/andb/catalog/syscache.py
+++ b/andb/catalog/syscache.py
@@ -16,3 +16,6 @@ _ALL_CATALOGS = (CATALOG_ANDB_ATTRIBUTE, CATALOG_ANDB_CLASS,

 def get_all_catalogs():
     return _ALL_CATALOGS
+
+
+__all__ = _ALL_CATALOGS
diff --git a/andb/catalog/type.py b/andb/catalog/type.py
index 76d2189..c77015b 100644
--- a/andb/catalog/type.py
+++ b/andb/catalog/type.py
@@ -3,7 +3,7 @@ from functools import partial
 from andb.common import hash_functions
 from andb.common import cstructure
 from ._base import CatalogForm, CatalogTable
-from .oid import INVALID_OID
+from .oid import INVALID_OID, OID_TYPE_START, OID_TYPE_END
 from andb.common.utils import memoize
 from andb.constants.strings import BIG_END

@@ -289,6 +289,7 @@ class AndbTypeTable(CatalogTable):

     @memoize
     def get_type_name(self, oid):
+        assert isinstance(oid, int) and OID_TYPE_START <= oid <= OID_TYPE_END, "invalid oid"
         for r in self.rows:
             if r.oid == oid:
                 return r.type_name
diff --git a/andb/cmd/setup.py b/andb/cmd/setup.py
index a855990..8fd841c 100644
--- a/andb/cmd/setup.py
+++ b/andb/cmd/setup.py
@@ -26,7 +26,6 @@ def setup_data_dir(path):
     for catalog_table in get_all_catalogs():
         catalog_table.init()
         catalog_table.save()
-        os.sync()

     # create a default database -- andb
     os.mkdir(os.path.join(BASE_DIR, str(OID_DATABASE_ANDB)))
diff --git a/andb/executor/operator/physical/utility.py b/andb/executor/operator/physical/utility.py
index d8f256d..a5cb236 100644
--- a/andb/executor/operator/physical/utility.py
+++ b/andb/executor/operator/physical/utility.py
@@ -84,17 +84,16 @@ class ExplainOperator(PhysicalOperator):
     def explain(operator, indent=''):
         output_lines = []
         name = operator.name
-        output_lines.append(f"{indent}├─ {name}")
+        output_lines.append(f"{indent} -> {name}")

+        # add operator parameters
+        params = []
         for name, value in operator.get_args():
-            output_lines.append(f"{indent}└  {name}: {value}")
+            params.append(f"{name}: {value}")
+        output_lines.append(f"{indent}    {', '.join(params)}")

-        children_count = len(operator.children)
         for i, child in enumerate(operator.children):
-            is_last_child = (i == children_count - 1)
-            branch_char = ' ' if is_last_child else ' '
-            branch_indent = '    ' if is_last_child else '    '
-            child_indent = f"{indent}{branch_char} {branch_indent}"
+            child_indent = f'{indent}  '
             output_lines.extend(ExplainOperator.explain(child, child_indent))

         return output_lines
@@ -108,8 +107,9 @@ class ExplainOperator(PhysicalOperator):
         self.physical_plan.open()

     def next(self):
-        yield '\n'.join(ExplainOperator.explain(self.logical_plan))
-        yield '\n'.join(ExplainOperator.explain(self.physical_plan))
+        # onw row with two columns: logical plan and physical plan
+        yield ('\n'.join(ExplainOperator.explain(self.logical_plan)),
+               '\n'.join(ExplainOperator.explain(self.physical_plan)))

     def close(self):
         self.physical_plan.close()
diff --git a/andb/executor/portal.py b/andb/executor/portal.py
index 2345849..1d3b11b 100644
--- a/andb/executor/portal.py
+++ b/andb/executor/portal.py
@@ -3,6 +3,7 @@ import time
 from prettytable import PrettyTable

 from andb.catalog.attribute import AndbAttributeForm
+from andb.catalog import CATALOG_ANDB_TYPE
 from andb.catalog.oid import INVALID_OID, OID_TEMP_TABLE
 from andb.sql.parser import CmdType

@@ -42,6 +43,8 @@ class ExecuteResultSet(ExecutionResult):
         assert not self.attr_forms

         for i, field in enumerate(fields):
+            assert isinstance(field, tuple) and len(field) == 3, \
+                "Field must be tuple and 3 elements (but got {})".format(field)
             name, type_oid, notnull = field
             self.attr_forms.append(
                 AndbAttributeForm(
@@ -54,7 +57,7 @@ class ExecuteResultSet(ExecutionResult):

     def rows(self):
         return len(self.tuples)
-
+
     def __repr__(self):
         if len(self.tuples) == 0:
             return super().__repr__()
@@ -63,11 +66,13 @@ class ExecuteResultSet(ExecutionResult):
         attr_forms = self.attr_forms
         if not attr_forms:
             attr_forms = [
-                AndbAttributeForm(class_oid=OID_TEMP_TABLE, name='undefined', type_oid=INVALID_OID, length=0, num=0, notnull=True)
-                for _ in range(len(self.tuples[0]))
+                AndbAttributeForm(class_oid=OID_TEMP_TABLE, name=f'undefined{i}', type_oid=INVALID_OID, length=0, num=0,
+                                  notnull=True)
+                for i in range(len(self.tuples[0]))
             ]

         table.field_names = [attr_form.name for attr_form in attr_forms]
+        table.align = 'l'
         for t in self.tuples:
             table.add_row(t)
         return table.get_string() + '\n' + super().__repr__()
@@ -107,6 +112,17 @@ class ExecutionPortal:
         total_elapsed = self.init_elapsed + self.execute_elapsed + self.final_elapsed
         if self.cmd_type == CmdType.CMD_UTILITY:
             return ExecutionResult(elapsed=total_elapsed)
+        elif self.cmd_type == CmdType.CMD_EXPLAIN:
+            rv = ExecuteResultSet(elapsed=total_elapsed)
+            # Explain statement has two text filed that contain two tree-like text.
+            rv.define_fields(
+                # name, type oid, notnull
+                (("logical plan", CATALOG_ANDB_TYPE.get_type_oid("text"), True),
+                 ("physical plan", CATALOG_ANDB_TYPE.get_type_oid("text"), True))
+            )
+            # directly assigned? maybe a not good form but easier
+            rv.tuples = self._results
+            return rv
         elif self.cmd_type == CmdType.CMD_SELECT:
             # todo: result set
             rv = ExecuteResultSet(elapsed=total_elapsed)
@@ -120,4 +136,3 @@ class ExecutionPortal:
             return ExecutionResult(elapsed=total_elapsed, effect_rows=len(self._results))
         else:
             assert False
-
diff --git a/andb/sql/parser/__init__.py b/andb/sql/parser/__init__.py
index 28e947e..2823d9a 100644
--- a/andb/sql/parser/__init__.py
+++ b/andb/sql/parser/__init__.py
@@ -14,7 +14,8 @@ class CmdType(Enum):
     CMD_SELECT = 2
     CMD_UPDATE = 3
     CMD_UTILITY = 4
-    CMD_UNDEFINED = 5
+    CMD_EXPLAIN = 5
+    CMD_UNDEFINED = 6

 def andb_query_parse(query):
@@ -33,9 +34,11 @@ def get_ast_type(ast_):
     elif (
             isinstance(ast_, create.CreateTable) or
             isinstance(ast_, create.CreateIndex) or
-            isinstance(ast_, explain.Explain) or
             isinstance(ast_, alter.AlterTable)
     ):
         return CmdType.CMD_UTILITY
+    elif isinstance(ast_, explain.Explain):
+        return CmdType.CMD_EXPLAIN
+
     else:
         return CmdType.CMD_UNDEFINED

by the following patch:
diff --git a/andb/catalog/attribute.py b/andb/catalog/attribute.py
index b4d9646..c026399 100644
--- a/andb/catalog/attribute.py
+++ b/andb/catalog/attribute.py
@@ -36,11 +36,17 @@ class AndbAttributeTable(CatalogTable):
     def get_table_forms(self, class_oid):
         return self.search(lambda r: r.class_oid == class_oid)

-    def get_table_attr_num(self, table_oid, attr_name):
+    def get_table_attr(self, table_oid, attr_name):
         result = self.search(lambda r: r.class_oid == table_oid and r.name == attr_name)
         if len(result) != 1:
             return None
-        return result[0].num
+        return result[0]
+
+    def get_table_attr_num(self, table_oid, attr_name):
+        attr = self.get_table_attr(table_oid, attr_name)
+        if attr is None:
+            return None
+        return attr.num

     def define_table_fields(self, class_oid, fields):
         num = 0
diff --git a/andb/catalog/syscache.py b/andb/catalog/syscache.py
index 9c6ab5a..0226dbc 100644
--- a/andb/catalog/syscache.py
+++ b/andb/catalog/syscache.py
@@ -1,6 +1,7 @@
 from .attribute import _ANDB_ATTRIBUTE
 from .class_ import _ANDB_CLASS
 from .database import _ANDB_DATABASE
+from .oid import INVALID_OID
 from .type import _ANDB_TYPE
 from .index import _ANDB_INDEX

@@ -18,4 +19,12 @@ def get_all_catalogs():
     return _ALL_CATALOGS

+def get_attribute_by_name(table_name, column_name, database_oid):
+    relation_oid = CATALOG_ANDB_CLASS.get_relation_oid(table_name, database_oid)
+    if relation_oid == INVALID_OID:
+        return None
+
+    return CATALOG_ANDB_ATTRIBUTE.get_table_attr(relation_oid, column_name)
+
+
 __all__ = _ALL_CATALOGS
diff --git a/andb/executor/operator/logical.py b/andb/executor/operator/logical.py
index b5dd0a8..db1123b 100644
--- a/andb/executor/operator/logical.py
+++ b/andb/executor/operator/logical.py
@@ -46,8 +46,20 @@ class AggregationFunctions(Enum):
     avg = (lambda x: sum(x) / len(x))

-class TableColumn:
+class AbstractColumn:
+    def __init__(self):
+        self.alias = None
+
+    @property
+    def standard_name(self):
+        if self.alias:
+            return self.alias
+        return self.__repr__()
+
+
+class TableColumn(AbstractColumn):
     def __init__(self, table_name, column_name):
+        super().__init__()
         self.table_name = table_name
         self.column_name = column_name
         self.function_name = None
@@ -70,8 +82,9 @@ class TableColumn:
         return TableColumn(self.table_name, self.column_name)

-class FunctionColumn:
+class FunctionColumn(AbstractColumn):
     def __init__(self, function_name, table_columns):
+        super().__init__()
         self.function_name = function_name
         self.table_columns = table_columns
         self.alias = function_name  # default
diff --git a/andb/executor/operator/physical/base.py b/andb/executor/operator/physical/base.py
index 216e374..f512900 100644
--- a/andb/executor/operator/physical/base.py
+++ b/andb/executor/operator/physical/base.py
@@ -7,8 +7,8 @@ class PhysicalOperator:
         self.total_cost = 0
         self.startup_elapsed = 0
         self.total_elapsed = 0
-        self.children = []

+        self.children = []
         # output target columns
         self.columns = None

diff --git a/andb/executor/operator/physical/select.py b/andb/executor/operator/physical/select.py
index 1263d75..98847f8 100644
--- a/andb/executor/operator/physical/select.py
+++ b/andb/executor/operator/physical/select.py
@@ -354,8 +354,14 @@ class Append(Scan):
         self.name = 'Append'

     def open(self):
+        columns = None
         for child in self.children:
             child.open()
+            if columns is None:
+                columns = child.columns
+            else:
+                if columns != child.columns:
+                    raise RuntimeError('Columns do not match')

     def next_internal(self):
         for child in self.children:
@@ -778,6 +784,7 @@ class PhysicalQuery(PhysicalOperator):
             raise InitializationStageError('not found children.')

         self.children[0].open()
+        self.columns = self.children[0].columns

     def next(self):
         for tuple_ in self.children[0].next():
diff --git a/andb/executor/portal.py b/andb/executor/portal.py
index 1d3b11b..e79fc05 100644
--- a/andb/executor/portal.py
+++ b/andb/executor/portal.py
@@ -5,8 +5,10 @@ from prettytable import PrettyTable
 from andb.catalog.attribute import AndbAttributeForm
 from andb.catalog import CATALOG_ANDB_TYPE
 from andb.catalog.oid import INVALID_OID, OID_TEMP_TABLE
+from andb.catalog.syscache import get_attribute_by_name
+from andb.executor.operator.logical import TableColumn, FunctionColumn
 from andb.sql.parser import CmdType
-
+from andb.runtime import session_vars

 class ExecutionResult:
     def __init__(self, success=True, notice=None, warning=None, effect_rows=0, elapsed=0):
@@ -35,6 +37,8 @@ class ExecuteResultTuple(ExecutionResult):

 class ExecuteResultSet(ExecutionResult):
     def __init__(self, **kwargs):
+        # todo: the ResultSet is a tabular that can be scanned again and has
+        # its own name, attributes ...
         super().__init__(**kwargs)
         self.attr_forms = []
         self.tuples = []
@@ -43,12 +47,13 @@ class ExecuteResultSet(ExecutionResult):
         assert not self.attr_forms

         for i, field in enumerate(fields):
-            assert isinstance(field, tuple) and len(field) == 3, \
-                "Field must be tuple and 3 elements (but got {})".format(field)
-            name, type_oid, notnull = field
+            TUPLE_LENGTH_ASSERTION = 4
+            assert isinstance(field, tuple) and len(field) == TUPLE_LENGTH_ASSERTION, \
+                f"Field must be tuple and {TUPLE_LENGTH_ASSERTION} elements (but got {field})"
+            name, type_oid, length, notnull = field
             self.attr_forms.append(
                 AndbAttributeForm(
-                    class_oid=OID_TEMP_TABLE, name=name, type_oid=type_oid, length=0, num=i, notnull=notnull
+                    class_oid=OID_TEMP_TABLE, name=name, type_oid=type_oid, length=length, num=i, notnull=notnull
                 )
             )

@@ -85,7 +90,7 @@ class ExecutionPortal:
         self.plan_tree = plan_tree
         self.xid = 0
         self._results = None
-        self.attr_forms = None  # target list
+        self.target_list_columns = None  # target list
         self.init_elapsed = 0
         self.execute_elapsed = 0
         self.final_elapsed = 0
@@ -93,12 +98,14 @@ class ExecutionPortal:
     def initialize(self):
         start_time = time.monotonic()
         self.plan_tree.open()
+        # todo: self.attr_forms
         self.init_elapsed = time.monotonic() - start_time

     def execute(self):
         start_time = time.monotonic()
         root = self.plan_tree
         self._results = list(root.next())
+        self.target_list_columns = root.columns
         self.execute_elapsed = time.monotonic() - start_time
         # todo: result type

@@ -116,9 +123,9 @@ class ExecutionPortal:
             rv = ExecuteResultSet(elapsed=total_elapsed)
             # Explain statement has two text filed that contain two tree-like text.
             rv.define_fields(
-                # name, type oid, notnull
-                (("logical plan", CATALOG_ANDB_TYPE.get_type_oid("text"), True),
-                 ("physical plan", CATALOG_ANDB_TYPE.get_type_oid("text"), True))
+                # name, type oid, length, notnull
+                (("logical plan", CATALOG_ANDB_TYPE.get_type_oid("text"), 0, True),
+                 ("physical plan", CATALOG_ANDB_TYPE.get_type_oid("text"), 0, True))
             )
             # directly assigned? maybe a not good form but easier
             rv.tuples = self._results
@@ -126,7 +133,24 @@ class ExecutionPortal:
         elif self.cmd_type == CmdType.CMD_SELECT:
             # todo: result set
             rv = ExecuteResultSet(elapsed=total_elapsed)
-            rv.attr_forms = self.attr_forms
+
+            # construct output fields
+            # todo: can be reused and scanned again
+            to_be_defined_fields = []
+            for column in self.target_list_columns:
+                if isinstance(column, TableColumn):
+                    attr = get_attribute_by_name(column.table_name, column.column_name,
+                                                 database_oid=session_vars.database_oid)
+                    to_be_defined_fields.append((column.standard_name, attr.type_oid, attr.length, attr.notnull))
+                elif isinstance(column, FunctionColumn):
+                    # todo: TBH, we have to determine what the type of function return value is
+                    # and construct the field according to the information but we haven't implemented
+                    # the catalog to record what the type is.
+                    # Hence, we have to mock data here but it still works.
+                    to_be_defined_fields.append((column.standard_name, INVALID_OID, 0, True))
+
+            rv.define_fields(to_be_defined_fields)
+            # directly assigned? maybe a not good form but easier
             rv.tuples = self._results
             rv.effect_rows = len(self._results)
             return rv
diff --git a/andb/sql/optimizer/implementations.py b/andb/sql/optimizer/implementations.py
index 57c315a..ae7cce5 100644
--- a/andb/sql/optimizer/implementations.py
+++ b/andb/sql/optimizer/implementations.py
@@ -200,6 +200,7 @@ class QueryImplementation(BaseImplementation):
         # todo: non-SJP, estimation
         root_node = cls.implement_tree(physical_query.logical_query.children[0])
         physical_query.add_child(root_node)
+
         return physical_query

diff --git a/andb/executor/operator/physical/base.py b/andb/executor/operator/physical/base.py
index f512900..9e017ee 100644
--- a/andb/executor/operator/physical/base.py
+++ b/andb/executor/operator/physical/base.py
@@ -1,3 +1,4 @@
+import time

 class PhysicalOperator:
@@ -12,17 +13,24 @@ class PhysicalOperator:
         # output target columns
         self.columns = None

+        # instrument
+        self.actual_rows = 0
+        self.open_time = 0
+        self.close_time = 0
+
     def get_args(self):
-        return ('startup_cost', self.startup_cost), ('total_cost', self.total_cost)
+        return (('cost', f'{self.startup_cost}...{self.total_cost}'),
+                ('actual_rows', self.actual_rows),
+                ('elapsed', f'{self.close_time - self.open_time:.2f}'))

     def open(self):
-        pass
+        self.open_time = time.monotonic()

     def next(self):
-        pass
+        self.actual_rows += 1

     def close(self):
-        pass
+        self.close_time = time.monotonic()

     def add_child(self, operator):
         assert isinstance(operator, PhysicalOperator)
diff --git a/andb/executor/operator/physical/insert.py b/andb/executor/operator/physical/insert.py
index c3ee8ae..5b754c3 100644
--- a/andb/executor/operator/physical/insert.py
+++ b/andb/executor/operator/physical/insert.py
@@ -25,6 +25,8 @@ class InsertPhysicalOperator(PhysicalOperator):
         return ('table_name', self.relation.name), ('table_oid', self.table_oid) + super().get_args()

     def open(self):
+        super().open()
+
         self.relation = open_relation(self.table_oid, rlock.ROW_EXCLUSIVE_LOCK)
         if not self.relation:
             raise InitializationStageError(f'cannot get the relation using oid {self.table_oid}.')
@@ -55,3 +57,5 @@ class InsertPhysicalOperator(PhysicalOperator):
         close_relation(self.table_oid, rlock.ROW_EXCLUSIVE_LOCK)
         for relation in self.index_relations:
             close_relation(relation.oid, rlock.ROW_EXCLUSIVE_LOCK)
+
+        super().close()
diff --git a/andb/executor/operator/physical/select.py b/andb/executor/operator/physical/select.py
index 98847f8..7616fd9 100644
--- a/andb/executor/operator/physical/select.py
+++ b/andb/executor/operator/physical/select.py
@@ -149,6 +149,7 @@ class Scan(PhysicalOperator):
     def __init__(self, relation_oid, columns, filter_: Filter = None, lock=rlock.ACCESS_SHARE_LOCK):
         super().__init__('Scan')
         self.relation_oid = relation_oid
+        # if specify columns, that means the scan involves projection
         self.columns = columns
         self.projection_attr_idx = None
         self._filter = filter_
@@ -164,6 +165,8 @@ class Scan(PhysicalOperator):
         return self._pageno, self._tid

     def open(self):
+        super().open()
+
         self.relation = open_relation(self.relation_oid, self.lock)
         if not self.relation:
             raise InitializationStageError(f'cannot open relation {self.relation_oid}.')
@@ -216,6 +219,10 @@ class Scan(PhysicalOperator):

     def close(self):
         close_relation(self.relation_oid, self.lock)
+        super().close()
+
+    def get_args(self):
+        return (('columns', self.columns),) + super().get_args()

 class IndexScan(Scan):
@@ -246,8 +253,8 @@ class IndexScan(Scan):
             self.index_columns.append(TableColumn(self.table_relation.name, self.table_attr_forms[form.attr_num].name))

     def close(self):
-        super().close()
         close_relation(self.table_relation, lock_mode=rlock.ACCESS_SHARE_LOCK)
+        super().close()

     @staticmethod
     def combine(columns, const_values):
@@ -354,6 +361,8 @@ class Append(Scan):
         self.name = 'Append'

     def open(self):
+        super().open()
+
         columns = None
         for child in self.children:
             child.open()
@@ -371,7 +380,8 @@ class Append(Scan):
     def close(self):
         for child in self.children:
             child.close()
-
+
+        super().close()

 class TempTableScan(Append):
     def __init__(self, relation_oid, columns, filter_: Filter = None, lock=rlock.ACCESS_SHARE_LOCK):
@@ -396,6 +406,8 @@ class Join(PhysicalOperator):
         return (('join_type', self.join_type), ('condition', self.join_filter)) + super().get_args()

     def open(self):
+        super().open()
+
         # open can initialize all works
         # if one certain operator's columns is None, by using open method we can set value for that.
         self.left_tree.open()
@@ -412,6 +424,9 @@ class Join(PhysicalOperator):
             for j, join_column in enumerate(self.join_columns):
                 if target_column == join_column:
                     self.projection_attr_idx.append(j)
+                    # when we found an index, we don't need to go ahead
+                    # otherwise, such as self-join, we will add redundant element
+                    break

         if len(self.projection_attr_idx) != len(self.columns):
             raise InitializationStageError('target columns are not all in joined columns.')
@@ -422,6 +437,8 @@ class Join(PhysicalOperator):
     def close(self):
         self.left_tree.close()
         self.right_tree.close()
+
+        super().close()

     def next(self):
         for tuple_ in self.project():
@@ -624,6 +641,8 @@ class HashAggregation(Aggregation):
                 ('aggregation', self.aggregation_columns)) + super().get_args()

     def open(self):
+        super().open()
+
         assert len(self.children) == 1
         child = self.children[0]
         child.open()
@@ -671,7 +690,8 @@ class HashAggregation(Aggregation):

     def close(self):
         self.children[0].close()
-
+
+        super().close()

 class Sort(Materialize):
     INTERNAL_SORT = 'internal_sort'
@@ -701,6 +721,7 @@ class Sort(Materialize):
         return (('sort_method', self.sort_method), ('keys', self._sort_keys())) + super().get_args()

     def open(self):
+        super().open()
         if len(self.children) != 1:
             raise InitializationStageError('sort operator only can have one child.')
         child = self.children[0]
@@ -773,22 +794,34 @@ class Sort(Materialize):
 class PhysicalQuery(PhysicalOperator):

     def __init__(self, logical_query):
-        super().__init__('Query')
+        super().__init__('Result')
         self.logical_query = logical_query
         self.logical_plan = logical_query.children[0]
         self.simple_plan = len(logical_query.scan_operators)
         self.has_join_clause = len(logical_query.join_operators) > 0
+        self.projection_column_idx = []

     def open(self):
         if len(self.children) == 0:
             raise InitializationStageError('not found children.')

+        super().open()
         self.children[0].open()
-        self.columns = self.children[0].columns
+        child_columns = self.children[0].columns
+        self.columns = self.logical_query.target_list
+        # only output target columns
+        for target_column in self.columns:
+            for i, child_column in enumerate(child_columns):
+                if target_column == child_column:
+                    self.projection_column_idx.append(i)

     def next(self):
-        for tuple_ in self.children[0].next():
-            yield tuple_
+        for child in self.children:
+            self.actual_rows += 1
+            for tup in child.next():
+                # projecting
+                yield tuple(tup[i] for i in self.projection_column_idx)

     def close(self):
         self.children[0].close()
+        super().close()
\ No newline at end of file
diff --git a/andb/executor/operator/physical/update.py b/andb/executor/operator/physical/update.py
index aa0b318..7897831 100644
--- a/andb/executor/operator/physical/update.py
+++ b/andb/executor/operator/physical/update.py
@@ -41,6 +41,8 @@ class UpdatePhysicalOperator(PhysicalOperator):
         return ('table_name', self.relation.name), ('table_oid', self.table_oid) + super().get_args()

     def open(self):
+        super().open()
+
         self.relation = open_relation(self.table_oid, rlock.ROW_EXCLUSIVE_LOCK)
         if not self.relation:
             raise InitializationStageError(f'cannot get the relation using oid {self.table_oid}.')
@@ -90,3 +92,4 @@ class UpdatePhysicalOperator(PhysicalOperator):
             close_relation(relation.oid, rlock.ROW_EXCLUSIVE_LOCK)

         self.scan.close()
+        super().close()
diff --git a/andb/executor/operator/physical/utility.py b/andb/executor/operator/physical/utility.py
index a5cb236..7029e1e 100644
--- a/andb/executor/operator/physical/utility.py
+++ b/andb/executor/operator/physical/utility.py
@@ -102,9 +102,17 @@ class ExplainOperator(PhysicalOperator):
         super().__init__('Explain')
         self.logical_plan = logical_plan
         self.physical_plan = None
+        # todo: add grammar and syntax support, explain analyze ...
+        self.analyze = False

     def open(self):
+        # let the database generate physical plan
+        # we can directly close the physical plan when don't use analyze
         self.physical_plan.open()
+        if self.analyze:
+            # we should perform the statement when analyzing
+            list(self.physical_plan.next())
+        self.physical_plan.close()

     def next(self):
         # onw row with two columns: logical plan and physical plan
@@ -112,4 +120,4 @@ class ExplainOperator(PhysicalOperator):
                '\n'.join(ExplainOperator.explain(self.physical_plan)))

     def close(self):
-        self.physical_plan.close()
+        pass
diff --git a/andb/sql/optimizer/transformations.py b/andb/sql/optimizer/transformations.py
index 9d989b5..4e7e90c 100644
--- a/andb/sql/optimizer/transformations.py
+++ b/andb/sql/optimizer/transformations.py
@@ -179,6 +179,8 @@ class QueryLogicalPlanTransformation(BaseTransformation):
     @staticmethod
     def on_transform(query: LogicalQuery):
         # todo: extract all involved columns, then prune useless columns
+        # todo: rewrite
+
         if not query.join_operators:
             QueryLogicalPlanTransformation.process_non_join_scan(query)
         else:
@@ -343,9 +345,10 @@ class SelectTransformation(BaseTransformation):
             left_table_name, right_table_name = join_clause.left.parts, join_clause.right.parts
             left_scan_operator = right_scan_operator = None
             for scan_operator in query.scan_operators:
+                # for self-joining, the left and right table reuse a same scan operator
                 if scan_operator.table_name == left_table_name:
                     left_scan_operator = scan_operator
-                elif scan_operator.table_name == right_table_name:
+                if scan_operator.table_name == right_table_name:
                     right_scan_operator = scan_operator

             join_operator.add_child(left_scan_operator)
diff --git a/tests/local_client.py b/tests/local_client.py
index 0b61bd7..bf9ddf8 100644
--- a/tests/local_client.py
+++ b/tests/local_client.py
@@ -1,3 +1,4 @@
+import logging
 import os
 import sys
 import shutil
@@ -47,6 +48,7 @@ def run_shell():
             continue
         except Exception as e:
             print(f"Error: {str(e)}")
+            logging.exception(e)
             continue

 if __name__ == '__main__':

bugfix for scan file:
diff --git a/andb/catalog/attribute.py b/andb/catalog/attribute.py
index a2d7005..6ea45db 100644
--- a/andb/catalog/attribute.py
+++ b/andb/catalog/attribute.py
@@ -1,4 +1,4 @@
-from andb.catalog.oid import OID_SYSTEM_TABLE_ATTRIBUTE
+from andb.catalog.oid import OID_SYSTEM_TABLE_ATTRIBUTE, OID_SCANNING_FILE
 from ._base import CatalogTable, CatalogForm
 from .type import _ANDB_TYPE, VarcharType

@@ -37,6 +37,14 @@ class AndbAttributeTable(CatalogTable):
         pass

     def get_table_forms(self, class_oid):
+        if class_oid == OID_SCANNING_FILE:
+            # for scanning table, we have two columns: content and embedding
+            return (AndbAttributeForm(class_oid=class_oid, name='content',
+                                      type_oid=_ANDB_TYPE.get_type_oid('text'),
+                                      length=0, num=0, notnull=False),
+                    AndbAttributeForm(class_oid=class_oid, name='embedding',
+                                      type_oid=_ANDB_TYPE.get_type_oid('vector'),
+                                      length=0, num=1, notnull=False))
         return self.search(lambda r: r.class_oid == class_oid)

     def get_table_attr(self, table_oid, attr_name):
diff --git a/andb/executor/operator/logical.py b/andb/executor/operator/logical.py
index 334970f..f18ac41 100644
--- a/andb/executor/operator/logical.py
+++ b/andb/executor/operator/logical.py
@@ -226,14 +226,10 @@ class LogicalQuery(LogicalOperator):
         for table_name, table_oid in self.from_tables.items():
             if lookup_table_name is not None and lookup_table_name != table_name:
                 continue
-            if table_oid == OID_SCANNING_FILE:
-                # for scanning table, we have two columns: content and embedding
-                table_columns.extend([TableColumn(DummyTableName.SCANNING_FILE_NAME, 'content'),
-                                     TableColumn(DummyTableName.SCANNING_FILE_NAME, 'embedding')])
-            else:
-                for attr_from in self.table_attr_forms[table_name]:
-                    if (table_name, attr_from.name) in self._seen_table_columns:
-                        table_columns.append(TableColumn(table_name, attr_from.name))
+
+            for attr_from in self.table_attr_forms[table_name]:
+                if (table_name, attr_from.name) in self._seen_table_columns:
+                    table_columns.append(TableColumn(table_name, attr_from.name))
         return table_columns

diff --git a/andb/executor/operator/physical/select.py b/andb/executor/operator/physical/select.py
index 129c85c..5a15b41 100644
--- a/andb/executor/operator/physical/select.py
+++ b/andb/executor/operator/physical/select.py
@@ -1,5 +1,6 @@
 import os
 from andb.ai import embedding_model
+from andb.catalog.oid import OID_SCANNING_FILE
 from andb.sql.parser.ast.operation import Function
 from andb.storage.engines.heap.relation import close_relation, open_relation
 from andb.storage.lock import rlock
@@ -15,6 +16,7 @@ from ..utils import expression_eval, ExprOperation
 from .base import PhysicalOperator
 from andb.executor.operator import utils

+
 class ExpressionContext:
     def __init__(self, column_value_pairs):
         self.column_value_pairs = column_value_pairs
@@ -22,6 +24,7 @@ class ExpressionContext:
     def get_column_value(self, table_name, column_name):
         return self.column_value_pairs.get(TableColumn(table_name, column_name), None)

+
 def evaluate_expression(expr, context):
     if isinstance(expr, FunctionColumn):
         # evaluate function call
@@ -303,7 +306,8 @@ class IndexScan(Scan):
         for i, form in enumerate(self.index_forms):
             assert form.index_num == i
             assert self.table_attr_forms[i].num == form.attr_num
-            self.index_columns.append(TableColumn(self.base_table_relation.name, self.table_attr_forms[form.attr_num].name))
+            self.index_columns.append(
+                TableColumn(self.base_table_relation.name, self.table_attr_forms[form.attr_num].name))

     def close(self):
         super().close()
@@ -332,7 +336,7 @@ class IndexScan(Scan):
                 yield tuple_

     def next_internal(self):
-        #TODO: range
+        # TODO: range
         assert isinstance(self._filter.condition.expr, ExprOperation)
         const_values = {column: [] for column in self.index_columns}
         for column in self.index_columns:
@@ -417,7 +421,7 @@ class SystemTableScan(TableScan):
                 for catalog_form in catalog_table.rows:
                     yield catalog_form.to_tuple(catalog_form)
                 break
-
+

 class Append(Scan):
     def __init__(self, relation_oid, columns, filter_: Filter = None, lock=rlock.ACCESS_SHARE_LOCK):
@@ -426,7 +430,7 @@ class Append(Scan):

     def open(self):
         super().open()
-
+
         columns = None
         for child in self.children:
             child.open()
@@ -444,9 +448,10 @@ class Append(Scan):
     def close(self):
         for child in self.children:
             child.close()
-
+
         super().close()

+
 class TempTableScan(Append):
     def __init__(self, relation_oid, columns, filter_: Filter = None, lock=rlock.ACCESS_SHARE_LOCK):
         super().__init__(relation_oid, columns, filter_, lock)
@@ -457,33 +462,36 @@ class FunctionScan(Scan):
     pass

-
 class FileScan(PhysicalOperator):
     def __init__(self, file_path, columns):
         super().__init__('FileScan')
         self.file_path = file_path
         self.fd = None
         self.columns = columns
-
+
     def open(self):
         if self.file_path[-3:] != 'txt':
             raise NotImplementedError(f"File {self.file_path} is not supported")
-
+
         real_file_path = os.path.join(os.path.realpath('./files'), self.file_path)

         self.fd = open(real_file_path, 'r', errors='ignore')

+        # None means scanning all columns
+        if not self.columns:
+            self.columns = [TableColumn(table_name=self.file_path, column_name=form.name)
+                            for form in CATALOG_ANDB_ATTRIBUTE.get_table_forms(OID_SCANNING_FILE)]
+
     def next(self):
         assert len(self.columns) == 2  # content, embedding

         content = self.fd.readlines()
         embedding = embedding_model.text_to_embedding(content)
         yield (str(content), embedding)
-
+
     def close(self):
         self.fd.close()

-
 class Join(PhysicalOperator):
     def __init__(self, join_operator, join_type, target_columns=None, join_filter: Filter = None):
         super().__init__(join_operator)
@@ -507,7 +515,7 @@ class Join(PhysicalOperator):
         if not self.columns:
             self.columns = self.join_columns

-        #TODO: semi-join and anti semi-join should prune self.columns
+        # TODO: semi-join and anti semi-join should prune self.columns

         # check all target columns are all in joined columns
         # time complexity can reduce to O(N) from O(N2)
@@ -528,7 +536,7 @@ class Join(PhysicalOperator):
     def close(self):
         self.left_tree.close()
         self.right_tree.close()
-
+
         super().close()

     def next(self):
@@ -733,12 +741,12 @@ class HashAggregation(Aggregation):

     def open(self):
         super().open()
-
+
         assert len(self.children) == 1
         child = self.children[0]
         child.open()

-        #TODO: fix the relationship between involved_columns and self.columns
+        # TODO: fix the relationship between involved_columns and self.columns
         # and their using places.
         involved_columns = self.grouping_columns + self.aggregation_columns
         self.columns = self.grouping_columns + [FunctionColumn(self.function_name, self.aggregation_columns)]
@@ -784,9 +792,10 @@ class HashAggregation(Aggregation):

     def close(self):
         self.children[0].close()
-
+
         super().close()

+
 class Sort(Materialize):
     INTERNAL_SORT = 'internal_sort'
     EXTERNAL_SORT = 'external_sort'
diff --git a/andb/sql/optimizer/transformations.py b/andb/sql/optimizer/transformations.py
index 8223c99..94ff558 100644
--- a/andb/sql/optimizer/transformations.py
+++ b/andb/sql/optimizer/transformations.py
@@ -184,7 +184,7 @@ class QueryLogicalPlanTransformation(BaseTransformation):
         operator = GroupOperator(group_by_columns=query.groupby_columns,
                                  aggregate_function=aggregation_function,
                                  having_clause=query.having_clause)
-        # set the group by operator onto all of nodes.
+        # set the group by operator onto all nodes.
         operator.children = query.children
         query.children = [operator]

@@ -318,6 +318,7 @@ class SelectTransformation(BaseTransformation):
                 real_file_path = os.path.join(os.path.realpath('./files'), file_path)
                 if os.path.exists(real_file_path):
                     query.from_tables[file_path] = OID_SCANNING_FILE
+                    query.table_attr_forms[file_path] = CATALOG_ANDB_ATTRIBUTE.get_table_forms(OID_SCANNING_FILE)
                 else:
                     raise InitializationStageError(f'not found the file {file_path} from files directory.')

repo: wotchin/AnDB


text:
Bonus stats are displayed in a confusing way

Describe the bug
When adding a stat bonus, the displayed summary for that stat is confusing.
To Reproduce
Steps to reproduce the behavior:

Hover a stat value in the bottom left hand side Stats panel, for example Agility.
Write down the itemization displayed by the tooltip.
Add a bonus value of 20 to that stat.
Hover the new stat value and write down the new itemization.

Expected behavior
I would expect the Base value to stay the same, but it changes.
Sim Links and Screenshots

Additional context
I can think of a variety of ways stat values could be displayed when a bonus is applied. For example, the Bonus could be displayed separately (as is the case in the current implementation), the Buffs value would be adjusted accordingly (as is also the case in the current implementation) and the Gear and Base values would stay unchanged (which would differ from the current implementation). Or the bonus could be merged into Gear and Buffs directly, colored in green or red to highlight the presence of a positive or negative bonus, respectively, Base would stay unchanged, and no extra Bonus line would be displayed.
Either way, the Base value should never be affected by the bonus. Right now if I add 20 to Agility, the actual effect is:

-20 to Base
+20 to Gear
+2 to Buffs (from BoK)
+20 to Bonus

While the total (+22) is correct, the itemization is utterly confusing.

k got a fix for this. internally, as you kinda saw, internally the 'bonus stat' gets added into gear, and on display was incorrectly getting removed from base. Changed it here so display removes the bonus from gear instead of bonus

Looks much better, thank you!

source: gharchive/issue

authors: jarveson jdelvare

repo: wowsims/wotlk

license: MIT

license_type: permissive

license_source: github-api


text:
{from|into}_bits methods for structs generated by bitfield.

Hi, I wanted to ask, why the functions mentioned in the title aren't automatically generated for structs generated with bitfield.

Solved by yourself 👍🏻  (#34)

My project ieee80211-rs was stalled on this anyway so I just took matters into my own hands.

repo: wrenger/bitfield-struct-rs


text:
Create Header with basic links / pages for said links:

-Home
-Workshops
-Synth Library
-Membership
-About
-Login/Sign Up

The following pages have been created and are linked in the Header:

Home
Workshops
Library
Membership
About
Login / Register

authors: jlaurentpdx mikeymasonic

repo: ws-slp/ws-slp-ts-fe


text:
Test against master Enzyme

add Preference propagation to test
Test against locally built Enzyme

Codecov Report

Merging #182 (dbd060b) into master (ae5badf) will decrease coverage by 3.84%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #182      +/-   ##
==========================================
- Coverage   80.55%   76.71%   -3.85%
==========================================
  Files          13       13
  Lines        2700     2675      -25
==========================================
- Hits         2175     2052     -123
- Misses        525      623      +98

Impacted Files
Coverage Δ

src/compiler/orcv2.jl
0.00% <0.00%> (-71.43%)
:arrow_down:

src/compiler/interpreter.jl
38.88% <0.00%> (-50.59%)
:arrow_down:

src/logic.jl
75.00% <0.00%> (-5.00%)
:arrow_down:

src/compiler.jl
82.86% <0.00%> (-1.17%)
:arrow_down:

src/api.jl
45.37% <0.00%> (-1.06%)
:arrow_down:

src/typetree.jl
85.22% <0.00%> (-0.80%)
:arrow_down:

src/Enzyme.jl
84.13% <0.00%> (-0.33%)
:arrow_down:

src/compiler/optimize.jl
97.69% <0.00%> (-0.06%)
:arrow_down:

src/compiler/orcv1.jl
85.10% <0.00%> (+4.33%)
:arrow_up:

Continue to review full report at Codecov.

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

source: gharchive/pull-request

authors: codecov-commenter vchuravy


text:
[4.2.0][Dependency Upgrade] H2 version upgrade

Description
This issue is created to track the progress on H2 version upgrade used in carbon-identity-anonimization tool from 1.4.199 to 2.1.210 (or latest). The fix is already available in carbon-identity-anonimization master branch with [1].
Upgrading carbon-identity-anonimization tool version to latest in SI 4.2.0 should fix this issue.
[1]. https://github.com/wso2/identity-anonymization-tool/commit/05e225dc81cc0679e884275cc0b5440223509a14
Affected Component
SI
Version
4.2.0
Related Issues
No response
Suggested Labels
No response

Used in identity-anonymization-tool
anonimization tool has been removed from SI distribution as per https://github.com/wso2/streaming-integrator/pull/29


text:
Incorporate a way of initialising aggregation via a REST API for WSO2SI.

Problem
Hi All,
Currently, the Aggregations of the SI server will not be initialised after a restart. It requires an event to flow through the Siddhi application to initialize the corresponding aggregation.
It would be better if we could have a way of initializing the aggregation without waiting for the 1st event.
Best Regards,
Janith.
Solution
Possibility of initiating the aggregations via a REST API.
Affected Component
SI
Version
4.1.0
Implementation
No response
Related Issues
No response
Suggested Labels
No response

Public PR: https://github.com/wso2/carbon-analytics/pull/2002 has already merged into the master branch.

authors: YasasRangika janithcmw


text:
Fix for: Previous PRs issues mentioned in inline commets

In this PR:
I have fixed the issues commented inline in the previous PRs,
Please find the commit message for relevant comment ID.
Thanks

Closing the PR, since changes are conflicting with latest changes. Please fix the conflicts and reopen the PR. if you need this change

authors: daneshk tmkasun

license_source: bigquery


text:
Query ID, Resource path and Operation name can be edited

Description:
It can edit the existing queryID, OperationID and the ResourceID. Ideally it should not be given the option to edit the resourceIdentifier other than editing the rest of the details.
Further, if the resourceIdentifier is edited, there will be a new query created.
In Data Sources, it is not allowed to edit the Datasource Identifier. Better if we can follow a consistent pattern.

Fixed in - https://github.com/wso2/devstudio-tooling-dss/pull/175


text:
Update content related to component creation

Purpose

Describe the problems, issues, or needs driving this feature/fix and include links to related issues in the following format: Resolves issue1, issue2, etc.

Goals

Describe the solutions that this feature/fix will introduce to resolve the problems described above

Approach

Describe how you are implementing the solutions. Include an animated GIF or screenshot if the change affects the UI (email documentation@wso2.com to review all UI text). Include a link to a Markdown file or Google doc if the feature write-up is too long to paste here.

Release note

Brief description of the new feature or bug fix as it will appear in the release notes

Samples

Provide high-level details about the samples related to this feature

Related PRs

List any other related PRs

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

authors: CLAassistant YashodhaSamarawickrama


text:
[Publisher] If a new user is assigned with a newly created user role, user's can't login to the publisher

Steps:

Create a new user role with all permissions using carbon

Assign a new user to the newly created user role

When the new user try to login to the publisher, follwoing error message displayed.

You need to add this role the tenant-conf.json file /_system/config/apimgt/applicationdata/tenant-conf.json under the relevent publisher scopes (say apim:api_publish, etc)

authors: Thidasala chamilaadhi


text:
Password Reset confirmationcode not invalidating after first use

Describe the issue:
We are able to use the same password reset email link to access the challenge questions and successfully reset user passwords multiple times before the 1440 minutes are up on its time expiration.
How to reproduce:
Step 1: Select 'Forgot Password?'
Step 2: Input email address
Step 3: Follow link in email to Change Password

Step 4: Correctly answer challenge questions and change password
Step 5: Click on same link which includes same confirmation code displayed in image above
Step 6: Correctly answer challenge questions and change password again
Expected behavior:
We expect that at Step 5 the confirmation code should have already been invalidated upon resetting the password in step 4 so the link should no longer allow you to change the password again
Environment information:

Product Version: ISKM 5.10.0
OS: RHEL 7.9
Database: postgres13
Userstore: JDBC

The above mentioned flow does not exist in the Identity Server 5.12.0.
The flows available for password recovery are

Notification-based.
Challenge question based.

Notification-based flow sends an email and the link in the email expires after resetting the password. And it does not require to answer challenge questions.
Challenge question based flow does not send an email and displays the challenge questions on the browser window after selecting the option and entering the username.
https://is.docs.wso2.com/en/latest/learn/password-recovery/
Therefore above mentioned flow or issue isn't available in 5.12.0 with a combination of email and challenge questions.


text:
[SP Sign-in] WARN: Thread stuck  logged when trying to sign in to sample app, then the server became slow to respond, resulting in connection timeouts

Describe the issue:

Detected when trying out sample app sign-in and SSO scenarios
First, SAML SSO failed due to invalid client certificate
Then tried login with OpenID - the app apparently got stuck at login screen, later observed the WARN (refer comment 1) in terminal
After this incident, the IS got slow to respond to SP logins and admin operations, resulting in network timeouts and required restarting

How to reproduce:
Refer $description
Expected behavior:
IS should be able to work without restart
Environment information (Please complete the following information; remove  any unnecessary fields) :

Product Version: IS 5.12 alpha 13
OS: WIndows 10
Database: MySQL
Userstore: JDBC

Optional Fields
Related issues:

Suggested labels:

[2022-03-03 04:09:45,235] [3b5f5253-f9d3-4af6-9dd8-24691ededf84]  INFO {org.opensaml.core.config.InitializationService} - Initializing OpenSAML using the Java Services API
[2022-03-03 04:10:03,071] [2ec0231f-1547-40dd-8f69-f79b124ddf72]  WARN {org.apache.xml.security.signature.XMLSignature} - Signature verification failed.
[2022-03-03 04:10:03,073] [2ec0231f-1547-40dd-8f69-f79b124ddf72]  WARN {org.wso2.carbon.identity.sso.saml.validators.SPInitSSOAuthnRequestValidator} - Signature validation for Authentication Request failed for the request of Issuer :saml2-web-app-pickup-dispatch.com in tenantDomain:carbon.super
[2022-03-03 05:36:12,705] []  WARN {org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve} - Thread [https-jsse-nio-9443-exec-38] (id=[{6}]) has been active for [2,381,785] milliseconds (since [3/3/22 4:56 AM]) to serve the same request for [https://localhost:9443/oauth2/authorize?response_type=code&client_id=CONSOLE&scope=openid&redirect_uri=https%3A%2F%2Flocalhost%3A9443%2Fconsole&state=Y2hlY2tTZXNzaW9u&prompt=none&code_challenge_method=S256&code_challenge=_KcFdV9R2uUqFk7i9DXO-gbzx-cflk7gHlRbOrNBNR3] and may be stuck (configured threshold for this StuckThreadDetectionValve is [600] seconds). There is/are [1] thread(s) in total that are monitored by this Valve and may be stuck., tenantDomain=carbon.super java.lang.Throwable
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:226)
        at java.util.zip.ZipFile.<init>(ZipFile.java:155)
        at java.util.jar.JarFile.<init>(JarFile.java:167)
        at java.util.jar.JarFile.<init>(JarFile.java:131)
        at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:241)
        at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:226)
        at org.apache.catalina.webresources.AbstractArchiveResourceSet.openJarFile(AbstractArchiveResourceSet.java:314)
        at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:97)
        at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:263)
        at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
        at org.apache.catalina.webresources.Cache.getResource(Cache.java:62)
        at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
        at org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
        at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2359)
        at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:870)
        at org.wso2.carbon.webapp.mgt.loader.CarbonWebappClassLoader.findLocalClass(CarbonWebappClassLoader.java:210)
        at org.wso2.carbon.webapp.mgt.loader.CarbonWebappClassLoader.loadClass(CarbonWebappClassLoader.java:166)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
        at org.wso2.carbon.identity.oauth.endpoint.util.EndpointUtil.getErrorRedirectURL(EndpointUtil.java:535)
        at org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint.handleFailedState(OAuth2AuthzEndpoint.java:896)
        at org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint.handleFailedAuthentication(OAuth2AuthzEndpoint.java:910)
        at org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint.handleAuthenticationResponse(OAuth2AuthzEndpoint.java:832)
        at org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint.authorize(OAuth2AuthzEndpoint.java:264)
        at org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint.handleAuthFlowThroughFramework(OAuth2AuthzEndpoint.java:3085)
        at org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint.handleInitialAuthorizationRequest(OAuth2AuthzEndpoint.java:1000)
        at org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint.authorize(OAuth2AuthzEndpoint.java:262)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179)
        at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
        at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:201)
        at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:104)
        at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
        at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
        at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
        at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:296)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:220)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:271)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.wso2.carbon.webapp.mgt.filter.AuthorizationHeaderFilter.doFilter(AuthorizationHeaderFilter.java:85)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.wso2.carbon.ui.filters.cache.ContentTypeBasedCachePreventionFilter.doFilter(ContentTypeBasedCachePreventionFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:126)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:117)
        at org.wso2.carbon.tomcat.ext.valves.SameSiteCookieValve.invoke(SameSiteCookieValve.java:38)
        at org.wso2.carbon.identity.cors.valve.CORSValve.invoke(CORSValve.java:89)
        at org.wso2.carbon.identity.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:119)
        at org.wso2.carbon.identity.auth.valve.AuthenticationValve.invoke(AuthenticationValve.java:118)
        at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:106)
        at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:49)
        at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:67)
        at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:145)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
        at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:61)
        at org.wso2.carbon.tomcat.ext.valves.RequestEncodingValve.invoke(RequestEncodingValve.java:49)
        at org.wso2.carbon.tomcat.ext.valves.RequestCorrelationIdValve.invoke(RequestCorrelationIdValve.java:137)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

Exception in thread "https-jsse-nio-9443-exec-38" java.lang.IllegalMonitorStateException
        at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:151)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1261)
        at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:457)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:449)
        at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
        at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

This issue is being closed due to extended inactivity. Please feel free to reopen it if further attention is needed. Thank you for helping us keep the issue list relevant and focused!

authors: deshalw isharak


text:
[New feature testing] Magic link

Is your suggestion a test requirement/change or improvements of the test framework? Please describe.
Required to test new feature magic link
Describe the solution you would prefer

[ ] Create test plan
[ ] Add configurations
[ ] Execute test
[ ] Result analysing and issue reporting

Optional Fields
Additional context

Related Issues:

Test plan - https://docs.google.com/spreadsheets/d/1pqm0tB6OOBmHTlgj0ynvmLHgiewGzz5P8oJGMKERCIw/edit?usp=sharing

1st round of testing is completed and issue observed as below,
L1
Magic link option is not available on Console
L2
Improve the UI of magic link notifications
Different behaviours can be see for links that are invalid on Magic link
Incorrect behaviour when login with user who doesn't have email


text:
Enabled status of userstores should be displayed in the userstore list page in the Console

Describe the improvement
The enabled status of the userstore being displayed in the userstore list could improve the user experience. Currently, no other information regarding the userstore except its name and description are shown in the list.
Additional context

To display this status, the userstores endpoint needs to be queried for each and every userstore in the list, which is a wasteful process. A better solution would be is to have this status returned with the list of userstores. The relevant backend issue can be tracked here: https://github.com/wso2/product-is/issues/10158

authors: ashendes thivi


text:
ORNM feature example

This is not really a bug report.
I was going through the document of the new release to see the new features, and noticed the under
16.8.5 Ornament — ornm
that a font supporting this feature need to be found. So I went through the free fonts distributed with TeXLive, and find only one such font, /usr/local/texlive/2016/texmf-dist/fonts/opentype/public/missaali/Missaali-Regular.otf
A blackletter. Maybe this will be of help.
There are a few commercial fonts also support this feature, such as Arno, Minion, Brioso, and a few other Robert Slimbach designs, among others. Below is an example of the feature applied to Arno's \textbullet
\documentclass{article}
\usepackage{fontspec}
\usepackage{tikz}
\setmainfont{Arno Pro}

\def\test#1{{\addfontfeatures{Ornament=#1}#1. \textbullet\ }}

\begin{document}
\foreach \x in {0,...,56} {\test{\x}}
\end{document}

Thanks! I have been trying to remove commercial fonts from the main documentation to make it more portable, but I’ll look into the texmf one. No idea which ornaments it provides? :)

I've looked into missaali, and unfortunately its "ornm" feature is a bit obscure. Oh well :) Thanks for the suggestion though!

authors: wspr zhouyan

repo: wspr/fontspec


text:
Fixed R8 missing classes

Fixes #178
-> For inbox model classes added @SerializedName so its rules is applied to these classes
-> the whole api package kept as internal classes in *Api.kt might get thrown away by R8

I am still reviewing this if I can squeeze in some allowobfuscation :)

inbox subfolder models should be fine with @SerializedName annotation - tested and it is working.
and with the .api.** remark. I added it broadly like this because multiple internal classes inside InboxApi, OperationApi,  and PushApi files are still getting removed.

repo: wultra/mtoken-sdk-android


text:
docs: Improved example search

Convert to simplified examples repo. Goal here is whenever I create an example for someone, I'll push it to https://github.com/wxt-dev/examples and it will show up in the docs automatically.
I'm not merging this until I move all the examples over to the new repo.

@davestewart I would love your option on this new search, if it's more helpful than the last.

New: https://deploy-preview-751--creative-fairy-df92c4.netlify.app/examples.html
Old: https://wxt.dev/examples.html

Hey,
Interesting idea! Not sure how much value the search offers, though I do like the idea of a separate repo. Interestingly I just checked Chrome's examples, and they do the same!
I think a left-hand filter would work better. There's certainly enough space on the page to do that as well. Also wrapping checkboxes with labels would make for better UX.
FWIW, Nuxt and its Content module, along with server/api routes is another option to do search, vs a script + JSON update. Might be worth considering in the future.

@davestewart It is based off Chrome's new examples! I really like how to you can quickly find examples that use a specific API, and see the "right" way to use them. I wanted to add the packages filter as well, so people can find examples using different NPM packages.
I can clean up the CSS and move it to the side, just wanted to get a POC out for some feedback.

@davestewart Hows this?

Also wrapping checkboxes with labels would make for better UX.

Not really sure what you meant by this, I was already wrapping the labels. This time I tried not wrapping (you can scroll horizontally)

Bedtime here; will take a look first thing!

repo: wxt-dev/wxt


text:
Accessing nested properties with special names

I have an issue with accesing properties, which names have '#' sign.
I have a JSON object that looks like this:
{
  "artist": {
    "id": "123",
    "#text": "Foo Fighters"
  }
}

How can I access #text property? In JS it is possible to acces properties through square brackets: artist['#text']. But in handlebars whenever I try to do something similar I receive parse error.

Have a look here: https://handlebars-draft.knappi.org/guide/expressions.html#literal-segments
artist[#text] is the correct expression.

I cannot access this site.
Error DNS_PROBE_FINISHED_NXDOMAIN

Sorry for that. The site is up again, at least until we have migrated to the proper domains.
I have also corrected my answer above.

Seems like it's working now. Thanks!

authors: MolinRE nknapp

license: mit


text:
version 1.4 just returning error 500 in apache 2.4.18

Hello,
I just installed the mod_cspnonce 1.14 in Ubuntu server 16.04.07 LTS with apache 2.14.18 and apparently the cspnonce module cannot generate the nonce and makes the apache return error 500. How to solve this?
Thank you.

Upgrade your kernel.

i can't.

Ok. 🤷🏻♂

I see. Removed your module. Thank you anyway.

Just to inform you: in your main page you mention that Linux: upgrade to kernel 3.17 or higher. Ubuntu server 16.04.07 LTS has kernel 4.4.0-042stab139.1 but your module does not work.

16.04 is no longer receiving updates. Update to a supported OS.
Kernel requirements might be higher. I'm not digging into it right now. Just upgrade to a supported OS / kernel and try again.

authors: Kaspanoombro wyattoday


text:
added inner stroke width option

hi would you please consider the changes made? this is to allow a difference in stroke width between the inner cicrle and outer circle thank you

This works great!

repo: wyzant-dev/vue-radial-progress


text:
$spec does not work

When using the $spec keyword on element level, the following error is shown:
GET http://localhost:3000/medialibrary/tracks/$spec
TypeError: Cannot read property 'getValue' of undefined
    at /Users/gxc9gk6/source/rsiServer/bin/index.js:281:36
    at Layer.handle [as handle_request] (/Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/layer.js:95:5)
    at /Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/index.js:281:22
    at param (/Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/index.js:354:14)
    at param (/Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/index.js:365:14)
    at Function.process_params (/Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/index.js:410:3)
    at next (/Users/gxc9gk6/source/rsiServer/node_modules/express/lib/router/index.js:275:10)

Current output is
HTTP/1.1 404 Not Found
X-Powered-By: Express
Vary: Origin
Access-Control-Expose-Headers: Location
Date: Mon, 19 Feb 2018 11:07:00 GMT
Connection: close
Transfer-Encoding: chunked

I think the $spec keyword definition has changed in protocol v1.8.x to be supported only at the service level and reveal the specification of the entire service.
This issue should be closed, and open a new issue $spec always return 404 instead.

good idea.. lets close and open a new one
On Mon, Feb 19, 2018 at 12:12 PM, Denny Trebbin notifications@github.com
wrote:

I think the $spec keyword definition has changed in protocol v1.8.x to be
supported only at the service level and reveal the specification of the
entire service.
This issue should be closed, and open a new issue $spec always return 404
instead.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/wzr1337/rsi.server/issues/61#issuecomment-366658747,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ADiF7Tcg6WJXcP2hfk1Lbtas83Mvt33kks5tWVcrgaJpZM4PdWw9
.

--

Dr. Patrick Bartsch
(web)


text:
make isoDateFromDateInput allow months as words

Spontaneous contribution after spotting discussion in x-gov about something related and already having the code handy
How useful it is for prototypes 🤷♂ so don't feel like you have to accept it! 🙌

Love this! Merged and released in v1.4.0. Thanks for contributing!

authors: oscarduignan paulrobertlloyd

repo: x-govuk/govuk-prototype-filters


text:
Не работает автодополнение в VSC

1c-syntax ver. 1.1.0

после нажатия Enter Shift-Enter Ctrl-Enter

Охохох, повылезало.
https://github.com/xDrivenDevelopment/1c-syntax/issues/67
@bambr1975 FYI.

ага, вижу. Уже смотрю

Если что, в Атоме вроде все корректно.

Уф. Все просто тоже
"when" : "editorTextFocus && !suggestWidgetVisible && editorLangId == 'bsl'"

Вошло в 1.1.2 для VSC.
@bambr1975 @vsuh спасибо!


text:
🛑 Blog is down

In 190fc00, Blog (https://blog.webverge.io) was down:

HTTP code: 403
Response time: 56 ms

Resolved: Blog is back up in 6a1a084.

repo: xaif/uptime-monitor


text:
Feature/NegateIntegerConverter

Please take a moment to fill out the following:
Changes Proposed in this pull request:

Negate integer converter: Xamarin.Toolkit.Converters.NegateIntegerConverter
Negate integer converter test: Converters.Tests.NegateIntegerConverterTest

While this might just still end up in the new reboot version, I'll close this for now since the codebase will probably drastically change. Thanks!

repo: xamarin/XamarinCommunityToolkit


text:
Can i obtain merge_yaml from Lint function?

Hi, really nice project, I appreciate that and use it in production code.
But I have some questions:
Why there are two response types for Lint:
https://github.com/xanzy/go-gitlab/blob/6b645e887f27bdee7a6aa2d9ee7cf95f467f50da/validate.go#L35-L50
And why the first one doesn't have the MergedYaml field?
I want to use the Lint function https://github.com/xanzy/go-gitlab/blob/6b645e887f27bdee7a6aa2d9ee7cf95f467f50da/validate.go#L55
Because I can pass any gitlab-ci file of any branch, but this function does have a merged_yaml result.
If a use the ProjectLint function I can only use the gitlab-ci file from the default branch.
Any idea how to solve this?

They are different because they are used for different endpoints that support different types (see the doc links on both types). I do see in the docs that the LintResult should also have a MergedYaml field. Once that is added I guess you should be good right?

They are different because they are used for different endpoints that support different types (see the doc links on both types). I do see in the docs that the LintResult should also have a MergedYaml field. Once that is added I guess you should be good right?

Sure, if you added this field will solve my problem, thanks for that :+1:

Fixed by #1287

Fixed by #1287

Thanks a lot

authors: JohnWillker svanharmelen

repo: xanzy/go-gitlab


text:
GeoIP database needs to be loaded

MaxMind database needs to be loaded to retrieve geo location.

Fixed in the develop branch.
https://github.com/xavier-hernandez/goaccess-for-nginxproxymanager/commit/651b180cba038799a2d64b59b3c00fdba2b6f170


text:
Adding note related to the RD program and updating Cerebrata offer (products)

Adding note related to the RD program and updating Cerebrata offer (products).

These are my last 2 cents for now :)
Thanks for creating this website and publishing it on GitHub!

Yw! Thank you!

repo: xavierdecoster/mvpperks


text:
TypeError: Cannot read property 'text' of undefined

I'm getting a error here:
return b.getElementsByClassName('_gUb')[0].text()
^

Same issue for me

That's cause this is no proper image recognition package. If you guys look through the code, it's just doing a reverse image search on google and it's trying to extract the text that google associates it with. However the class of the element from google changes over time, and causes this problem...
If you want to use this, even though it's working just as a reverse image search on google, you can just edit that line in node_modules (or fork and create your own package out of this one) and replace in these lines https://github.com/xc0d3rz/npm-imagerecognition/blob/master/imagerecognition.js#L82 the class with the correct one that google is using (basically at the time of writing this message you should just replace _gUb with fKDtNb)

authors: Bellisario chriseckman soringabriel


text:
Polyfills included in build/jodit.js supporting IE are not included in build/jodit.min.js

Jodit Version:  Release 3.2.46
Browser:  ALL
OS:  ALL
Polyfills included in build/jodit.js supporting IE are not included in build/jodit.min.js
Expected behavior:
build/jodit.min.js is the minified/uglified version of build/jodit.js
Actual behavior:
build/jodit.min.js is not just the minified version of build/jodit.js, some code is discarded or innacesible.

build/jodit.es2018.min.js does not have polyfills
but build/jodit.min.js has

Sorry, talking about version 3.2.46 (latest release, link from website)

Fixed thank you https://github.com/xdan/jodit/releases/latest

Thank you, really nice work!

repo: xdan/jodit


text:
It's ready

Question
The project I've been working on for the part few months is now ready-enough to reveal to the world. Transformers.js is an essential part of it, and I just want to say thank you for your amazing work.
https://www.papeg.ai
As you can see in the source code, there are lots of workers that implement Transformers.js workers; translation, image description, STT, TTS, speaker verification, image- and music generation, RAG embedding, and more!
https://github.com/flatsiedatsie/papeg_ai
Keep on rockin' !
// Reddit post: https://www.reddit.com/r/LocalLLaMA/comments/1g0jehn/ive_been_working_on_this_for_6_months_free_easy/
(Feel free to close this issue at any time)

Wow, this is amazing - great stuff! 🔥 Do you have a video or post on twitter that I can re-share? I'd love to help amplify!

This is really great project! We have been in contact on Reddit. I just left you some comments there from my testing of non-English languages :-)

Wow, this is amazing - great stuff! 🔥 Do you have a video or post on twitter that I can re-share? I'd love to help amplify!

Can you help amplify onnxslim, and I don't have a twitter account because of location restriction.

(just squashing some bugs, then I'll gladly take you up on your offer)

authors: cyberluke flatsiedatsie inisis xenova


text:
CP-13694: Add automatic self-update to .net guest

Signed-off-by: Cheng Zhang cheng.zhang@citrix.com

Looks good.  There is one change I think I would ask for:  Can we set the default URL to 127.0.0.1 - just in case it makes it into the real world before we get a proper server address, its probably best if it only looks at the local machine (and it'll prove that it copes cleanly if it gets a 404 or isn't able to connect to the download server at all)

HI @benchalmers , I made a commit to change the default to 127.0.0.1
please help to review the code again.
Thanks.

Hi @benchalmers
the latest commit was added to add the function as a licensed feature based on John's design of xenstore.

This is good.
I'll accept this, but as far as I can tell, it doesn't complete CP-13694 as there isn't a way for a guest administrator to change the download URL (which should be set via a registry key on the guest)

authors: benchalmers cheng--zhang

repo: xenserver/win-xenguestagent


text:
Exclude tests from setup.py install

Same as skidl#38. I've done these two because I wanted to use skidl and needed to package this as a dependency. You might want to go through your other python repos and do the same, I don't want to flood you with PRs.

Thanks!

authors: CBJamo xesscorp

repo: xesscorp/kinparse


text:
Internal server error (500) when accessing empty note

When I click on edit to change the text of a note, clear everything and save it then this results in a 500 response when accessing it. Here is the final trace of the logs.
pydantic.error_wrappers.ValidationError: 1 validation error for Note
content
  none is not an allowed value (type=type_error.none.not_allowed)

Edit: I found out how to delete an empty note using the deta run cli: deta run del -- --name :note_name

Thanks for reporting this.
Turns out this is a db issue where empty strings are stored as null. I have forwarded this issue to the db team.
Nonetheless, I have pushed an update that should fix this issue.
Lines 58-59 on main.py:
if not note_dict["content"]: # db can't store empty strings, fix db
        note_dict["content"] = ""

authors: Bartcardi xeust

repo: xeust/yarc


text:
[BUG] Problems with custom grid ufunc and dask options

What happened:
I was trying to check out how to write and apply custom grid_ufuncs and ran into an issue, that @TomNicholas and I concluded was actually a bug.
I start with a simple dataset, that is chunked, but not along any core dimensions. As such I expect dask='parallelized' to work as input.
from xgcm.grid_ufunc import as_grid_ufunc
from xgcm.test.test_grid_ufunc import create_1d_test_grid_ds, create_1d_test_grid

ds = create_1d_test_grid_ds('X')
grid = create_1d_test_grid('X')
da = np.sin(grid._ds.X_c)
da = da.chunk({'X_c':-1})
da

# simple forward difference
@as_grid_ufunc(
    signature="(ax0:center)->(ax0:right)",
    boundary_width={"ax0": (1, 0)},
    dask='parallelized'
)
def test_ufunc(a):
    out = a[..., :-1] - a[..., 1:]
    return out

ufunc_diff = test_ufunc(grid, da, axis='X')
ufunc_diff

But this returns the following error:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/tmp/ipykernel_2409/2481888569.py in <module>
     19     return out
     20
---> 21 ufunc_diff = test_ufunc(grid, da, axis='X')
     22 ufunc_diff

~/xgcm/xgcm/grid_ufunc.py in __call__(self, grid, axis, *args, **kwargs)
    158         dask = kwargs.pop("dask", self.dask)
    159         map_overlap = kwargs.pop("map_overlap", self.map_overlap)
--> 160         return apply_as_grid_ufunc(
    161             self.ufunc,
    162             *args,

~/xgcm/xgcm/grid_ufunc.py in apply_as_grid_ufunc(func, axis, grid, signature, boundary_width, boundary, fill_value, keep_coords, dask, map_overlap, *args, **kwargs)
    477
    478     # Perform operation via xarray.apply_ufunc
--> 479     results = xr.apply_ufunc(
    480         mapped_func,
    481         *rechunked_padded_args,

/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/core/computation.py in apply_ufunc(func, input_core_dims, output_core_dims, exclude_dims, vectorize, join, dataset_join, dataset_fill_value, keep_attrs, kwargs, dask, output_dtypes, output_sizes, meta, dask_gufunc_kwargs, *args)
   1157     # feed DataArray apply_variable_ufunc through apply_dataarray_vfunc
   1158     elif any(isinstance(a, DataArray) for a in args):
-> 1159         return apply_dataarray_vfunc(
   1160             variables_vfunc,
   1161             *args,

/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/core/computation.py in apply_dataarray_vfunc(func, signature, join, exclude_dims, keep_attrs, *args)
    284
    285     data_vars = [getattr(a, "variable", a) for a in args]
--> 286     result_var = func(*data_vars)
    287
    288     if signature.num_outputs > 1:

/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/core/computation.py in apply_variable_ufunc(func, signature, exclude_dims, dask, output_dtypes, vectorize, keep_attrs, dask_gufunc_kwargs, *args)
    670                         for axis, dim in enumerate(core_dims, start=-len(core_dims)):
    671                             if len(data.chunks[axis]) != 1:
--> 672                                 raise ValueError(
    673                                     f"dimension {dim} on {n}th function argument to "
    674                                     "apply_ufunc with dask='parallelized' consists of "

ValueError: dimension X_c on 0th function argument to apply_ufunc with dask='parallelized' consists of multiple chunks, but is also a core dimension. To fix, either rechunk into a single dask array chunk along this dimension, i.e., ``.chunk(dict(X_c=-1))``, or pass ``allow_rechunk=True`` in ``dask_gufunc_kwargs`` but beware that this may significantly increase memory usage.

What seems to happen here is that the padding adds chunks along the core dimension X_c, which should be 'fused' with the 'main' chunk.
This is not happening because of this logic.
A possible solution would be to apply the padding fusion always when padding is actually executed, and not just if map_overlap is specified.

Looks like you forgot to paste in the actual error.

Ah thanks. Updated above.

The existence of this bug is perhaps a motivation to include a hypothesis test that tries out lots of different chunking schemes, like we have in xhistogram and in rechunker.

Closed by #435

authors: TomNicholas jbusecke rabernat

repo: xgcm/xgcm


text:
add CLGs for permutation factories

We recently implemented the permutation factory. This functionality should be provided by the CLG collection. That means, creating CLGs handling permutation factory primitives.

Closing in favour of #113.


text:
Proposal: trap init functions

Currently init functions are skipped, that makes it impossible to inject mock and collect trace during the init stage.
However since init functions just run once and run serially,  it has no performance impact at all. It might be useful.

A successor of https://github.com/xhd2015/go-inspect/tree/master/depcheck/cmd


text:
Please upload to supermarket.

Hi, the most recent version of this cookbook on supermarket is 2.1.0. Can you please update?

+1

Not until the v3 milestone is complete https://github.com/xhost-cookbooks/openvpn/milestones.
Feel free to contribute!

Thanks @flaccid, looking forward to v3 then :)

authors: flaccid jperville ohlol

repo: xhost-cookbooks/openvpn


text:
Documentation issue

OpenBLAS make apparantly uses many kewords, which are poorly documented.
For instance, make NUM_THREADS=64 USE_OPENMP=1 USE_THREAD=1 PREFIX=...
Is there a full list of what make can accept?
Thank you.
Andrew

Please see Makefile.rule

Many thanks. Today I learned.

It may be a bit unusual to document it this way, but this is how it was already done in the original GotoBLAS - and it is even mentioned in the "GotoBLAS_02QuickInstall.txt" document that is retained from that time.

authors: andrewshyichuk martin-frbg

repo: xianyi/OpenBLAS


text:
MAX_STACK_ALLOC + Segfault

Changing the default value of MAX_STACK_ALLOC may not have been a good idea. Even with the changes from (https://github.com/jeromerobert/OpenBLAS/commit/b17ccb4c5c5ef3a41b7a5040f1c604348f8cf6f0), I am still getting a Segfaults.
Example:
Multiplication of a 24 x 18 matrix with a 18 x 1 vector (filled with random doubles [0.0, 1.0]).
No problems with:

make BINARY=64 TARGET=NEHALEM USE_THREAD=0 MAX_STACK_ALLOC=0

make BINARY=64 TARGET=SANDYBRIDGE USE_THREAD=0 MAX_STACK_ALLOC=0

make BINARY=64 TARGET=HASWELL USE_THREAD=0 MAX_STACK_ALLOC=0

make BINARY=64 TARGET=NEHALEM USE_THREAD=0 MAX_STACK_ALLOC=2048

make BINARY=64 TARGET=SANDYBRIDGE USE_THREAD=0 MAX_STACK_ALLOC=2048

Segfault with:

make BINARY=64 TARGET=HASWELL USE_THREAD=0 MAX_STACK_ALLOC=2048

Please note that I am also getting segfaults, if I enforce the Sandybridge implementation together with MAX_STACK_ALLOC > 0. It just does not happen for this particular case.
System Detail:
cpu vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
stepping : 3
microcode : 0x16
OS ... Linux ====> LinuxMint / Ubuntu, Trusty with kernel 3.16.0-36
Architecture ... x86_64
BINARY ... 64bit
C compiler ... GCC (command line : gcc) ====> gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Fortran compiler ... GFORTRAN (command line : gfortran) ===> GNU Fortran (Ubuntu 4.8.2-19ubuntu1) 4.8.2

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/14438646-max_stack_alloc-segfault?utm_campaign=plugin&utm_content=tracker%2F69691&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F69691&utm_medium=issues&utm_source=github).

Which version of OpenBLAS is this ? That patch has already been applied in the develop branch.
Also can you share a small code sample that displays the problem, just in case it might be something different ?

I compile from these sources: http://github.com/xianyi/OpenBLAS/archive/v0.2.14.zip
(already contains the "volatile" fix)
Since I use scalanlp/Breeze, which in turn interfaces with BLAS via fommil/netlib-java (JNI binding) it is hard to tell what the actual invocation looks like. If you have these libraries and a Scala REPL you can try the following commands to reproduce the problem.

import breeze.linalg._
import scala.util._
val a = DenseMatrix.fill[Double](24, 18)(Random.nextDouble())
val b = DenseVector.fill[Double](18)(Random.nextDouble())
a * b

First try the development version.
See for instance:
https://github.com/xianyi/OpenBLAS/commit/a4c96eca679664a70c34b40026bbc5ad55825fd2
Which has been applied later.
2015-05-12 14:04 GMT+02:00 Matthias Langer notifications@github.com:

I compile from these sources:
http://github.com/xianyi/OpenBLAS/archive/v0.2.14.zip
https://github.com/xianyi/OpenBLAS/archive/v0.2.14.zip
(already contains the "volatile" fix)
Since I use scalanlp/Breeze, which in turn interfaces with BLAS via
fommil/netlib-java (JNI binding) it is hard to tell what the actual
invocation looks like. If you have these libraries and a Scala REPL you can
try the following commands to reproduce the problem.
import breeze.linalg._
import scala.util._
val a = DenseMatrix.fill[Double](24, 18)(Random.nextDouble())
val b = DenseVector.fillDouble(Random.nextDouble())
a * b
—
Reply to this email directly or view it on GitHub
https://github.com/xianyi/OpenBLAS/issues/567#issuecomment-101252668.

--
Kind regards Nick

This is probably not be your problem, but maybe you can help me here. Compiling the current head-revision of OpenBLAS works fine. However, fommil/netlib-java's JNI loader fails to recognize the library as a valid BLAS implementation. libopenblas_haswell-r0.2.14.so is definitely there and update-alternatives definitely points to the right file. Not sure why it refuses it. When I compile the version from the homepage (http://github.com/xianyi/OpenBLAS/archive/v0.2.14.zip) there is no such problem. Did anything significant about the library's internal structure change since that release?

I am not experienced at all in java. Does it print any debugging
information?
I haven't experienced anything I should change, but then again, java hasn't
been my environment.
2015-05-12 15:15 GMT+02:00 Matthias Langer notifications@github.com:

This is probably not be your problem, but maybe you can help me here.
Compiling the current head-revision of OpenBLAS works fine. However,
fommil/netlib-java's JNI loader fails to recognize the library as a valid
BLAS implementation. libopenblas_haswell-r0.2.14.so is definitely there
and update-alternatives definitely points to the right file. Not sure why
it refuses it. When I compile the version from the homepage (
http://github.com/xianyi/OpenBLAS/archive/v0.2.14.zip
https://github.com/xianyi/OpenBLAS/archive/v0.2.14.zip) there is no
such problem. Did anything significant about the library's internal
structure change since that release?
—
Reply to this email directly or view it on GitHub
https://github.com/xianyi/OpenBLAS/issues/567#issuecomment-101270757.

--
Kind regards Nick

cc @fommil ,
@bashimao  , I think you need contact netlib-java project.

If it doesn't work from netlib java then it means you're not meeting the CBLAS / LAPACK API standard. It works for all other implementations I know about. Either the OP has a DevOps issue or your API is broken.

@fommil @xianyi Thanks for your help. Well this is a little bit embarrassing. I am now able to load the library with netlib-java. To be honest, I am not sure what went wrong before. My environment settings have not changed. I also checked the update log of my OS. But there is nothing that can explain this. For what it's worth. The solution to this problem is apparently: "Sleep one night and and reboot the machine!"
@xianyi  @zerothi Having now solved the load-library-issue, I can hereby confirm that this was a bug in the 0.2.14 (d0c51c4) release that has already been solved in the development version. The change that actually solves my particular segfault problem is commit 9798481, which adds the blas_memory_alloc_nolock function.

:-)

Great! I am going to close this issue. If you have any questions, please don't hesitate to reopen it

authors: bashimao fommil martin-frbg xianyi zerothi


text:
vue3版本时，dayjs设置local为zh-cn时，显示错误

import dayjs from 'dayjs'
import 'dayjs/locale/zh-cn'
dayjs.locale('zh-cn')

请问有解决方法嘛


text:
OpenAPI3还能使用globalResponses吗？ 如果自定义响应如何做？

OpenAPI3还能使用globalResponses吗？ 如果自定义响应如何做？

已在gitee找到解决方案

@Bean
public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() {
    return openApi -> {
        openApi.getPaths().values().forEach(pathItem -> pathItem.readOperations().forEach(operation -> {
            Arrays.stream(ResponseCode.values()).forEach(responseCode -> {
                operation.getResponses().put(String.valueOf(responseCode.getCode()), new ApiResponse().description(responseCode.getMsg()));
            });
        }));
    };
}


text:
Vimeo90K EDVR training not converging

Trying to train a new model based on Vimeo90K dataset to achieve a similar performance to the pretrained model.
ISSUE: The training never converge.
Opt file used below:
    name: 001_EDVR_L_x4_SR_Vimeo90k_whatever
    model_type: EDVRModel
    scale: 4
    num_gpu: 2  # set num_gpu: 0 for cpu mode
    manual_seed: 10

    datasets:
      train:

        name: Vimeo90k
        type: Vimeo90KDataset
        dataroot_gt: /VSR/workspace/datasets/vimeo90k/vimeo_septuplet/sequences/
        dataroot_lq: /VSR/workspace/datasets/vimeo90k/vimeo_septuplet_matlabLRx4/sequences/
        meta_info_file: basicsr/data/meta_info/meta_info_Vimeo90K_test_slow_GT.txt
        io_backend:
          type: disk

        num_frame: 5
        gt_size: 256
        random_reverse: false
        use_flip: true
        use_rot: true

        use_shuffle: true
        num_worker_per_gpu: 3
        batch_size_per_gpu: 4
        dataset_enlarge_ratio: 200

      val:
        name: Vimeo90k
        type: VideoTestVimeo90KDataset
        dataroot_gt: /VSR/workspace/datasets/vimeo90k/vimeo_septuplet/sequences/
        dataroot_lq: /VSR/workspace/datasets/vimeo90k/vimeo_septuplet_matlabLRx4/sequences/
        meta_info_file: basicsr/data/meta_info/meta_info_Vimeo90K_test_fast_GT.txt
        io_backend:
          type: disk

        cache_data: false
        num_frame: 5
        random_reverse: false

    network_g:
      type: EDVR
      num_in_ch: 3
      num_out_ch: 3
      num_feat: 128
      num_frame: 5
      deformable_groups: 8
      num_extract_block: 5
      num_reconstruct_block: 40
      center_frame_idx: ~
      hr_in: false
      with_predeblur: false
      with_tsa: false

    path:
      pretrain_network_g: ~
      strict_load_g: true
      resume_state: ~

    train:
      optim_g:
        type: Adam
        lr: !!float 4e-4
        weight_decay: 0
        betas: [0.9, 0.99]

      scheduler:
        type: CosineAnnealingRestartLR
        periods: [150000, 150000, 150000, 150000]
        restart_weights: [1, 0.5, 0.5, 0.5]
        eta_min: !!float 1e-7

      total_iter: 600000
      warmup_iter: -1
      dcn_lr_mul: 1

      pixel_opt:
        type: CharbonnierLoss
        loss_weight: 1.0
        reduction: sum

    val:
      val_freq: !!float 5e3
      save_img: false

      metrics:
        psnr
          type: calculate_psnr
          crop_border: 0
          test_y_channel: false

    logger:
      print_freq: 100
      save_checkpoint_freq: !!float 5e3
      use_tb_logger: true
      wandb:
        project: ~
        resume_id: ~

    dist_params:
      backend: nccl
      port: 29500

Training a large EDVR is unstable due to the difficulty of learning meaning offsets.
You may try to decrease the lr: !!float 4e-4 to 2e-4

Training a large EDVR is unstable due to the difficulty of learning meaning offsets.
You may try to decrease the lr: !!float 4e-4 to 2e-4

authors: PedroFO xinntao

repo: xinntao/BasicSR


text:
RuntimeError： batched_detect_faces  use_origin_size=False

bboxes = det_net.batched_detect_faces(batch_frames, conf_threshold=0.8, nms_threshold=0.15, use_origin_size=False)

File "python3.10/site-packages/facexlib/detection/retinaface.py", line 320, in batched_detect_faces
frames = frames - self.mean_tensor
RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 1

Maybe related:

https://stackoverflow.com/q/58496858/376454

authors: azuredsky woctezuma

repo: xinntao/facexlib


text:
Comparison of lite vs full model in 0.2.0

Is there any documentation or comparison of the noise suppression quality between the lite and the full 0.2.0 models?

Hey! Have you found any info?

repo: xiph/rnnoise