Use C++ build artifacts in the python wheel generation

Right now, if a user does not have cmake installed and they try to install, they receive a very verbose message (see example at end of ticket).
Ideally, users would:

receive a very short and friendly message telling them they should install cmake
have wheels provided for the majority of common platforms to make sure they don't encounter this

This toolset may be helpful in improving coverage of platforms that can use a wheel: https://github.com/joerick/cibuildwheel
Question: Can cmake produce something like a Makefile that we include to avoid having a dependency on cmake for source installs?
UPDATE: See note from @meshula below.
example message:
Installing collected packages: opentimelineio
  Running setup.py install for opentimelineio ... error
    ERROR: Command errored out with exit status 1:
     command: /Users/username/dev/otiowheel/venv-otiowheel/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/setup.py'"'"'; __file__='"'"'/private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-record-889gs1ef/install-record.txt --single-version-externally-managed --compile --install-headers /Users/username/dev/otiowheel/venv-otiowheel/include/site/python3.8/opentimelineio
         cwd: /private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/
    Complete output (169 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.9-x86_64-3.8
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio
    copying src/py-opentimelineio/opentimelineio/test_utils.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio
    copying src/py-opentimelineio/opentimelineio/opentime.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio
    copying src/py-opentimelineio/opentimelineio/hooks.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio
    copying src/py-opentimelineio/opentimelineio/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio
    copying src/py-opentimelineio/opentimelineio/media_linker.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio
    copying src/py-opentimelineio/opentimelineio/exceptions.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio/core
    copying src/py-opentimelineio/opentimelineio/core/_core_utils.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/core
    copying src/py-opentimelineio/opentimelineio/core/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/core
    copying src/py-opentimelineio/opentimelineio/core/mediaReference.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/core
    copying src/py-opentimelineio/opentimelineio/core/composable.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/core
    copying src/py-opentimelineio/opentimelineio/core/composition.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/core
    copying src/py-opentimelineio/opentimelineio/core/item.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/core
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio/plugins
    copying src/py-opentimelineio/opentimelineio/plugins/manifest.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/plugins
    copying src/py-opentimelineio/opentimelineio/plugins/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/plugins
    copying src/py-opentimelineio/opentimelineio/plugins/python_plugin.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/plugins
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio/algorithms
    copying src/py-opentimelineio/opentimelineio/algorithms/track_algo.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/algorithms
    copying src/py-opentimelineio/opentimelineio/algorithms/stack_algo.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/algorithms
    copying src/py-opentimelineio/opentimelineio/algorithms/timeline_algo.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/algorithms
    copying src/py-opentimelineio/opentimelineio/algorithms/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/algorithms
    copying src/py-opentimelineio/opentimelineio/algorithms/filter.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/algorithms
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio/adapters
    copying src/py-opentimelineio/opentimelineio/adapters/otio_json.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/adapters
    copying src/py-opentimelineio/opentimelineio/adapters/adapter.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/adapters
    copying src/py-opentimelineio/opentimelineio/adapters/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/adapters
    copying src/py-opentimelineio/opentimelineio/adapters/cmx_3600.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/adapters
    copying src/py-opentimelineio/opentimelineio/adapters/fcp_xml.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/adapters
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/timeline.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/track.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/transition.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/external_reference.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/serializable_collection.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/schemadef.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/marker.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/stack.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/clip.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/generator_reference.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/effect.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    copying src/py-opentimelineio/opentimelineio/schema/foo.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schema
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schemadef
    copying src/py-opentimelineio/opentimelineio/schemadef/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/schemadef
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    copying src/py-opentimelineio/opentimelineio/console/otiostat.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    copying src/py-opentimelineio/opentimelineio/console/otiocat.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    copying src/py-opentimelineio/opentimelineio/console/otioconvert.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    copying src/py-opentimelineio/opentimelineio/console/console_utils.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    copying src/py-opentimelineio/opentimelineio/console/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    copying src/py-opentimelineio/opentimelineio/console/otiopluginfo.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    copying src/py-opentimelineio/opentimelineio/console/autogen_plugin_documentation.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    copying src/py-opentimelineio/opentimelineio/console/autogen_serialized_datamodel.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/console
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineview
    copying src/opentimelineview/console.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineview
    copying src/opentimelineview/ruler_widget.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineview
    copying src/opentimelineview/timeline_widget.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineview
    copying src/opentimelineview/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineview
    copying src/opentimelineview/details_widget.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineview
    copying src/opentimelineview/settings.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineview
    copying src/opentimelineview/track_widgets.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineview
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib
    copying contrib/opentimelineio_contrib/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/kdenlive.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/extern_rv.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/advanced_authoring_format.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/ffmpeg_burnins.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/extern_maya_sequencer.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/fcpx_xml.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/maya_sequencer.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/rv.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/xges.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/ale.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/hls_playlist.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    copying contrib/opentimelineio_contrib/adapters/burnins.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters/aaf_adapter
    copying contrib/opentimelineio_contrib/adapters/aaf_adapter/__init__.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters/aaf_adapter
    copying contrib/opentimelineio_contrib/adapters/aaf_adapter/aaf_writer.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters/aaf_adapter
    running egg_info
    writing OpenTimelineIO.egg-info/PKG-INFO
    writing dependency_links to OpenTimelineIO.egg-info/dependency_links.txt
    writing entry points to OpenTimelineIO.egg-info/entry_points.txt
    writing requirements to OpenTimelineIO.egg-info/requires.txt
    writing top-level names to OpenTimelineIO.egg-info/top_level.txt
    reading manifest file 'OpenTimelineIO.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no files found matching 'CHANGELOG.md'
    no previously-included directories found matching 'docs'
    warning: no previously-included files found matching '.gitmodules'
    warning: no previously-included files matching '*.git' found under directory 'src'
    warning: no previously-included files found matching '.readthedocs.yml'
    warning: no previously-included files found matching 'readthedocs-conda.yml'
    warning: no previously-included files found matching '.codecov.yml'
    warning: no previously-included files found matching '.gitlab-ci.yml'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '*.pdf'
    warning: no previously-included files found matching 'CODE_OF_CONDUCT.md'
    warning: no previously-included files found matching 'CONTRIBUTING.md'
    warning: no previously-included files found matching 'contrib/opentimelineio_contrib/adapters/Makefile'
    warning: no previously-included files found matching 'Makefile'
    no previously-included directories found matching 'contrib/opentimelineio_contrib/adapters/tests'
    no previously-included directories found matching 'tests'
    no previously-included directories found matching 'src/deps/pybind11/tools/clang'
    no previously-included directories found matching 'src/deps/rapidjson/thirdparty'
    writing manifest file 'OpenTimelineIO.egg-info/SOURCES.txt'
    copying src/py-opentimelineio/opentimelineio/adapters/builtin_adapters.plugin_manifest.json -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio/adapters
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/application_plugins
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/application_plugins/rv
    creating build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/application_plugins/rv/example_otio_reader
    copying contrib/opentimelineio_contrib/application_plugins/rv/example_otio_reader/PACKAGE -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/application_plugins/rv/example_otio_reader
    copying contrib/opentimelineio_contrib/application_plugins/rv/example_otio_reader/example_otio_reader_plugin.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/application_plugins/rv/example_otio_reader
    copying contrib/opentimelineio_contrib/application_plugins/rv/example_otio_reader/otio_reader.py -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/application_plugins/rv/example_otio_reader
    copying contrib/opentimelineio_contrib/adapters/contrib_adapters.plugin_manifest.json -> build/lib.macosx-10.9-x86_64-3.8/opentimelineio_contrib/adapters
    running build_ext
    Traceback (most recent call last):
      File "/private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/setup.py", line 171, in run
        out = subprocess.check_output(['cmake', '--version'])
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess.py", line 411, in check_output
        return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess.py", line 489, in run
        with Popen(*popenargs, **kwargs) as process:
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess.py", line 854, in __init__
        self._execute_child(args, executable, preexec_fn, close_fds,
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess.py", line 1702, in _execute_child
        raise child_exception_type(errno_num, err_msg, err_filename)
    FileNotFoundError: [Errno 2] No such file or directory: 'cmake'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/setup.py", line 358, in <module>
        setup(
      File "/Users/username/dev/otiowheel/venv-otiowheel/lib/python3.8/site-packages/setuptools/__init__.py", line 145, in setup
        return distutils.core.setup(**attrs)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 966, in run_commands
        self.run_command(cmd)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/setup.py", line 140, in run
        install.run(self)
      File "/Users/username/dev/otiowheel/venv-otiowheel/lib/python3.8/site-packages/setuptools/command/install.py", line 61, in run
        return orig.install.run(self)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/command/install.py", line 545, in run
        self.run_command('build')
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/command/build.py", line 135, in run
        self.run_command(cmd_name)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/setup.py", line 173, in run
        raise RuntimeError(
    RuntimeError: CMake must be installed to build the following extensions: _opentimelineio, _opentime
    ----------------------------------------
ERROR: Command errored out with exit status 1: /Users/username/dev/otiowheel/venv-otiowheel/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/setup.py'"'"'; __file__='"'"'/private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-install-di_hdnwz/opentimelineio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/gw/8vl6g7s91dq3sshvy3hqtftc0000gn/T/pip-record-889gs1ef/install-record.txt --single-version-externally-managed --compile --install-headers /Users/username/dev/otiowheel/venv-otiowheel/include/site/python3.8/opentimelineio Check the logs for full command output.

C̬̙̹̠̙͖̞̱̀͝u҉͔̗̦̹͢ͅr̥̺̘̩͇͘͢͝s͔̭̫̹̹̫e̷̤̪̩͈͚͔̕͜d̶̖͖̣̻͓̫̻̀͞ ͞ͅi̶̟͈̠̤̮̻̟̘͝s͖͎̻̙͎̼͕̺͚͜ș̰̣̹ͅu̴̴҉̰̟̪̖̜̰e̴̷̢̫̖̙̬̙

Totally agree that the install script should validate that cmake is installed and functional. The USD build script has a function we could lift for that purpose.

You definitely do not want to get in the game of distributing a shadow make file, because the makefiles must be baked out per platform.

Yes cmake outputs makefiles, but they are deeply, deeply nested sets of files and scripts, and are not position independent.

Updated the issue to strikethrough the Makefile idea. I figured it would be the case that they'd be a bit overbaked for wide consumption but I didn't have enough experience to say :)

We have had a cmake/make two headed monster on OpenEXR, and we've been dragging the userbase kicking and screaming to Cmake only. It was starting to feel like 90% of our support burden was bit rotted autoconf scripts on really old linux distributions, so we finally initiated pulling the plug, sloooooowly

Yeah, given your experience I think we need to keep things simple given this project's size. I think our best bet for this is to see if we can get most our user base covered with pre-built wheels and fill in the last bit with good messaging to lead them to success when building from source.

Hey, so packing wise, yes it would be great to have wheels in pypi. Though, if you do so, please make sure the wheels are compliant with the different manylinux PEPS. Also, I'd make sure the built wheels are passing the checks available with https://github.com/pypa/auditwheel .
Last thing, the binaries should be linked with relative paths, not absolute paths. Right now if we build a wheel for OpenTimelineIO and use ldd to check the generated binaries, it shows that it's well using RPATHs, but with absolute paths... So it makes the wheel completely unusable. (That because of https://github.com/PixarAnimationStudios/OpenTimelineIO/blob/master/src/py-opentimelineio/opentimelineio-bindings/CMakeLists.txt#L18. CMAKE_INSTALL_PREFIX is an absolute path).
Thanks :) And let me know if you have any questions regarding auditwheel or what kind of problems we encountered with the wheels produced with the 0.12.0 version of OpenTimelineIO (I'm not an expert with this package, but I know the Python packaging ecosystem pretty well).

@JeanChristopheMorinRodeoFX that's great info! I actually have some manylinux wheels up for test right now. If you have a linux setup, would you mind giving them a try?
You can test by running this command: pip install --index-url https://test.pypi.org/simple/  opentimelineio==0.12.0
Thanks!

Also, for more detail, the wheels were built in the docker image quay.io/pypa/manylinux1_x86_64 using each python available in /opt/python and each wheel was then made manylinux compliant using a command like auditwheel repair OpenTimelineIO-0.12.0-cp37-cp37m-linux_x86_64.whl --plat manylinux1_x86_64.
I believe the repair fixes any binary pathing issues, but I'm not totally sure.

@reinecke I'm quite happy that you already used the right tools! I've tried the cp27-cp27mu-manylinux1_x86_64 on linux (CentOS-7.6) and it seems to be working (I personally don't know how to use OTIO,  so I'll have to ask my team to test if it works for them). Will get back to you quite soon on this.
I also took the liberty of testing the OSX wheel. Unfortunately, it doesn't work.
.venv/lib/python2.7/site-packages/opentimelineio/_opentime.so:
	@rpath/libopentimelineio.dylib (compatibility version 0.0.0, current version 0.0.0)
	@rpath/libopentime.dylib (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 800.7.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.0.0)
(.venv) (bash)[jcmorin@wrk777d~otio]$ otool -l .venv/lib/python2.7/site-packages/opentimelineio/_opentime.so | grep RPATH -B 1 -A 2
Load command 15
          cmd LC_RPATH
      cmdsize 144
         path<EMAIL_ADDRESS>(offset 12)

If I search for libopentime, I simply can't find it. And in the dist-info/RECORD, I don't see the lib in there.

I believe the repair fixes any binary pathing issues, but I'm not totally sure.
I think I would still make sure RPATH is using relative paths, just to be extra sure if people needs to create wheels by themselves.

I forget to ask, but are you planning to ship a wheel for OSX 10.13? Also, by curiosity, you will use GitHub actions to build the wheels or Travis? Or you built them locally on a machine?

Hey @JeanChristopheMorinRodeoFX, thanks for getting back!
I'm aware of the issue with the OS X one, looking to some alternate approaches to see if I can address it. I'm still evaluating to see how realistic it is to provide wheels for macos.
For the moment, I'm building the wheels locally. That's clearly not a scalable or ideal thing to do. My goal is to automate producing those artifacts sooner than later.
My current hope is that I can have manylinux x86_64 wheels for release 0.12.0. As I work out how to produce good wheels for other platforms, I may supplement that release over time.
Are there specific platforms you use that would be helpful to have wheels for?

I'm aware of the issue with the OS X one, looking to some alternate approaches to see if I can address it. I'm still evaluating to see how realistic it is to provide wheels for macos.

It should be more realistic than building wheels on Windows I think 😛 If you need help, let me know. I have some free time at night because I'm currently in quarantine (we are probably multiple in this situation 😛 ).

Are there specific platforms you use that would be helpful to have wheels for?

If I speak on behalf of the company I work for (RodeoFX), we use Linux and OSX. We don't support Windows in our pipeline. But we are lucky enough to have resources to build wheels when necessary. Though it's always nice when the wheels are provided by the package maintainers themselves. If I speak for the general average size (and smaller ones) studios, I'd say probably the three platforms.

@JeanChristopheMorinRodeoFX I uploaded some new mac wheels to test, if you want to give them a try. Because of name reuse restrictions, they're a bit weird so you can do this:
pip install --index-url https://test.pypi.org/simple/ opentimelineio==0.12.0.test
In the prod pypi I'll use the correct names.

From the look of it, the OSX 10.13 wheel seems to work. At least I can install it and import opentimelineio._otio. Its LC_RPATH looks weird (it points to the system's python install), but there is two LC_LOAD_DYLIB which point at the right path.
Load command 9
          cmd LC_LOAD_DYLIB
      cmdsize 72
         name @loader_path/.dylibs/libopentimelineio.dylib (offset 24)
   time stamp 2 Wed Dec 31 19:00:02 1969
      current version 0.0.0
compatibility version 0.0.0
Load command 10
          cmd LC_LOAD_DYLIB
      cmdsize 64
         name @loader_path/.dylibs/libopentime.dylib (offset 24)
   time stamp 2 Wed Dec 31 19:00:02 1969
      current version 0.0.0
compatibility version 0.0.0
Load command 15
          cmd LC_RPATH
      cmdsize 120
         path /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/opentimelineio/cxx-libs/lib (offset 12)

Edit: also, these are largely built against the 10.13 SDK so they get much more coverage across OS versions

Perfect.

After testing across several environments and users (thanks @JeanChristopheMorinRodeoFX  and @mjoblin), I went ahead and pushed these wheels to 0.12.0. If we feel pretty good about how this is working for this release, we'll look at integrating it with CI.
More detail on the OS X wheels:
They were built in a clean qemu virtual machine running Mac OS Sierra.
Assuming my notes have all the steps correct, this is what I did within the clean build VM:

Installed Python 3.8 from the python.org download
xcode-select --install to install the command-line tools package
installed homebrew
brew install cmake to install cmake
python3.8 -m venv buildenv and source buildenv/bin/activate to create a build env
python -m pip install cibuildwheel==1.3.0
git clone https://github.com/PixarAnimationStudios/OpenTimelineIO.git
cd OpenTImelineIO
git checkout "tags/v0.12"
git submodule update --init --recursive
CIBW_PLATFORM=macos python3 -m cibuildwheel
Copied out the wheelhouse directory and used twine to push from my machine

In #667 @Celeborn2BeAlive has this script for windows wheel building: https://gist.github.com/Celeborn2BeAlive/f6a475e863726d767a6a0669c692e90e
This, along with the above instructions for Mac and Linux should be ported to GitHub actions.

Capturing some discussion notes from PRs and elsewhere about how to address some of the windows wheel building below.
For windows, I'm pretty certain we need to at least pull:
https://github.com/pybind/cmake_example/blob/6de957d06a372a7b106e5e3b8e29b97a8ec3afc7/setup.py#L10-L15
and:
https://github.com/pybind/cmake_example/blob/6de957d06a372a7b106e5e3b8e29b97a8ec3afc7/setup.py#L73
And replace this:
https://github.com/PixarAnimationStudios/OpenTimelineIO/blob/db9996779cc80bf4268d0c3b2f1f8f80cfd55154/setup.py#L129-L130
@meshula notes:

also see this confusing stuff: https://github.com/PixarAnimationStudios/USD/blob/090ef0d849ced875b3b99a15e454b69148ccd8e1/build_scripts/build_usd.py#L337

Notice that VS2019 and greater has an inconvenient new incompatible syntax.
There's a wodge of code here that detects the species of Visual Studio in the active build environment: https://github.com/PixarAnimationStudios/USD/blob/090ef0d849ced875b3b99a15e454b69148ccd8e1/build_scripts/build_usd.py#L133

and:

per usd_build.py, we should detect VS2019 or greater, as this argument doesn't apply for VS2017 and less, where 64 bit builds are indicated by appending "Win64" to the build target.

@ssteinbach notes:

VFX Platform seems to support minimum vs2017 across the board, FWIW

Also note, macOS 11 could be tricky as GitHub doesn't have runners widely available yet: https://github.com/actions/virtual-environments/issues/2486
Perhaps we should shard a new ticket for that.


bug: conform.formatexpr is still returning 0 even when no formatters are present for the filetype

Neovim version (nvim -v)
v0.10.0-dev-2048+g367e52cc7
Operating system/version
Linux
Add the debug logs

[X] I have set log_level = vim.log.levels.DEBUG and pasted the log contents below.

Log file
[DEBUG] Running formatters on /.../Foo.sol: {}
[DEBUG] No formatters found for /.../Foo.sol

Describe the bug
Being it so that no conform formatters are present its formatexpr should be returning 1 so that it may fallback to the next available formatter.
What is the severity of this bug?
breaking (some functionality is broken)
Steps To Reproduce
Open file without formatters. E.g. a Solidity file (*.sol).
Additional context
It used to work, so not sure when it exactly broke. This is the custom formatexpr that I've been using so far:
Formatexpr = function()
  local timeout_ms = 10000

  local n = require('conform').formatexpr({ timeout_ms = timeout_ms })

  if n == 0 then
    return 0
  end

  local whole_buffer_selected = vim.v.count == vim.fn.line('$')
  if whole_buffer_selected and supports_buffer_formatting() then
    -- Execute LSP buffer format (useful for those LSPs which don't support range formatting)
    vim.lsp.buf.format({ timeout_ms = timeout_ms })
    return 0
  end

  -- Fallback
  return 1
end

See #238

You might want to document the behavior and why. You should also point to gw.

I see, thanks for the replies. I see there also a way to make it so that it has the same effect as before so that should fix it for me.
The issue as you can notice in my code snippet is not that I want to fallback to builtin nvim formatter, it's that if there's no conform formatter or lsp range formatting I want to check for lsp buffer formatting. What do you guys think? Could that perhaps even be added to conform itself? Some LSPs do not yet support range formatting.

By the way, the example you shared is giving me an error #require("conform.lsp_format").get_format_clients() > 0 as get_format_clients takes an object, anything I should add there specifically?

Looking at its code it seems that conform's formatexpr should be fallbacking to LSP buffer formatting itself, no?

By the way, the example you shared is giving me an error #require("conform.lsp_format").get_format_clients() > 0 as get_format_clients takes an object, anything I should add there specifically?

Sorry it didn't work out-of-box, you can do:
-#require("conform.lsp_format").get_format_clients()
+#require("conform.lsp_format").get_format_clients({})

Looking at its code it seems that conform's formatexpr should be fallbacking to LSP buffer formatting itself, no?

Yes, conform's formatexpr should fall back to LSP. In your case, there is no LSP formatter available. Note that LSP formatter also does NOT fallback to the built-in formatexpr.

Looking at its code it seems that conform's formatexpr should be fallbacking to LSP buffer formatting itself, no?

Right, conform's formatexpr should fall back to LSP. In your case, there is no LSP formatter available. Note that LSP formatter also does NOT fallback to the built-in formatexpr.

So that's where the issue is. I do have an LSP formatter available, but it doesn't support range formatting, only buffer formatting. When that's the case I want it to run the lsp.buf.format:
local supports_buffer_formatting = function()
  return vim.iter(vim.lsp.get_clients({ bufnr = 0 })):any(function(c)
    return c.supports_method(vim.lsp.protocol.Methods.textDocument_formatting)
  end)
end

  // Try out conform, if it doesn't work continue
  ...

  local whole_buffer_selected = vim.v.count == vim.fn.line('$')
  if whole_buffer_selected and supports_buffer_formatting() then
    -- Execute LSP buffer format (useful for those LSPs which don't support range formatting)
    vim.lsp.buf.format({ timeout_ms = timeout_ms })
    return 0
  end

If that were to become a conform feature I wouldn't even have the need for my custom formatexpr. I think it makes sense, no?

I don't think I clearly get what you exactly want to achieve here. Are you saying that the behavior fixed in #255 (i.e. does not fallback to the built-in formatexpr) doesn't make sense, or now are talking about your specific use-case questions where you'd want to fallback to "LSP formatter" or "built-in formatter" when range-formatting is requested but the range is the entire buffer? In your code, you should not use the return value of require('conform').formatexpr (it returned 0) and decide you'd want to fall back or not to LSP or whatever formatters.

@wookayin I guess I started talking about making my custom formatexpr work but then realized that conform's formatexpr is doing just almost the same as I'm trying to achieve.
So consider the example of an LSP that supports buffer format, that means vim.lsp.protocol.Methods.textDocument_formatting. Conform's formatexpr only uses LSPs formatting for ranges vim.lsp.protocol.Methods.textDocument_rangeFormatting.
So I propose that, when the formatexpr is being used to format the whole file (vim.v.count == vim.fn.line('$')) use the buffer formatting and not the range formatting. Because some LSPs might not support range formatting, while supported buffer formatting.

Ah yes totally. I realized what conform was doing after you shared the PR. Will open another one for a feature request.

Feature request: https://github.com/stevearc/conform.nvim/issues/271
Closing this.


Upgrading and shrinking the jenkinsci/ssh-slave image

Hello there !
After some time using my own image which purpose is almost the same as this one, here is an update proposal that cover an upgrade to latest docker practises (1.13.0 at the time of this PR), Jenkins SSH usages, and also shrinking the image to spend less disk space.
Here are the major changes:

Base image moved from "java" (deprecated in 2016) to "openjdk"
No more slave.jar (test upgraded) embeded since the Jenkins SSH agent protocol takes care of downloading and upgrading it at startup
Ensuring that bash is the default command line (cf. https://issues.jenkins-ci.org/browse/JENKINS-41374 )
Adapting Dockerfile instructions to use builds ARGS to allow specification of user and groups, uid and gid, following the official Jenkins image
SSH is now writing its logs to stderr, allowing docker logs to fetch the SSH output (and not written within a file)
Additional data volume have been added to improve agent performances (writing temp files on host FS and not on the Layered FS)
The default user home directory is now variabilized for better maintenance or custom build use cases
git is now explicitly installed (tradeoff because it generally require root rights to install, so interesting to have it here, while mercurial don't)
Some bash shellchecking

I'm closing this PR, to split in 2.


installing this on webserver

How do I go about installing this on my hosted web server?

What do you mean by web server? This is a VSCode extension and should work in any environment with VSCode extension APIs properly implemented.

Well I got it on my hosted web server, but I updated the .html file but it doesn't reflect my changes... strange.
https://mybibletopics.com/markmap

Can confirm it works at github.dev , please feel free to provide more info and reopen this issue if it persists.


Changes in v0.10.* series

Remaining to be done in v0.11 or later

Target Java 11+? => #1595

JEP 320

CONTRIBUTORS (including Contributors License Agreement?) => #1596
Add embulk-junit5 => #1597
Remove unused subcommands: resume (-r), idempotency, cleanup [#739] [#740]

DONE! Big goals targeted through v0.10.*

Remove Guice usage inside the core

Instead, we may provide @Inject only for plugins (instead of existing org.embulk.Exec)

Make JRuby totally optional

Blocker 1: Timestamp formatting: https://github.com/embulk/embulk-util-rubytime
Blocker 2: Guess
Considerations: Bundler [#629] and Liquid

Remove all usage of Joda-time
Hide dependency libraries from plugins

Jackson
Guava
Apache bval-jsr303 (just remove?)
msgpack-java (keep?)
javax.validation-api (keep?)
javax.inject (keep?)
slf4j-api (keep?)

Split API/SPI to independent packages

And make many embulk-util-* libraries for plugins

Use (only) java.util.Properties for system configs

Small goals and when
Just at v0.10.0:

Stop searching for the latest in selfupdate
Rename embulk-test to embulk-junit4

Later in v0.10.*:

Upgrade Gradle wrapper
Remove unused subcommands: irb and exec [#631]
System config file
LICENSE (including dependencies')
Kinds of EMBULK_HOME configurations

All done with some intentional postpones to v0.11.


B #5518: GOCA PCIDevices support

Replaced the empty interface with struct for PCIDevices in GOCA
pci.rb uses lspci to gather all fields so they are all strings initially.
In HostSharePCI.h some fields are converted to numbers:
  unsigned int vendor_id;
  unsigned int device_id;
  unsigned int class_id;

  int vmid;

The remaining fields are of type VectorAttribute so could be represented as any compatible type.
NumaNode has to be a string because when it is a negative number in sys/.../numa_node file it is converted to the '-' character by pci.rb
In GOCA when calling one.host.info Vendor, Class and Device are all hex strings so the default Golang XML unmarshall function can't convert them to the uint type.
Based on this I think the chosen data types are the best fit, additionally it is convenient for debugging to leave the data in the same format as lspci.

Hi @JungleCatSW,
I think the PR is ready to be merged. Thanks for your work!

Thanks guys, Merged as per eb49ad2e6f8a90c1247cf34eda09a1ad89bc63ce


[libical] Fix CMake option with berkeleydb

Describe the pull request

What does your PR fix?
Fixes #27356, change incorrect option CMAKE_DISABLE_FIND_PACKAGE_BDB to CMAKE_DISABLE_FIND_PACKAGE_BerkeleyDB, fix failure building with berkeleydb.
The related upstream issue: https://github.com/libical/libical/issues/617

Oops, thanks!


Trap door open status is not available.

I have been looking for a plugin to customize debugstick for a long time.
Thank you for creating such a plugin.
When I click on the iron trapdoor in classic mode in DSP, the status of open is not available.
(I am able to do this with debugstick in Vanilla).
Can you please make the status of open available?
Blacklist is false.
ServerVer:1.19.4(paper#550)
DSPver:0.4.3

I have been looking for a plugin to customize debugstick for a long time. Thank you for creating such a plugin.
When I click on the iron trapdoor in classic mode in DSP, the status of open is not available. (I am able to do this with debugstick in Vanilla). Can you please make the status of open available?
Blacklist is false. ServerVer:1.19.4(paper#550) DSPver:0.4.3

Fixed in version 0.4.4 https://github.com/TWME-TW/DebugStickPro/releases/tag/0.4.4

Resolved. Thank you.


remove a variable on line 166 for pins to display data

remove "marker" and have only the 'click' on the listener function so that when the mouse 'click' on the pin - data will be displayed (venue name and address).
dev instance: htduong.com/gig-central

@tranzilla Nice work! I am seeing the pins and the data appears when the pins are clicked. Nice debugging! I'm merging this with master and deleting the branch.


support rocketMQ

need to support rocketMQ as sink

(Jove Github Bot) assuming it is not done, deferred this ticket to the next sprint.

(Jove Github Bot) moved this ticket out of the GitHub project(up to 1200 tickets for one project).


error: the namespace from the provided object 'kube-system' does not match the namespace 'custom-metrics'. You must pass '--namespace=kube-system' to perform this operation.

Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Followed the instructions on
https://docs.microsoft.com/en-us/azure/application-gateway/ingress-controller-autoscale-pods
Expected behavior
Deploy the adapter
Kubernetes version (kubectl version):

Kubernetes Version
1.18.8

Logs (kubectl logs <metric adapter pod id>)
no pod created
Additional context
When applying this steps:
kubectl create namespace custom-metrics
use values from service principal created above to create secret
kubectl create secret generic azure-k8s-metrics-adapter -n custom-metrics
--from-literal=azure-tenant-id=
--from-literal=azure-client-id=
--from-literal=azure-client-secret=
kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/Azure/azure-k8s-metrics-adapter/master/deploy/adapter.yaml -n custom-metrics
The following comes out at the end:
error: the namespace from the provided object 'kube-system' does not match the namespace 'custom-metrics'. You must pass '--namespace=kube-system' to perform this operation.
Please let me know if there's anything else to be done to get this working

Support for newer versions of k8s has not been added or tested (see maintenance note). Please checkout out KEDA which has Azure metric support for latest updates


test(mapTo): add micro-benchmark performance test for mapTo operator

relates to #350
Effort to cover micro performance test. for old RxJs, used map(object) to corresponds to mapTo operator.

Merged with e5dfd8c .... thanks!


Technical basement - Adapt CSS to use material ui theme

Each CSS should use colors from material ui theme. Currently color values are duplicated.
Also p tags, or h* tags should be replaced by Typography components from material ui. Goal is that the theming works in a right way.

Check with @haugthom and @Lebski before working on this (https://github.com/smallbusinesshero/dds-wvv-frontend/issues/40)


spacing for mentor leaderboard gets messy in the double digits.

If there are 10+ mentors, the spacing between names and numbers in the leaderboard gets a little small.
See # 10 in the attached image.
Thanks!

Thanks for pointing this out! I'll look into this soon :)
Note: For the sake of the hackers, I've removed the image as it contained personal phone numbers and emails.


[CSL-424] Remove redundant methods from Txp.Class.MonadTxpLD

@volhovm
As part of CSL-418  getTxpLDWrap :: m (TxpLDWrap ssc) method was added, so other methods can be expressed using only this one. Maybe it makes sense to simplify typeclass MonadTxpLD to have only getTxpLDWrap and rewrite all other functions in terms of MonadTxpLD m => kek.

@gromak
It's done in CSL-783.


C# EditorInspectorPlugin throws errors when connected to the Resource.Changed signal

Tested versions
Reproducible in: 4.2.stable.mono, 4.1.3.stable.mono, 4.1.stable.mono, 4.1.beta3.mono, 4.1.dev4.mono, 4.1.dev2.mono
Not-reproducible in: 4.0.4.stable.mono, 4.1.dev1.mono
System information
Manjaro Linux
Issue description
I'm trying to create an EditorInspectorPlugin in C# to display some information about a custom Resource I've created in the Inspector. The EditorInspectorPlugin connects to the Changed signal on the resource in order to redraw when the resource is changed. If any instance of the plugin is present in the Inspector when rebuilding the C# project, I get the following error message:
Attempt to disconnect a nonexistent connection from '<Resource#-9223369747536478755>'. Signal: 'changed', callable: 'Delegate::Invoke'.

Initially the plugin continues working, however rebuilding again gives the following errors mentioning #78513 and the plugin ceases functioning at all:
 /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs:112 - System.ObjectDisposedException: Cannot access a disposed object.
  Object name: 'CustomResourceEditor'.
     at Godot.GodotObject.GetPtr(GodotObject instance) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotObject.base.cs:line 73
     at Godot.GodotObject.GetInstanceId() in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Generated/GodotObjects/GodotObject.cs:line 461
     at Godot.DelegateUtils.TrySerializeSingleDelegate(Delegate delegate, Byte[]& buffer) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 151
     at Godot.DelegateUtils.TrySerializeDelegate(Delegate delegate, Array serializedData) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 110
     at Godot.DelegateUtils.TrySerializeDelegateWithGCHandle(IntPtr delegateGCHandle, godot_array* nSerializedData) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 302
  modules/mono/mono_gd/gd_mono.cpp:528 - .NET: Failed to unload assemblies. Please check https://github.com/godotengine/godot/issues/78513 for more information. (User)
  modules/mono/csharp_script.cpp:819 - Condition "managed_callable->delegate_handle.value == nullptr" is true. Continuing.
  /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs:112 - System.ObjectDisposedException: Cannot access a disposed object.
  Object name: 'CustomResourceEditor'.
     at Godot.GodotObject.GetPtr(GodotObject instance) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotObject.base.cs:line 73
     at Godot.GodotObject.GetInstanceId() in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Generated/GodotObjects/GodotObject.cs:line 461
     at Godot.DelegateUtils.TrySerializeSingleDelegate(Delegate delegate, Byte[]& buffer) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 151
     at Godot.DelegateUtils.TrySerializeDelegate(Delegate delegate, Array serializedData) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 110
     at Godot.DelegateUtils.TrySerializeDelegateWithGCHandle(IntPtr delegateGCHandle, godot_array* nSerializedData) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 302
  modules/mono/mono_gd/gd_mono.cpp:528 - .NET: Failed to unload assemblies. Please check https://github.com/godotengine/godot/issues/78513 for more information. (User)
  modules/mono/csharp_script.cpp:819 - Condition "managed_callable->delegate_handle.value == nullptr" is true. Continuing.
  /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs:112 - System.ObjectDisposedException: Cannot access a disposed object.
  Object name: 'CustomResourceEditor'.
     at Godot.GodotObject.GetPtr(GodotObject instance) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotObject.base.cs:line 73
     at Godot.GodotObject.GetInstanceId() in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Generated/GodotObjects/GodotObject.cs:line 461
     at Godot.DelegateUtils.TrySerializeSingleDelegate(Delegate delegate, Byte[]& buffer) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 151
     at Godot.DelegateUtils.TrySerializeDelegate(Delegate delegate, Array serializedData) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 110
     at Godot.DelegateUtils.TrySerializeDelegateWithGCHandle(IntPtr delegateGCHandle, godot_array* nSerializedData) in /root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs:line 302
  modules/mono/mono_gd/gd_mono.cpp:528 - .NET: Failed to unload assemblies. Please check https://github.com/godotengine/godot/issues/78513 for more information. (User)
  modules/mono/mono_gd/gd_mono.cpp:512 - .NET: Giving up on assembly reloading. Please restart the editor if unloading was failing. (User)

This issue occurs when using the base Resource class as well, not only for the custom resource. Manually disconnecting the signal in either the destructor or _ExitTree method of the plugin does not help.
Maybe related to #76708?
Steps to reproduce

Open the MRP
Build the project
Double-click test.tres to open it in the Inspector.
MSBuild -> Rebuild Project
MSBuild -> Rebuild Project again

Minimal reproduction project (MRP)
TestProject.zip

Some more testing narrowed this down to being introduced between 4.1.dev1 and 4.1.dev2.
#72421 was included in that release, which was mentioned as the source of regression in #76708. Sounds like #77199 claims to have mostly fixed the issue, except in the case of reloading assemblies. I'm getting a bit out of my depth in understanding the internals of how Godot integrates with C#, so not sure where to go from here without some assistance.

Similarly I have added two custom resources to my project and after registering to the Changed event I get thousands of errors related to this event and "Invoke" each time I build my project. It wasn't obvious to me if there was an expected flow of registering/unregistering this event, or if this is a regression.


Clean up message_ix.macro

This PR improves the code in message_ix.macro.py for the following items. Some of these issues were identified when #223 was conditionally merged, and some items are additional improvements.

[x] testing zero or missing values in PRICE_COMMODITY before calibration
[x] removing hard-coded units in the code, and specifying them by user in the input data per requested in #317
[x] improving configuration for sets and specifying the "level" for macro outside the code (partly addressing #317)
[x] mapping MACRO sectors to MESSAGE commodities (and level) explicitly by the user
[x] removing old initialize_year_macro before calibration (partly addressing #320)
[x] removing baseyear_macro from the code (not needed in GAMS anymore)
[x] specifying MACRO years by user in the Excel "config" sheet, and slicing and reading data flexibly based on that.
[x] adding tests and modifying the input data files to reflect the above changes
[x] adding docstring (addressing #315)

How to review
New tests are added to check the improvements in this PR. You can view changes in the code and run the code and tests under test_macro.py.
Notice: if you wish to test the code on a input data file, please update your data for:

"config": in the new format, there are three columns ("node, "sector", "level") in "config" to specify those members of these sets that are included in MACRO calibration. Please see the sample input file in: message_ix/tests/data/westeros_macro_input.xlsx

you need to add a "unit" column to all input parameters for specifying the unit (Please see the format in the file above).

[x] Tests added.

[x] These improvements shouldn't change the main behaviour and documentation. However, this will change the format of the input data file. This has been explained in the documentation.

[x] Release notes added, including the "migration notes" for the format of the input data file.

I have some smaller suggestions to revise the macro_input.xlsx file.

I would suggest to add year columns to price_ref, demand_ref and cost_ref parameters so that there is no ambiguity about which year the values provided refer to.
In my view, it would be beneficial to explicitly define the years that MACRO is calibrated for. On the one hand, this would avoid mistakes with unintentionally added years in parameters like gdp_calibrate from which the years would need to be inferred otherwise. In addition, it allows flexibility to have more data in a file that is used (e.g., one could use the same file parameterizing a 10-year and a 5-year time step model version by just changing the year entries on the config tab).
The sector and commodity sets used by MACRO and MESSAGE don't have to use the same entries (although at present this is the case in all applications). I would therefore suggest to have an explicit mapping of (MACRO) sectors to (MESSAGE) commodity.level combinations (see example).

I have implemented the suggested modifications in the attached multiregion_macro_input.xlsx file with the changes marked in yellow.
multiregion_macro_input.xlsx

Thanks @volker-krey for the suggestions and the sample file. I'll include them. I'll also try to see if we can make the calibration run for different lastmodel_years in the same model. That should also make it easier to calibrate a scenario with different last model year using the same input data file.

@behnam-zakeri once #484 is merged, you can rebase this, and the failure in the 'lint' check should disappear.

@volker-krey, we addressed your comments. I updated the description of the PR accordingly. I added docstring too and removed extra comments, to address #315. The only thing that in my view can be improved before merging is removing unit conversions from the code (at the moment, cost and price parameters are divided by 1000). This will also address #317. This may require removing these unit conversions from the GAMS code too. My question is:
1- can we remove the MACRO-related unit conversions from the GAMS code without any backward incompatibility?
2- and on the practical point, should we do this through this PR, another related #430 by @GamzeUnlu95, or a new PR?

The only thing that in my view can be improved before merging is removing unit conversions from the code (at the moment, cost and price parameters are divided by 1000).
…
2. and on the practical point that @khaeru may instruct: should we do this through this PR, another related #430 by @GamzeUnlu95, or a new PR?

I would say another PR?
It's not necessary that this one PR do all possible fixes and improvements to .macro. It's okay to leave that status quo behaviour in place (so long as it is documented!), and then use a separate PR to address it.
That approach also keeps this one smaller and easier to complete.

@khaeru , I rebased this PR and cleaned a bit. I run the tests without a problem on my machine (Windows) and the Windows checks pass here too. However, a few tests don't pass in Linux and Mac, which have the same cause. I feel this is caused by the way the data is being read from Excel. But I can't check this on my machine. Would you mind looking into this issue, or running test_macro.py of this PR on your machine?

@khaeru Would you mind looking into this issue, or running test_macro.py of this PR on your machine?

I can do this after we wrap-up the 3.4 release, so sometime next week.

@LauWien I have a question. I get an lint error of black in the checks here, but when I run black over this file on my side the file remains "unchanged". I can't see what the issue is to resolve it in my code. How can I see that here from the lint check fail?

Okay, I have hopefully fixed the unit errors mentioned in https://github.com/iiasa/message_ix/pull/327#pullrequestreview-911337274 and https://github.com/iiasa/message_ix/pull/327#pullrequestreview-911373638. I also applied latest black and rebased on main. Please git pull --rebase to retrieve the latest code.

Thanks @khaeru for resolving the technical issues and improving the code. I added documentation for the input data file, and also a few sentences as "Migration Notes" to warn that these changes will not work with the previous versions of the Excel data file.

Excellent. That looks like exactly what we need, so I will request a review and then @LauWien can dispatch that to an available colleague, e.g. as you suggested in Slack.

@LauWien can dispatch that to an available colleague, e.g. as you suggested in Slack.

How soon should the PR get reviewed (E.g. best by the end of this week or end of next week)? Many thanks in advance!

End of next week is probably fine.

@LauWien thanks for the review—please merge once checks again pass.


No speed-up in my implementation too

I implemented this papaer with torch.autograd.forward_ad. However, fwd gradient showed no speed-up compared to fwd+bwd.

It would be interesting for us to see your implementation as well. If you want, you can make a PR to our repo with your code. So we can have multiple implementations available.

Hi, unfortunately we weren't able to reproduce the same results too.
The hyperparameters we used are the same reported in the paper, but we don't now if alternative hyperparameters settings are available.
We believe that the difference between our implementation and the official one are due to the fact that they use numpy and autograd instead of functorch


Extra families

Coverage remained the same at 94.26% when pulling 4b20c4725d6655e29b135ac5d8704a07cec9acee on extra-families into bb855805fa6b25a47a22a98094aa8f22e04c0e95 on master.

Coverage remained the same at 94.26% when pulling 8d4dbbf134cd72c7246793027d94cb033fd30483 on extra-families into bb855805fa6b25a47a22a98094aa8f22e04c0e95 on master.


fix list item numbers, add small right margin for code blocks

Add padding for pre code element so that text is not
squashed on right edge of code block margin
Fix numbering of list items for pv reclaim policy

Testing a small right margin for all code blocks, as the right hand side text is always at the very edge of the code block. This makes the code hard to read.

/assign @lucperkins

Please fix conflicting files.


React to dnx confguration change (prototype)

@davidfowl @pranavkm

:shipit:

I added more tests, please have a look


fix: typo

Hello @horsicq
There was a small typo: msdia instead of media
I have only fixed the English po file but that typo resides in all po files. Please check.
Cya

Hello! Thanks a lot. But it is correct! Msdia -> Microsoft Debug Interface Access. I will fix it and make with Upper. Msdia -> MSDIA


heightmap surface is not perfectly watertight

I really like your program but encountered an issue:
The calculation of z coordinates for Vertex 1, 2, 3, 4 can result in differences of 1 ULP based on the pixel vertex location.
So if a point P on the map is V1 for pixel H, but point P on the map is V3 for pixel H2, then Z calculations for point P may differ by 1 ULP.
I believe this is due to rounding introduced in the for loop in avgnonneg().
For my application I rounded z values to 0.001 and fixed the issue for my application.
Similarly you may want to add a z rounding parameter.

Another solution would be to only calculate the averages once and cache them.

Yep, good catch. In fact I think my whole approach to triangulating the raster was overly complicated in this program. You may be interested in phstl, a Python script I wrote to perform a similar function. It does not try to interpolate "pixel corner" elevations at all.


remove unused NSGs, ASGs and Ports

@ryanhamel I've reset the denyall rules, cleanup the unused ones, and updated the ones needed. Next step would be to validate the ANF, Lustre and MySQL scenarios


Hex not working

Seems like hex is not applying damage when you use it

It's very likely you have a setting wrong somewhere.  Run the troubleshooter out of the settings and post the output file here it in the Discord for further support.  Merge cards being off is a likely suspect.

CPR-Troubleshoot.txt

Merge cards is on at the moment

Nothing looks out of place in the log, could screenshot your chat card after casting hex on a target and attacking them?

Turn off roll separate attacks, that may fix it.


Improve PNG encoder in display/svg.js to generate smaller PNG files

One of the reasons for the out-of-memory crash at #8434 is that PDF.js generates very large data-URLs.
The 2MB PDF file (https://github.com/mozilla/pdf.js/files/1021334/invalidstringlength.pdfhttps://github.com/mozilla/pdf.js/files/1021334/invalidstringlength.pdf) results in a 265MB SVG file (after applying #8557 to even be able to generate the file).
I extracted the first data-URL. It is an almost fully transparent image, with the light-colored text "DIE MESSE DER KIRCHE", which appears at the center of the PDF file. The PNG file (after base64-decoding) is 28MB. When I use pngcrush to compress it, I am able to get a file size that is about a thousand times smaller (32KB).
So surely there must be opportunity to improve our (naive?) PNG generation method at https://github.com/mozilla/pdf.js/blob/9bed695ebde488b49d39290087f72ba224bd1078/src/display/svg.js#L34-L224
I digged up the following specs, which are probably relevant:

http://www.libpng.org/pub/png/spec/1.2/PNG-Contents.html
http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html
http://www.libpng.org/pub/png/spec/1.2/PNG-Compression.html
https://tools.ietf.org/html/rfc1950.html
https://tools.ietf.org/html/rfc1951.html

There is no easy way to implement an encoder for PNG (except in a browser we can use canvas and toDataURL).
I wonder if we can use some simple module such as 'zlb' for node.js and extend code at https://github.com/mozilla/pdf.js/blob/9bed695ebde488b49d39290087f72ba224bd1078/src/display/svg.js#L171-L195 , so if DEFLATE compression present on platform use it.

Another testcase (node was killed by the kernel):
http://doppelbauer.name/oom-killed.pdf
Console:
# PDF "/tmp/1.pdf", 575 pages
# Load page 1, 293x454
Warning: Unimplemented operator setTextRenderingMode
Warning: Unimplemented operator dependency
Warning: Unimplemented operator dependency
Warning: Unimplemented operator dependency
# Save page: "/tmp/svg/000000001.svg"

[...snip...]

# Load page 221, 293x454
Warning: Unimplemented operator setTextRenderingMode
Warning: Unimplemented operator dependency
Warning: Unimplemented operator dependency
Warning: Unimplemented operator dependency
Warning: Unimplemented operator dependency
Warning: Unimplemented operator dependency
Killed

dmesg:
[1199004.806807] Out of memory: Kill process 14310 (node) score 608 or sacrifice child
[1199004.806820] Killed process 14310 (node) total-vm:8279704kB, anon-rss:4273868kB, file-rss:0kB

The problem should be fixed for Node.js now, but we're keeping this open to track inclusion of pako to hopefully solve this for both Node.js and browsers. Note that the latter should also help in terms of performance for the SVG project at https://github.com/mozilla/pdf.js/projects to potentially use the SVG back-end for printing.


Why the potreeConverter 2.0 doesn't has the rule of make install. It is hard to find the binary after install in docker image

And I also want to has a memory converter not the bash command, Do you have advice for this ?
like in my backend app, I could using this converter like a function.


ASSERTION FAILED: inst && module_interp && import

I have three C functions that need to be called in a wasm program through the wasm c api. According to the examples provided by the wasm c api, I have defined the following three extern functions:
    wasm_functype_t* create_bpf_type = wasm_functype_new_2_1(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32());
    wasm_func_t* create_bpf_func = wasm_func_new_with_env(store, create_bpf_type, create_bpf, this, NULL);

    wasm_functype_t* run_bpf_type = wasm_functype_new_1_1(wasm_valtype_new_i32(), wasm_valtype_new_i32());
    wasm_func_t* run_bpf_func = wasm_func_new_with_env(store, run_bpf_type, run_bpf, this, NULL);

    wasm_functype_t* wait_and_poll_bpf_type = wasm_functype_new_1_1(wasm_valtype_new_i32(), wasm_valtype_new_i32());
    wasm_func_t* wait_and_poll_bpf_func = wasm_func_new_with_env(store, wait_and_poll_bpf_type, wait_and_poll_bpf, this, NULL);

    wasm_extern_t* externs[3] = {wasm_func_as_extern(create_bpf_func), wasm_func_as_extern(run_bpf_func), wasm_func_as_extern(wait_and_poll_bpf_func) };
    wasm_extern_vec_t imports = WASM_ARRAY_VEC(externs);
    instance = wasm_instance_new(store, module, &imports, NULL);

But during the running process, wasm_instance_new will return 0x0, and an error will appear in the terminal: ASSERTION FAILED: inst && module_interp && import.
I guess this is because there are still other 7 system call functions in the wasm program (the code is as follows), so module_interp will get 11 functions, but I only passed three functions to wasm_instance_new in the imports, which caused an error in the running process.
  (import "env" "create_bpf" (func (;0;) (type 2)))
  (import "env" "run_bpf" (func (;1;) (type 3)))
  (import "env" "wait_and_poll_bpf" (func (;2;) (type 3)))
  (import "wasi_snapshot_preview1" "args_get" (func (;3;) (type 2)))
  (import "wasi_snapshot_preview1" "args_sizes_get" (func (;4;) (type 2)))
  (import "wasi_snapshot_preview1" "fd_close" (func (;5;) (type 3)))
  (import "wasi_snapshot_preview1" "fd_fdstat_get" (func (;6;) (type 2)))
  (import "wasi_snapshot_preview1" "fd_seek" (func (;7;) (type 4)))
  (import "wasi_snapshot_preview1" "fd_write" (func (;8;) (type 5)))
  (import "wasi_snapshot_preview1" "proc_exit" (func (;9;) (type 6)))
  (import "env" "main" (func (;10;) (type 2)))
  (func (;11;) (type 7)

Is there a way to solve the problem above? Any suggestions will be greatly appreciated.

thanks for raising it up. we are having a discussion about something similar. #1902 .


Album instead of track

hi , JMPerez,
this is the website I refered to
http://michaeldick.me/YetAnotherSpotifyPlaylistConverter/
how can I edit this to get a different result , I mean album uri , instead of track?
thanks

Please, ask the author of the site for this. You can use its GitHub repo for that https://github.com/bertique/YetAnotherSpotifyPlaylistConverter .


Update capture-image-portal.md

We are adding additional points for clarity of steps to be followed from operating system for generalized /specialized VM

@microsoft-github-policy-service agree company="Microsoft"
From: microsoft-github-policy-service[bot] @.>
Sent: Friday, February 16, 2024 7:12 PM
To: MicrosoftDocs/azure-docs @.>
Cc: Sheeja James @.>; Mention @.>
Subject: Re: [MicrosoftDocs/azure-docs] Update capture-image-portal.md (PR #119924)
@sheejaazurevmhttps://github.com/sheejaazurevm please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
@microsoft-github-policy-service agree [company="{your company}"]
Options:

(default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.

@microsoft-github-policy-service agree

(when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term "You" includes me and my employer.

@microsoft-github-policy-service agree company="Microsoft"
Contributor License Agreement
Contribution License Agreement
This Contribution License Agreement ("Agreement") is agreed to by the party signing below ("You"),
and conveys certain license rights to Microsoft Corporation and its affiliates ("Microsoft") for Your
contributions to Microsoft open source projects. This Agreement is effective as of the latest signature
date below.

Definitions.
"Code" means the computer software code, whether in human-readable or machine-executable form,
that is delivered by You to Microsoft under this Agreement.
"Project" means any of the projects owned or managed by Microsoft and offered under a license
approved by the Open Source Initiative (www.opensource.orghttp://www.opensource.org/).
"Submit" is the act of uploading, submitting, transmitting, or distributing code or other content to any
Project, including but not limited to communication on electronic mailing lists, source code control
systems, and issue tracking systems that are managed by, or on behalf of, the Project for the purpose of
discussing and improving that Project, but excluding communication that is conspicuously marked or
otherwise designated in writing by You as "Not a Submission."
"Submission" means the Code and any other copyrightable material Submitted by You, including any
associated comments and documentation.
Your Submission. You must agree to the terms of this Agreement before making a Submission to any
Project. This Agreement covers any and all Submissions that You, now or in the future (except as
described in Section 4 below), Submit to any Project.
Originality of Work. You represent that each of Your Submissions is entirely Your original work.
Should You wish to Submit materials that are not Your original work, You may Submit them separately
to the Project if You (a) retain all copyright and license information that was in the materials as You
received them, (b) in the description accompanying Your Submission, include the phrase "Submission
containing materials of a third party:" followed by the names of the third party and any licenses or other
restrictions of which You are aware, and (c) follow any other instructions in the Project's written
guidelines concerning Submissions.
Your Employer. References to "employer" in this Agreement include Your employer or anyone else
for whom You are acting in making Your Submission, e.g. as a contractor, vendor, or agent. If Your
Submission is made in the course of Your work for an employer or Your employer has intellectual
property rights in Your Submission by contract or applicable law, You must secure permission from Your
employer to make the Submission before signing this Agreement. In that case, the term "You" in this
Agreement will refer to You and the employer collectively. If You change employers in the future and
desire to Submit additional Submissions for the new employer, then You agree to sign a new Agreement
and secure permission from the new employer before Submitting those Submissions.
Licenses.

Copyright License. You grant Microsoft, and those who receive the Submission directly or
indirectly from Microsoft, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license in the
Submission to reproduce, prepare derivative works of, publicly display, publicly perform, and distribute
the Submission and such derivative works, and to sublicense any or all of the foregoing rights to third
parties.
Patent License. You grant Microsoft, and those who receive the Submission directly or
indirectly from Microsoft, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license under
Your patent claims that are necessarily infringed by the Submission or the combination of the
Submission with the Project to which it was Submitted to make, have made, use, offer to sell, sell and
import or otherwise dispose of the Submission alone or with the Project.
Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement.
No additional licenses or rights whatsoever (including, without limitation, any implied licenses) are
granted by implication, exhaustion, estoppel or otherwise.

Representations and Warranties. You represent that You are legally entitled to grant the above
licenses. You represent that each of Your Submissions is entirely Your original work (except as You may
have disclosed under Section 3). You represent that You have secured permission from Your employer to
make the Submission in cases where Your Submission is made in the course of Your work for Your
employer or Your employer has intellectual property rights in Your Submission by contract or applicable
law. If You are signing this Agreement on behalf of Your employer, You represent and warrant that You
have the necessary authority to bind the listed employer to the obligations contained in this Agreement.
You are not expected to provide support for Your Submission, unless You choose to do so. UNLESS
REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, AND EXCEPT FOR THE WARRANTIES
EXPRESSLY STATED IN SECTIONS 3, 4, AND 6, THE SUBMISSION PROVIDED UNDER THIS AGREEMENT IS
PROVIDED WITHOUT WARRANTY OF ANY KIND, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY OF
NONINFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
Notice to Microsoft. You agree to notify Microsoft in writing of any facts or circumstances of which
You later become aware that would make Your representations in this Agreement inaccurate in any
respect.
Information about Submissions. You agree that contributions to Projects and information about
contributions may be maintained indefinitely and disclosed publicly, including Your name and other
information that You submit with Your Submission.
Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of Washington, and
the parties consent to exclusive jurisdiction and venue in the federal courts sitting in King County,
Washington, unless no federal subject matter jurisdiction exists, in which case the parties consent to
exclusive jurisdiction and venue in the Superior Court of King County, Washington. The parties waive all
defenses of lack of personal jurisdiction and forum non-conveniens.
Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and
supersedes any and all prior agreements, understandings or communications, written or oral, between
the parties relating to the subject matter hereof. This Agreement may be assigned by Microsoft.

Reply to this email directly, view it on GitHubhttps://github.com/MicrosoftDocs/azure-docs/pull/119924#issuecomment-1948406684, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BGGSH5TQUDL32OOPARVLH2LYT5O2LAVCNFSM6AAAAABDMB4CG2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNBYGQYDMNRYGQ.
You are receiving this because you were mentioned.Message ID<EMAIL_ADDRESS>

@ju-shim
Can you review the proposed changes?
When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

@ju-shim - Do you want us to make this change and merge this PR?
Thanks, PR review team

@ju-shim - Do you want us to make your change and merge this PR?
Thanks, PR review team

Yes, please. That would be helpful.


feat: Persist the latest selected payment option

Details
Save the last selected payment option from the SettlementButton dropdown so that it is consistent between the expense preview and header.
Fixed Issues
$ https://github.com/Expensify/App/issues/34853
PROPOSAL: https://github.com/Expensify/App/issues/34853#issuecomment-1902164819
Tests
Same as QA
Offline tests
Same as QA
QA Steps

Request money from your own workspace;
Navigate to the workspace chat;
On the expense report preview, open the Settlement button's dropdown;
Select an option different from the currently selected;

[ ] Verify the value is now displayed on the button

Click on the report preview to open the Expense Report view;

[ ] Verify the same value is now displayed on the settlement button in the header

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native
https://github.com/Expensify/App/assets/12595293/1ec258de-34bd-49c0-b6fe-2c7affa27dfb

Android: mWeb Chrome
https://github.com/Expensify/App/assets/12595293/96887976-8270-4c2c-8923-dac48cb541fe

iOS: Native
https://github.com/Expensify/App/assets/12595293/9a92c4e9-766c-4ac1-a555-e4bccde1b732

iOS: mWeb Safari
https://github.com/Expensify/App/assets/12595293/e95c7963-bfba-4955-952c-93d94ab4c9e5

MacOS: Chrome / Safari
https://github.com/Expensify/App/assets/12595293/ef1776db-3cfd-42e5-bfdb-0b8dc3694353

MacOS: Desktop
https://github.com/Expensify/App/assets/12595293/fa223f23-783c-43d2-8d39-6ae534903937

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)

[ ] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[ ] If the PR modifies the form input styles:

[ ] I verified that all the inputs inside a form are aligned with each other.
[ ] I added Design label so the design team can review the changes.

[ ] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[ ] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to production by https://github.com/marcaaron in version: 1.4.36-5 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

@paultsimura contributor $500 - paid ✔
@allroundexperts C+ $500 - please request in ND


rPackages.xml2: fix build

Description of changes
This PR adds a quick fix for rPackages.xml2, which was left broken after a libxml2 update.
I could have used substituteInPlace but that can silently fail.

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

see also https://github.com/NixOS/nixpkgs/pull/281010

see also https://github.com/NixOS/nixpkgs/pull/281010

Oh, I missed that. Closing now.

see also #281010

Oh, I missed that. Closing now.

if you wouldn't mind reviewing that change that will be great too.


Keystroke Echo Options (none, virtual, typed, both)

Overview and Reasoning
The browser echos all or no keystroke activity in the keystroke history area above the virtual keyboard depending on if you check/uncheck the "Show history" checkbox. This is great, but it would be even better if you could set that for the Virtual and Physical keystrokes independently. Useful, for example, to see that the virtual keyboard "clicks" are truly sending a key while preventing every keystroke you type being echoed. (No more having to remember to turn off show history when typing a password for example.)
Feature Requested
Keyboard echo options of:

None (don't echo any of the keystrokes)
Virtual Only (only echo the keystrokes generated by clicking on the virtual keyboard)
Typed Only (only echo the keystrokes typed using the keyboard)
Both (typed or virtual)

Thanks for submitting this! Can you tell me a bit more about your scenario, though? What's a situation where you want virtual keys echoed but not physical keys or vice versa? If it just showed you errors without revealing the keystrokes, would that work?

Closing due to lack of response, but feel free to open with more details


End to end tests

We discussed both on Discord and in #40 about adding end to end tests. These tests would work as follows (let me know if I missed any step):

Create a new virtual environment
Install nile
Install cairo using nile install
Initialize a new repository with nile init
Compile the project
Run tests
Setup an account for the user (note: requires a private key)
Deploy smart contract
Use the account to interact with the smart contract
Read value back from smart contract

This series of commands tests everything available in nile except nile node, which could be tested by running all steps that involve a network interaction twice (with local node and with test network).
Since StarkNet does not have transaction fees for now we can generate a new private key every time we run the tests and then let the account rot (we can't destroy it anyway).
Any thoughts?

Sounds good!
The deployment step worries me because it depends on external factors (starknet-devnet on local, not to mention if we want to test public nets) but I guess that's fair since this is e2e not unit testing.

I mentioned a random key because if we deploy on the alpha goerli network we need to deploy a new account every time. Not needed for local nodes since they reset state every time we run the tests.

Really like the proposal :thumbsup: Some (general) questions/suggestions:

I'm curious about the reason for having nile install to install cairo-lang and starknet-devnet, instead of including those in the installation requirements. The second option would avoid needing tests (that set up a virtual environment etc), but I'm sure there's a design decision that I'm not aware of:)

click supports testing CLI commands using the CliRunner. Not 100% sure if the proposal is to run shell commands, but I think the CliRunner is at least a good first step.

Regarding testing contract deployment and interactions: we could start with deploying to a local devnet, managed through pytest fixtures or something like docker-compose.

I'm curious about the reason for having nile install to install cairo-lang and starknet-devnet, instead of including those in the installation requirements. The second option would avoid needing tests (that set up a virtual environment etc), but I'm sure there's a design decision that I'm not aware of:)

The reason is that back in the day installing Cairo wasn't as easy as pip install cairo-lang, so an utility for installing was useful -- moreover with a new Cairo version every two weeks. I still believe there's value in setting up a whole environment from scratch, although we have nile init for that.
agree with everything else

I think we have everything except we don't test interactions between node and nile. I think that's fine since we would be testing starknet-devnet more than nile itself.

Sounds good to me. Closing this!


Integration is not accessible in HA

I try add integration to Home Assistant but integration is not visible in integration list. As you can see on screenshot. Version Home Assistant is 2023.5.4 and Frontend 20230503.3 - latest. HA is running on Synology DS220+ in docker. Where can be problem please ? Thank you.

Please use HACS as advised on the README


ZCC_FILE_UPLOADER - Questions

Hi,

How to include the 2UI5 JS - best practice?
I see in the demo app "Z2UI5_CL_DEMO_APP_075" that the "zcc_file_uploader_js" is set followed by a "SET_TIMER" method.
Do we really need this SET_TIMER. Is there another way?

    client->view_display( Z2UI5_cl_xml_view=>factory( client
         )->zcc_file_uploader_js(
         )->stringify( ) ).

client->timer_set( event_finished = client->_event(START) interval_ms =0 ).

I have the requirement to upload the file after selection immediately (property: uploadOnChange).
Is this covered with the "ZCC_FILE_UPLOADER" or do I have to created another "file upload" control?

update:
3) The varibale binding for the file uploader doesn't work for nested views
Demo:
ZAMOH_CL_DEMO_APP_065.txt
Thanks,
Kind regards
Axel

the use of the timer is just a way to load the custom control js code to the app, without it the js control is not working once you use the xml in the view

Hi @axelmohnen,

yes how @choper725 said, you need to define the custom control first before you can use it in an xml view, therefore we do two requests here and the first one immediately calls the backend again to load the xml view. theoretically we could also solve this in other ways, but this was in my tests and demos always the easiest way and where i do not need to make any changes to the normal abap2ui5 logic.
nice, having the possibility to upload directly is a good feature. i think merging both is a good idea. maybe with a new property "checkDirectUpload" and when this is set true in the backend, the extra button is not visible and the upload is directly done. i think the javascript code of both custom controls should be very similar. Feel free to merge it or i can do it when i am working with this control next time.
i need to check this.

best regards.

FYI
I implemented the new property "checkDirectUpload" in order to merge both upload options into one control.
PR has been created.

Issue 3 has been solved in the context of #553 .
Issue can be closed.


Validation of statement of adding a foreign key fails with ParseException: Cannot parse statement: Encountered unexpected token: "." "."

My Code:
	@Test
	public void testJSQLParserValidation()
	{
		String sql = "ALTER TABLE someschema.table2 ADD FOREIGN KEY (table1_pk) REFERENCES someschema.table1 (pk);";
		Validation validation = new Validation(List.of(DatabaseType.POSTGRESQL), sql);
		List<ValidationError> errors = validation.validate();
		Assert.assertTrue( errors.toString(), errors.isEmpty());

	}

Result:
java.lang.AssertionError: [ValidationError [
statement=ALTER TABLE someschema.table2 ADD FOREIGN KEY (table1_pk) REFERENCES someschema.table1 (pk);
capability=parsing
errors=[ParseException: Cannot parse statement: Encountered unexpected token: "." "."
    at line 1, column 80.

Was expecting one of:

    "("
    ","
    ";"
    <EOF>
]
]]

Same for Oracle. This statement can be executed successfully on both.

Greetings.
Please double check which version of JSQLParser you are using.
JSQLParser 4.1 parses your statement without any problems and you can test it online here
Please close the case after confirmation.

Indeed, I used v4.0 and now after upgrading it works


mouseup events

It seems we have mousedown events for the renderer but not mouseup ones. Should we also add them?

Yep I was wondering about that while updating #1275

Note to self: mouseup should be fired before click.


Ineffiecient encoding/decoding of bits

Conversions between bytes and bits use more memory and stick around longer than necessary. Will need some refactoring to fix.

#7 should make this a lot easier to fix. It's currently next on my to-do list.