[#5882] Ensure we even process tasks if processing of ready channels …

…throws an Exception in event loop.
Motivation:
If an exception is thrown while processing the ready channels in the EventLoop we should still run all tasks as this may allow to recover. For example a OutOfMemoryError may be thrown and runAllTasks() will free up memory again. Beside this we should also ensure we always allow to shutdown even if an exception was thrown.
Modifications:

Call runAllTasks() in a finally block
Ensure shutdown is always handles.

Result:
More robust EventLoop implementations for NIO and Epoll.

@Scottmitch @nmittler @trustin PTAL

lgtm. Recovery from OOME may be a bit optimistic though :)

@Scottmitch true enough... That said I think it is a good thing in general

LGTM

Cherry-picked into 4.1 (a09e568) and 4.0 (c49ec72)


lp editor error

Description
I got this error when trying to use the /lp editor command
  java.base@17.0.2/jdk.internal.misc.Unsafe.park(Native Method)
  java.base@17.0.2/java.util.concurrent.locks.LockSupport.park(LockSupport.java:211)
  java.base@17.0.2/java.util.concurrent.CompletableFuture$Signaller.block(CompletableFuture.java:1864)
  java.base@17.0.2/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3463)
  java.base@17.0.2/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3434)
  java.base@17.0.2/java.util.concurrent.CompletableFuture.waitingGet(CompletableFuture.java:1898)
  java.base@17.0.2/java.util.concurrent.CompletableFuture.join(CompletableFuture.java:2117)
  me.lucko.luckperms.common.webeditor.WebEditorRequest.lambda$findMatchingOfflineUsers$9(WebEditorRequest.java:258)
  me.lucko.luckperms.common.webeditor.WebEditorRequest$$Lambda$11687/0x0000000802fb5c48.accept(Unknown Source)
  java.base@17.0.2/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
  java.base@17.0.2/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
  java.base@17.0.2/java.util.stream.SliceOps$1$1.accept(SliceOps.java:200)
  java.base@17.0.2/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:400)
  java.base@17.0.2/java.util.stream.Sink$ChainedReference.end(Sink.java:258)
  java.base@17.0.2/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:528)
  java.base@17.0.2/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
  java.base@17.0.2/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
  java.base@17.0.2/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
  java.base@17.0.2/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
  java.base@17.0.2/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
  java.base@17.0.2/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
  me.lucko.luckperms.common.webeditor.WebEditorRequest.findMatchingOfflineUsers(WebEditorRequest.java:257)
  me.lucko.luckperms.common.webeditor.WebEditorRequest.includeMatchingUsers(WebEditorRequest.java:219)
  me.lucko.luckperms.common.webeditor.WebEditorRequest.includeMatchingUsers(WebEditorRequest.java:200)
  me.lucko.luckperms.common.commands.misc.EditorCommand.execute(EditorCommand.java:89)
  me.lucko.luckperms.common.command.abstraction.SingleCommand.execute(SingleCommand.java:55)
  me.lucko.luckperms.common.command.abstraction.SingleCommand.execute(SingleCommand.java:47)
  me.lucko.luckperms.common.command.CommandManager.execute(CommandManager.java:262)
  me.lucko.luckperms.common.command.CommandManager.lambda$executeCommand$1(CommandManager.java:166)
  me.lucko.luckperms.common.command.CommandManager$$Lambda$10534/0x00000008021755e0.run(Unknown Source)
  java.base@17.0.2/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
  java.base@17.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
  java.base@17.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
  java.base@17.0.2/java.lang.Thread.run(Thread.java:833)```

### Reproduction Steps

/lp editor

### Expected Behaviour

no error

### Server Details

git-Purpur-1563 (MC: 1.18.1)*

### LuckPerms Version

LuckPerms version 5.3.47

### Logs and Configs

I replace the database cause don't want people tu copy it  ```####################################################################################################
# +----------------------------------------------------------------------------------------------+ #
# |                                   __         __   ___  __         __                         | #
# |                        |    |  | /  ` |__/  |__) |__  |__)  |\/| /__`                        | #
# |                        |___ \__/ \__, |  \  |    |___ |  \  |  | .__/                        | #
# |                                                                                | #
# |                                     https://luckperms.net                                    | #
# |                                                                                | #
# |  WIKI:        https://luckperms.net/wiki                                                     | #
# |  DISCORD:     https://discord.gg/luckperms                                                   | #
# |  BUG REPORTS: https://github.com/lucko/LuckPerms/issues                                      | #
# |                                                                                | #
# |  Each option in this file is documented and explained here:                                  | #
# |   ==>  https://luckperms.net/wiki/Configuration                                              | #
# |                                                                                | #
# |  New options are not added to this file automatically. Default values are used if an         | #
# |  option cannot be found. The latest config versions can be obtained at the link above.       | #
# +----------------------------------------------------------------------------------------------+ #
####################################################################################################

# +----------------------------------------------------------------------------------------------+ #
# |                                                                                | #
# |                                      ESSENTIAL SETTINGS                                      | #
# |                                                                                | #
# |                   Important settings that control how LuckPerms functions.                   | #
# |                                                                                | #
# +----------------------------------------------------------------------------------------------+ #

# The name of the server, used for server specific permissions.
#
# - When set to "global" this setting is effectively ignored.
# - In all other cases, the value here is added to all players in a "server" context.
# - See: https://luckperms.net/wiki/Context
server: global

# If the servers own UUID cache/lookup facility should be used when there is no record for a player
# already in LuckPerms.
#
# - When this is set to 'false', commands using a player's username will not work unless the player
#   has joined since LuckPerms was first installed.
# - To get around this, you can use a player's uuid directly in the command, or enable this option.
# - When this is set to 'true', the server facility is used. This may use a number of methods,
#   including checking the servers local cache, or making a request to the Mojang API.
use-server-uuid-cache: false

# +----------------------------------------------------------------------------------------------+ #
# |                                                                                | #
# |                                       STORAGE SETTINGS                                       | #
# |                                                                                | #
# |                Controls which storage method LuckPerms will use to store data.               | #
# |                                                                                | #
# +----------------------------------------------------------------------------------------------+ #

# How the plugin should store data
#
# - The various options are explained in more detail on the wiki:
#   https://luckperms.net/wiki/Storage-types
#
# - Possible options:
#
#   |  Remote databases - require connection information to be configured below
#   |=> MySQL
#   |=> MariaDB (preferred over MySQL)
#   |=> PostgreSQL
#   |=> MongoDB
#
#   |  Flatfile/local database - don't require any extra configuration
#   |=> H2 (preferred over SQLite)
#   |=> SQLite
#
#   |  Readable & editable text files - don't require any extra configuration
#   |=> YAML (.yml files)
#   |=> JSON (.json files)
#   |=> HOCON (.conf files)
#   |=> TOML (.toml files)
#   |
#   | By default, user, group and track data is separated into different files. Data can be combined
#   | and all stored in the same file by switching to a combined storage variant.
#   | Just add '-combined' to the end of the storage-method, e.g. 'yaml-combined'
#
# - A H2 database is the default option.
# - If you want to edit data manually in "traditional" storage files, we suggest using YAML.
storage-method: MySQL

# The following block defines the settings for remote database storage methods.
#
# - You don't need to touch any of the settings here if you're using a local storage method!
# - The connection detail options are shared between all remote storage types.
data:

  # Define the address and port for the database.
  # - The standard DB engine port is used by default
  #   (MySQL: 3306, PostgreSQL: 5432, MongoDB: 27017)
  # - Specify as "host:port" if differs
  address: verysecretadress

  # The name of the database to store LuckPerms data in.
  # - This must be created already. Don't worry about this setting if you're using MongoDB.
  database: s12564_luckperms

  # Credentials for the database.
  username: verysecretuser
  password: 'verysecretpass'

  # These settings apply to the MySQL connection pool.
  # - The default values will be suitable for the majority of users.
  # - Do not change these settings unless you know what you're doing!
  pool-settings:

    # Sets the maximum size of the MySQL connection pool.
    # - Basically this value will determine the maximum number of actual
    #   connections to the database backend.
    # - More information about determining the size of connection pools can be found here:
    #   https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
    maximum-pool-size: 10

    # Sets the minimum number of idle connections that the pool will try to maintain.
    # - For maximum performance and responsiveness to spike demands, it is recommended to not set
    #   this value and instead allow the pool to act as a fixed size connection pool.
    #   (set this value to the same as 'maximum-pool-size')
    minimum-idle: 10

    # This setting controls the maximum lifetime of a connection in the pool in milliseconds.
    # - The value should be at least 30 seconds less than any database or infrastructure imposed
    #   connection time limit.
    maximum-lifetime: 1800000 # 30 minutes

    # This setting controls how frequently the pool will 'ping' a connection in order to prevent it
    # from being timed out by the database or network infrastructure, measured in milliseconds.
    # - The value should be less than maximum-lifetime and greater than 30000 (30 seconds).
    # - Setting the value to zero will disable the keepalive functionality.
    keepalive-time: 0

    # This setting controls the maximum number of milliseconds that the plugin will wait for a
    # connection from the pool, before timing out.
    connection-timeout: 5000 # 5 seconds

    # This setting allows you to define extra properties for connections.
    #
    # By default, the following options are set to enable utf8 encoding. (you may need to remove
    # these if you are using PostgreSQL)
    #   useUnicode: true
    #   characterEncoding: utf8
    #
    # You can also use this section to disable SSL connections, by uncommenting the 'useSSL' and
    # 'verifyServerCertificate' options below.
    properties:
      useUnicode: true
      characterEncoding: utf8
      #useSSL: false
      #verifyServerCertificate: false

  # The prefix for all LuckPerms SQL tables.
  # - Change this if you want to use different tables for different servers.
  table-prefix: 'luckperms_'

  # The prefix to use for all LuckPerms collections. Change this if you want to use different
  # collections for different servers. The default is no prefix.
  mongodb-collection-prefix: ''

  # MongoDB ClientConnectionURI for use with replica sets and custom connection options
  # - See https://docs.mongodb.com/manual/reference/connection-string/
  mongodb-connection-uri: ''

# Define settings for a "split" storage setup.
#
# - This allows you to define a storage method for each type of data.
# - The connection options above still have to be correct for each type here.
split-storage:
  # Don't touch this if you don't want to use split storage!
  enabled: false
  methods:
    # These options don't need to be modified if split storage isn't enabled.
    user: h2
    group: h2
    track: h2
    uuid: h2
    log: h2

# +----------------------------------------------------------------------------------------------+ #
# |                                                                                | #
# |                            UPDATE PROPAGATION & MESSAGING SERVICE                            | #
# |                                                                                | #
# |    Controls the ways in which LuckPerms will sync data & notify other servers of changes.    | #
# |     These options are documented on greater detail on the wiki under "Instant Updates".      | #
# |                                                                                | #
# +----------------------------------------------------------------------------------------------+ #

# This option controls how frequently LuckPerms will perform a sync task.
#
# - A sync task will refresh all data from the storage, and ensure that the most up-to-date data is
#   being used by the plugin.
# - This is disabled by default, as most users will not need it. However, if you're using a remote
#   storage type without a messaging service setup, you may wish to set this to something like 3.
# - Set to -1 to disable the task completely.
sync-minutes: -1

# If the file watcher should be enabled.
#
# - When using a file-based storage type, LuckPerms can monitor the data files for changes, and
#   automatically update when changes are detected.
# - If you don't want this feature to be active, set this option to false.
watch-files: true

# Define which messaging service should be used by the plugin.
#
# - If enabled and configured, LuckPerms will use the messaging service to inform other connected
#   servers of changes.
# - Use the command "/lp networksync" to manually push changes.
# - Data is NOT stored using this service. It is only used as a messaging platform.
#
# - If you decide to enable this feature, you should set "sync-minutes" to -1, as there is no need
#   for LuckPerms to poll the database for changes.
#
# - Possible options:
#   => sql       Uses the SQL database to form a queue system for communication. Will only work when
#                'storage-method' is set to MySQL or MariaDB. This is chosen by default if the
#                option is set to 'auto' and SQL storage is in use. Set to 'notsql' to disable this.
#   => pluginmsg Uses the plugin messaging channels to communicate with the proxy.
#                LuckPerms must be installed on your proxy & all connected servers backend servers.
#                Won't work if you have more than one proxy.
#   => lilypad   Uses LilyPad pub-sub to push changes. You need to have the LilyPad-Connect plugin
#                installed.
#   => redis     Uses Redis pub-sub to push changes. Your server connection info must be configured
#                below.
#   => rabbitmq  Uses RabbitMQ pub-sub to push changes. Your server connection info must be
#                configured below.
#   => auto      Attempts to automatically setup a messaging service using redis or sql.
messaging-service: auto

# If LuckPerms should automatically push updates after a change has been made with a command.
auto-push-updates: true

# If LuckPerms should push logging entries to connected servers via the messaging service.
push-log-entries: true

# If LuckPerms should broadcast received logging entries to players on this platform.
#
# - If you have LuckPerms installed on your backend servers as well as a BungeeCord proxy, you
#   should set this option to false on either your backends or your proxies, to avoid players being
#   messaged twice about log entries.
broadcast-received-log-entries: true

# Settings for Redis.
# Port 6379 is used by default; set address to "host:port" if differs
redis:
  enabled: false
  address: localhost
  password: ''

# Settings for RabbitMQ.
# Port 5672 is used by default; set address to "host:port" if differs
rabbitmq:
  enabled: false
  address: localhost
  vhost: '/'
  username: 'guest'
  password: 'guest'

# +----------------------------------------------------------------------------------------------+ #
# |                                                                                | #
# |                                    CUSTOMIZATION SETTINGS                                    | #
# |                                                                                | #
# |              Settings that allow admins to customize the way LuckPerms operates.             | #
# |                                                                                | #
# +----------------------------------------------------------------------------------------------+ #

# Controls how temporary permissions/parents/meta should be accumulated.
#
# - The default behaviour is "deny".
# - This behaviour can also be specified when the command is executed. See the command usage
#   documentation for more info.
#
# - Possible options:
#   => accumulate   durations will be added to the existing expiry time
#   => replace      durations will be replaced if the new duration is later than the current
#                   expiration
#   => deny         the command will just fail if you try to add another node with the same expiry
temporary-add-behaviour: deny

# Controls how LuckPerms will determine a users "primary" group.
#
# - The meaning and influence of "primary groups" are explained in detail on the wiki.
# - The preferred approach is to let LuckPerms automatically determine a users primary group
#   based on the relative weight of their parent groups.
#
# - Possible options:
#   => stored                  use the value stored against the users record in the file/database
#   => parents-by-weight       just use the users most highly weighted parent
#   => all-parents-by-weight   same as above, but calculates based upon all parents inherited from
#                              both directly and indirectly
primary-group-calculation: parents-by-weight

# If the plugin should check for "extra" permissions with users run LP commands.
#
# - These extra permissions allow finer control over what users can do with each command, and who
#   they have access to edit.
# - The nature of the checks are documented on the wiki under "Argument based command permissions".
# - Argument based permissions are *not* static, unlike the 'base' permissions, and will depend upon
#   the arguments given within the command.
argument-based-command-permissions: false

# If the plugin should check whether senders are a member of a given group before they're able to
# edit the groups data or add/remove other users to/from it.
# Note: these limitations do not apply to the web editor!
require-sender-group-membership-to-modify: false

# If the plugin should send log notifications to users whenever permissions are modified.
#
# - Notifications are only sent to those with the appropriate permission to receive them
# - They can also be temporarily enabled/disabled on a per-user basis using
#   '/lp log notify <on|off>'
log-notify: true

# Defines a list of log entries which should not be sent as notifications to users.
#
# - Each entry in the list is a RegEx expression which is matched against the log entry description.
log-notify-filtered-descriptions:
#  - "parent add example"

# If LuckPerms should automatically install translation bundles and periodically update them.
auto-install-translations: true

# Defines the options for prefix and suffix stacking.
#
# - The feature allows you to display multiple prefixes or suffixes alongside a players username in
#   chat.
# - It is explained and documented in more detail on the wiki under "Prefix & Suffix Stacking".
#
# - The options are divided into separate sections for prefixes and suffixes.
# - The 'duplicates' setting refers to how duplicate elements are handled. Can be 'retain-all',
#   'first-only' or 'last-only'.
# - The value of 'start-spacer' is included at the start of the resultant prefix/suffix.
# - The value of 'end-spacer' is included at the end of the resultant prefix/suffix.
# - The value of 'middle-spacer' is included between each element in the resultant prefix/suffix.
#
# - Possible format options:
#   => highest                        Selects the value with the highest weight, from all values
#                                     held by or inherited by the player.
#
#   => lowest                         Same as above, except takes the one with the lowest weight.
#
#   => highest_own                    Selects the value with the highest weight, but will not
#                                     accept any inherited values.
#
#   => lowest_own                     Same as above, except takes the value with the lowest weight.
#
#   => highest_inherited              Selects the value with the highest weight, but will only
#                                     accept inherited values.
#
#   => lowest_inherited               Same as above, except takes the value with the lowest weight.
#
#   => highest_on_track_<track>       Selects the value with the highest weight, but only if the
#                                     value was inherited from a group on the given track.
#
#   => lowest_on_track_<track>        Same as above, except takes the value with the lowest weight.
#
#   => highest_not_on_track_<track>   Selects the value with the highest weight, but only if the
#                                     value was inherited from a group not on the given track.
#
#   => lowest_not_on_track_<track>    Same as above, except takes the value with the lowest weight.
#
#   => highest_from_group_<group>     Selects the value with the highest weight, but only if the
#                                     value was inherited from the given group.
#
#   => lowest_from_group_<group>      Same as above, except takes the value with the lowest weight.
#
#   => highest_not_from_group_<group> Selects the value with the highest weight, but only if the
#                                     value was not inherited from the given group.
#
#   => lowest_not_from_group_<group>  Same as above, except takes the value with the lowest weight.
meta-formatting:
  prefix:
    format:
      - "highest"
    duplicates: first-only
    start-spacer: ""
    middle-spacer: " "
    end-spacer: ""
  suffix:
    format:
      - "highest"
    duplicates: first-only
    start-spacer: ""
    middle-spacer: " "
    end-spacer: ""

# +----------------------------------------------------------------------------------------------+ #
# |                                                                                | #
# |                            PERMISSION CALCULATION AND INHERITANCE                            | #
# |                                                                                | #
# |    Modify the way permission checks, meta lookups and inheritance resolutions are handled.   | #
# |                                                                                | #
# +----------------------------------------------------------------------------------------------+ #

# The algorithm LuckPerms should use when traversing the "inheritance tree".
#
# - Possible options:
#   => breadth-first            See: https://en.wikipedia.org/wiki/Breadth-first_search
#   => depth-first-pre-order    See: https://en.wikipedia.org/wiki/Depth-first_search
#   => depth-first-post-order   See: https://en.wikipedia.org/wiki/Depth-first_search
inheritance-traversal-algorithm: depth-first-pre-order

# If a final sort according to "inheritance rules" should be performed after the traversal algorithm
# has resolved the inheritance tree.
#
# "Inheritance rules" refers to things such as group weightings, primary group status, and the
# natural contextual ordering of the group nodes.
#
# Setting this to 'true' will allow for the inheritance rules to take priority over the structure of
# the inheritance tree.
#
# Effectively when this setting is 'true': the tree is flattened, and rules applied afterwards,
# and when this setting is 'false':, the rules are just applied during each step of the traversal.
post-traversal-inheritance-sort: false

# Defines the mode used to determine whether a set of contexts are satisfied.
#
# - Possible options:
#   => at-least-one-value-per-key   Set A will be satisfied by another set B, if at least one of the
#                                   key-value entries per key in A are also in B.
#   => all-values-per-key           Set A will be satisfied by another set B, if all key-value
#                                   entries in A are also in B.
context-satisfy-mode: at-least-one-value-per-key

# LuckPerms has a number of built-in contexts. These can be disabled by adding the context key to
# the list below.
disabled-contexts:
#  - "world"

# +----------------------------------------------------------------------------------------------+ #
# | Permission resolution settings                                                               | #
# +----------------------------------------------------------------------------------------------+ #

# If users on this server should have their global permissions applied.
# When set to false, only server specific permissions will apply for users on this server
include-global: true

# If users on this server should have their global world permissions applied.
# When set to false, only world specific permissions will apply for users on this server
include-global-world: true

# If users on this server should have global (non-server specific) groups applied
apply-global-groups: true

# If users on this server should have global (non-world specific) groups applied
apply-global-world-groups: true

# +----------------------------------------------------------------------------------------------+ #
# | Meta lookup settings                                                                         | #
# +----------------------------------------------------------------------------------------------+ #

# Defines how meta values should be selected.
#
# - Possible options:
#   => inheritance      Selects the meta value that was inherited first
#   => highest-number   Selects the highest numerical meta value
#   => lowest-number    Selects the lowest numerical meta value
meta-value-selection-default: inheritance

# Defines how meta values should be selected per key.
meta-value-selection:
#  max-homes: highest-number

# +----------------------------------------------------------------------------------------------+ #
# | Inheritance settings                                                                         | #
# +----------------------------------------------------------------------------------------------+ #

# If the plugin should apply wildcard permissions.
#
# - If set to true, LuckPerms will detect wildcard permissions, and resolve & apply all registered
#   permissions matching the wildcard.
apply-wildcards: true

# If LuckPerms should resolve and apply permissions according to the Sponge style implicit wildcard
# inheritance system.
#
# - That being: If a user has been granted "example", then the player should have also be
#   automatically granted "example.function", "example.another", "example.deeper.nesting",
#   and so on.
apply-sponge-implicit-wildcards: false

# If the plugin should apply negated Bukkit default permissions before it considers wildcard
# assignments.
#
# - Plugin authors can define permissions which explicitly should not be given automatically to OPs.
#   This is usually used for so called "anti-permissions" - permissions which, when granted, apply
#   something negative.
# - If this option is set to true, LuckPerms will consider any negated declarations made by
#   plugins before it considers wildcards. (similar to the way the OP system works)
# - If this option is set to false, LuckPerms will consider any wildcard assignments first.
apply-default-negated-permissions-before-wildcards: false

# If the plugin should parse regex permissions.
#
# - If set to true, LuckPerms will detect regex permissions, marked with "r=" at the start of the
#   node, and resolve & apply all registered permissions matching the regex.
apply-regex: true

# If the plugin should complete and apply shorthand permissions.
#
# - If set to true, LuckPerms will detect and expand shorthand node patterns.
apply-shorthand: true

# If the plugin should apply Bukkit child permissions.
#
# - Plugin authors can define custom permissions structures for their plugin, which will be resolved
#   and used by LuckPerms if this setting is enabled.
apply-bukkit-child-permissions: true

# If the plugin should apply Bukkit default permissions.
#
# - Plugin authors can define permissions which should be given to all users by default, or setup
#   permissions which should/shouldn't be given to opped players.
# - If this option is set to false, LuckPerms will ignore these defaults.
apply-bukkit-default-permissions: true

# If the plugin should apply attachment permissions.
#
# - Other plugins on the server are able to add their own "permission attachments" to players.
# - This allows them to grant players additional permissions which last until the end of the
#   session, or until they're removed.
# - If this option is set to false, LuckPerms will not include these attachment permissions when
#   considering if a player should have access to a certain permission.
apply-bukkit-attachment-permissions: true

# +----------------------------------------------------------------------------------------------+ #
# | Extra settings                                                                               | #
# +----------------------------------------------------------------------------------------------+ #

# Allows you to set "aliases" for the worlds sent forward for context calculation.
#
# - These aliases are provided in addition to the real world name. Applied recursively.
# - Remove the comment characters for the default aliases to apply.
world-rewrite:
#  world_nether: world
#  world_the_end: world

# Define special group weights for this server.
#
# - Group weights can also be applied directly to group data, using the setweight command.
# - This section allows weights to be set on a per-server basis.
group-weight:
#  admin: 10

# +----------------------------------------------------------------------------------------------+ #
# |                                                                                | #
# |                                      FINE TUNING OPTIONS                                     | #
# |                                                                                | #
# |     A number of more niche settings for tweaking and changing behaviour. The section also    | #
# | contains toggles for some more specialised features. It is only necessary to make changes to | #
# |                  these options if you want to fine-tune LuckPerms behaviour.                 | #
# |                                                                                | #
# +----------------------------------------------------------------------------------------------+ #

# +----------------------------------------------------------------------------------------------+ #
# | Server Operator (OP) settings                                                                | #
# +----------------------------------------------------------------------------------------------+ #

# Controls whether server operators should exist at all.
#
# - When set to 'false', all players will be de-opped, and the /op and /deop commands will be
#   disabled.
enable-ops: true

# Enables or disables a special permission based system in LuckPerms for controlling OP status.
#
# - If set to true, any user with the permission "luckperms.autoop" will automatically be granted
#   server operator status. This permission can be inherited, or set on specific servers/worlds,
#   temporarily, etc.
# - Additionally, setting this to true will force the "enable-ops" option above to false. All users
#   will be de-opped unless they have the permission node, and the op/deop commands will be
#   disabled.
# - It is recommended that you use this option instead of assigning a single '*' permission.
auto-op: false

# Defines if "opped" players should be able to use all LuckPerms commands by default.
#
# - Set to false to only allow users who have the permissions access to the commands
commands-allow-op: true

# +----------------------------------------------------------------------------------------------+ #
# | Vault integration settings                                                                   | #
# +----------------------------------------------------------------------------------------------+ #

# If Vault lookups for offline players on the main server thread should be enabled.
#
# LuckPerms has a "catch" for plugins attempting to perform unsafe offline player data lookups
# from the main server thread. This catch raises an exception (causes an error to occur) when unsafe
# lookups are made, instead of allowing the lookup to happen, which would likely cause the server
# to lag.
#
# However, if you're willing to accept the consequences, the catch can be disabled by setting this
# option to 'true.
vault-unsafe-lookups: false

# If LuckPerms should use the 'display name' of a group when returning groups in Vault API calls.
#
# - When this option is set to true, the display name of the group is returned.
# - When this option is set to false, the standard name/id of the group is returned.
vault-group-use-displaynames: true

# Controls which group LuckPerms should use for NPC players when handling Vault requests.
#
# - As NPCs aren't actually real players, LuckPerms does not load any user data for them. This
#   becomes an issue when plugins want to check for their permissions using Vault.
# - As a solution, Vault checks for NPCs fallback to a group, which is defined below.
vault-npc-group: default

# Controls how LuckPerms should consider the OP status of NPC players when handing Vault requests.
#
# - If you want NPCs to have the same permissions as "normal" players, set this option to false.
# - If you want NPCs to have OP status, set this option to true.
vault-npc-op-status: false

# If the vault-server option below should be used.
#
# - When this option is set to false, the server value defined above under "server" is used.
use-vault-server: false

# The name of the server used within Vault operations.
#
# - If you don't want Vault operations to be server specific, set this to "global".
# - Will only take effect if use-vault-server is set to true above.
vault-server: global

# If global permissions should be considered when retrieving meta or player groups
vault-include-global: true

# If Vault operations should ignore any world arguments if supplied.
vault-ignore-world: false

# +----------------------------------------------------------------------------------------------+ #
# | Miscellaneous (and rarely used) settings                                                     | #
# +----------------------------------------------------------------------------------------------+ #

# If LuckPerms should produce extra logging output when it handles logins.
#
# - Useful if you're having issues with UUID forwarding or data not being loaded.
debug-logins: false

# If LuckPerms should allow usernames with non alphanumeric characters.
#
# - Note that due to the design of the storage implementation, usernames must still be 16 characters
#   or less.
allow-invalid-usernames: false

# If LuckPerms should not require users to confirm bulkupdate operations.
#
# - When set to true, operations will be executed immediately.
# - This is not recommended, as bulkupdate has the potential to irreversibly delete large amounts of
#   data, and is not designed to be executed automatically.
# - If automation is needed, users should prefer using the LuckPerms API.
skip-bulkupdate-confirmation: false

# If LuckPerms should allow a users primary group to be removed with the 'parent remove' command.
#
# - When this happens, the plugin will set their primary group back to default.
prevent-primary-group-removal: false

# If LuckPerms should update the list of commands sent to the client when permissions are changed.
update-client-command-list: true

# If LuckPerms should attempt to register "Brigadier" command list data for its commands.
register-command-list-data: true

# If LuckPerms should attempt to resolve Vanilla command target selectors for LP commands.
# See here for more info: https://minecraft.gamepedia.com/Commands#Target_selectors
resolve-command-selectors: false```

### Extra Details

_No response_

You're using an outdated version of LuckPerms, please update & open a new issue if the error still occurs


PIR3-RF doesn't get alert pushed through RFBridge433

PIR3-RF in Alert mode will give amotion alert after 5 second no-movement. The eWelink app registers it but Sonoff Lan doesn't push the alert from PIR3-RF through RFBridge433 after 5 seconds. It can take a number of minutes of no-movement, varying from 3-9 minutes.
So automations in Home Assistant don't work properly. You have to use the eWelink app.

You need to collect debug logs. How this sensors works with integration.

@hannovdm Do you have any instructions for setting the sensor to Alert Mode? I don't see anything in the manual or in the settings of the app
Thanks!


Fix topaz.json defaults usage

Fixes: https://github.com/aserto-dev/topaz/issues/390

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

0 of 22 (0.0%)  changed or added relevant lines in 3 files are covered.
1 unchanged line in 1 file lost coverage.
Overall coverage increased (+0.006%) to 26.367%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

pkg/cli/cc/client.go
0
2
0.0%

pkg/cli/cc/cc.go
0
8
0.0%

pkg/cli/cc/container.go
0
12
0.0%

Files with Coverage Reduction
New Missed Lines
%

pkg/cli/cc/container.go
1
0.0%

Totals

Change from base Build<PHONE_NUMBER>:
0.006%

Covered Lines:
1230

Relevant Lines:
4665

💛  - Coveralls


binary: Format without dropping zeros

The hex string formatting of hash_image binary (which is the only
example of hex-formatting in the code base) used to elide leading zeros,
which makes the resulting hashes hard to compare against other
implementations' output values, and can be confusing when trying to
understand the resulting hash's size.
Casing is set to lower-case hex as that appears to be more common in
other hash implementations.

Published as 3.1.1


feat: Support the RC.2 Forms

We should work on a version that supports the new forms: https://docs.google.com/document/u/1/d/1RIezQqE4aEhBRmArIAS1mRIZtWFf6JxN_7B4meyWK0Y/pub
Currently, when I disable the deprecated forms, some of the ng2-bootstrap components are not able to find NgModel and other stuff (for example in typeaheads).

I confirm, here was my problem. I have used following seed project and the angular.forms was used by default. I haven't any idea, why my early working code was broken in this seed project. Thank you for this issue, i have fixed my code now. If it helps, I have described my problem by stackoverflow.

might as well go to rc.3

@Dinistro next week I will be landing a lot of changes
as you can see @otelnov helps me a lot with test coverage
so we are ready to move forward :)

@valorkin any news on that topic? Cannot wait for this 👍

There is a new PR #678. Unfortunately there are still issues with the test -> work in progress

the issue can be closed I guess...


Convert LFE in-repo docs to .md

I've been making slow and steady progress on the new docs site again, updating styles, preparing templates, working on some basic LFE for generating static content. I'm now at the point where I'm beginning to catalog all of our documentation assets (spread around the intertubes).
One of the first that I'd like to integrate are the docs currently maintained in the LFE repo (where I think they should stay, fwiw).
However, in order for me to integrate these into the new docs site in a way that will be most pleasing to readers, I'd like to convert them to .md files. @rvirding are you okay with this? They would stay where they are, here:

https://github.com/rvirding/lfe/tree/develop/doc

but instead of .txt, they would be moved to .md and the content would be updated as Markdown.
(At that point, the site-generation tool will be able to clone the LFE repo, read the doc/ files, use the Erlang markdown parser, and convert them to HTML for inclusion in the docs site -- all without duplicating the docs at all, or having to move them somewhere else.)
If you're okay with this, I'll create a branch to convert the file format ...

I use those docs primarily and I'm not necessarily in favor of that. They could be presented better, but a straight conversion won't work. The following is a naive translation of the top of the user_guide.txt which I think is ugly.
I like these text files better than the GitBooks. However, I really like GitHub's Markdown styling. Maybe it would work? I just don't know.

Lisp Flavoured Erlang
Note {{ ... }} is use to denote optional syntax.
Literals and Special Syntactic Rules
Integers
Integers can be written in various forms and number bases:
Regular decimal notation:
  1234 -123 0
Binary notation:
  #b0 #b10101 #b-1100
Binary notation (alternative form):
  #*0 #b*10101 #*-1100
Octal notation:
  #o377 #o-111
Explicitly decimal notation:
  #d1234 #d-123 #d0
Hexadecimal notation:
  #xc0ffe 0x-01
Notation with explicit base (up to 36):
  #2r1010 #8r377 #36rhelloworld
Character notation (the value is the Unicode code point of the character
  #\a #\$ #\ä #\🐭
Character notation with the value in hexadecimal:
  #\x1f42d;

A couple things:

Conversion to .md would be tuned, not just taking them as-is
The primary target wouldn't actually be Gitbooks, but rather the main (new) docs site

+1000000 for a Dash docset too.

I think we just need to first work out how we want to read the docs. And
the tutorials for that matter. I think I want:

Read them online on lfe.io
Get a PDF like the gitbooks, but not online
Maybe text files so I can less them

That is what I think I want. What can we do with a reasonable amount of
effort with the .md files and maybe some wrapping?
Robert
On 21 March 2016 at 07:31, Eric Bailey<EMAIL_ADDRESS>wrote:

+1000000 for a Dash docset too.
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub
https://github.com/rvirding/lfe/issues/206#issuecomment-199145532

@yurrriq Does Dash just take html?
Another thought that I'm going to jot down here that this made me think of -- I'd like to see the Erlang stdlib docs get integrated into the new LFE docs site somewhere that makes sense and is easy for LFE devs to reference.
Okay, back to the topic at hand:

@mqsoh's comment got me thinking last night, and @rvirding's comment has reinforced this new train of thought:
what we really need is something like what used to be done in the better-documented open source projects: LaTeX source for docs and then the ability to generate .pdf, .html, .md, .text, etc. from this single source.
with this, we could meet all the needs expressed so far.

I actually do like LaTeX, but I wouldn't want to foist that on anyone else without a lot of +1s. Unfortunately, a LaTeX toolchain install tends to be quite large (I think 1GB+ on Mac systems; I haven't checked on Linux). I've done LaTeX on both Mac and Linux without issue, but again, I'd want to get buy-in on this path.
Another option would be to choose a different approach supported by some "large" number of open source projects that doesn't require such a heavy toolchain. Docbook is out, since that's even heavier (and OpenJade can be ... troublesome ... to get running on different platforms).
Any LaTeX lovers/haters? Any other just-as-versatile but more light-weight tool chains out there?

I'm mobile atm, so I'll be brief for now. @oubiwann There's a tool to convert HTML docs to Dash docset format, but in my experience it needs a lot of hand-holding.

Hello to all!
How about http://asciidoctor.org ? I've accidentally stumbled upon it a few days ago – personally did not use it but there are some notable projects using it.
It supports HTML5, PDF, LaTeX as output among others and GitHub supports it natively (e.g. Clojure Cookbook).
It seems that it is entirely written in Ruby so installation is not a problem on standard platforms and it seems quite lightweight given the prompt installation process.

@beho Thanks for the note! It's been a while since I looked at asciidoc in general ... I don't think I ever used the Ruby tool chain ... I think I used the Python one (/me tries to remember ... maybe it was just "asciido"?). Hrm, I think I also looked at some stuff that O'Reilly did (but I'm pretty sure that was sources and outputs; I don't think they'd published any tools... maybe that's changed?)
Anyway, I ran into some issues and ended up dropping it for something else. It's probably worth checking out again. I have to say that I have not been happy with the tools that we've used from the Ruby community for the various docs-related projects we've done: the versions of things change so quickly, they break APIs with a passion, and they don't seem to have much of an interest in backwards compatibility. It's kicked us pretty hard, and it's not like we've got a ton of time and help :-)
So, I'm definitely interested in considering it ... but I'd be most in favor of either an established toolchain, or something from a community that has a good history of legacy support. That would make our lives so much easier :-)

Huh. a2x might be what we need...
Ah, I think I remember why I gave up on this in the past ... it brought in a big chunk of the docbook toolchain.
Hrrm:

.md -> .html we could get with the Erlang markdown parser
.html -> plain text we could get with lynx (this is what is used in the a2x toolchain)
.html -> various ebook formats (kindlegen is a binary, html2pdf.it might be okay since we can't seem to get ready of node/npm, epub could be done if you have Calibre installed  ... I think there's a cli for it)

I just took a look at installing asciidoc on Ubuntu, and it's only a 107 MB install (I may have a bunch of other stuff already installed, though). I pulled the trigger. It's installing now ;-) I'll see what it's like to use a2x ....

@beho Oh, sweet ... a2x can generate man pages!
@rvirding I'd thought about using asciidoc on some of the LFE book projects last year; there was too much of a learning curve for the large projects, but @beho may have brought this up at the perfect time. The more I'm looking at this, the more this looks like it could be a really good fit for what we want to do with the LFE docs. It gets us most (all?) of the output formats we care about, the install on Ubuntu was painless, and the toolchain is well-established and mature (we don't have to use the Ruby tools).
That being said, if we ever needed to highly customize the output, we'd have to dig into docbook (possibly deeply), but since we wouldn't be using this for creating large projects and it would just be used for the LFE docs, I'm definitely leaning in this direction.
Update: I've just generated an LFE man page after converting an existing doc/*.txt file to doc/*.adoc. Looks pretty good, though we'll have to do some tweaking of the format to get it just right.
Just did .pdf (looks great, comes with ToC); .html (not too bad, also has Toc); and .epub (needs some work).
I'm pretty sold at this point, and will change the ticket title to update this :-)

Hrm, now I'm remembering @yurrriq's mention of pandoc a while back. That handles .md to .adoc ... which apparently a2x doesn't do. My problem with pandoc is that it requires a system install of Haskell, and that can be a lot to ask of people who just want to contribute to the docs...

I <3 pandoc. Maybe we could maintain a Dockerfile to reduce friction.

@yurrriq Hrm, maybe so ...
I took a break for a while, but I'm back at it now, and if we need .md files (e.g., for building static sites), we might have to go with pandoc. I'm having a hard time finding an established tool that can go from .adoc -> .md ...
That would mean that we could keep the source files in .md, too -- which is pretty much the lingua-franca of docs these days. If all a contributor had to do was submit a PR for a .md file, and ultimately man pages, .pdf files, .html, plaintext files, etc., would get generated, then that's going to mean more contributors. Again, there is the burden of a beefier set of dependencies.
A Docker file might help that. In fact, that's a pretty neat idea.
So we're getting close enough on this that I think we can start discussing layout + mechanics. If we go the .md route (pandoc):

[ ] convert doc/*.txt to doc/source/*.md
[ ] generate doc/*/txt from doc/source/*.md, keeping the generated .txt files in version control (thus we meet @mqsoh's desired outcome)
[ ] generate .pdf & .epub files from doc/source/*.md (thus meeting the needs of those who want a book-like format)
[ ] generate LFE man pages (meeting my own desires!); it make sense to keep these in git too, like the .txt files, so that anyone who wants can install the LFE man pages (without having to install the docs build tools)
[ ] simply use the files in doc/source/*.md as-is when incorporating these content into a static site generator

Additional supporting tasks:

[ ] create a Dockerfile per @yurrriq's suggestion with a "Contributors" .md file added to doc/source/contributing.md and linked to the project README.md so that people know how to use it (and how to generate docs, should they need to)
[ ] create a bunch of Makefile targets for

[ ] generating each (and all) of the docs output types
[ ] regenerating a Docker image from the Dockerfile
[ ] running the docs Docker image
[ ] installing the generated man pages

How does this sound?
Have I left anything out?

Wow, pandoc seems to do an even better job of generating man pages that a2x ... and it's waaaay faster. Near instantaneous.

LFE man pages may very well become my new go-to source for LFE docs!

Making good progress on this one. Last to be converted is the user guide. Just started that one, but it will have to wait for later to be finished. Currently generating .txt``` and man pages from .md`` files.

My one question is whether we will be able to use the .md source files to generate pages for the docs in the browser as well? The goal being to have all, or at least docs, in one format which can be reused. There is a lot of docs which need to be merged.

@rvirding Yes, if I understand you correctly, that was my own primary goal for opening this ticket. Based on the feedback, though, it quickly became clear that a simple move to .md would have short-shifted other users, so even for the "official" LFE docs (the doc files in the rvirding/lfe repo) needed to support multiple output formats.
The plan is that the new "site generator" for docs.lfe.io (still very much a WIP) will:

generate content from the repo at github.com/lfe/docs
pull in the .md files from github.com/rvirding/lfe and integrate these
pull it HTML-ized gitbook content that has the look-and-feel of the LFE docs site without having to go to another website

These will not be done once, but every time the generator is run. Every time there is an LFE release, we can re-genereate the docs for that version, thus supporting users who need to be able to refer to older versions of the docs.
Further out/future features being entertained:

incorporate content from selected blog posts
possibly pull in Erlang docs for an integrated experience, and
possibly pull in 3rd-party LFE docs

Still hacking away at the user_guide conversion to .md -- but as I test the formatting and build the man page for it, I gotta say: I LOVE IT. The LFE man page for the user guide is now officially my preferred way to read the file :-)

I just want to get things together as things are way too spread out now. That was idea with one source to bind them.

Okay, the branch is now ready for review:

https://github.com/oubiwann/lfe/tree/docs2md

@yurrriq You've got the most experience with pandoc ... I would love your help getting the .pdf generation to work. Looks like it's a problem with the UTF-8/unicode that's included in the LFE user guide? Dunno.
I don't consider .pdf generation crucial for this branch, but it would be nice to have it. Fortunately the .epub file generation seems to be working without issue ...
I'll open a PR shortly.

Oh dear ... @rvirding: your latest changes to the doc/*.txt files have created some conflicts with this branch. This is tricky since this branch introduces the .md files as the source of truth generates the .txt files from those.
I'll try to get this conflict resolved as soon as possible .... but it may take some time.
Hopefully we can hold off on any more documentation updates until this branch gets merged?

The changes were small and I can reproduce them easily if necessary.

Hopefully we can hold off on any more documentation updates until this branch gets merged?

I can commit to that, or at least put doc updates in a separate branch/PR.

Looks like it's a problem with the UTF-8/unicode that's included in the LFE user guide? Dunno.

I'll take a look. No promises that it'll be today, but soon. Stack Overflow suggests this is a common issue.

@rvirding I got the changes sorted out and resolved the conflicts, so we should be good for now.

@yurrriq Feel free to branch my branch and submit PRs to it ...

@yurrriq: that branch has been merged, so pdf updates can be done against develop.
Closing ...

Sounds good. Thanks.


Add README about genesis files moved.

@ASoTNetworks what do you think about moving the notes about the genesis locations to the top level README and removing the mainnet-genesis-* folders entirely?


Bump fastjson2 version from 2.0.29 to 2.0.31

What is the purpose of the change
Brief changelog
Verifying this change

Checklist

[x] Make sure there is a GitHub_issue field for the change (usually before you start working on it). Trivial changes like typos do not require a GitHub issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
[ ] Each commit in the pull request should have a meaningful subject line and body.
[ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[ ] Check if is necessary to patch to Dubbo 3 if you are work on Dubbo 2.7
[ ] Write necessary unit-test to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add sample in dubbo samples project.
[ ] Add some description to dubbo-website project if you are requesting to add a feature.
[ ] GitHub Actions works fine on your own branch.
[ ] If this contribution is large, please follow the Software Donation Guide.

Codecov Report

Merging #12250 (a6b27a0) into 3.2 (8b65828) will decrease coverage by 0.31%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##                3.2   #12250      +/-   ##
============================================
- Coverage     69.69%   69.39%   -0.31%
+ Complexity      318        2     -316
============================================
  Files          3430     1605    -1825
  Lines        161135    66165   -94970
  Branches      26952     9698   -17254
============================================
- Hits         112304    45912   -66392
+ Misses        39002    15829   -23173
+ Partials       9829     4424    -5405

see 1847 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Proposed solution for object compare.  Resolves Issue #536

Closing this one, I'm going to maintain BC for now. I'm proposing to deprecate the MustBe matcher in #689.


Fix ellipsis rendering (logic + formatting)

The ellipsis placement logic was reversed (more or less), and it also tried to render … directly in a content_tag, causing it to be escaped into &hellip;.
This pull request fixes both issues, at least as far as I can tell by the added / modified tests and the Phoenix app I'm using Scrivener.HTML in.
NOTE: I enabled the "Foundation for Sites 6.x" ellipsis test (which was missing == after the expected output), and modified it to match the actual HTML that's output by HTML.pagination_links.. except for the incorrectly rendered ellipsis, of course.

Awesome thanks, I'll release a new version asap!

Cool!
Would you consider starting to tag releases, so one can match up Hex version with what was in Git at the time? :)
Alternatively, if you have tagged them, but just didn't git push --tags yet, that'd be helpful too!

No I haven't been. I'll go back and tag the previous releases as well.


[MRG] Model expected inverse time along with function

[x] Add tests
[x] Support return_grad=True when per_second=True

Codecov Report

Merging #369 into master will decrease coverage by 0.16%.
The diff coverage is 75%.

@@            Coverage Diff             @@
##           master     #369      +/-   ##
==========================================
- Coverage   85.28%   85.12%   -0.17%
==========================================
  Files          22       22
  Lines        1373     1385      +12
==========================================
+ Hits         1171     1179       +8
- Misses        202      206       +4

Impacted Files
Coverage Δ

skopt/optimizer/gbrt.py
100% <ø> (ø)
:arrow_up:

skopt/optimizer/forest.py
94.11% <66.66%> (-5.89%)
:arrow_down:

skopt/optimizer/gp.py
96.96% <66.66%> (-3.04%)
:arrow_down:

skopt/optimizer/base.py
91.3% <83.33%> (-0.76%)
:arrow_down:

skopt/acquisition.py
96.05% <0%> (-1.32%)
:arrow_down:

Continue to review full report at Codecov.

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

Is there a good rule of thumb how to weight time and other score? I'm imagining a model where you reduce the number of layers/max_depth of trees which will lead to faster training times but potentially worse performance. Trying to understand how this is taken into account in EI per second.

While in general I am in favor of taking running time into account, I also think we should be cautious in what we end up implementing. Most of those approaches are very state-of-the-art -- that is none are well-established. So before adding yet another option to the minimizers, I think it would be wise to really establish first whether this is worth it.

I removed the include_time parameter and added support for acquisition functions based on the suffix "ps". I still need to finish manually compute gradients for optimizations.
I'll add tests and some experiments in a while.

Can someone make a pass for correctness?

I wrote a toy example here, the function optimized is a constant function while the time is proportional to the input. Here are the "EI" and "EIps" values after 3 points have been seen.
def contant_func(x):
    return 10.0

def time_func(x):
    """
    Hard-code such that time is x[0]
    """
    return contant_func(x), log(x[0])

x = [3, 5, 7]
x_1D = np.reshape(x, (-1, 1))
y = [contant_func(xi) for xi in x]
x_pred = np.linspace(1, 9, 100)
x_pred1D = np.reshape(x_pred, (-1, 1))

# Naive EI.
gpr = GaussianProcessRegressor(random_state=0)
gpr.fit(x_1D, y)
y_pred = gpr.predict(x_pred1D)
ei_vals = gaussian_ei(x_pred1D, gpr, y_opt=10.0)

# EI that takes into account time.
y_2D = [time_func(xi) for xi in x_1D]
mor = MultiOutputRegressor(gpr)
mor.fit(x_1D, y_2D)
eips_vals = gaussian_ei(x_pred1D, mor, y_opt=10.0, per_second=True)

plt.plot(x, y, "ro")
plt.plot(x_pred, y_pred, label="mean")
plt.plot(x_pred, ei_vals, label="EI")
plt.plot(x_pred, eips_vals, label="EIps")
plt.legend()
plt.show()

I can take a closer look maybe this afternoon (EU time) or next week. Had a quick look now and was wondering if we should make the infrastructure to support "per second" already flexible enough to handle arbitrary multi-objective problems? I think that would mainly influence decision in Optimizer, the user facing parts would stay the same. Thoughts?

We can do that but I don't think the present acquisition function machinery can handle multitask problems. I'd prefer writing separate acquisition functions as and when we decide to support that.

Updated to [MRG]. Ready for review from my side.

Can I attract some attention here?

I don't really know much about the science side of EI per second etc. Would be good to have @glouppe comment on that, at least he seems to know that none are established methods??

Since @glouppe 's initial comment, I have moved the option to include time as an option to the minimizers to a new acquisition function. Not sure what you mean by "the science side of EI", can you please elaborate? Also, surely my links to the original bayesian optimisation paper and the matlab toolbox that allows such options make it a more established method than gbrt_minimize which our codebase supports which hasn't been published?

In the graph (https://github.com/scikit-optimize/scikit-optimize/pull/369#issuecomment-305696871), you can see a constant function being modelled by the GP, with time proportional to the logarithm of x. Including the time, makes sure that if there are two points to the left and right of the origin, it is likelier to pick the point on the left.
You are right that one cannot fine-tune the balance between the function and time, but I would prefer implementing methods that are already there rather than something new as a starting point.

Maybe @iaroslav-ai has the time to look?

Yeah, I will take a look

Review incoming in a day or two - I just need to formulate my thoughts a bit more on this

@iaroslav-ai I've removed references to LCBps and gphedgeps

Just thinking out loud: a user one can always have a tradeoff between value of time and objective in principle by just multiplying the time returned in the objective function by some constant. This would be good to clarify in documentation somewhere. Still explicit tradeoff parameter would be better I think.

@iaroslav-ai I've addressed all your comments and have added support for gradient with gradient checks. I would postpone adding an example and allowing the user to configure the tradeoff to another pull request. Please have another look.

LGTM when my latest comments are addressed!

Will merge when tests pass.


angles: updating to 1.9.11

I'm, not sure if the patch is still required (the part: <buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>). In any case it would have to be adapted; in its current state the patch is rejected.

Looks good to me.
Successfully built core-image-ros-world with the patched rebased onto the current master:
Build Configuration:
BB_VERSION        = "1.34.0"
BUILD_SYS         = "x86_64-linux"
NATIVELSBSTRING   = "fedora-25"
TARGET_SYS        = "i586-oe-linux"
MACHINE           = "qemux86"
DISTRO            = "nodistro"
DISTRO_VERSION    = "nodistro.0"
TUNE_FEATURES     = "m32 i586"
TARGET_FPU        = ""
meta              = "master:e584be78f92ee6f08f570c239698d56ac78d05f9"
meta-oe
meta-python
meta-multimedia   = "master:2c21aa8633e4e3538099bcc56d76ab0a594411b4"
meta-ros          = "rapyuta-update_angles-v1:105d763cd981a19671b8d66d171a8549101bb36a"


[WIP] [Docs] updates to transportation schema concepts

Description

addition of linear referencing page
addition of routes and destination page
edits to existing transportation concepts pages

Reference
List of relevant links to GitHub issues, PRs, and other documentation.

TODO.

Testing
Brief description of the testing done for this change showing why you are confident it works as expected and does not introduce regressions. Provide sample output data where appropriate.
TODO.
Checklist
Checklist of tasks commonly-associated with schema pull requests. Please review the relevant checklists and ensure you do all the tasks that are required for the change you made.

[ ] Add relevant examples.
[ ] Add relevant counterexamples.
[ ] Update any counterexamples that became obsolete. For example, if a counterexample uses property A but is not intended to test property A's validity, and you made a schema change that invalidates property A in that counterexample, fix the counterexample to align it with your schema change.
[ ] Update in-schema documentation using plain English written in complete sentences, if an update is required.
[ ] Update Docusaurus documentation, if an update is required.
[ ] Review change with Overture technical writer to ensure any advanced documentation needs will be taken care of, unless the change is trivial and would not affect the documentation.

Documentation Website
Update the hyperlink below to put the pull request number in.
Docs preview for this PR.

Dana has plans for this. Big plans.


Update README.md

Hi @nyurik! Even though it's just a matter of style, it may appear as a little less exotic to most readers, so I'll merge. Thanks :)


Inconsistent behavior when deserializing null

Over the last few months using spray-json I had learned the following (incorrect) rule:

null is allowed iff your type is of the form Option[X]

Today I unlearned this rule when I converted a null into Double.NaN (#8) instead triggering an exception, which is what I was expecting to happen. Trying out a bunch of standard formats, I observe these behaviors when deserializing from null:
JsNull.convertTo[Boolean]          -> error
JsNull.convertTo[Int]              -> error
JsNull.convertTo[Long]             -> error
JsNull.convertTo[Char]             -> error
JsNull.convertTo[String]           -> error
JsNull.convertTo[Seq[Int]]         -> error
JsNull.convertTo[Map[String, Int]] -> error
JsNull.convertTo[(Int, String)]    -> error

JsNull.convertTo[Float]            -> Float.NaN
JsNull.convertTo[Double]           -> Double.NaN
JsNull.convertTo[Unit]             -> ()

JsNull.convertTo[Option[Int]]      -> None

I think the library's behavior would be less surprising and thus easier to use if the rule above did hold. To that end, I propose:

Exposing an option for null <-> Float.NaN/Double.Nan, disabled by default
Rejecting null -> () for Unit

Thoughts? Are there more cases that I'm missing? Is the issue more subtle than this?

Any updates on this?

Also, Some(Double.NaN).toJson.convertTo[Option[Double]] yields None.


[DEVX-23] test: Replace most sleepPromise with retry-strategy

Increase integration test stability by avoiding sleepPromise and rather retry the test until it succeeds. This should in theory reduce the test time.

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Command help messages could use more content

The command help messages include the 'Usage' and 'Options' sections, but have
no summary of the function of that command. At the least it would be helpful to
copy the one-line summary over from the main `beet help` message for each
command.

Ideally there could eventually be more detailed summaries and/or a link to the
relevant page(s) in the online beets documentation.

I appreciate that this is possibly difficult if you're using some sort of
command-line-argument-parsing library to handle the help messages, but I find
myself referring automatically to the command help messages all the time only
to remember that I have to go hunt down the doc page online instead...

Example:

CURRENT
$ beet help ls
Usage: beet list [options]

Options:
  -h, --help            show this help message and exit
  -a, --album           show matching albums instead of tracks
  -p, --path            print paths for matched items or albums
  -f FORMAT, --format=FORMAT
                        print with custom format

PROPOSED
$ beet help ls
Usage: beet list [options]
Query the library.

Documentation Links:
  - beet list
    http://beets.readthedocs.org/en/1.0b14/reference/cli.html#list
  - query strings
    http://beets.readthedocs.org/en/1.0b14/reference/query.html

Options:
  -h, --help            show this help message and exit
  -a, --album           show matching albums instead of tracks
  -p, --path            print paths for matched items or albums
  -f FORMAT, --format=FORMAT
                        print with custom format

$ beet version
beets version 1.0b14
plugins: embedart, info, scrub, lastgenre, replaygain, chroma

Original issue reported on code.google.com by<EMAIL_ADDRESS>on 20 May 2012 at 12:48

Do not comment here, but on sampsyo/beets#188


SecAuditEngine RelevantOnly won't log

Hello again, thank you very much for your answer in #20 (I tried to find a way into the code by myself with your help but without success this morning).
So my issue today is about logs again, which is my main task those days.
The context
I've installed as in the Readme, Caddy and coraza-waf and it works.
I am trying to collect the logs about coraza.
The Issue
Coraza does not log into my file specified with SecAuditLog  unless I set SecAuditEngine to On which logs every single request where I want only relevant with relevant.
In addition, changing the SecAuditLogParts does not affect the logs.
My config
Some of my Caddyfile
http://example.com {
	coraza_waf {
		include coraza.conf-recommended
		include coreruleset/crs-setup.conf.example
		include coreruleset/rules/*.conf
	}
	reverse_proxy {
		to some_ip
		trusted_proxies private_ranges <IP_ADDRESS>
	}
}

Some of coraza.conf-recommended
# -- Rule engine initialization ----------------------------------------------

# Enable Coraza, attaching it to every transaction. Use detection
# only to start with, because that minimises the chances of post-installation
# disruption.
#
# SecRuleEngine DetectionOnly
SecRuleEngine On

# -- Audit log configuration -------------------------------------------------

# Log the transactions that are marked by a rule, as well as those that
# trigger a server error (determined by a 5xx or 4xx, excluding 404,
# level response status codes).
#
SecAuditEngine On
SecAuditLogRelevantStatus "^(?:(5|4)(0|1)[0-9])$"

# Log everything we know about a transaction.
SecAuditLogParts AZ

# Use a single file for logging. This is much easier to look at, but
# assumes that you will use the audit log only occasionally.
#
SecAuditLogType Serial
# SecAuditLogType concurrent
# SecAuditLogStorageDir /var/log/caddy/
SecAuditLog /var/log/caddy/waf.log

I tried to play with SecRuleEngine too.
Some of coreruleset/crs-setup.conf.example
# Default: Anomaly Scoring mode, log to error log, log to ModSecurity audit log
# - By default, offending requests are blocked with an error 403 response.
# - To change the disruptive action, see RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example
#   and review section 'Changing the Disruptive Action for Anomaly Mode'.
# - In Apache, you can use ErrorDocument to show a friendly error page or
#   perform a redirect: https://httpd.apache.org/docs/2.4/custom-error.html
#
SecDefaultAction "phase:1,log,auditlog,pass"
SecDefaultAction "phase:2,log,auditlog,pass"

SecAction \
 "id:900000,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.blocking_paranoia_level=1"

Modifying the paranoia works and block at lvl2 my XSS attempt but doesn't affect logging with SecAuditEngine (but it affects logging about errors in caddy logs

Can we validate if this is still happening in https://github.com/corazawaf/coraza-caddy/releases/tag/v1.2.2 ?


Add support for Akeyless

Added new backend provider - Akeyless.
For testing this, you can run the following command to retrieve secrets:
cat sample.json | go run main.go -config datadog-secret-backend.yaml
Contents for sample.json below:
{"version": "1.0", "secrets": ["akeyless:/secret-folder/datadog-sample-key"]}
Reach out to me for datadog-secret-backend.yaml with akeyless creds and sample secret stored


Switch to limited shell via tinyssh or similar on localhost rather than full ssh

Possibilities:

https://github.com/jschauma/lish
https://github.com/ghantoos/lshell
rbash

https://github.com/ido50/Svsh

Added this to future projects list, but for now, I need to wait for the stock system to stabilize


Can we support armv7 architecture?

I'm trying to run a Phoenix project with Tailwind library in a raspberry but it is not working. The project is Dockerized, but when it runs mix assets.deploy it fails:
Step 16/24 : RUN mix assets.deploy
 ---> Running in 034ad1ec1be1

added 1 package, and audited 2 packages in 3s

found 0 vulnerabilities

22:38:37.140 [notice] Application tailwind exited: exited in: Tailwind.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (RuntimeError) tailwind is not available for architecture: arm-unknown-linux-musleabihf
            (tailwind 0.1.5) lib/tailwind.ex:265: Tailwind.target/0
            (tailwind 0.1.5) lib/tailwind.ex:145: Tailwind.bin_path/0
            (tailwind 0.1.5) lib/tailwind.ex:162: Tailwind.bin_version/0
            (tailwind 0.1.5) lib/tailwind.ex:88: Tailwind.start/2
            (kernel 8.2) application_master.erl:293: :application_master.start_it_old/4

I'm using the erlang:24.2.1-alpine base image which is supports this platform.

I see you rely on tailwind binaries, so it might be not possible at this moment, I'm closing this issue.

@thiagogsr is this still not possible? tailwind releases include a version for armv7 architecture https://github.com/tailwindlabs/tailwindcss/releases

great to hear that @prepor , thanks

Can we reopen issue then? Do you have resources to support it or PR is welcome? ) I can create one, the only question is how to detect architecture. On my Raspberry Pi 3 I'm getting:
iex(8)>     arch_str = :erlang.system_info(:system_architecture)
'arm-unknown-linux-gnueabihf'
iex(9)>     [arch | _] = arch_str |> List.to_string() |> String.split("-")
["arm", "unknown", "linux", "gnueabihf"]
iex(10)> {:os.type(), arch, :erlang.system_info(:wordsize) * 8}
{{:unix, :linux}, "arm", 32}

I can add a mapping to linux-armv7 for this triple and make a PR if you think it's valid.

If linux-armv7 is provided in the tailwind release, then yes please send a PR!


Update template.py - clean up / shorten discord template image

I made it get rid of unnecessary parameters in as well as replacing media.discordapp.net with cdn.discordapp.com Discord started adding tons of parameters which I read were to be used to make the links temporary to prevent people from using discord as a free image host. media.discordapp.net is a longer domain and its meant for thumbnails of images where cdn is for the original quality, cdn.discordapp.com is just better
I don't usually use python, idk if it works, and I am too lazy to test it. If not its a simple change and should be easily fixed if my code doesn't work.

Not being a Dev for pxls, but i can already tell you the code dosent work, the indentations in your change will throw an error, i did test that as well! As you should have as well, i dont get how you can even say "idk if it works, and I am too lazy to test it", if you do actually care about a project and want to contribute something cleanly, please test your code, this is and should always be common practice.

Changes The new query parameters are necessary to ensure those URLs are working. Discord CDN will enforce those parameters (issue date, expiry, hmac) at any given time now, as stated in their Discord Developers Guild:
https://i.void.cx/u/a6g2pP.png


weird results after S3norm on single-end ATAC-seq data

Dear Guanjue,
Thanks for inventing such great software which is quite helpful.
But nowadays when I tried to normalize a 4-sample single-end ATAC-seq data by S3norm. The result is weird, I can't find out the reason if something went wrong or if some issues exist in my data.
Attached please find the boxplots.
The first one is the boxplot of results before and after S3norm among these 4samples.

The second one is the boxplot of results before and after S3norm between only 2 samples of them.

python s3norm_pipeline.py -s $script_directory'/src' -t S3norm_file_list.txt
I just used the default parameters and I've checked the files used are all correct and can meet the requirements for S3norm.
Thanks for your time in advance.
Looking forward to your reply.

The result indeed looks wired.
I wonder if you can show 4 scatter plots between 2 samples: before and
after s3norm in both log scale and linear scale?
Best wishes.
Guanjue
On Mon, Jan 30, 2023 at 10:26 AM ming1211 @.***> wrote:

Dear Guanjue,
Thanks for inventing such great software which is quite helpful.
But nowadays when I tried to normalize a 4-sample single-end ATAC-seq data
by S3norm. The result is weird, I can't find out the reason if something
went wrong or if some issues exist in my data.
Attached please find the boxplots.
The first one is the boxplot of results before and after S3norm among
these 4samples.
[image: boxplot-4sample-zoom]
https://user-images.githubusercontent.com/117460452/215517704-1341621b-61fe-4f51-8b3e-304cda407f26.png
The second one is the boxplot of results before and after S3norm between
only 2 samples of them.
[image: 2norm-boxplot-zoom]
https://user-images.githubusercontent.com/117460452/215517834-a71e29ab-2008-443c-9916-ced31d88e5d0.png
python s3norm_pipeline.py -s $script_directory'/src' -t
S3norm_file_list.txt
I just used the default parameters and I've checked the files used are all
correct and can meet the requirements for S3norm.
Thanks for your time in advance.
Looking forward to your reply.
—
Reply to this email directly, view it on GitHub
https://github.com/guanjue/S3norm/issues/6, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AB3XPDHRZXHR5CQNRD23AOTWU7MSRANCNFSM6AAAAAAULJGUWI
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>


Pong Policy Gradient-ow many episodes to get results?

I tried to run Pong Policy Gradient for 2000 episodes on the original file with no results whatsoever. Then boosted reward for positive points (points scored by the learner(right side) to 20 and  got this result:

I boosted learner's points rewards to 100 and after around 1500 episodes there is no result. Forgive my being naive but successfully running three versions of cartpole I was expecting some logical results. As you can see from the picture variance is big and after a 800-900 improvement the results seem stagnant.
Has anybody run it for some more episodes and tried to tweak the rewards and brought results up and variance down?
Given the policy should I boost the penalty for the teacher's (left opponent's) scoring points?
Any guidance will be appreciated. Thanks.


Great theme. How to make jupyter standalone?

In the preview, it looks like you have jupyter lab as a standalone application. I would like to do this myself. Can you tell me how you achieved this look?

It is actually just Chrome trick. On a Mac you can achieve this by following the steps below:

Run jupyter lab using Chrome and go to Jupyter tab,
Click the 3 dot on the top-right-hand corner
Select More tools -> Create a shortcut -> Tick Open as windows

Your jupyter lab should open like a standalone App. I believe the steps are similar on a Windows or Linux machine.

 Big thanks

:) I had the same feeling when I first came to know about it.


update URL of plugins_graphdriver.md in experimental/README.md

update URL of plugins_graphdriver.md in experimental/README.md

oh, the commit message should be updated.

ok, has been updated to "../docs/extend/plugins_graphdriver.md"


Added two lines of code that are required to run without error

The necessary lines are:
vector_list_21  <-  list_census_vectors("CA21")
and
if (!fs::dir_exists("out")) fs::dir_create("out")

cool! That was my first every merge commit =)


Tensorflow dense_image_warp Failed to convert object of type <type 'list'> to Tensor

Using up-to-date Keras and Tensorflow r1.12 on Ubuntu 16.04 and 14.04. For the following code:
img2D = Input(shape=(100, 100, 3))
refPosX = Input(shape=(100, 100, 1))
refPosY = Input(shape=(100, 100, 1))

depth_map = depth_net(dFeatures)
curX = tf.multiply(depth_map, refPosX)
curY = tf.multiply(depth_map, refPosY)
dMove = tf.concat([curX, curY], axis=3)

warped = tfc.image.dense_image_warp(img2D, dMove)

I'm receiving the error output:
Using TensorFlow backend.
Traceback (most recent call last):
File "/home/carson/ws/dla/test_network_5/depth_and_color_nets.py", line 89, in <module>
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/image/python/ops/dense_image_warp.py", line 195, in dense_image_warp
[batch_size, height * width, 2])
 File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 6482, in reshape
"Reshape", tensor=tensor, shape=shape, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 513, in _apply_op_helper
raise err
TypeError: Failed to convert object of type <type 'list'> to Tensor. Contents: [None, 10000, 2]. Consider casting elements to a supported type.

This seems to only be happening with this function, so unless I've missed something in the documentation, I'm not sure what's going on here :/

So, I've tracked it so far just to array_ops (from tensorflow.python.ops import array_ops)
batch_size, height, width, channels = img2D.get_shape().as_list()
query_flat = array_ops.reshape(img2D, (batch_size, height*width, 2))

This returns the same error, but the type is now of course of type 'tuple' that throws the error. I don't quite understand what's happening in the reshape function in array ops.

Now I've noticed that the most recent version of dense_image_warp changes the way in which shapes are obtained, going from
batch_size, height, width, channels = image.get_shape().as_list()

to
batch_size, height, width, channels = (array_ops.shape(image)[0],
                              array_ops.shape(image)[1],
                              array_ops.shape(image)[2],
                              array_ops.shape(image)[3])

However, no shapes seem to be returned... just (?, ?, ?, ?)

Got it, define batch_shape. :/


evaluate sha256 implementation that is using avx512 instructions

see https://github.com/minio/sha256-simd#support-for-avx512
if poet will be significantly slower than the fastest implementation it will be a security hole

@dshulyak we're already using hw acceleration. AVX512 / AVX2 would be only faster if we could send many hashes at the same time. And then receiving results also in batches. That's not possible in merkle-tree use case.
Our current implementation heavily uses SHA-256 HW extensions and is basically assembly code.


Curl not working

Everytime I try running curl I get this error. Have tried looking and researching the issue and have found no solutions so far.

What's the python version that comes with your installation of Debian? The code has been written with the assumption the python would be running on the latest version.

The version of python that the installation is 3.9.2-3.

I have gotten it to run by doing python3 instead of python but now I get this Oodle test fail.

Did you find out how to fix it?


Refactor to use one set of Docker instruction name constants when processing Docker instruction/command info

Hey @kcq, I want to work on this, also I am very new to the project can you please drop me a few resources from where I can learn and contribute?
I have joined the community to get more involved.

Hi @kcq, @iximiuz go through this codebase you explained - https://www.youtube.com/watch?v=ioIG-oPg0pA
You took the session very nicely and I am going through the codebase.
The issue seems like when minifying the docker image need to provide a set of docker instructions/commands about images and containers similar to prompts?
Am I pointing right?
Please suggest the approach how should I go ahead with this
Thanks!

It's not limited to minifying images. There are several places in the code where the container instruction metadata is processed and those places use their own set of constants. For example:
https://github.com/slimtoolkit/slim/blob/master/pkg/docker/instruction/instruction.go#L9
https://github.com/slimtoolkit/slim/blob/master/pkg/docker/dockerfile/dockerfile.go#L19
https://github.com/slimtoolkit/slim/blob/master/pkg/docker/dockerfile/reverse/reverse.go#L107

Okay. Thanks for sharing the links Kyle. Can you share more details on the above code and what exactly needs to be done?
I'll quickly start working on this!

Hey @kcq,
In this file - https://github.com/slimtoolkit/slim/blob/master/pkg/docker/instruction/instruction.go#L9
This can be done by creating new enum called DockerInstruction and adding all constants to it. For example -
enum DockerInstruction {
Add,
Arg,
Cmd
Copy,
};

And code in the spec map update to use constants from the enum. For example -
Specs["Add"] = Format{
	Name:             ADD,
	SupportsFlags:    true,
	SupportsJSONForm: true,
}

How's this approach IMO?

Hey @kcq should I go ahead with this ?

Hi @kcq I am researching various approaches to meet the end goal.
Also can we create different docker_instructions.go and add all constants to it and refractor the code ?


Implement Throwable

This PR

[x] Makes the Exception interface implement extend \Throwable

Thank you, @BackEndTea!


latency based routing with circuit breaking on errors

Add new routing options to distribute query load on solr clusters.

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

lgtm

lgtm

lgtm once the build is passing

lgtm


fix: clear globalLoading cache in node env

Description
The bundler bundle GLOBAL_LOADING_REMOTE_ENTRY into share object closure ,and it can not access via globalThis .

This PR aims to solve this issue and clear globalLoading internally in revalidate method.

Related Issue
https://github.com/module-federation/core/issues/3119

Types of changes

[ ] Docs change / refactoring / dependency upgrade
[X] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)

Checklist

[X] I have added tests to cover my changes.
[X] All new and existing tests passed.
[X] I have updated the documentation.

Tested and worked! @2heal1

Can I get a canary version so that I can test whether this fixes the issue ?

Yeah sure , try this 0.0.0-next-20241106033151


NuGet package as AnyCPU

Using LinqToExcel in a project compiling with "AnyCPU" is problematic, as you have to decide between the NuGet packages LinqToExcel (x86) or LinkToExcel_x64 (breaking it for one of the two).
It is possible to compile LinqToExcel with AnyCPU though. I remember to have read in some forum, that you ran with this into some problems at the time. Now it seems to work without any issues.
Using the created .dll works as expected.
Would it be possible to update the NuGet package to target AnyCPU? Bonus would be, that the _x64 package can be dropped and one package would be enough.

👍 to this, it's causing problems.

Done in 2.0.0-PRERELEASE.


chore(main): release 2.0.0

:robot: I have created a release beep boop
2.0.0 (2023-07-21)
⚠ BREAKING CHANGES

typescript should be dev depency (#13)

Bug Fixes

expose types (#16) (9b155b3)
typescript should be dev depency (#13) (738ca99)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/logos-innovation-lab/luminance/releases/tag/v2.0.0 :sunflower:


GUI, Backtesting does not complete, Random Duration

Note: for support questions, please join our Discord server

I'm submitting a ...
[X ] bug report
[ ] feature request
[ ] question about the decisions made in the repository

Action taken (what you did)
Backtesting 1 Minute for 3 Months Data.

Expected result (what you hoped would happen)
3Months of data processed

Actual result (unexpected outcome)
25,23,13 Days.  Random Timespan covered.

Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc)

I have worked through the problem, and created a simplified example of the  problem https://github.com/akentigernfox/node-child-process-fork .
I have worked through most of a fix and am testing it now.

Can you tell more about your OS and your strategy?

Mike,  sorry I'm a bit slow. getting the code into it's own commit block and re-testing it.   I ended up with loads of comments everywhere and two other changes in the same commit so i'm splitting them up.
I'm running your gekko, on Digital Ocean Ubuntu 16 Droplet.  I have 3 users with 3 installs, trading 2 poloniex accounts.  BTC/VRC  BTC/VTC , and a Test Account.
Additional code pieces are for
1) UIConfig  put into home/.gecko/ so settings are different per user, and pull's don't affect it.
2) Assigning the --inspect/--debug port for the child_process fork's.

Assigning the --inspect/--debug port for the child_process fork's.

I don't use these tools haha.
Anyway the comments around the scripts you posted indicate windows, does this mean you have the same problem on both ubuntu and windows? And where were you able to implement a fix (also both platforms)?

OK, reviewing on both Ubuntu & Windows.
I've tidied up the example scripts,  I forgot the ``` to indicate the code blocks.   From going through the code, I think that the backtest  parent/child messaging is working as shown in Test2.   That because of it having console.log/log statements inside it.  The messaging appears to work correctly,  however if you where to remove all the console.log/log then the messaging would work as in Test1, and nearly all the messages are lost.
Working on testing a fix.

Mike,
I've made up a change, and followed it through with the other core/workerts/..../parent & child  processes. To eliminate the possibilities of other lost messages between the parent/child when the child exits before the parent has managed to process everything.
https://github.com/just-ak/gekko/tree/chld-p-fork
I've also made up:
UIConfig to home folder
Putting UIconfig.js into separate config settings file  under the ~/.gecko/  folder.  (Tested Windows & Unix)  Although does not have merge for new properties yet.
https://github.com/just-ak/gekko/tree/uicfile
node --inspect
Inspect / Debug ports, for Node.js Debugging through VisualSudio Code & Chrome
https://github.com/just-ak/gekko/tree/inspect-debug-ports
Backtest Progress Bar
I am going to have a go at putting the import progress bar into the backtest screen now, since I've been looking around that area of code a lot, not to sure how successful I will be, as it's my first venture into web/vue.  It's a great project, and I have some extra time at the moment.

Could you point me in the direction of what you actually changed to fix your issue? I just see a bunch of commits with "No commit message": https://github.com/just-ak/gekko/commits/chld-p-fork

Mike,  I've been running with my changes, and splitting off the code as much as I can.  I still have not managed to prove to myself that I have got the fix working across all the parent/child processes links,   and again last night I had a paper trader running, and it just exited after 8 hours.

The idea is to stop the exit firing before the last message has actually arrived from the child.

Parent Starts Child,
Child sends messages,
Last message from child.  process.send("Backtest Finished")   (core/markets/backtest.js : 80) instead of process.exit();
the Handler waits for the message and not the exit.  message==='Backtest Finished'  (core/workers/pipeline/messageHandlers/backtestHandler.js :26)  instead of exit.
Once the message is received, process the end details, then it sends the "Exit-Child" message to the child.
Child processes waits for Exit-Child message before exiting.
If a child exit's without this then a problem has occurred.

I will keep trying to find the bug that I'm hitting with the process just stopping, as I think they are related.   I work UTC +7  from around 6am,  I've joined the discord group if you want to have a chat, about this problem.
When I've got the fix pinned down I will update some more.    I foolishly used git to move between my work area and the server, hence the commits without comments. (my bad)

@just-ak I am quite busy at the moment, will try to join the discord but no promises. But the screenshot you post is not about backtesting, but it's a live stratrunnner. It might be the same underlying issue (child process communication), but could you please limit your research / fixes to as much of an isolated problem as possible?
With this I mean, would you mind keeping your research and results limited like:

stick to one specific OS where you can reproduce specific bugs, so please don't jump between windows and linux and have logs from both/either all over the "reproduce" repo.
stick to one specific feature (preferably backtest, since that's super easy to reproduce), and don't jump between different features. The code surface for all these features is huge, we should try to isolate code that is causing the problem.
try to create a test case where you can reproduce it based on the stable gekko release. If you play around with different Gekko instances run by different users with all their own uiconfig stored inside their own homefolder you are creating situations that I can never reproduce (unless that is literally the only way to reproduce this bug).

I am very thankful for all your hard work in research and going through all the code and testing everything out, but let's please do it in a way that we can all slowly get towards the bug and fix it :)

I am going to have a go at putting the import progress bar into the backtest screen now, since I've been looking around that area of code a lot, not to sure how successful I will be, as it's my first venture into web/vue. It's a great project, and I have some extra time at the moment.

About this: currently there are two communication channels between the UI and the gekko server: a REST API and a websocket API. If you want to show a backtest progress bar we would have to move the backtest code over to the websocket API. Releated discussion: https://github.com/askmike/gekko/issues/744#issuecomment-301243317

Yes the screen shot is from the live part, I have tested the backtesting bug and it 'appears' to be working correctly,  I ventured into the other parent/child sections to make sure that the fix I was proposing would work across each style.  I want to recommend a fix that works across the different styles of parent/child processes. It may take me a little longer but the result will be better.

Working, on this random bug, which is todo with the parent/child relationship.  I think I have managed to narrow it down and get the consol.log propagated upwards to the parent nicely now.  But am a little unsure of what the error means, and if It is actually a fatal error.  does this EPIPE error make sense to you ?
LOG      :   <-- POST /api/getCandles
LOG      : core/workers/loadCandes/Parent.js   About to Fork 9247
LOG      :   --> POST /api/getCandles 200 584ms 1.89kb
LOG      : loadCandles Child Exited
ERROR   : loadCandles had error{"code":"EPIPE","errno":"EPIPE","syscall":"write"}
"loadCandles had error{\"code\":\"EPIPE\",\"errno\":\"EPIPE\",\"syscall\":\"write\"}"
LOG      : 2017-11-10 11:13:42 (DEBUG): Requested BTC/USDT trade data from Poloniex ...
LOG      : 2017-11-10 11:13:42 (DEBUG): Processing 1 new trades. From 2017-11-10 04:13:34 UTC to 2017-11-10 04:13:34 UTC. (a few seconds)
LOG      : 2017-11-10 11:14:02 (DEBUG): Requested BTC/USDT trade data from Poloniex ...

in my experience most EPIPE errors have to do with you trying to pipe node output into something else, eg. echo "AAA" | echo but into something that does not support piping. But I don't know what you've changed and what you are trying to do. In your case it might have to do a misconfiguration between child/process IPC.

Thanks, that was the pointer that was needed.  Just been running more tests. I've got a VPS Ubuntu 16 happily running 3 paper traders live,  and backtesting 3 months (BTC-VTC) of data consistently.  I will keep repeating to make sure the same results are being returned.


submission encryption

Took another look-see at the tests Just For Fun. They look very complete to me. I really like all of the new contributor guide text.


Added option to show based on current line

Saw this on the subreddit and thought it might fit me so I added it.

Thanks for your PR!