Pyjion 0.8.0 fails importing pickle with pyjion enabled

On Windows, python -X dev -c "import pyjion; pyjion.enable(); import pickle" randomly emits different errors:
C:\msys64\home\ryuta\packages\coolprop>python -X dev -c "import pyjion; pyjion.enable(); import pickle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'load_next_buffer' is not defined

C:\msys64\home\ryuta\packages\coolprop>python -X dev -c "import pyjion; pyjion.enable(); import pickle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 405, in <module>
    class _Pickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 405, in _Pickler
    class _Pickler:
NameError: name 'save_long' is not defined

C:\msys64\home\ryuta\packages\coolprop>python -X dev -c "import pyjion; pyjion.enable(); import pickle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 405, in <module>
    class _Pickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 405, in _Pickler
    class _Pickler:
NameError: name 'save_str' is not defined

C:\msys64\home\ryuta\packages\coolprop>python -X dev -c "import pyjion; pyjion.enable(); import pickle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'load_additems' is not defined

C:\msys64\home\ryuta\packages\coolprop>python -X dev -c "import pyjion; pyjion.enable(); import pickle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'SHORT_BINUNICODE' is not defined

C:\msys64\home\ryuta\packages\coolprop>python -X dev -c "import pyjion; pyjion.enable(); import pickle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 405, in <module>
    class _Pickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 405, in _Pickler
    class _Pickler:
NameError: name 'save_picklebuffer' is not defined

C:\msys64\home\ryuta\packages\coolprop>python -X dev -c "import pyjion; pyjion.enable(); import pickle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1238, in _Unpickler
    dispatch[FRAME[0]] = load_frame
NameError: name 'FRAME' is not defined

C:\msys64\home\ryuta\packages\coolprop>python -X dev -c "import pyjion; pyjion.enable(); import pickle"

Thanks for raising the issue. I wonder if this is caused by OPT-10. I'm also really confused why this isn't picked up in the smoke tests

Thanks for raising the issue. I wonder if this is caused by OPT-10. I'm also really confused why this isn't picked up in the smoke tests

The name errors don't even match the code :-/

The name errors don't even match the code :-/

It might be platform-specific. I checked out the 0.8.0 commit but can't reproduce this on my MacBook.

It might be platform-specific. I checked out the 0.8.0 commit but can't reproduce this on my MacBook.

Trying on the REPL.
C:\Users\ryuta>python -X dev
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyjion
>>> pyjion.enable()
True
>>> import pickle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'load_tuple3' is not defined
>>> quit()

C:\Users\ryuta>
C:\Users\ryuta>python -X dev
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyjion
>>> pyjion.enable()
True
>>> import pickle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'load_long' is not defined
>>> quit()

C:\Users\ryuta>python -X dev
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyjion
>>> pyjion.enable()
True
>>> import pickle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'load_ext4' is not defined
>>> quit()

Trying on the REPL.
C:\Users\ryuta>python -X dev
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyjion
>>> pyjion.enable()
True
>>> import pickle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'load_tuple3' is not defined
>>> quit()

C:\Users\ryuta>
C:\Users\ryuta>python -X dev
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyjion
>>> pyjion.enable()
True
>>> import pickle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'load_long' is not defined
>>> quit()

C:\Users\ryuta>python -X dev
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyjion
>>> pyjion.enable()
True
>>> import pickle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1134, in <module>
    class _Unpickler:
  File "C:\Users\ryuta\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1742, in _Unpickler
    dispatch[STOP[0]] = load_stop
NameError: name 'load_ext4' is not defined
>>> quit()

@oroppas can you share locale.localeconv() and locale.getconv() on this ticket please.

@oroppas can you share locale.localeconv() and locale.getconv() on this ticket please.

This can be reproduced by putting something which uses the OPT6/7 or OPT10 logic of precomputing hashes for either a subscript or a global. But it needs to be executed via exec().
The only test which is failing in the smoke test has this same bug, to reproduce:
    def test_bad_key(self):
        # Dictionary lookups should fail if __eq__() raises an exception.
        class CustomException(Exception):
            pass

        class BadDictKey:
            def __hash__(self):
                return hash(self.__class__)

            def __eq__(self, other):
                if isinstance(other, self.__class__):
                    raise CustomException
                return other

        d = {}
        x1 = BadDictKey()
        x2 = BadDictKey()
        d[x1] = 1
        for stmt in ['d[x2] = 2',
                     'z = d[x2]',
                     'x2 in d',
                     'd.get(x2)',
                     'd.setdefault(x2, 42)',
                     'd.pop(x2)',
                     'd.update({x2: 2})']:
            with self.assertRaises(CustomException):
                exec(stmt, locals())

To fix this, either:

Find out what is special about hashing strings in this scenario and see if it can be fixed
Disable this optimisation when called in this way (less preferred)

IIRC, this is PyRun_SimpleStringEx(), but that is the same logic used in the C++ unit tests, so I would've thought it would be reproduced there.

This can be reproduced by putting something which uses the OPT6/7 or OPT10 logic of precomputing hashes for either a subscript or a global. But it needs to be executed via exec().
The only test which is failing in the smoke test has this same bug, to reproduce:
    def test_bad_key(self):
        # Dictionary lookups should fail if __eq__() raises an exception.
        class CustomException(Exception):
            pass

        class BadDictKey:
            def __hash__(self):
                return hash(self.__class__)

            def __eq__(self, other):
                if isinstance(other, self.__class__):
                    raise CustomException
                return other

        d = {}
        x1 = BadDictKey()
        x2 = BadDictKey()
        d[x1] = 1
        for stmt in ['d[x2] = 2',
                     'z = d[x2]',
                     'x2 in d',
                     'd.get(x2)',
                     'd.setdefault(x2, 42)',
                     'd.pop(x2)',
                     'd.update({x2: 2})']:
            with self.assertRaises(CustomException):
                exec(stmt, locals())

To fix this, either:

Find out what is special about hashing strings in this scenario and see if it can be fixed
Disable this optimisation when called in this way (less preferred)

IIRC, this is PyRun_SimpleStringEx(), but that is the same logic used in the C++ unit tests, so I would've thought it would be reproduced there.

@tetsuo-cpp this is a pretty juicy issue, do you want to have a go at this one next?

@tetsuo-cpp this is a pretty juicy issue, do you want to have a go at this one next?

Also worth noting that I've already written a test_bad_key with those tests above, but not through an exec() statement and it works fine.
See Tests/test_dict.py

Also worth noting that I've already written a test_bad_key with those tests above, but not through an exec() statement and it works fine.
See Tests/test_dict.py

@tetsuo-cpp this is a pretty juicy issue, do you want to have a go at this one next?

Looks good. I'll have a go this week.

@tetsuo-cpp this is a pretty juicy issue, do you want to have a go at this one next?

Looks good. I'll have a go this week.

>>> locale.localeconv()
{'int_curr_symbol': '', 'currency_symbol': '', 'mon_decimal_point': '', 'mon_thousands_sep': '', 'mon_grouping': [], 'positive_sign': '', 'negative_sign': '', 'int_frac_digits': 127, 'frac_digits': 127, 'p_cs_precedes': 127, 'p_sep_by_space': 127, 'n_cs_precedes': 127, 'n_sep_by_space': 127, 'p_sign_posn': 127, 'n_sign_posn': 127, 'decimal_point': '.', 'thousands_sep': '', 'grouping': []}

>>> locale.localeconv()
{'int_curr_symbol': '', 'currency_symbol': '', 'mon_decimal_point': '', 'mon_thousands_sep': '', 'mon_grouping': [], 'positive_sign': '', 'negative_sign': '', 'int_frac_digits': 127, 'frac_digits': 127, 'p_cs_precedes': 127, 'p_sep_by_space': 127, 'n_cs_precedes': 127, 'n_sep_by_space': 127, 'p_sign_posn': 127, 'n_sign_posn': 127, 'decimal_point': '.', 'thousands_sep': '', 'grouping': []}

locale.localeconv()
{'int_curr_symbol': '', 'currency_symbol': '', 'mon_decimal_point': '', 'mon_thousands_sep': '', 'mon_grouping': [], 'positive_sign': '', 'negative_sign': '', 'int_frac_digits': 127, 'frac_digits': 127, 'p_cs_precedes': 127, 'p_sep_by_space': 127, 'n_cs_precedes': 127, 'n_sep_by_space': 127, 'p_sign_posn': 127, 'n_sign_posn': 127, 'decimal_point': '.', 'thousands_sep': '', 'grouping': []}

thanks, what is  locale.getlocale() and locale.getdefaultlocale()?

locale.localeconv()
{'int_curr_symbol': '', 'currency_symbol': '', 'mon_decimal_point': '', 'mon_thousands_sep': '', 'mon_grouping': [], 'positive_sign': '', 'negative_sign': '', 'int_frac_digits': 127, 'frac_digits': 127, 'p_cs_precedes': 127, 'p_sep_by_space': 127, 'n_cs_precedes': 127, 'n_sep_by_space': 127, 'p_sign_posn': 127, 'n_sign_posn': 127, 'decimal_point': '.', 'thousands_sep': '', 'grouping': []}

thanks, what is  locale.getlocale() and locale.getdefaultlocale()?

Here we go:
>>> locale.getlocale()
('English_United States', 'utf8')
>>> locale.getdefaultlocale()
('en_US', 'cp65001')

Here we go:
>>> locale.getlocale()
('English_United States', 'utf8')
>>> locale.getdefaultlocale()
('en_US', 'cp65001')

Here we go:
>>> locale.getlocale()
('English_United States', 'utf8')
>>> locale.getdefaultlocale()
('en_US', 'cp65001')

thanks @tetsuo-cpp I bet thats the cause ^^ see PEP538 https://www.python.org/dev/peps/pep-0538/

Here we go:
>>> locale.getlocale()
('English_United States', 'utf8')
>>> locale.getdefaultlocale()
('en_US', 'cp65001')

thanks @tetsuo-cpp I bet thats the cause ^^ see PEP538 https://www.python.org/dev/peps/pep-0538/

@tonybaloney
I spent a bit of time on this today. I've narrowed it down to the x2 in d statement.
So this is fine:
with self.assertRaises(CustomException):
    x2 in d

But this isn't:
with self.assertRaises(CustomException):
    exec('x2 in d')

I've disassembled the first example and had a look at the way we handle the CONTAIN_OP opcode but it seems fine. One thing I wasn't sure about was how to inspect the bytecode generated by the exec call. Maybe that'd be helpful.

@tonybaloney
I spent a bit of time on this today. I've narrowed it down to the x2 in d statement.
So this is fine:
with self.assertRaises(CustomException):
    x2 in d

But this isn't:
with self.assertRaises(CustomException):
    exec('x2 in d')

I've disassembled the first example and had a look at the way we handle the CONTAIN_OP opcode but it seems fine. One thing I wasn't sure about was how to inspect the bytecode generated by the exec call. Maybe that'd be helpful.

@tonybaloney
I spent a bit of time on this today. I've narrowed it down to the x2 in d statement.
So this is fine:
with self.assertRaises(CustomException):
    x2 in d

But this isn't:
with self.assertRaises(CustomException):
    exec('x2 in d')

I've disassembled the first example and had a look at the way we handle the CONTAIN_OP opcode but it seems fine. One thing I wasn't sure about was how to inspect the bytecode generated by the exec call. Maybe that'd be helpful.

Try disabling the optimisations in CMake config, e.g. -DOPTIMIZE_HASHED_NAMES=OFF and recompile.

@tonybaloney
I spent a bit of time on this today. I've narrowed it down to the x2 in d statement.
So this is fine:
with self.assertRaises(CustomException):
    x2 in d

But this isn't:
with self.assertRaises(CustomException):
    exec('x2 in d')

I've disassembled the first example and had a look at the way we handle the CONTAIN_OP opcode but it seems fine. One thing I wasn't sure about was how to inspect the bytecode generated by the exec call. Maybe that'd be helpful.

Try disabling the optimisations in CMake config, e.g. -DOPTIMIZE_HASHED_NAMES=OFF and recompile.

@tonybaloney
I spent a bit of time on this today. I've narrowed it down to the x2 in d statement.
So this is fine:
with self.assertRaises(CustomException):
    x2 in d

But this isn't:
with self.assertRaises(CustomException):
    exec('x2 in d')

I've disassembled the first example and had a look at the way we handle the CONTAIN_OP opcode but it seems fine. One thing I wasn't sure about was how to inspect the bytecode generated by the exec call. Maybe that'd be helpful.

Try disabling the optimisations in CMake config, e.g. -DOPTIMIZE_HASHED_NAMES=OFF and recompile.

It still happens with -DOPTIMIZE_HASHED_NAMES=OFF. I'll try toggling the other optimizations and see if it makes a difference.

It seems to be failing even if I turn all the optimizations off in the CMakeOptimizations.txt.
@tonybaloney Do you know if there is a way to disassemble what gets generated by eval? I'm thinking that it'd be worth comparing the difference.

Not to my knowledge, but I spotted this in the test suite (its the last passing test in the CI). Look at the file path. Its got some weird trailing unicode character at the end of it. Wondering if its related.
test_resource_tracker (test.test_multiprocessing_forkserver.TestResourceTracker) ... ok
38959
Traceback (most recent call last):
38960
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/multiprocessing/forkserver.py", line 274, in main
38961
    code = _serve_one(child_r, fds,
38962
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/multiprocessing/forkserver.py", line 313, in _serve_one
38963
    code = spawn._main(child_r, parent_sentinel)
38964
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/multiprocessing/spawn.py", line 125, in _main
38965
    prepare(preparation_data)
38966
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/multiprocessing/spawn.py", line 236, in prepare
38967
    _fixup_main_from_path(data['init_main_from_path'])
38968
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/multiprocessing/spawn.py", line 287, in _fixup_main_from_path
38969
    main_content = runpy.run_path(main_path,
38970
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/runpy.py", line 268, in run_path
38971
    return _run_module_code(code, init_globals, run_name,
38972
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/runpy.py", line 97, in _run_module_code
38973
    _run_code(code, mod_globals, init_globals,
38974
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/runpy.py", line 87, in _run_code
38975
    exec(code, run_globals)
38976
  File "/Users/runner/work/Pyjion/Pyjion/Tests/run_libregr_tests.py", line 6, in <module>
38977
    main()
38978
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/test/libregrtest/main.py", line 716, in main
38979
    Regrtest().main(tests=tests, **kwargs)
38980
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/test/libregrtest/main.py", line 638, in main
38981
    self._main(tests, kwargs)
38982
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/test/libregrtest/main.py", line 668, in _main
38983
    self.find_tests(tests)
38984
  File "/Users/runner/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/test/libregrtest/main.py", line 218, in find_tests
38985
    with open(os.path.join(support.SAVEDCWD, self.ns.fromfile)) as fp:
38986
FileNotFoundError: [Errno 2] No such file or directory: '/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/test_python_2934æ/Tests/python_tests_macos10.txt'

This is the test I've added to reproduce it in C++
TEST_CASE("Test dict hashes") {
    SECTION("test precomputed hash on dict") {
        auto t = CompilerTest(
                "def f():\n"
                "    l = {'a': 1, 'b': 2}\n"
                "    l['a'] = 3\n"
                "    return l['a']"
        );
        CHECK(t.returns() == "3");
    }
    SECTION("test precomputed hash on dict within exec") {
        auto t = CompilerTest(
                "def f():\n"
                "    l = {'a': 1, 'b': 2}\n"
                "    exec('l[\"a\"] = 3')\n"
                "    return l['a']\n"
        );
        CHECK(t.returns() == "3");
    }
}

output:
Testing started at 2:28 pm ...
Traceback (most recent call last):
  File "<string>", line 3, in f
  File "<string>", line 1, in <module>
NameError: name 'l' is not defined
Collected 0 values
load name failed
call function failed
Collected 0 values

/Users/anthonyshaw/CLionProjects/pyjion/Tests/test_compiler.cpp:75: Failure:
  REQUIRE(res.get() != nullptr)
with expansion:
  nullptr != nullptr

/Users/anthonyshaw/CLionProjects/pyjion/Tests/test_compiler.cpp:1690: Failure:
  CHECK(t.returns() == "3")
with expansion:
  t.returns() == "3"
due to unexpected exception with message:
  Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE

Process finished with exit code 2

The operation that fails is LOAD_NAME. That calls PyJit_LoadName or PyJit_LoadNameHash (if DOPTIMIZE_HASHED_NAMES=ON).
I put a breakpoint in and weirdly, f_locals is an empty dictionary.
PyObject* PyJit_LoadName(PyFrameObject* f, PyObject* name) {
    PyObject *locals = f->f_locals;

So this would fail with or without the optimisation.

Short-term workaround https://github.com/tonybaloney/Pyjion/pull/205

@tonybaloney
Sorry for disappearing.
Does this need more investigation? Or do you expect to #206 to solve it.

Just found this issue, and I think what I posted is connected.
https://github.com/tonybaloney/Pyjion/issues/301

resolved in 205, #301 is not related.


Add prompts when running deployment scripts

Try rewriting the deployment scripts in Typescript using Bun with some of these packages:

https://github.com/steveukx/git-js
https://github.com/tj/commander.js
https://github.com/yargs/yargs
https://github.com/terkelg/prompts

Here are some guides on using Bun to write scripts:

https://bun.sh/guides/process/stdin
https://bun.sh/guides/process/ctrl-c
https://bun.sh/guides/process/spawn
https://bun.sh/guides/process/argv
https://bun.sh/guides/process/spawn-stdout


Add sections to wiki providing coding and submission guidelines

Hello Everyone
I am Rudrani Angira , a  Computer Science graduate student at Indiana University . I am highly interested to contribute in the codes for Artificial Intelligence as I am taking that course this semester and following the same textbook .
I was going through the open issues but I could not find any mailing list where I could discuss about how I can contribute . It would be really helpful if someone could please direct me to a mailing list so that I do not spam .
Thanks
Rudrani

Outside of the aima-talk yahoo group:
https://groups.yahoo.com/neo/groups/aima-talk/conversations/messages
There are no mailing lists used. GutHub's Issue tracking is how we plan to manage interests in specific topics or for people to submit suggestions.
Best
Ciaran

Add sections to wiki providing coding and submission guidelines
Structure of project:
This project source code has two parts

Implementation of Pseudo Code
Writing Unit Test Using JUnit.
To  know more about JUnit refer to below links.
http://junit.org/junit4/
https://en.wikipedia.org/wiki/JUnit
Any submission made should ideally follow same Pseudo Code in the book as closely as possible.
Branches in project :
AIMA2e : This branch is no longer supported. Release 0.95 is the final release based on the 2nd edition of the book.
AIMA3e (Current Branch): Any code submitted in this branch should be compaitnle with JDK 7.  Some of its algorithms are yet to be implemented and any contribution will be appreciated.
AIMA4e-Java (In progress) : This branch will consists of complete rewrite of programs from AIMA3e to reflect new features in JDK 8. This will also become the new master branch once the 4th edition of "Artificial Intelligence - A Modern Approach" is published.

Raising an Issue :
If you find any bug in this project or feel that something new should be added to make it better you can use this page to let us know about that by following below steps.

Go to Issue page and click on New Issue

2.In title be specific of what this particular issue is related to. Be more descriptive about details of this issue in comment section. Then click 0n Submit new issue.
Submitting a Pull Request :
After you have solved some of issue you are required to submit a pull request s so that we can review your code in detail.
1.To do this first fork our code (if not already done) and add the code you have written in required branch of forked code.
2. Then click on submit a new pull request.

3.Then compare across forks and select the forks across which you want to compare.

4.Then commit and provide description of how you have solved this issue.
Mailing List :
This project has only one mailing list in Yahoo.
https://groups.yahoo.com/neo/groups/aima-talk/conversations/messages

@ctjoreilly  This explanation by @smsubham can be very useful if added to the Contributing section of the repo's wiki page.

I have update the Contributing and AIMA4e Overview to help address this.


Support install via Bower

Hi, I'm using the original version by jmesnil via Bower. But that version is no longer maintained, and I want to move to your library.
Can you provide support to install your project via Bower? Thanks!

Since npm became the de facto javascript package manager and others like
bower support install from github I wont
Le 23 juil. 2016 10:55, "9you"<EMAIL_ADDRESS>a écrit :

Hi, I'm using the original version by jmesnil via Bower. But that
version is no longer maintained, and I want to move to your library.
Can you provide support to install your project via Bower? Thanks!
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/JSteunou/webstomp-client/issues/19, or mute the
thread
https://github.com/notifications/unsubscribe-auth/ACNytzLVCs25AmYX-K8t8XvkrgJQC9OLks5qYdcXgaJpZM4JTUbg
.

I don't think your project can be import directly from Github via Bower.

If you dont use es6 i might add the dist folder to github
Le 23 juil. 2016 12:10, "9you"<EMAIL_ADDRESS>a écrit :

I don't think your project can be import directly from Github via Bower.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/JSteunou/webstomp-client/issues/19#issuecomment-234710700,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACNyt7VrN2zOOeYhH2C_QP56WwYVegtlks5qYeiTgaJpZM4JTUbg
.

Great. Thanks a lot!

I just added the dist folder to github so users like you that use another package manager than npm can point to github.


Send and Sync not implemented for Ftdi

Is there a specific reason that Ftdi can not implement the Send and Sync traits?
Right now the auto traits are not implemented because the struct contains a (type aliased) raw pointer (FT_HANDLE), which are not Send and Sync.
Is this intentional because ftd2xx does not support it or just an oversight of the auto trait impls?

Not intentional, just an oversight.
I don't see any reason it can't be Send and Sync.  Do you want to change this or should I?

Thanks for the clarification.
I can send a PR fixing this later.


Fix netlist warnings

Input pins and wire labels on the same wire cause netlist shorted output warnings. This commit removes the redundant wire label.
These are the warnings that will be removed
-----------.../sky130_ef_ip__biasgen/xschem/bias_generator_idac_be.sch
Warning: shorted output node: pcasc
Warning: shorted output node: pbias
-----------.../sky130_ef_ip__biasgen/xschem/bias_pstack.sch
Warning: shorted output node: pcasc
Warning: shorted output node: pbias

Here are screenshots of the origin circuit showing input pins and wire labels on the same net.

@RTimothyEdwards these changes are not critical and do not affect the final netlist.

I think this should be raised as an issue in xschem.   Xschem should not generate a warning unless the labels conflict.


Use http instead of ftp to download the tarball

It would be better to use http to download the tarball instead of ftp (doesn't work so well with corporate firewalls and such)
For example http://xmlsoft.org/sources/libxml2-2.9.7.tar.gz could be used instead of ftp://xmlsoft.org/libxml2/libxml2-2.9.7.tar.gz)

Pull requests are welcome.

You want to wrap source code or totally review and make independend libxml2 distribution?


Differentiate date facets in selected filters of Refine.

Problem Description:
-- FUTURE --
The Selected Filters section does not define which date facet was selected. This can cause user confusion when there are more than two date facets under the refine section, such as the result pages of Works, People & Groups, and Events.
Expected Behavior/Solution:
Possible solutions could be to:

add text in front of all date facet, such as: [scope facet name -date]: [Year] to [Year]

ex: Published: 1930 to 1940 rather than 1930 to 1940

Requirements:
TBD based on what the proposed solution is.
Needed for promotion:
If an item on the list is not needed, it should be crossed off but not removed.

[ ] Wireframe/Mockup - Mike
[ ] Committee discussions - Sarah
[ ] Feasibility/Team discussion - Sarah
[ ] Backend requirements - TBD
[ ] Frontend requirements- TBD
[ ] Questions
What other proposed solutions are there?
Do we change all other facets to also show their facet name in front of the facet checkbox selected?

UAT/LUX Examples:

https://lux-front-tst.collections.yale.edu/view/results/works/?facetRequest=true&q={"text"%3A"shakespeare"%2C"_lang"%3A"en"}&sq=shakespeare&wf={"AND"%3A[{"createdDate"%3A"1498"%2C"_comp"%3A">%3D"}%2C{"createdDate"%3A"1592"%2C"_comp"%3A"<%3D"}%2C{"publishedDate"%3A"1593"%2C"_comp"%3A">%3D"}%2C{"publishedDate"%3A"1601"%2C"_comp"%3A"<%3D"}]}&wp=1

Dependencies/Blocks:
Related Github Issues:
Related links:
-BugHerd: https://www.bugherd.com/projects/284041/tasks/2155
Wireframe/Mockup:

@roamye wireframe uploaded

dev 11/11 2024:
should it display as double digits? (ex: 01-01)

no single digit is fine as that is what shows currently.
then should the result cards date be modified to show as single digits?
currently it takes it from the identified_by -> content. A discussion is needed on whether we want to default it to identified by and then to "beginin_of_begin". BH has been made.


[$1000] Link to a Broken/Unfunctional Page

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Go to setting > Help > Playbook > Expensify Playbook for US Based Bootstrapped Startups
Notice the "Step 1: Create your Expensify account" title
In the article under the title "Step 1: Create your Expensify account" Click the link "new.expensify.com"
notice the resulting page

Expected Result:
A new sign-up Page
Actual Result:
Broken image with error reporting and a "The page is no where to be found." text

This line has a broken URL
This line has a typo on Expensify in the URL, and needs to be prefixed by https://
This line needs to be made into a hyperlink to https://new.expensify.com
This line needs to be made into a hyperlink to https://new.expensify.com
This line needs to be made into a hyperlink to https://new.expensify.com

Workaround:
Can the user still use Expensify without this being fixed? Have you informed them of the workaround?
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[x] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: 1.3.16-6
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/43996225/5d017025-e00e-4d8e-a943-ca904d1078d6
https://github.com/Expensify/App/assets/43996225/ac0a4f33-eb9a-467a-9712-00d47cc8ba5a
Expensify/Expensify Issue URL:
Issue reported by: @amanuel-arega
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1684485277897929
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01bbc1f4dbe451c351
Upwork Job ID:<PHONE_NUMBER>505835008
Last Price Increase: 2023-05-22

Proposal
Please re-state the problem that we are trying to solve in this issue.
Link to a Broken/Unfunctional Page
What is the root cause of that problem?
The link is not given correctly here
https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-US-Based-Bootstrapped-Startups.md?plain=1#L17
It should start with `https://
What changes do you think we should make in order to solve the problem?

Update it to be https://new.expensify.com
What alternative solutions did you explore? (Optional)

Updated with alternative solution - https://github.com/Expensify/App/issues/19396#issuecomment-1557593993

@zsgreenwald Hey! Looks like you were last to touch this help page, so FYI there's some broken links in here.
eg, this line:
- See our *[Playbook for Small to Medium-Sized Businesses]([url](https://help.expensify.com/articles/playbooks/Expensify-Playbook-for-Small-to-Medium-Sized-Businesses))* if you are more concerned with maintaining profitability than growing top-line revenue.

Should be:
- See our *[Playbook for Small to Medium-Sized Businesses](https://help.expensify.com/articles/playbooks/Expensify-Playbook-for-Small-to-Medium-Sized-Businesses)* if you are more concerned with maintaining profitability than growing top-line revenue.

@alitoshmatov Nice spot with the other two pages too. I updated the OP to list out the five things I've found so far

Proposal
Please re-state the problem that we are trying to solve in this issue.
Link to a Broken/Unfunctional Page
What is the root cause of that problem?
The link is not given correctly here
https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-US-Based-Bootstrapped-Startups.md?plain=1#L17
It should start with `https://
What changes do you think we should make in order to solve the problem?

https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-US-Based-Bootstrapped-Startups.md?plain=1#LL17C63-L17C63
Should remove mismatched brackets and url word, and fixed.
2.
https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-US-Based-Bootstrapped-Startups.md?plain=1#LL17C63-L17C63
We should have a valid url beginning with https://
3. new.expensify.com should be hyperlink
4, 5. We should update old link to new new.expensify.com
What alternative solutions did you explore? (Optional)

Posted updated proposal to cover all cases - https://github.com/Expensify/App/issues/19396#issuecomment-1557864567

@aimane-chnaif
Here is instructions to run docs locally
https://github.com/Expensify/App/blob/4067c0f382b55ec6797d851cf957bec706fdc4f3/docs/README.md#L35-L42

@aimane-chnaif Yes

Moving forward with the assignment. I will need someone to take this over if we can reapply the Engineering label. 🙇

@conorpendergrast
Should I also update this to be clickable links

https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-US-Based-Bootstrapped-Startups.md?plain=1#L90
https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-US-Based-Bootstrapped-Startups.md?plain=1#L34
https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-Small-to-Medium-Sized-Businesses.md?plain=1#L283
https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-US-based-VC-Backed-Startups.md?plain=1#L32
https://github.com/Expensify/App/blob/23e5de4a3281a99b1e3e31b2916d5a6bf1d8059a/docs/articles/playbooks/Expensify-Playbook-for-US-based-VC-Backed-Startups.md?plain=1#L208

Yep, please. For 1 and 2, as they're mentioning Concierge, please link to https://new.expensify.com/concierge

PR is reviewed and on Staging

Paid, with urgency bonus, @aimane-chnaif and @alitoshmatov. Waiting for contract to be accepted to pay amanuel-arega

Paid amanuel-arega!

Final step is the bugzero checklist

I would tend to agree, yes. Closing out!


feat: Feature/secureli 128 bats gh action

secureli-128

This PR adds new testing step to run BATS e2e to build and test workflow
Changes

Update .github/workflows/build_and_test.yml with BATS package
Update pyproject.toml with verbose argument
Update tests/end-to-end/test.bats with passing criteria

Testing

Updated tests/end-to-end/test.bats

Clean Code Checklist

[X] Meets acceptance criteria for issue
[ ] New logic is covered with automated tests
[ ] Appropriate exception handling added
[ ] Thoughtful logging included
[ ] Documentation is updated
[ ] Follow-up work is documented in TODOs
[ ] TODOs have a ticket associated with them
[X] No commented-out code included

Duplicate PR, closing


"Install WSL on Windows hosts when proxy tests are enabled.." fails intermittently with repeated "adduser: Only one or two names allowed." until operation canceled

From unrelated PR:
https://github.com/Azure/azure-sdk-for-cpp/pull/4393
On Win2022_Win32Api_debug_tests_x64
https://dev.azure.com/azure-sdk/public/_build/results?buildId=2597158&view=logs&j=62f96420-69e0-55c5-87e4-47c3c06a1c78&t=569ea126-27b5-5a23-71c4-ce1c427a6ea6&l=13328
2023-03-01T01:46:00.5056187Z ##[section]Starting: Install WSL on Windows hosts when proxy tests are enabled..
2023-03-01T01:46:00.5190074Z ==============================================================================
2023-03-01T01:46:00.5190676Z Task         : PowerShell
2023-03-01T01:46:00.5190895Z Description  : Run a PowerShell script on Linux, macOS, or Windows
2023-03-01T01:46:00.5191234Z Version      : 2.212.0
2023-03-01T01:46:00.5191458Z Author       : Microsoft Corporation
2023-03-01T01:46:00.5191742Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell
2023-03-01T01:46:00.5192099Z ==============================================================================
2023-03-01T01:46:01.5860267Z Generating script.
2023-03-01T01:46:01.6316297Z ========================== Starting Command Output ===========================
2023-03-01T01:46:01.6574046Z ##[command]"C:\Program Files\PowerShell\7\pwsh.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\a\_temp\a469cf37-7939-4632-8131-96dc791c0e2c.ps1'"
2023-03-01T01:46:02.1133251Z w�s�l� �-�-�u�p�d�a�t�e� �-�-�w�e�b�-�d�o�w�n�l�o�a�d�
2023-03-01T01:46:02.1135312Z �
2023-03-01T01:46:34.6269336Z �D�o�w�n�l�o�a�d�i�n�g�:� �W�i�n�d�o�w�s� �S�u�b�s�y�s�t�e�m� �f�o�r� �L�i�n�u�x�
2023-03-01T01:46:34.6272232Z �
2023-03-01T01:46:34.6277331Z �
2023-03-01T01:46:34.6286867Z �
2023-03-01T01:46:34.6295130Z �I�n�s�t�a�l�l�i�n�g�:� �W�i�n�d�o�w�s� �S�u�b�s�y�s�t�e�m� �f�o�r� �L�i�n�u�x�
2023-03-01T01:46:34.6297089Z �
2023-03-01T01:46:34.6300165Z �
2023-03-01T01:46:34.6326085Z �
2023-03-01T01:46:34.6356399Z �W�i�n�d�o�w�s� �S�u�b�s�y�s�t�e�m� �f�o�r� �L�i�n�u�x� �h�a�s� �b�e�e�n� �i�n�s�t�a�l�l�e�d�.�
2023-03-01T01:46:34.6377288Z �
2023-03-01T01:46:34.6384952Z �
2023-03-01T01:46:34.6405284Z �
2023-03-01T01:46:34.6408091Z �
2023-03-01T01:46:34.6410020Z �
2023-03-01T01:46:34.6410895Z �w�s�l� �-�-�v�e�r�s�i�o�n�
2023-03-01T01:46:34.6411600Z �
2023-03-01T01:46:34.9516803Z �W�S�L� �v�e�r�s�i�o�n�:� �1�.�1�.�3�.�0�
2023-03-01T01:46:34.9518294Z �
2023-03-01T01:46:34.9519565Z �K�e�r�n�e�l� �v�e�r�s�i�o�n�:� �5�.�1�5�.�9�0�.�1�
2023-03-01T01:46:34.9520252Z �
2023-03-01T01:46:34.9521100Z �W�S�L�g� �v�e�r�s�i�o�n�:� �1�.�0�.�4�9�
2023-03-01T01:46:34.9521567Z �
2023-03-01T01:46:34.9522024Z �M�S�R�D�C� �v�e�r�s�i�o�n�:� �1�.�2�.�3�7�7�0�
2023-03-01T01:46:34.9522467Z �
2023-03-01T01:46:34.9522982Z �D�i�r�e�c�t�3�D� �v�e�r�s�i�o�n�:� �1�.�6�0�8�.�2�-�6�1�0�6�4�2�1�8�
2023-03-01T01:46:34.9540148Z �
2023-03-01T01:46:34.9559633Z �D�X�C�o�r�e� �v�e�r�s�i�o�n�:� �1�0�.�0�.�2�5�1�3�1�.�1�0�0�2�-�2�2�0�5�3�1�-�1�7�0�0�.�r�s�-�o�n�e�c�o�r�e�-�b�a�s�e�2�-�h�y�p�
2023-03-01T01:46:34.9576345Z �
2023-03-01T01:46:34.9600923Z �W�i�n�d�o�w�s� �v�e�r�s�i�o�n�:� �1�0�.�0�.�2�0�3�4�8�.�1�5�4�7�
2023-03-01T01:46:34.9604703Z �
2023-03-01T01:46:34.9619735Z �W�S�L� �i�n�s�t�a�l�l� �o�f� �u�b�u�n�t�u�.�
2023-03-01T01:46:34.9620774Z �
2023-03-01T01:47:33.7992460Z adduser: Only one or two names allowed.
2023-03-01T01:47:34.0451960Z adduser: Only one or two names allowed.
2023-03-01T01:47:34.3090514Z adduser: Only one or two names allowed.
...
2023-03-01T01:48:06.4226063Z adduser: Only one or two names allowed.
2023-03-01T01:48:06.6416411Z adduser: Only one or two names allowed.
2023-03-01T01:48:06.8603802Z adduser: Only one or two names allowed.
2023-03-01T01:48:07.0679236Z adduser: Only one or two names allowed.
2023-03-01T01:48:07.2763055Z adduser: Only one or two names allowed.
2023-03-01T01:48:07.2882469Z �Installing, this may take a few minutes...
2023-03-01T01:48:07.2892989Z
2023-03-01T01:48:07.2900654Z Please create a default UNIX user account. The username does not need to match your Windows username.
2023-03-01T01:48:07.2912470Z
2023-03-01T01:48:07.2916766Z For more information visit: https://aka.ms/wslusers
2023-03-01T01:48:07.2927510Z
2023-03-01T01:48:07.4889111Z adduser: Only one or two names allowed.
2023-03-01T01:48:07.7009238Z adduser: Only one or two names allowed.
2023-03-01T01:48:07.9142542Z adduser: Only one or two names allowed.
...
2023-03-01T02:34:58.9657845Z adduser: Only one or two names allowed.
2023-03-01T02:34:59.1753474Z adduser: Only one or two names allowed.
2023-03-01T02:34:59.3827180Z adduser: Only one or two names allowed.
2023-03-01T02:34:59.5920161Z adduser: Only one or two names allowed.
2023-03-01T02:34:59.8015666Z adduser: Only one or two names allowed.
2023-03-01T02:35:00.0206205Z adduser: Only one or two names allowed.
2023-03-01T02:35:00.2476662Z adduser: Only one or two names allowed.
2023-03-01T02:35:00.4678607Z adduser: Only one or two names allowed.
2023-03-01T02:35:00.6803694Z adduser: Only one or two names allowed.
2023-03-01T02:35:00.8921961Z adduser: Only one or two names allowed.
2023-03-01T02:35:01.6092409Z Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username:
...
UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: Enter new UNIX username: E
2023-03-01T02:35:01.8506526Z ##[error]The operation was canceled.
2023-03-01T02:35:01.8606824Z ##[section]Finishing: Install WSL on Windows hosts when proxy tests are enabled..

cc @danieljurek

A re-run didn't succeed.

I'm getting this issue as well in another repo that uses WSL in Azure DevOps hosted agents, it used to work properly about a month ago. Did you find anything that could work around it? Thanks!

It may be completely unrelated, but I got this "adduser:..." error when I did an "Enter-PSSession" to a server to install a disto instead of "ssh" to the server.  The difference may have been that the first used an Active Directory admin and the later used a local machine admin account.


MONDO:0004031[Merge]

Mondo term (ID and Label)
MONDO:0004031 ovary mixed epithelial carcinoma
Reason for deprecation
has exact match
ovarian seromucinous carcinomaDOID
Also a source attribution on the alt name of "mixed epithelial carcinoma of ovary" is the NCI concept (https://ncithesaurus.nci.nih.gov/ncitbrowser/ConceptReport.jsp?dictionary=NCI_Thesaurus&ns=ncit&code=C9123 ) that says " Concept Status:  Retired Concept  (See:  Ovarian Seromucinous Carcinoma ) "
Term to be merged with
MONDO:0004032 ovarian seromucinous carcinoma
Your nano-attribution (ORCID)
If you don't have an ORCID, you can sign up for one here

Dear @kanems,
Thank you for reaching out to the Mondo Disease Ontology, part of the Monarch Initiative!
We have received your ticket and will review it as soon as possible.
If you have any additional information or updates relevant to your inquiry, please add them in a comment on this ticket. Your input is valuable in helping us understand and resolve the issue effectively.
Thank you for your patience and for your contributions to Mondo!
Sincerely,
The Mondo Team

I agree these terms should be merged based on the reason stated in the original post (ie NCIT has deprecated 'Ovarian Mixed Epithelial Carcinoma' in favor of 'Ovarian Seromucinous Carcinoma' and the DOID synonym).


Hebrew Translation

i added translation into hebrew in another file in lang, named hw_is.json

Thanks for the PR! :)
You'll need one more person verifying your translations, please check the newly added translations workflow: https://github.com/KingContaria/seedqueue/issues/66

Thanks for the PR! :) You'll need one more person verifying your translations, please check the newly added translations workflow: #66
"@Boombaloom verified the translations in the discord translation section under Hebrew.

With 1.2 there is a couple of new/changed translation keys. I want to release this version fairly soon, if you don't have the time to make the edits i can do the renaming and merge the translations, new translations can be added later.
Renamed:

"speedrunapi.config.seedqueue.option.backgroundPreviews" -> "speedrunapi.config.seedqueue.option.preparingPreviews"
"speedrunapi.config.seedqueue.option.backgroundPreviews.description" -> "speedrunapi.config.seedqueue.option.preparingPreviews.description"

Added:

"speedrunapi.config.seedqueue.option.preparingPreviews.value.-1": "Auto"
"speedrunapi.config.seedqueue.option.resumeOnFilledQueue": "Resume On Filled Queue"
"speedrunapi.config.seedqueue.option.resumeOnFilledQueue.description": "Whether to resume generating seeds after the queue is filled.\nThis overrides the Max World Generation % option after the queue capacity is filled."
"seedqueue.key.scheduleJoin": "Schedule Instance"
"seedqueue.key.scheduleAll": "Schedule All"

Thank you!
And also... 😅
Sorry for this, one more update with 4 new translations was added. Like I said before, absolutely no pressure, I will still merge the translations without the updates if you dont have time. :)
Added:

"speedrunapi.config.seedqueue.option.chunkMapFreezing": "Chunkmap Freezing"
"speedrunapi.config.seedqueue.option.chunkMapFreezing.description": "Freezes the chunkmap after the set milliseconds. Useful for the "Village Resetting" strategy. Only applies to worlds on the wall that aren't locked."
"speedrunapi.config.seedqueue.option.chunkMapFreezing.value": "%sms"
"speedrunapi.config.seedqueue.option.chunkMapFreezing.value.-1": "OFF"

It seems you accidentally reverted the fix for "seedqueue.menu.clearing" mentioning SeedQueue
You also added a linebreak (\n) to "seedqueue.menu.benchmark.result", which isnt supported
I also forgot one additional translation that was added by the Chunkmap Freezing update:

"speedrunapi.config.seedqueue.category.misc": "Misc. Settings"


How to use the export model?

rt. how to use the exported model.

Hi @youansheng. Once you export your model, you can use https://github.com/affinelayer/pix2pix-tensorflow/blob/master/server/tools/process-local.py to process individual images.
If you see the declaration of arguments in process-local.py, you can see the following settings that need to be given:
--model_dir // directory containing exported model
--input_file // input PNG image file
--output_file // output PNG image file

If you've used pix2pix.py as it is provided in this repository, you will have to provide an input_file of 256x256 encoded as a PNG image.
Here is a sample call to generate an image.
python /path/to/pix2pix.py --model_dir /path/to/exported_model --input_file /path/to/input_file.png --output_file /path/to/output_file.png

Thanks!!!

@nonoesp @youansheng I am trying to use the process-local.py command with my custom data which I used for training(i.e before combining) and I get the following error
raceback (most recent call last):
  File "server/tools/process-local.py", line 45, in <module>
    main()
  File "server/tools/process-local.py", line 34, in main
    output_value = sess.run(output, feed_dict={input: np.expand_dims(input_value, axis=0)})[0]
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 767, in run
    run_metadata_ptr)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 965, in _run
    feed_dict_string, options, run_metadata)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1015, in _do_run
    target_list, options, run_metadata)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1035, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: ConcatOp : Dimensions of inputs should match: shape[0] = [1,2,2,512] vs. shape[1] = [1,3,3,512]
	 [[Node: generator/decoder_7/concat = ConcatV2[N=2, T=DT_FLOAT, Tidx=DT_INT32, _device="/job:localhost/replica:0/task:0/gpu:0"](generator/decoder_8/dropout/mul, generator/encoder_7/batchnorm/batchnorm/add_1, generator/decoder_7/concat/axis)]]

Caused by op u'generator/decoder_7/concat', defined at:
  File "server/tools/process-local.py", line 45, in <module>
    main()
  File "server/tools/process-local.py", line 26, in main
    saver = tf.train.import_meta_graph(a.model_dir + "/export.meta")
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 1566, in import_meta_graph
    **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/meta_graph.py", line 498, in import_scoped_meta_graph
    producer_op_list=producer_op_list)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/importer.py", line 288, in import_graph_def
    op_def=op_def)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2327, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1226, in __init__
    self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): ConcatOp : Dimensions of inputs should match: shape[0] = [1,2,2,512] vs. shape[1] = [1,3,3,512]
	 [[Node: generator/decoder_7/concat = ConcatV2[N=2, T=DT_FLOAT, Tidx=DT_INT32, _device="/job:localhost/replica:0/task:0/gpu:0"](generator/decoder_8/dropout/mul, generator/encoder_7/batchnorm/batchnorm/add_1, generator/decoder_7/concat/axis)]]

my bad I was using wrong size image

Hi,
I found error when run the exported model for test image.
Here is command I used to generate export model:
python pix2pix.py --mode export --output_dir /home/humayun/export/  --checkpoint /home/humayun/trained_model/ --which_direction AtoB
It generate five files: checkpoint, export.data-00000-of-00001, export.index, export.meta and options.json.
When I run this command for test image, I gave me error:
python server/tools/process-local.py --model_dir /home/humayun/export  --input_file /home/humayun/b2_029775990.png --output_file test.png
The error message is:
2017-08-17 13:44:11.041785: W tensorflow/core/framework/op_kernel.cc:1158] Invalid argument: Conv2DSlowBackpropInput: Size of out_backprop doesn't match computed: actual = 2, computed = 1
Traceback (most recent call last):
File "server/tools/process-local.py", line 45, in
main()
File "server/tools/process-local.py", line 34, in main
output_value = sess.run(output, feed_dict={input: np.expand_dims(input_value, axis=0)})[0]
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 789, in run
run_metadata_ptr)
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 997, in _run
feed_dict_string, options, run_metadata)
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1132, in _do_run
target_list, options, run_metadata)
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1152, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Conv2DSlowBackpropInput: Size of out_backprop doesn't match computed: actual = 2, computed = 1
[[Node: generator/decoder_8/deconv/conv2d_transpose = Conv2DBackpropInput[T=DT_FLOAT, data_format="NHWC", padding="SAME", strides=[1, 2, 2, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/gpu:0"](generator/decoder_8/deconv/conv2d_transpose/output_shape, generator/decoder_8/deconv/filter/read, generator/decoder_8/Relu)]]
Caused by op u'generator/decoder_8/deconv/conv2d_transpose', defined at:
File "server/tools/process-local.py", line 45, in
main()
File "server/tools/process-local.py", line 26, in main
saver = tf.train.import_meta_graph(a.model_dir + "/export.meta")
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1686, in import_meta_graph
**kwargs)
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/framework/meta_graph.py", line 504, in import_scoped_meta_graph
producer_op_list=producer_op_list)
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/framework/importer.py", line 311, in import_graph_def
op_def=op_def)
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2506, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/home/humayun/MD_Stuff/tensorflow_1.2/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1269, in init
self._traceback = _extract_stack()
InvalidArgumentError (see above for traceback): Conv2DSlowBackpropInput: Size of out_backprop doesn't match computed: actual = 2, computed = 1
[[Node: generator/decoder_8/deconv/conv2d_transpose = Conv2DBackpropInput[T=DT_FLOAT, data_format="NHWC", padding="SAME", strides=[1, 2, 2, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/gpu:0"](generator/decoder_8/deconv/conv2d_transpose/output_shape, generator/decoder_8/deconv/filter/read, generator/decoder_8/Relu)]]

I fixed the problem. Actually I was giving initially combined image. When I gave only single image, it worked good.
-Humayun

why there isn't process-local.py files in server/tools now?

Any answer for process_local.py?


Enhancement | Issue123 Autosave indicator

Enhancement #123 Implementation.
2 pages will be effected. Publish/Write Page and Edit Page.
Final output can be seen in the recording below also the text will be responsive all the checks have been done.
(also a little fix for the landing page as the end message was bugging sometimes if the user scrolls very momentously/quickly)
https://github.com/aadeshkulkarni/medium-app/assets/107796595/6cdb4a7c-42ca-4189-a160-7aac42023b6a

Add screenshot for mobile screen as well


Duplicate edges and weights?

❓ Questions & Help

Hi,
I have the following edge_index [[1, 2, 3, 1, 2, 3],[2, 3, 1, 2, 3, 1]] and each edge are duplicate (like (1,2)).
One way is to compute their weights in advance then the edge_index becomes [[1, 2, 3],[2, 3, 1]] with weights [2,2,2].
But how about if I feed the original edge index [[1, 2, 3, 1, 2, 3],[2, 3, 1, 2, 3, 1]] to gcn_conv instead of computing their weights in advance? Is there any difference with the above method?
Thanks

You can use duplicate edges, the results should be the same.

thanks for your reply


trade_executor daemon crashes

See the attachment

@mkuvshynnikov I am unable to help without reproduction steps.
Please, include in your ticker: all Peatio configs (application.yml, currencies.yml, deposit_channels.yml, withdraw_channels.yml, markets.yml, plugins.yml), Peatio trading UI configs (application.yml), Peatio version, Peatio trading UI version, dump of environment variables and logfile for Rails, daemons & trading UI containers, NGINX config (if available), browser name & version, RKCP version, include any customisations you made.

Fixed by #1055.


net/http: zombie connection leaked after Server.IdleTimeout

What version of Go are you using (go version)?

$ go version
go version go1.17 linux/amd64

Does this issue reproduce with the latest release?
Yes.
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/ubuntu/.cache/go-build"
GOENV="/home/ubuntu/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/ubuntu/dev/gopath/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/ubuntu/dev/gopath"
GOPRIVATE=""
GOPROXY="direct"
GOROOT="/home/ubuntu/dev/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/ubuntu/dev/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.17"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build2048112507=/tmp/go-build -gno-record-gcc-switches"

What did you do?
Here are the code that can reproduce it:
// server.go
package main

import (
	"io"
	"net/http"
	_ "net/http/pprof"
	"time"
)

func main() {
	mux := &http.ServeMux{}
	mux.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request) {
		data, _ := io.ReadAll(r.Body)
		w.Write(data)
	})

	server := http.Server{
		Addr:        "localhost:8080",
		Handler:     mux,

		// Set IdleTimeout to 3s
		IdleTimeout: 3 * time.Second,
	}
	server.ListenAndServe()
}

// client.go
package main

import (
	"log"
	"net"
	"time"
)

func main() {
	go func() {
		for i := 0; true; i++ {
			// Keep printing alive until the conn is closed and the process exit
			log.Printf("alive %vs", i)
			time.Sleep(time.Second)
		}
	}()

	conn, err := net.Dial("tcp", "localhost:8080")
	if err != nil {
		panic(err)
	}

	// step 1: Send the first request
	reqData := []byte("POST /echo HTTP/1.1\r\nHost: localhost:8080\r\nContent-Length: 5\r\nAccept-Encoding: gzip\r\n\r\nhello")
	_, err = conn.Write(reqData)
	if err != nil {
		panic(err)
	}

	// step 2: Recv the first response
	resData := make([]byte, 1024)
	n, err := conn.Read(resData)
	if err != nil {
		panic(err)
	}
	log.Printf("resData: \n-----\n%v\n-----\nerror: %v", string(resData[:n]), err)

	// step 3: Send 4 bytes to server, no longer send the left data of a full request
	_, err = conn.Write(reqData[:4])
	if err != nil {
		log.Fatal(err)
	}

	// step 4: Read and wait the server close the conn.
	// The server will not close the conn and will block here
	_, err = conn.Read(resData)
	if err != nil {
		log.Fatal(err)
	}
}

# client output
2022/03/11 21:39:44 resData:
-----
HTTP/1.1 200 OK
Date: Fri, 11 Mar 2022 13:39:44 GMT
Content-Length: 5
Content-Type: text/plain; charset=utf-8

hello
-----
error: <nil>
2022/03/11 21:39:44 alive 1s
2022/03/11 21:39:45 alive 2s
2022/03/11 21:39:46 alive 3s
...
2022/03/11 21:41:44 alive 120s
...
...

What did you expect to see?
The server should close the client conn when the client didn't send all the request data after Server.IdleTimeout
What did you see instead?
The server didn't close the clien conn

Setting ReadHeaderTimeout in your example code works for me. Does that solve it for you too?
My interpretation of the http.Server settings here is that once the server sees the first few bytes of the request, instead of being an "idle" connection subject to the "IdleTimeout" setting, the connection instead is considered active and subject to the "ReadHeaderTimeout" setting.

Yes, ReadHeaderTimeout works, but not everyone sets it.
I found another thing with the same server code, but the client sends only part of the data of a request, will also leak:
// client.go
package main

import (
	"log"
	"net"
	"time"
)

func main() {
	go func() {
		for i := 1; true; i++ {
			// Keep printing alive until the conn is closed and the process exit
			time.Sleep(time.Second)
			log.Printf("alive %vs", i)
		}
	}()

	conn, err := net.Dial("tcp", "localhost:8080")
	if err != nil {
		panic(err)
	}

	reqData := []byte("POST /echo HTTP/1.1\r\nHost: localhost:8080\r\nContent-Length: 5\r\nAccept-Encoding: gzip\r\n\r\nhello")
	// step 1: Send part of the data of a request
	_, err = conn.Write(reqData[:4])
	if err != nil {
		panic(err)
	}

	// step 2: Recv the first response
	// The server will not close the conn and will block here
	resData := make([]byte, 1024)
	n, err := conn.Read(resData)
	if err != nil {
		panic(err)
	}
	log.Printf("resData: \n-----\n%v\n-----\nerror: %v", string(resData[:n]), err)
}

ReadHeaderTimeout also works for this.
For these two client examples, both need users to set Server.ReadHeaderTimeout, but many people don't set it.
Slow connection attack, the device of the client power off, wifi changed, entering an elevator may cause that the client will never send TCP.FIN to the server, then the conn will never be closed and the goroutine serving the conn will never exit.
It seems like the famous frameworks based on net/http such as gin, use the default configuration as their default configuration:
https://github.com/gin-gonic/gin/blob/master/gin.go#L378
Many people use net/http and gin's default configuration, then, many projects may have this issue.
As a default configuration, I think it should not leave this side effect.

I think if ReadHeaderTimeout is zero, use someDefaultTimeout may be better.

Maybe golang itself should leave it to users to set the right configuration, but some frameworks should handle their default configuration.
So I'll close this but open some issues to other frameworks.
Thanks for your time!


Allow limiting the length of the sql string that will be printed

Q
A

Is bugfix?
no

New feature?
yes

Breaks BC?
no

Tests pass?
yes

When we run a migration with a very large view, for example, it is bad to follow the migration progress on the screen.

Could you elaborate about use case?

I have a database view that takes up 4 pages of the screen when it is executed in a migration.
It would be very useful to be able to configure to only print the first 200 characters.

I suggest making it a global class property instead of a method parameter.

@arogachev done!

@thiagotalma Thanks! 👍 Made small corrections. Now I think it's ready for merge. Others,, please check.

Merged with adjustments. Thanks!


Cairo module/widget

Is your feature request related to a problem? Please describe.
You are currently limited to the available widgets, which imposes some restriction on the possible shapes and content that can be displayed.
Describe the solution you'd like
GTK allows you to draw to widgets directly using Cairo. Some form of wrapper around this (perhaps via Lua) would allow full scripting of custom content.
Describe alternatives you've considered
None yet.
Additional context
Originally discussed in https://github.com/JakeStanger/ironbar/issues/68#issuecomment-1493427388
Example implementation in eww: https://github.com/elkowar/eww/pull/328/files

WASM is a fantastic idea! If I can figure out a way to do that without requiring too much work for the user (ie I'd rather not force people to require a whole build chain just to configure a module), I absolutely will.
The DSL I think I'd rather avoid. In part, because I think writing/maintaining a whole parser just for this would be wayyy to much work, but also in part because it adds the requirement of learning it just to be able to use it here and nowhere else, vs re-using an existing lang like Lua (or even JavaScript...) which can also be used elsewhere.

The DSL I think I'd rather avoid. In part, because I think writing/maintaining a whole parser just for this would be wayyy to much work, but also in part because it adds the requirement of learning it just to be able to use it here and nowhere else, vs re-using an existing lang like Lua (or even JavaScript...) which can also be used elsewhere.

I actually found something perfect for this https://lib.rs/crates/evalexpr

Also, will this be a custom module widget, or a just a module? Or maybe both?

Lua is still my number 1 choice at the moment, but go for it, I'd be interested to see what you're thinking of and how it would work.

Also, will this be a custom module widget, or a just a module? Or maybe both?

TBC, but hopefully both. The long term goal is that at least some of the simpler modules will be shared between both without duplication.

I'd be interested to see what you're thinking of and how it would work.

I have made something, tho incomplete, It's able to almost recreate the eww circular progress, (except for child widgets, since I didn't make it in GTK), here is the code in case you want to see how it's done https://gist.github.com/yavko/2f5a74020ccbeadd08c5a0d6b63136b3
The types could maybe also be used to support Lua, or other runtimes

rendered example (you can see my wallpaper behind bc of kitty, sicne it renders transparent stuff as not just transparent, but transparent through the whole window)

Fwiw to throw this idea out there if lua is the current champ as far as existing ideas goes, a specific lua library, LGI, could be very powerful here. Here's a small sample of coercing objects in and out of C (should be plausible to work this with rust) from lua with bindings on both ends
//main.c
#include <luajit-2.1/lua.h>
#include <luajit-2.1/lualib.h>
#include <luajit-2.1/lauxlib.h>
#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    luaL_dofile(L, "main.lua");
    lua_getglobal(L, "get_window");
    lua_call(L, 0, 1);
    GtkWidget *window = lua_touserdata(L, -1);
    lua_pop(L, 1);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

--main.lua
local lgi = require 'lgi'
local Gtk = lgi.require('Gtk', '3.0')

local window = Gtk.Window {
   title = 'Hello to Gtk+',
   default_width = 400,
   default_height = 300,
   on_destroy = Gtk.main_quit
}
function get_window()
	return window._native
end

Note that the "release" builds of LGI are outdated and will crash on some newer libraries, but building the latest version will properly work, including gtk4{-layer-shell}, so for the forseeable future this should be future proof too.

I personally think mlua would be better as there is no need to use a C library & ffi

I personally think mlua would be better as there is no need to use a C library & ffi

The benefit of LGI here would be the flexibility to we'll say, end users in creating essentially arbitrary widgets. All up to what the true goals here are, though.
Also, regardless of LGI or not, mlua (or another VM impl) would have to be used anyway if lua is to be used. LGI just facilitates creation and passing of GObjects to and from both sides easier.

That's cool and all but it doesn't have rust bindings and making rust bindings for a C library isn't fun as it requires unsafe code and idk if it's possible or easy to pass a gtk-rs struct as a raw GObject

This shouldn't require anything extra rust-side, unless I'm mistaken. If you use Mlua targeting we'll say PUC Lua 5.1, and LGI is shipped/depended on and built for 5.1, "rust" doesn't have to know anything about LGI, as the Lua-side passes GtkWidget._native which will return a native pointer to the actual object. See Interoperability with native code.

I have made something, tho incomplete, It's able to almost recreate the eww circular progress,

I've had a quick look at this and it looks very promising. I'll have a proper read through/review as soon as I can, but I reckon we can do something with it.

idk if it's possible or easy to pass a gtk-rs struct as a raw GObject

This is the make or break situation for having a scripting interface with GTK inside the bar. I can't see that it wouldn't be possible, but it depends on what rust will let me pass to lua. I'm not afraid of getting my hands dirty and playing with some unsafe code if necessary, but by the sounds of it there shouldn't be much need anyway. It's something that'll be a good few months off anyway (assuming nobody else gets there before I do :p)

This shouldn't require anything extra rust-side, unless I'm mistaken.

I'm like 94.87% sure you are, I've had to do FFI in rust before, and if you didn't wrap C libraries you'd be introducing unsafe and UB which is not the rust way

I think having Lua and json would be better as sometimes you need more power, but the way I was thinking of adding child widgets to my json impl was just by using the ironbar syntax like in custom modules

I just saw u changed the milestone, and remembered this issue, and I was thinking, that maybe instead of lua, rhai could be used, since it's more rusty https://lib.rs/crates/rhai

A lot to work out still, but it WORKS! We can do a lot with this potentially
let surface = ImageSurface::create(Format::ARgb32, 32, 32).unwrap();
let surface_ptr = unsafe { surface.into_glib_ptr().cast() };

let lua = unsafe { Lua::unsafe_new() };
lua.globals().set("surface_ptr", LightUserData(surface_ptr)).unwrap();

let script = r#"
    local lgi = require('lgi')
    local cairo = lgi.cairo

    surface = cairo.Surface(surface_ptr)
    cr = cairo.Context(surface)

    cr:set_source_rgb(1.0, 0.0, 0.0);
    cr:paint();

    surface:write_to_png("test.png")
"#;

lua.load(script).exec().unwrap();

A lot to work out still, but it WORKS! We can do a lot with this potentially
let surface = ImageSurface::create(Format::ARgb32, 32, 32).unwrap();
let surface_ptr = unsafe { surface.into_glib_ptr().cast() };

let lua = unsafe { Lua::unsafe_new() };
lua.globals().set("surface_ptr", LightUserData(surface_ptr)).unwrap();

let script = r#"
    local lgi = require('lgi')
    local cairo = lgi.cairo

    surface = cairo.Surface(surface_ptr)
    cr = cairo.Context(surface)

    cr:set_source_rgb(1.0, 0.0, 0.0);
    cr:paint();

    surface:write_to_png("test.png")
"#;

lua.load(script).exec().unwrap();

mlua + lgi, currently requires both to be installed as system packages but playing with the possibility of vendoring.

Sick, generating an image is cool, though integrating it must be harder. Maybe lua could also be integrated with other parts, like instead of a script.

I've been playing around with this in the background over the past few days funnily enough, and Rhai is one of the things I've looked at.
The issue with Rhai is that it needs to generate its own methods and typings rather than using the Rust ones, and although it does have methods of automatically doing that I've not been able to make them play nice with GTK/Cairo. It seems everything would have to be manually implemented (or I'd have to write a macro to generate everything and I don't know where I'd begin with that for this). GTK especially poses difficultly because of its prelude based implementation.
Lua meanwhile has the advantage of being very low level and very lightweight, and fairly popular. Using mlua + lgi seems like the combo here, as I can just pass a glib pointer for any gobject into the runtime and have it fully exist in Lua. I'm testing this one currently.

If I figure out how to add rhai, would you merge a PR?

Maybe lua could also be integrated with other parts, like instead of a script.

Yeah this unlocks an enormous amount of potential. I'm still not 100% on the direction I want to take it yet but this does possibly give a much more powerful alternative to calling out to shell scripts for custom stuff.

Far from done, but I've got a working module at the PR above which is in a useable state with some fiddling about. Full details in there.


999 lee seung hui branch 1

Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes # (issue)
Type of change
Please delete options that are not relevant.

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Code cleanup/refactoring
[ ] Documentation update
[ ] This change requires a documentation update

How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration. Below is just an example and you can delete it when you contribute.
Example
1. Describe the reproduction procedures freely.
2. Or list up the test description like :
  - [ ] Unittest
  - [ ] Execution of Container
  - [ ] Execution on top of Native
  - [ ] Execution on top of Android

Test Configuration:

Firmware version: (OS type and version, e.g., Ubuntu 14.04, etc.)
Hardware: (e.g., x86-64, ARM, CPU type, RAM size, etc.)
Toolchain: (e.g., Docker and Go versions)
Edge Orchestration Release: (e.g., Alpha, Baobab, Coconut)

Checklist:

[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes

INFO[2021-11-02T12:31:13Z]discovery.go:744 clearAllDeviceInfo [discoverymgr] Delete All Device Info
INFO[2021-11-02T12:31:13Z]discovery.go:839 deleteDevice [discoverymgr] [deleteDevice] edge-orchestration-e61b3b31-9723-47fd-bd49-38aa865e057f
INFO[2021-11-02T12:31:13Z]networkhelper.go:194 setAddrInfo [networkmgr] addr <IP_ADDRESS>/24
INFO[2021-11-02T12:31:13Z]discovery.go:398 setDeviceID [discoverymgr] UUID :  e61b3b31-9723-47fd-bd49-38aa865e057f
INFO[2021-11-02T12:31:13Z]discovery.go:542 SetNetwotkArgument [discoverymgr] [<IP_ADDRESS>]
INFO[2021-11-02T12:31:13Z]discovery.go:573 func1 [deviceDetectionRoutine] edge-orchestration-e61b3b31-9723-47fd-bd49-38aa865e057f
INFO[2021-11-02T12:31:13Z]discovery.go:574 func1 [deviceDetectionRoutine] confInfo    : ExecType(container), Platform(docker)
INFO[2021-11-02T12:31:13Z]discovery.go:575 func1 [deviceDetectionRoutine] netInfo     : IPv4([<IP_ADDRESS>]), RTT(0)
INFO[2021-11-02T12:31:13Z]discovery.go:576 func1 [deviceDetectionRoutine] serviceInfo : Services([])
INFO[2021-11-02T12:31:13Z]discovery.go:577 func1
INFO[2021-11-02T12:31:13Z]storage.go:107 StartStorage [storagemgr][deviceName]edge-orchestration-e61b3b31-9723-47fd-bd49-38aa865e057f
INFO[2021-11-02T12:31:13Z]discovery.go:647 mdnsTXTSizeChecker [discoverymgr] [mdnsTXTSizeChecker] size ::  29  Bytes
INFO[2021-11-02T12:31:13Z]configuremgr.go:149 Watch start watching for/var/edge-orchestration/apps
INFO[2021-11-02T12:31:13Z]route.go:84 Add {APIV1Ping GET /api/v1/ping 0xbefe60}
INFO[2021-11-02T12:31:13Z]route.go:84 Add {APIV1ServicemgrServicesPost POST /api/v1/servicemgr/services 0xbeff00}
INFO[2021-11-02T12:31:13Z]route.go:84 Add {APIV1ServicemgrServicesNotificationServiceIDPost POST /api/v1/servicemgr/services/notification/{serviceid} 0xbeff80}


Regression in mac_ios_complex_layout_ios__start_up

~14% regression in timeToFirstFrameRasterizedMicros
https://flutter-flutter-perf.skia.org/e/?begin=1624639563&end=1625273167&keys=X11e8f4c63303cb096ff6b3086d3e49c1&requestType=0&xbaroffset=24824
https://github.com/flutter/flutter/commit/4fcc761dd1ef12acfec9fa3b0ff06feeeae27719
Several Skia rolls in that Engine roll, but nothing is jumping out at me.
/cc Engine sheriff @chinmaygarde

None of the commits look suspicious to me. Looking at the history, there are periods of time where the benchmark reported results that were consistently different from the baseline. I don't see anything cross referenced issues around the time of the regression or the supposed fix (the one abnormal jump was a real regression that was fixed).

The workload has not changed. The benchmark values are similar to the ones reported earlier. The improvement to the baseline was on an unrelated tooling change. I am going to chalk this one up as a case of noisy results being noisy.


Upgrade the version of upb we use.

In particular, this includes https://github.com/protocolbuffers/upb/pull/219 which fixes the ASAN build for opencensus-cpp.
@veblush
cc @haberman

Friendly ping.

I think this change has been merged already (ref) probably because upb has been updated quite often these days.

When building with bazel, we use the code from @upb rather than @grpc//third_party/etc, which hasn't been updated, and ASAN is still broken (I just tried it).

Oh you're right about the bazel. I forget to update the bazel part when updating upb since upb is not submodule anymore. I'll update this to make sure both are identical but merge this to unblock you. Thank you for the PR!

Thanks! That unbroke the ASAN build.


#346 causes nullref exceptions due to missing references to helper surfaces

See this comment on #346 for information

Confirmed fixed in #349 using 2019.4.31f1


Release/3.1

This version has some improvements to the session management and the tracker control.
About the session management, we noticed that the behaviour of the session timeout checking with the lifecycle events could cause bad interpretation of the session in some edge cases. The previous version of the tracker used to check the timeout based on the state of the app. To make an example, a transition from foreground to background was causing the generation of an application_background event checking the session with the background timeout, accordingly with the state of the app. This caused a weird behaviour where the session remained the same even if an app was in background for longer than the background timeout. This new version fix that issue.
Another improvement to the session management is the ability to receive the details of the new session (SessionID, SessionIndex, etc.) as soon as the session is renewed. That's a feature that disappeared with the v2 of the native mobile trackers.
We added back another feature that was removed with v2: the ability to pause and resume the emission of events. In cases of low bandwidth or low battery we can allow the app to pause the emission of the events without pausing the ability to track them.
CHANGELOG
Bug fixes:

Check session for background event using foreground timeout (#499)

Enhancements:

Add pause and resume to EmitterController (#505)
Add session callback (#500)

Under the hood:

Update copyright headers to 2022 (#502)
Update links to v3 docs in README (#498)

Thanks for your pull request. Is this your first contribution to a Snowplow open source project? Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).
:memo: Please visit https://docs.snowplowanalytics.com/docs/contributing/contributor-license-agreement/ to learn more and sign.
Once you've signed, please reply here (e.g. I signed it!) and we'll verify. Thanks.

I think that the session callback is worth mentioning in the docs, probably on the Introduction page under SessionConfiguration.

The draft doc I added in the PR was intended for Tracking Events page as a new section but I think it would be nice to put a note also in the Introduction page. Anyway, I'm going to release today and I'll fix blog post and docs Monday (or before if I can).


Node APIs available to the renderer

I'm interested in taking a look at Muon. As outlined in the docs, I've started with the muon-quick project. However, It looks like the Node APIs are available within the renderer. See the changes here:
https://github.com/ColinEberhardt/muon-quick/commit/6357860a0216eb8fc4386d1a925ed0144a51c9a2
I thought that muon removed node integration? Is this something I have to explicitly enable?
(I also spotted a few issues in the muon-quick project, e.g. the dependencies wouldn't install, and some left-over documentation from electron. I'd be happy to submit a PR with some tidy up)

we thought it was kind of silly to update electron-prebuilt every time we updated muon so our fork of electron-prebuilt uses the npmrc to control the electron version
see https://github.com/brave/browser-laptop/blob/master/.npmrc
we are working on a replacement for electron-prebuilt, but in the meantime if you don't have an npmrc file you will get version 1.4.31
cc @jonathansampson

@bridiver Thanks for the info on this. Could someone post an example npmrc file (with electron -v defined) that would help clarify how this should be formatted? Thanks.


Does it work for web apps?

After upgrade a Vue CLI project to version 5.0.8, it is using Webpack 5 and I am getting errors like:
TypeError: can't access property "resolve", path__WEBPACK_IMPORTED_MODULE_3__.path is undefined

The .vue file tray to import is as import path from 'path'

Could you provide a repro?


Add prepend_javascript_pack_tag helper

In our codebase we had a similar approach for Webpacker 5 for append_javascript_pack_tag helper, but we used unshift instead of appending to the array.
Using append_javascript_pack_tag causes issues for us where we expect some entries to go before the appended entries added by the main view or partials.
Adding prepend_javascript_pack_tag to allow a pack to go to the beginning of the entry array would give us more flexibility in the order of the entries inserted by javascript_pack_tag.

@ahangarha No problem, and thank you guys for continuing and improving webpacker!

@justin808 Wasn't sure if we should split up the append_javascript_pack_tag and prepend_javascript_pack_tag documentation in the README. For now I kept them together.

Big thanks @paypro-leon!


Update install-yiffos.sh

Certificates expire, updating them without user intervention would be a nice thing to do methinks!

looks good, merging!