Investigation of Firefox rotation bugs - user participation needed!

Do you want to request a feature or report a bug?
Bug

What is the current behavior?
Rotation of AR view is often 90 degrees out on Firefox (but not consistently).
If the current behavior is a bug, please provide the steps to reproduce.
Try a location-based example, such as https://hikar.org/webapp/ (in Europe and Turkey), on Firefox, you will find that the augmented content might be 90 degrees out.
Investigating this issue
I'd like to investigate this issue a bit further, to find out whether it is within AR.js or whether it is in the THREE.js DeviceOrientationControls used by A-Frame to perform automatic rotation based on the compass and accelerometer sensors.
To do this I have created a very simple pure A-Frame (no ar.js) example here:
https://hikar.org/aframe/
Please try this on your own device, in a location where you will not get magnetic interference, and see if you get the expected behaviour, which is:

Red sphere to your north
Green sphere to your east
Yellow sphere to your south
Blue sphere to your west

Please report the behaviour on your device, stating device, operating system and critically, browser and version. Note on Firefox you have to tap the screen to start the auto-rotation.
If this works for most devices, we know the problem is in AR.js. If it frequently fails on Firefox, we know the problem may well be with DeviceOrientationControls.
I will start by reporting expected behaviour unexpected behaviour: sometimes the spheres are 180 degrees out on

Chrome 91, Android 11, Pixel 3
Firefox 89, Android 11, Pixel 3

Thanks. The more reports we get, the more we can be sure whether the issue is likely to be within AR.js or not.

Just to add to this, there are three functions in gps-camera and gps-projected-camera which I am not sure the reason for, and which might possibly be causing problems:
_onDeviceOrientation()
_computeCompassHeading()
_updateRotation()

They seem to be doing some kind of update of the yaw dependent on the rotation - but given that the three.js DeviceOrientationControls already handles this, are they actually needed and might they be introducing problems?
@nicolocarpignoli any idea on this?

Another update:
I tried removing the three methods in the last post; they are necessary as the augmented content is completely out of sync with the real world if they are removed.
Also, and importantly, I have found that the basic A-Frame example on the first post in fact does not work consistently on my devices, either under Chrome or Firefox. Sometimes it's 180 degrees rotated so that the 'north' sphere appears to the south. Refreshing the page sometimes fixes it.
In conclusion, as the basic A-Frame example does not reliably work, I'm wondering whether there is a bug in the version of THREE.DeviceOrientationControls being used, as a plain A-Frame example is not detecting north, south, east and west correctly. I am using A-Frame 1.0.4 though, will upgrade to 1.2.0 and see if that makes a difference.

Starting to get to the bottom of this I think.
The problem is that we cannot rely on the alpha property of DeviceOrientationEvent - see [here] (https://developer.mozilla.org/en-US/docs/Web/Events/Detecting_device_orientation) - actually returning a value relative to (magnetic) north. If the absolute value is false - see here, then, to quote, "data is being provided in reference to some arbitrary, device-determined coordinate frame" - without specifying what that arbitrary frame is.
In tests, I am finding that absolute is false, unfortunately, on both Chrome and Firefox on Android.
However, alpha gives the expected value - rotation relative to north - on Chrome/Android. On Firefox/Android, it sometimes does, and sometimes doesn't. Sometimes it's about 90 degrees out, sometimes 180. This accords exactly with problems people have been reporting on Firefox.
This (admittedly not up-to-date article on W3C suggests that absolute ought to be true on Firefox/Android and Chrome/Android, but it isn't, suggesting that it's changed in recent years. However it does suggest that alpha is relative to the initial offset of the device relative to north when the device orientation is first tested for, which at least gives us something to work with. I am also finding on Firefox that the A-Frame sphere example mentioned above always shows the red sphere in front of you initially, whether you're facing north or not.

The fun continues...
Looks like we can solve this reliably on Chrome, and also possibly Safari, using the deviceorientationabsolute event, and webkitCompassHeading respectively.
Can't find a solution for Firefox to be honest. Guessing we might have to take the raw accelerometer and magnetic field values, and calculate an orientation matrix from them, as has been done in the Android API. Maybe someone has developed a library for that already - need to investigate.
Stack Overflow discussion here

I'm wondering whether, sadly, it is currently impossible to do this on Firefox.
It seems that the Accelerometer, Magnetometer and AbsoluteOrientationSensor APIs are not available on Firefox.
https://developer.mozilla.org/en-US/docs/Web/API/Magnetometer
https://developer.mozilla.org/en-US/docs/Web/API/Accelerometer
https://developer.mozilla.org/en-US/docs/Web/API/AbsoluteOrientationSensor
What seems a little inexplicable is that apparently this used to be possible as the DeviceOrientationEvent, according to the W3C document above, formerly gave an absolute value.
If anyone can suggest a way of getting this working on Firefox in the meantime, that would be great - otherwise for now, I think we're stuck with limiting support to Chrome and Safari.

OK I have found some time to start investigating this and to replace the current device orientation code with a new implementation which takes into account changes in the device orientation API.
I have a small demo at https://hikar.org/orient2/ which shows the current azimuth (compass bearing), pitch and roll of the device.
This gives the expected values on Chrome, both in landscape and portrait.
It will not work on Firefox; as said above, sadly there appears to be no way to currently obtain absolute orientation on Firefox.
It should in theory work on Safari but I have no way of testing this. Therefore, if anyone with an iOS device is able to test out the demo on Safari and report how:

the azimuth changes as you change the compass direction that the device is heading, both in landscape and portrait;
the pitch and roll change as you flip the device up and down and roll it from side to side, again on landscape and portrait.

... that would be great.
Thanks,
Nick

@nickw1 At the moment, on Safari/iOS 14, I get an alert "aaa", and after that a page with no orientation data.

Hey, this discussion seems relevant to my problem can someone help?
There is a 3D photo hosted on the link whenever someone open the link on his phone and give the orientation permissions he can move the phone or rotate it and see different views of the 3D picture inside his phone.
Hope I make sense.

@nickw1 At the moment, on Safari/iOS 14, I get an alert "aaa", and after that a page with no orientation data.

@cameronValtech ok thanks. This is proving to be a difficult one. Are you able to run it with the developer tools for Safari? Would be good to see if there is a specific error. No worries if not!

I was able to use the demo on iOS 15.1 and it seemed to be working correctly. Azimuth seemed to correspond to the compass heading (when the device laying flat on a table or held upright), pitch to corresponded to the device's orientation laying flat or standing upright, and roll to the side to side rotation that would shift between portrait and landscape. I couldn't figure out what heading corresponded to though.

@drewish many thanks. Did azimuth correspond to the compass heading when the device was NOT lying flat?
heading is calculated from some code present in AR.js, written by @nicolocarpignoli , just investigating if this is more accurate than the azimuth.

Heading seemed to have no relation to the compass. It would also jitter erratically by a 2 or 3 when the phone was laying stationary on the table


Documentation: Enhance documentation for derive_var_joined_exist_flag()

Background
derive_var_joined_exist_flag() can be a challenging function to use - more simple examples will help show its power and ease of use.  The example below is a nice showcase.  The SAS code can be included as that is our user base (for now!) to bring in more understanding.
library(tibble)

ex <- tribble(
  ~STUDYID, ~USUBJID, ~EXDOSE, ~EXSTDTM,

  "STUDY001", "SUBJ001", 2, "2024-01-01T08:00",
  "STUDY001", "SUBJ001", 4, "2024-01-02T08:00",

  "STUDY001", "SUBJ002", 2, "2024-01-01T08:30",
  "STUDY001", "SUBJ002", 4, "2024-01-02T08:30",
  "STUDY001", "SUBJ002", 2, "2024-01-03T08:30",   # Down-titration
  "STUDY001", "SUBJ002", 2, "2024-01-04T08:30",

  "STUDY001", "SUBJ003", 2, "2024-01-01T09:00",
  "STUDY001", "SUBJ003", 4, "2024-01-03T09:00",
  "STUDY001", "SUBJ003", 4, "2024-01-04T09:00",
  "STUDY001", "SUBJ003", 8, "2024-01-05T09:00",
  "STUDY001", "SUBJ003", 4, "2024-01-06T09:00",   # Down-titration

  "STUDY001", "SUBJ004", 2, "2024-01-01T10:00",
  "STUDY001", "SUBJ004", 4, "2024-01-02T10:00",
  "STUDY001", "SUBJ004", 4, "2024-01-03T10:00"
)

ex_flag <- ex %>%
  # Flag each EXDOSE which is lower than previous per patient
  derive_var_joined_exist_flag(
    dataset_add = ex,
    by_vars = exprs(STUDYID, USUBJID),
    order = exprs(EXSTDTM),
    new_var = DOSE_REDUCED,
    tmp_obs_nr_var = tmp_dose_nr,
    join_vars = exprs(EXDOSE),
    join_type = "before",
    first_cond_lower = NULL,
    first_cond_upper = NULL,
    filter_add = NULL,
    filter_join = (
      tmp_dose_nr == tmp_dose_nr.join + 1   # Look only at adjacent doses (i.e. next to each other)
      & EXDOSE > 0 & EXDOSE.join > 0        # Both doses are valid
      & EXDOSE < EXDOSE.join                # Dose is lower than previous
    )
  )

data ex_flag (drop = prev_dose);
    set ex;
    by USUBJID EXSTDTM;

    if first.USUBJID then call missing(prev_dose);
    else prev_dose = lag(EXDOSE);

    if 0 < EXDOSE < prev_dose < 0 then DOSE_REDUCED = "Y";
run;

Originally posted by @yurovska in https://github.com/pharmaverse/admiralmetabolic/issues/31#issuecomment-2394528279
Definition of Done

Documentation for this function is updated with this example.
SAS pseudo Code is also provided in example
The arguments with NULL can be removed to increase brevity.

@bms63 funny enough i had to implement something internally using this function for a BDS and i had an idea to extend the examples with the following scenario which i didn't find easy to figure out:
check if a "non-event" occurs after a record for each parameter
Is it OK that I take this function examples update on? Or from the label are we leaving this open for new contributors from R/Pharma?
p.s. I don't ever agree with the suggestion of including SAS pseudo code in our R package function examples though. You can explain enough what you're doing in plain english comments, and up to certain users if they prefer to first translate that into SAS language for comparison. Imagine all our users who don't "speak SAS" who would only find this confusing.

Yes please take on!! Makes sense on not providing the SAS code :)

Everyone "speaks every language" in the ChatGPT era.

Although, of course the SAS code should not be included in the R package :)

thanks both - will make a PR next week 🫡


[README] Section for Requirements?

Would be nice to have a dedicated section in the README, that outlines the Requirements to run the project.
When doing a quick search, I wasn't sure what Desktop OS' are supported (i.e MacOS, Windows, Linux).
I can open up a PR for this quick addition if it makes sense!
Great work with the project so far!

Yes, it make a lot of sense @sorianog. Your PR is very appreciated.


Do not execute pip cache command when a custom directory is given

In a scenario where the pip cache directory isn't available because the
user doesn't have permissions; pip will error with this message:
ERROR: pip cache commands cannot function since cache is disabled.

This currently cannot be mitigated by specifying the --cache-dir flag
because the python -m pip cache dir command is execute before this
predicate is evaluated. By using an assignment expression (PEP 572), we
can evaluate whether the expression evaluates to a truthy value in the
elif branch (saving it's return value) AFTER first evaluating the
custom directory value.

 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.Jeffrey Vandenborne seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


Invalid audience

Thanks for creating this library, it really helps to streamline the verification and decoding of Apple's id tokens. However, I'm running into the problem where is_validly_signed always returns false, and turns out the error is Invalid audience. Indeed this seems to be hardcoded to blinkybeach.Makara?
This this needs to be set to my own client id, this needs to be configurable.

Thanks for catching this mate! I'll check out your pull in the morning! 😊

🎉 Issue resolved: https://github.com/hwjeremy/siwa-python/releases/tag/0.0.6


Need separate CHECK functions for comparing doubles as well as floats

As found by @Mike430, if you want to compare doubles you have to pass it into TEMPER_CHECK_FLOAT_EQUALS, which is not ideal for obvious reasons.  Oops!
So we need CHECK functions for doubles too, to reduce friction and make life easier.
The only problem with that is we have TEMPER_CHECK_ALMOST_EQUALS, which is ambiguous.  So we need to find a new name for that so we can differentiate between float and double.
If anyone has any ideas I'm all ears!

So just to give a concrete test case we can fall back on: Temper in it's current form will not compile given this test:
C TEMPER_TEST( FloatChecks_ProvidedWithDoubles_CausesNoCompilerErrorsForConversionLoss, TEMPER_FLAG_SHOULD_RUN ) {     const double lhs = 3.1415926535897931f;     const double rhs = lhs;     const double epsilon = 0.5f;     TEMPER_CHECK_FLOAT_EQUAL( lhs, rhs );     TEMPER_CHECK_ALMOST_EQUAL( lhs, rhs, epsilon );     TEMPER_CHECK_NOT_ALMOST_EQUAL( lhs, 4.0f, epsilon ); }
After discussing it some more in a call the ideal to do the follow:
C Go from: TEMPER_CHECK_FLOAT_EQUAL // No epsilon provided TEMPER_CHECK_ALMOST_EQUAL // We require an epsilon //to: TEMPER_CHECK_FLOAT_EQUAL // No epsilon provided TEMPER_CHECK_DOUBLE_EQUAL // No epsilon provided // With NOT variations
The idea here is to take what Christer Ericson talked about here (https://realtimecollisiondetection.net/blog/?p=89) and calculate the perfect epsilon value such that no programmer ever has to provide one again while we keep our API the same size.
So, more Functionality for the same amount of API sounds nice, but this being said, I know for a fact (especially when working with deltatime tests or targeting tests in gameplay code) that sometimes you do need an abnormally high epsilon (whole numbers and up). In this situation I would strongly suggest that we also have:
C TEMPER_CHECK_FLOAT_EQUAL_MODIFIER TEMPER_CHECK_DOUBLE_EQUAL_MODIFIER
Where the user gets to say: "Hey, this base, pre-calculated epsilon value from within temper for these numbers add this to it". Failing that we could just keep the ALMOST_EQUAL strategy and provide one where you specify your own whole cloth epsilon for your use case:
C TEMPER_CHECK_FLOAT_EQUAL // No epsilon provided TEMPER_CHECK_FLOAT_EQUAL_EPSILON // We require an epsilon TEMPER_CHECK_DOUBLE_EQUAL // No epsilon provided TEMPER_CHECK_DOUBLE_EQUAL_EPSILON // We require an epsilon // With NOT variations
One final alternative would be to have a TEMPER_CHECK function that checks to see if a value falls within a range, so the user specifies an upper and lower boundary. This would achieve the exact same thing but just come at the problem from another angle.

Issue resolved in [e0df55e] - you can now compare doubles. Just need to get the build pipeline working again and polish up our API and we're good.


fix git checkout when specifying a branch name

Not sure how it ever worked before...
Before this change, if specifying a branch/tag name in your repo url as such<EMAIL_ADDRESS>the command generated was akin to git clone<EMAIL_ADDRESS>-b branchName ./path/to/checkout
Where the existence of that hash-tagged branch name was confusing to git (naturally so)
After this change, the same input results in a generated command of git clone<EMAIL_ADDRESS>-b branchName ./path/to/checkout

@nicks @victorwuky


Help maintain this plugin!

PRs are welcome, let me know if you want to become a contributor.  I will be taking a look at the open bugs in the near future

Hey @DustinJackson, glad to see you're open to get help to keep the plugin alive!
Quick question: the version currently released as 1.0.0-beta.2 has some fixes that some of us need. What's preventing this version from becoming 1.0.0?


RLABO code IGDR is linked with 2 EDMO codes, remove one of them?

The reporting laboratory code (RLABO)
"IGDR" (Institut für Meereskunde)
is linked with 2 EDMO codes (EDMO)
1824 - Institute for Marine Science
2302 - Institute for Marine Science (IGDR)
I suggest removing one of the relations

@Osanna123 check the mapping of 1824 to IFOG, and contact MARIS about the potential duplicate (2302 vs.1824)
1824 is linked to IFOG
2302 can be linked to IGDR


Fix flaky test.

FD 3 might not be used already.

Codecov Report
Attention: 2 lines in your changes are missing coverage. Please review.

Comparison is base (8299941) 42.96% compared to head (80d9343) 40.12%.

Files
Patch %
Lines

src/lib.rs
83.33%
2 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #24      +/-   ##
==========================================
- Coverage   42.96%   40.12%   -2.85%
==========================================
  Files           3        3
  Lines         775      805      +30
==========================================
- Hits          333      323      -10
- Misses        442      482      +40

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


incremental fetch

Currently we blindly fetch every tweets from the last two months. (And we regenerate everything from scratch)
We could look for the last tweet status ID, only fetch new tweets, and only generate new pages.

Update: I tried with > 100Mo of json files (600 files in total, so 50 years of tweets), and it took
15sec to generate all the html, so I guess we don't need to build html pages incrementally.
We do need to only generate a small number of entries in the atom feed.


Update UG for DeleteCommand

Update the user guide to fit with the v1.2 version of the DeleteCommand

Updated DeleteCommand in the User Guide for v1.2


Fully config netlify

I need to make sure all the build settings are good for Gatsby/Netlify.
Tutorial
Netlify

https://www.halfelectronic.com/post/setting-up-gatsby-js-contentful-and-netlify/ is useful for hiding credentials etc


Add missing href on challenge nav-tabs

As shown on Bootstrap official documentation (https://getbootstrap.com/docs/5.0/components/navs-tabs/), tabs anchor elements should have a href attribute. This fixes some accessibility issues with keyboard navigation, as these tabs are now recognized as links.

Thank you!


参考官网dockerfile报Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-02yn83yi/matplotlib/ You are using pip version 8.1.1, however version 19.2.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

希望参考文档里能多一些常见的安装问题怎么解决
系统
cuda:
NVIDIA-SMI 430.26       Driver Version: 430.26       CUDA Version: 10.2
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
python
Python 3.6.8 (default, May  7 2019, 14:58:50)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
执行步骤和报错信息：
root@hp-desktop:/data/Dragon/Docker/ubuntu-16.04-cuda9.0-cudnn7# ls
Dockerfile
root@hp-desktop:/data/Dragon/Docker/ubuntu-16.04-cuda9.0-cudnn7# python
Python 3.6.8 (default, May  7 2019, 14:58:50)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.

exit()
root@hp-desktop:/data/Dragon/Docker/ubuntu-16.04-cuda9.0-cudnn7# docker build .
Sending build context to Docker daemon  3.584kB
Step 1/7 : FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
---> a686b859d874
Step 2/7 : RUN rm /etc/apt/sources.list.d/cuda.list && rm /etc/apt/sources.list.d/nvidia-ml.list &&     apt-get update && apt-get install -y --no-install-recommends     build-essential     cmake     git     wget     unzip     ssh     vim     libtbb-dev     libsdl2-dev     libnuma-dev     libprotobuf-dev     protobuf-compiler     libopencv-dev     libboost-all-dev     libnccl2     libnccl-dev     python3-pip     python3-dev     python3-pyqt4     python3-tk     && rm -rf /var/lib/apt/lists/*
---> Using cache
---> 059200d7f7b5
Step 3/7 : RUN pip3 install --no-cache-dir --upgrade setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple &&     pip3 install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple     numpy     protobuf     lmdb     opencv-python     six     Pillow     matplotlib     scikit-image     pyyaml     cython
---> Running in dcf55cf8c907
Collecting setuptools
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ec/51/f45cea425fd5cb0b0380f5b0f048ebc1da5b417e48d304838c02d6288a1e/setuptools-41.0.1-py2.py3-none-any.whl (575kB)
Collecting wheel
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/bb/10/44230dd6bf3563b8f227dbf344c908d412ad2ff48066476672f3a72e174e/wheel-0.33.4-py2.py3-none-any.whl
Installing collected packages: setuptools, wheel
Successfully installed setuptools-41.0.1 wheel-0.33.4
You are using pip version 8.1.1, however version 19.2.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting numpy
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/69/25/eef8d362bd216b11e7d005331a3cca3d19b0aa57569bde680070109b745c/numpy-1.17.0-cp35-cp35m-manylinux1_x86_64.whl (20.2MB)
Collecting protobuf
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/55/34/7158a5ec978f12307eb361a8c4fdd867a8e2a0ab63fac99e5f555ee796d2/protobuf-3.9.0-cp35-cp35m-manylinux1_x86_64.whl (1.2MB)
Collecting lmdb
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/86/5c/6ad690daeaa00b328606bf2fa435244a11cc2dd9aedac6ef4d2ef2a21f6e/lmdb-0.96.tar.gz (869kB)
Collecting opencv-python
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/fe/c8/421eeac942ebc89552a5c90c2141b936be9cfde24dc3c6eeb472c62d1f8e/opencv_python-<IP_ADDRESS>-cp35-cp35m-manylinux1_x86_64.whl (26.6MB)
Collecting six
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Collecting Pillow
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d6/98/0d360dbc087933679398d73187a503533ec0547ba4ffd2115365605559cc/Pillow-6.1.0-cp35-cp35m-manylinux1_x86_64.whl (2.1MB)
Collecting matplotlib
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/12/d1/7b12cd79c791348cb0c78ce6e7d16bd72992f13c9f1e8e43d2725a6d8adf/matplotlib-3.1.1.tar.gz (37.8MB)
Complete output from command python setup.py egg_info:

Beginning with Matplotlib 3.1, Python 3.6 or above is required.

This may be due to an out of date pip.

Make sure you have pip >= 9.0.1.

----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-02yn83yi/matplotlib/
You are using pip version 8.1.1, however version 19.2.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
The command '/bin/sh -c pip3 install --no-cache-dir --upgrade setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple &&     pip3 install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple     numpy     protobuf     lmdb     opencv-python     six     Pillow     matplotlib     scikit-image     pyyaml     cython' returned a non-zero code: 1
root@hp-desktop:/data/Dragon/Docker/ubuntu-16.04-cuda9.0-cudnn7# pip -V
pip 19.2.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)
root@hp-desktop:/data/Dragon/Docker/ubuntu-16.04-cuda9.0-cudnn7#

Please read the logging message carefully, and google it.
We are not able to test all machines on the earth.
Back to the problem self, Ubuntu 16.04 had released with Python3.5
and  newest Matplotlib requiring 3.6 or higher.
Install Matplotlib with a version < 3.1 will be ok.
Close this issue.


Add text nodes embedded in the list items

Resolves issue #104
Signed-off-by: Gary O'Neall<EMAIL_ADDRESS>

@m1kit - If you could take a quick review of the changes and let me know if this addresses issue #104

Looks good to me 👍🏻


2 Dolmed Way

Description
purchase of house does not remove iron door
Base information

Minecraft version: 1.10.2
Minecraft Forge version: <IP_ADDRESS>1
TolkienCraft II version: 0.9.6

In the Eriador player housing area by rivendel house :  2 Dolmed Way.
After purchasing the key and taking the key and clicking on the box by the house, the ownership sign shows up but the iron door did not disappear.

Thank you, will test it out to confirm and fix the schematic if that is the case.

I found out why, had the location for the replacement off by a block.  Should be fixed next time I post an update to the map.


[WIP] ARROW-11928: [C++] Execution engine API

@bkietz @wesm Here is an initial stab at the exec node API. Only base classes are present.

How does this handle fan-out style parallelism.  For example, you can generally filter batch N while filtering batch N+1 at the same time.  Would there be a single ExecNode that is run twice?  If so won't you have trouble tracking inputs?  Or would there be two ExecNode instances in the plan?  In that case how would you decide which node to deliver batches to?

For example, you can generally filter batch N while filtering batch N+1 at the same time. Would there be a single ExecNode that is run twice? If so won't you have trouble tracking inputs?

There would be a single ExecNode that is run twice. Tracking the input is done through the batch_index (this is where you pass your N, N+1...). There is even a bit of logic implemented :-)
I don't think independent ExecNodes would work, since some operations (e.g. hash aggregation or any vector function) need access to the entire input before starting to compute their output.

I don't think independent ExecNodes would work, since some operations (e.g. hash aggregation or any vector function) need access to the entire input before starting to compute their output.

Note: Hash aggregation does not need access to its entire input to start computing, and in the first iteration of this project vector functions will be entirely disallowed.

Also keep in mind (for subsequent work) that some nodes (ie “Limit” in particular) will need to be able to apply backpressure on their parents to get them to immediately quit producing outputs. For example, if you have a “limit 1000” query, as soon as you have 1000 rows of output you shut down the ancestors.

Note: Hash aggregation does not need access to its entire input to start computing, and in the first iteration of this project vector functions will be entirely disallowed.

Hmm, right. But still, any output depends on the entire input, so it cannot be emitted on-the-fly while receiving partial input chunks.

For example, if you have a “limit 1000” query, as soon as you have 1000 rows of output you shut down the ancestors.

Ok, I'll have to think about that.

Hmm, right. But still, any output depends on the entire input, so it cannot be emitted on-the-fly while receiving partial input chunks.

Right, these kinds of operators (ones that have to exhaust their inputs before emitting an output) are often called "blocking" in the literature (see e.g. http://pages.cs.wisc.edu/~jignesh/publ/Quickstep.pdf or http://www.vldb.org/pvldb/vol11/p2209-kersten.pdf).

Note for readers: I'm worker on a new PR which will supersede this.

Closing in favour of #10204.


test: Add test for free tx lane

Adds a new test for a single free txn committed to a block via the free lane.
Uses the chaintestutil package (with the CreateTx PR https://github.com/skip-mev/chaintestutil/pull/4) and the network test suite.
Closes BLO-586

lgtm, is this rebased on main?

Updated--diff looks nice and compact now that all of our util stuff has landed. Going to push once CI succeeds.


[Iter] split reduce into multiple functions

Fixes #73

[x] Iter\reduce
[x] Iter\reduce_keys
[x] Iter\reduce_with_keys

Pull Request Test Coverage Report for Build 632

11 of 11 (100.0%)  changed or added relevant lines in 4 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 631:
0.0%

Covered Lines:
1742

Relevant Lines:
1742

💛  - Coveralls

Sorry for jumping in here, I have a small question.
Why do you provide 3 different functions when this could be made in one single function ?
You would by default pass the $key AND the $value from the iterator to the function, then, the user decide what to do with it?
Wouldn't it be better to have one single function that does this? Wouldn't it be less confusing?
Thanks

We usually provide multiple functions rather than 1 function when they operate either on keys, values, or both ( e.g: Iter\map, and Iter\filter ), this is done in order to have consistency between these functions.
If Iter\map and Iter\filter operate on values, having Iter\reduce operate on both is inconsistent.

Fair enough, thanks!
Keep up the good work :-)

@drupol  : by splitting the function up into smaller functions, you can make sure the implementation keeps clean and consice without any unused parameters. I'dd say that is the biggest advantage.

@drupol : by splitting the function up into smaller functions, you can make sure the implementation keeps clean and consice without any unused parameters. I'dd say that is the biggest advantage.

Yes that's true... but it also, in a minor way, duplicate part of the code... and this is something that I'm trying to avoid at all cost in my own development.

Agree with that on a general development level. However, in this package the easy of end-user use > the little duplication that is added IMO.


Misc. edits

Hi @jkshapiro thanks for contributing to Aurora. I see you are making a lot of pull requests fixing typos and editing content. Would you please start making these edits a single and descriptive pull request?

Hi Ethan, I'm sorry for the inconvenience. Sierra made the same request. I'm using GitHub's web version, and I haven't found a way to bundle changes to multiple files into a single pull request. Assistance would be welcome.

If you create one branch for your edits, all other commits can be made to that branch and from there you can create a pull request. You just have to make sure your repo is on that branch before you start editing files. Hope that helps.


Stabilization Layer

The stabilization layer were it can be found? is the here: https://github.com/pmh9960/iColoriT/blob/8a02415aea6f6cc144650b47f38e58476f4e2a0f/iColoriT_demo/modeling.py#L244

Yes. That is the stabilization layer.

Hi, checking the stabilizing layer, in our paper diagram its that features forwarded across the Conv2d, keeep the same dimension however, when running the code I see that the:
nn.Conv2d(192, 512, kernel_size=3, stride=1, padding=1, padding_mode='reflect')
Could you explain that, please


onPositionChange, onEnter and onLeave fire once on page load, and won't fire again until reload

I am using Waypoint to track whether a header has left the top of the viewport.
When a page is loaded (using Gatsbyjs's wrapper for react-router's Link component) onPositionChange, onEnter and onLeave are all fired at once (checked by using them to log a string to console), and then are never fired again when the page is scrolled. They are only fired again when I navigate to a different page, and they all fire at once again and the process repeats.
The debug output shows that waypoints of the child div are being tracked, and correctly identify when the div has left the viewport.
Despite this, none of the functions are triggering on scroll - I'm not sure if this is connected to react-router similar to #249

@theseanco is this the same as #274 ?

@MatthewHerbst

Only works when the waypoint is below visible viewport after the first onEnter.

The div waypoints are always within the visible viewport after a page change.

If you inspect the waypoint div (using developer tools in the browser), is it in the viewport after having fired onLeave?

I wonder if the wrong scrollableAncestor is picked up? Can you check the debug output to make sure that this property is referencing the right element in the DOM?

the scrollableAncestor here seems to be height and scrolltop

Alright, I see nothing odd in that debug output. Can you describe your usecase a little more? You are tracking whether a header has left the top of the viewport, but what happens when it does leave?

When it leaves I intend to use onLeave to add css classes to other elements in the page (to fix the sidebar to the side of the page etc), and onEnter to reverse those changes. I haven't got that far though because I haven't got the function triggers working.

It looks like the waypoint is wrapping the header. Do you get different results if you avoid the wrapping? e.g.

  <Waypoint />

I'm a header

</div

instead of

  <Waypoint>

I'm a header

  </Waypoint>
</div

Initially the JSX was:
<Waypoint onPositionChange={console.log("changed")} onEnter={console.log("enter")} onLeave={console.log("leave")} debug={true} scrollableAncestor={window}>

</Waypoint>

Changed it to:

<Waypoint onPositionChange={console.log("changed")} onEnter={console.log("enter")} onLeave={console.log("leave")} debug={true} scrollableAncestor={window} />

The results are the same.

I am having the same problem with gatsby. Did you find a solution?

I don't think I did!

Ok. Thanks.
I tried the "VisibilitySensor" lib which seems to work fine, but dont provide direction.

@theseanco @ddennis  same issue.  On enter and on leave fire on page load/component render, but never again.  Debug seems to work fine otherwise.

I had a similar issue and the issue was coming from the gatsby-plugin-transition-link
The plugin was adding an overflow-x:hidden, adding this to my styles fixed the issue.
.tl-edges {
  overflow-x: initial;
}

I'm experiencing the same issue above with Gatsby.  Debug shows all the output as expected.
  <Waypoint
    scrollableAncestor='window'
    onPositionChange={console.log("changed")}
    onEnter={console.log("enter")}
    onLeave={console.log("leave")}
/>

Same as above. This is what I found:
overflow: auto // doesn't work
overflow-x: auto // doesn't work
overflow: hidden // works
overflow-x: hidden // doesn't work


Method config does not consider overload

[ ] I have searched the issues of this repository and believe that this is not a duplicate.
[ ] I have checked the FAQ of this repository and believe that this is not a duplicate.

Environment

Dubbo version: 2.7.x
Operating System version: all
Java version: all

Steps to reproduce this issue
1.Define an interface that have multiple methods with the same name and different argument types.
2.Config every overload method with different parameters.
3.Methods configed later will overwrite the previously configed method.
Pls. provide [GitHub address] to reproduce this issue.
Expected Result
What do you expected from the above steps？
Actual Result
What actually happens?
If there is an exception, please attach the exception trace:
Just put your stack trace here!

2.Config every overload method with different parameters.

How did you do that? can you provide your config snippet?
It's a known problem, do you have any thoughts on how to support method override?

@chickenlj  I am sorry. I am busy recently. I have not started to develop for this.
I think we can add a extra config subelement to the dubbo:method, such as argumentClass.
If a dubbo:method is configed and the method is an override method, the argumentClass is required.
And it is optional for a non-override method.

@tswstarplanet Can you provide a sample to reproduce this bug?

1.Define an interface that have multiple methods with the same name and different argument types.
public interface DemoService {
String sayHello(String name);

String sayHello(Integer name);

}
2.Config every overload method with different parameters.
@Reference(methods = {@Method(name = "sayHello", retries = 2),@Method(name = "sayHello",retries = 3)})
private DemoService demoService;
3、in the ReferenceConfig.init() method.the method parameters retries will be overwrited to 3
if (CollectionUtils.isNotEmpty(getMethods())) {
attributes = new HashMap<>();
for (MethodConfig methodConfig : getMethods()) {
AbstractConfig.appendParameters(map, methodConfig, methodConfig.getName());
String retryKey = methodConfig.getName() + ".retry";
if (map.containsKey(retryKey)) {
String retryValue = map.remove(retryKey);
if ("false".equals(retryValue)) {
map.put(methodConfig.getName() + ".retries", "0");
}
}
AsyncMethodInfo asyncMethodInfo = AbstractConfig.convertMethodConfig2AsyncInfo(methodConfig);
if (asyncMethodInfo != null) {
//                    consumerModel.getMethodModel(methodConfig.getName()).addAttribute(ASYNC_KEY, asyncMethodInfo);
attributes.put(methodConfig.getName(), asyncMethodInfo);
}
}
}

I'll try it.

@changfubai
Any progress ?

I will close this issue since Dubbo essentially does not support method override.

@Reference(methods = {@Method(name = "sayHello", retries = 2),@Method(name = "sayHello",retries = 3)})
private DemoService demoService;

We recommend using Annotation to meet the minimum requirement and using dubbo.properties as a supplement for complex configurations like method level configuration.


not working with docker compose.

Hello,
I'm very exciting to find this wonderful project.
So I tried to run digestbot  from my Slack Workspace.
However, the code of the Master Branch seems to run normally.
I used Docker Compose to run this, and the Commit ID of the Master branch I used is 480e9038.
Below are the error log I have experienced.
Can I get help to solve this problem?
Thanks.
$ docker compose up
[+] Running 6/6
 ⠿ Network digestbot_default        Created                                                                                4.8s
 ⠿ Container digestbot_postgres_1   Created                                                                                0.0s
 ⠿ Container digestbot_dbservice_1  Created                                                                                0.0s
 ⠿ Container digestbot_crawler_1    Created                                                                                0.0s
 ⠿ Container digestbot_uiservice_1  Created                                                                                0.0s
 ⠿ Container digestbot_timers_1     Created                                                                                0.0s
Attaching to crawler_1, dbservice_1, postgres_1, timers_1, uiservice_1
postgres_1   | The files belonging to this database system will be owned by user "postgres".
postgres_1   | This user must also own the server process.
postgres_1   |
postgres_1   | The database cluster will be initialized with locale "en_US.utf8".
postgres_1   | The default database encoding has accordingly been set to "UTF8".
postgres_1   | The default text search configuration will be set to "english".
postgres_1   |
postgres_1   | Data page checksums are disabled.
postgres_1   |
postgres_1   | fixing permissions on existing directory /var/lib/postgresql/data ... ok
postgres_1   | creating subdirectories ... ok
postgres_1   | selecting dynamic shared memory implementation ... posix
postgres_1   | selecting default max_connections ... 100
postgres_1   | selecting default shared_buffers ... 128MB
postgres_1   | selecting default time zone ... UTC
postgres_1   | creating configuration files ... ok
postgres_1   | running bootstrap script ... ok
postgres_1   | performing post-bootstrap initialization ... sh: locale: not found
postgres_1   | 2021-07-13 16:30:03.590 UTC [30] WARNING:  no usable system locales were found
postgres_1   | ok
postgres_1   | syncing data to disk ... initdb: warning: enabling "trust" authentication for local connections
postgres_1   | ok
postgres_1   |
postgres_1   | You can change this by editing pg_hba.conf or using the option -A, or
postgres_1   | --auth-local and --auth-host, the next time you run initdb.
postgres_1   |
postgres_1   | Success. You can now start the database server using:
postgres_1   |
postgres_1   |     pg_ctl -D /var/lib/postgresql/data -l logfile start
postgres_1   |
postgres_1   | waiting for server to start....2021-07-13 16:30:04.347 UTC [35] LOG:  starting PostgreSQL 13.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
postgres_1   | 2021-07-13 16:30:04.348 UTC [35] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1   | 2021-07-13 16:30:04.351 UTC [36] LOG:  database system was shut down at 2021-07-13 16:30:04 UTC
postgres_1   | 2021-07-13 16:30:04.353 UTC [35] LOG:  database system is ready to accept connections
postgres_1   |  done
postgres_1   | server started
postgres_1   |
postgres_1   | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
postgres_1   |
postgres_1   | waiting for server to shut down....2021-07-13 16:30:04.454 UTC [35] LOG:  received fast shutdown request
postgres_1   | 2021-07-13 16:30:04.455 UTC [35] LOG:  aborting any active transactions
postgres_1   | 2021-07-13 16:30:04.457 UTC [35] LOG:  background worker "logical replication launcher" (PID 42) exited with exit code 1
postgres_1   | 2021-07-13 16:30:04.457 UTC [37] LOG:  shutting down
postgres_1   | 2021-07-13 16:30:04.468 UTC [35] LOG:  database system is shut down
postgres_1   |  done
postgres_1   | server stopped
postgres_1   |
postgres_1   | PostgreSQL init process complete; ready for start up.
postgres_1   |
postgres_1   | 2021-07-13 16:30:04.571 UTC [1] LOG:  starting PostgreSQL 13.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
postgres_1   | 2021-07-13 16:30:04.571 UTC [1] LOG:  listening on IPv4 address "<IP_ADDRESS>", port 5432
postgres_1   | 2021-07-13 16:30:04.571 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres_1   | 2021-07-13 16:30:04.575 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1   | 2021-07-13 16:30:04.579 UTC [47] LOG:  database system was shut down at 2021-07-13 16:30:04 UTC
postgres_1   | 2021-07-13 16:30:04.582 UTC [1] LOG:  database system is ready to accept connections
dbservice_1  | Checking for script in /app/prestart.sh
dbservice_1  | Running script /app/prestart.sh
dbservice_1  | Let the DB start: wait for 10 seconds...
crawler_1    | 07.13.2021-04:30:10 - crawler - INFO - Slack API connection successfully established.
crawler_1    | 07.13.2021-04:30:10 - crawler - INFO - Wait for 15 seconds to allow DB services to start...
uiservice_1  | Checking for script in /app/prestart.sh
uiservice_1  | Running script /app/prestart.sh
uiservice_1  | Let the DB services start: wait for 15 seconds...
timers_1     | 07.13.2021-04:30:13 - __main__ - INFO - Wait for 15 seconds to allow DB services to start...
dbservice_1  | [2021-07-13 16:30:16 +0000] [1] [INFO] Starting gunicorn 20.0.4
dbservice_1  | [2021-07-13 16:30:17 +0000] [1] [INFO] Listening at: http://<IP_ADDRESS>:80 (1)
dbservice_1  | [2021-07-13 16:30:17 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
dbservice_1  | [2021-07-13 16:30:17 +0000] [13] [INFO] Booting worker with pid: 13
dbservice_1  | [2021-07-13 16:30:17 +0000] [14] [INFO] Booting worker with pid: 14
dbservice_1  | [2021-07-13 16:30:17 +0000] [13] [INFO] Started server process [13]
dbservice_1  | [2021-07-13 16:30:17 +0000] [13] [INFO] Waiting for application startup.
dbservice_1  | [2021-07-13 16:30:17 +0000] [13] [INFO] Application startup complete.
dbservice_1  | [2021-07-13 16:30:17 +0000] [14] [INFO] Started server process [14]
dbservice_1  | [2021-07-13 16:30:17 +0000] [14] [INFO] Waiting for application startup.
dbservice_1  | [2021-07-13 16:30:17 +0000] [14] [INFO] Application startup complete.
crawler_1    | 07.13.2021-04:30:25 - crawler - INFO - Starting crawling...
uiservice_1  | [2021-07-13 16:30:25 +0000] [1] [INFO] Starting gunicorn 20.0.4
uiservice_1  | [2021-07-13 16:30:25 +0000] [1] [INFO] Listening at: http://<IP_ADDRESS>:80 (1)
uiservice_1  | [2021-07-13 16:30:25 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
uiservice_1  | [2021-07-13 16:30:25 +0000] [10] [INFO] Booting worker with pid: 10
uiservice_1  | [2021-07-13 16:30:25 +0000] [11] [INFO] Booting worker with pid: 11
uiservice_1  | [2021-07-13 16:30:26 +0000] [10] [INFO] Started server process [10]
uiservice_1  | [2021-07-13 16:30:26 +0000] [10] [INFO] Waiting for application startup.
uiservice_1  | [2021-07-13 16:30:26 +0000] [11] [INFO] Started server process [11]
uiservice_1  | [2021-07-13 16:30:26 +0000] [11] [INFO] Waiting for application startup.
uiservice_1  | {"loglevel": "info", "workers": 2, "bind": "<IP_ADDRESS>:80", "graceful_timeout": 120, "timeout": 120, "keepalive": 5, "errorlog": "-", "accesslog": "-", "workers_per_core": 1.0, "use_max_workers": null, "host": "<IP_ADDRESS>", "port": "80"}
uiservice_1  | 07.13.2021-04:30:27 - UI - INFO - Slack API connection successfully established.
uiservice_1  | [2021-07-13 16:30:27 +0000] [10] [INFO] Application startup complete.
uiservice_1  | {"loglevel": "info", "workers": 2, "bind": "<IP_ADDRESS>:80", "graceful_timeout": 120, "timeout": 120, "keepalive": 5, "errorlog": "-", "accesslog": "-", "workers_per_core": 1.0, "use_max_workers": null, "host": "<IP_ADDRESS>", "port": "80"}
uiservice_1  | 07.13.2021-04:30:27 - UI - INFO - Slack API connection successfully established.
uiservice_1  | [2021-07-13 16:30:27 +0000] [11] [INFO] Application startup complete.
dbservice_1  | {"loglevel": "info", "workers": 2, "bind": "<IP_ADDRESS>:80", "graceful_timeout": 120, "timeout": 120, "keepalive": 5, "errorlog": "-", "accesslog": "-", "workers_per_core": 1.0, "use_max_workers": null, "host": "<IP_ADDRESS>", "port": "80"}
dbservice_1  | <IP_ADDRESS>:38336 - "PUT /message/ HTTP/1.1" 422
crawler_1    | 07.13.2021-04:30:27 - crawler - ERROR - [('http://dbservice:80/message/',), {'data': '[{"username": "U01J8RK7EHJ", "text": "test2", "timestamp": "1626191253.000700", "channel_id": "C01TEM06X28", "reply_count": 0, "reply_users_count": 0, "thread_length": 5, "link": null, "reactions_rate": 0.0}, {"username": "U01J8RK7EHJ", "text": "test", "timestamp": "1626188532.000300", "channel_id": "C01TEM06X28", "reply_count": 1, "reply_users_count": 1, "thread_length": 4, "link": null, "reactions_rate": 0.0}]'}, '{"detail":[{"loc":["body"],"msg":"value is not a valid list","type":"type_error.list"}]}']
crawler_1    | Traceback (most recent call last):
crawler_1    |   File "/app/common/extras.py", line 29, in try_request
crawler_1    |     raise ValueError(str([args, kwargs, answer.text]))
crawler_1    | ValueError: [('http://dbservice:80/message/',), {'data': '[{"username": "U01J8RK7EHJ", "text": "test2", "timestamp": "1626191253.000700", "channel_id": "C01TEM06X28", "reply_count": 0, "reply_users_count": 0, "thread_length": 5, "link": null, "reactions_rate": 0.0}, {"username": "U01J8RK7EHJ", "text": "test", "timestamp": "1626188532.000300", "channel_id": "C01TEM06X28", "reply_count": 1, "reply_users_count": 1, "thread_length": 4, "link": null, "reactions_rate": 0.0}]'}, '{"detail":[{"loc":["body"],"msg":"value is not a valid list","type":"type_error.list"}]}']
crawler_1    | 07.13.2021-04:30:27 - crawler - INFO - Messages from 5 channels parsed and sent to the database.
dbservice_1  | <IP_ADDRESS>:38338 - "GET /message/linkless HTTP/1.1" 200
timers_1     | 07.13.2021-04:30:28 - __main__ - INFO - Starting timer processor...
dbservice_1  | <IP_ADDRESS>:39612 - "GET /timer/nearest?time_border=2021-07-13T16%3A20%3A28.048983 HTTP/1.1" 200
dbservice_1  | <IP_ADDRESS>:39614 - "GET /timer/overdue?time_border=2021-07-13T16%3A20%3A28.059136 HTTP/1.1" 200
dbservice_1  | <IP_ADDRESS>:39616 - "GET /timer/count HTTP/1.1" 200

my .env
SLACK_USER_TOKEN=xoxp-1614705107874-1620869252596-2226XXXX
SLACK_BOT_TOKEN=xoxb-1614705107874-2205564551175-rur2Z7XXXX
DB_PASS=XXXX
SIGNING_SECRET=961587XXXXX

Good day!
It's rather strange, as I cannot reproduce the error with the same settings and newly created workspace (and messages there).
Could you please add the next values into the .env and provide the log again:
LOG_LEVEL=debug
DEBUG=True

Also, it's worth checking that code has not been accidentally modified as it's being built again when you run it with docker-compose.
And the third possible problem - you can try using the last master commit (b4626f8) instead of 480e903 - in that commit, I updated the pydantic (possible source of the problem in that case) but didn't do careful testing of the results, so theoretically it can be a bug in the pydantic 1.7.4 or version incompatibility. You can even try to change the version to 1.8.2 in the requirements.txt to just see whether the problem still here :)
Basically, the crawler tries to send crawled messages to the database, and the database server responds that data in the body is not the list, though it definitely is due to the 'data' field in the subsequent logs.

Hello,
Thank you for your time.
I tried to use the Master Branch last commit, but still have a 'valueError' issue.
Below is some of the things I have confirmed.
Is there anything I can do to solve this issue? :)
To ensure that commit hash
$ git rev-parse HEAD
b4626f8aa50308a33f0190466c76f43a77528ce6

To ensure that the source contained in the Master Branch is not changed
$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

$ cat .env
SLACK_USER_TOKEN=xoxp-1614705107874-XX
SLACK_BOT_TOKEN=xoxb-1614705107874-XX
DB_PASS=XX
SIGNING_SECRET=96XX
LOG_LEVEL=debug
DEBUG=True

$ docker compose up
[+] Running 6/6
 ⠿ Network digestbot_default        Created                                                                                3.0s
 ⠿ Container digestbot_postgres_1   Created                                                                                0.0s
 ⠿ Container digestbot_dbservice_1  Created                                                                                0.0s
 ⠿ Container digestbot_crawler_1    Created                                                                                0.0s
 ⠿ Container digestbot_uiservice_1  Created                                                                                0.0s
 ⠿ Container digestbot_timers_1     Created                                                                                0.0s
Attaching to crawler_1, dbservice_1, postgres_1, timers_1, uiservice_1
postgres_1   | The files belonging to this database system will be owned by user "postgres".
postgres_1   | This user must also own the server process.
postgres_1   |
postgres_1   | The database cluster will be initialized with locale "en_US.utf8".
postgres_1   | The default database encoding has accordingly been set to "UTF8".
postgres_1   | The default text search configuration will be set to "english".
postgres_1   |
postgres_1   | Data page checksums are disabled.
postgres_1   |
postgres_1   | fixing permissions on existing directory /var/lib/postgresql/data ... ok
postgres_1   | creating subdirectories ... ok
postgres_1   | selecting dynamic shared memory implementation ... posix
postgres_1   | selecting default max_connections ... 100
postgres_1   | selecting default shared_buffers ... 128MB
postgres_1   | selecting default time zone ... UTC
postgres_1   | creating configuration files ... ok
postgres_1   | running bootstrap script ... ok
postgres_1   | performing post-bootstrap initialization ... sh: locale: not found
postgres_1   | 2021-07-14 04:48:56.477 UTC [31] WARNING:  no usable system locales were found
postgres_1   | ok
postgres_1   | syncing data to disk ... ok
postgres_1   |
postgres_1   |
postgres_1   | Success. You can now start the database server using:
postgres_1   |
postgres_1   |     pg_ctl -D /var/lib/postgresql/data -l logfile start
postgres_1   |
postgres_1   | initdb: warning: enabling "trust" authentication for local connections
postgres_1   | You can change this by editing pg_hba.conf or using the option -A, or
postgres_1   | --auth-local and --auth-host, the next time you run initdb.
postgres_1   | waiting for server to start....2021-07-14 04:48:57.268 UTC [36] LOG:  starting PostgreSQL 13.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
postgres_1   | 2021-07-14 04:48:57.269 UTC [36] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1   | 2021-07-14 04:48:57.272 UTC [37] LOG:  database system was shut down at 2021-07-14 04:48:57 UTC
postgres_1   | 2021-07-14 04:48:57.275 UTC [36] LOG:  database system is ready to accept connections
postgres_1   |  done
postgres_1   | server started
postgres_1   |
postgres_1   | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
postgres_1   |
postgres_1   | 2021-07-14 04:48:57.378 UTC [36] LOG:  received fast shutdown request
postgres_1   | waiting for server to shut down....2021-07-14 04:48:57.379 UTC [36] LOG:  aborting any active transactions
postgres_1   | 2021-07-14 04:48:57.380 UTC [36] LOG:  background worker "logical replication launcher" (PID 43) exited with exit code 1
postgres_1   | 2021-07-14 04:48:57.380 UTC [38] LOG:  shutting down
postgres_1   | 2021-07-14 04:48:57.391 UTC [36] LOG:  database system is shut down
postgres_1   |  done
postgres_1   | server stopped
postgres_1   |
postgres_1   | PostgreSQL init process complete; ready for start up.
postgres_1   |
postgres_1   | 2021-07-14 04:48:57.493 UTC [1] LOG:  starting PostgreSQL 13.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
postgres_1   | 2021-07-14 04:48:57.493 UTC [1] LOG:  listening on IPv4 address "<IP_ADDRESS>", port 5432
postgres_1   | 2021-07-14 04:48:57.493 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres_1   | 2021-07-14 04:48:57.495 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1   | 2021-07-14 04:48:57.498 UTC [48] LOG:  database system was shut down at 2021-07-14 04:48:57 UTC
postgres_1   | 2021-07-14 04:48:57.501 UTC [1] LOG:  database system is ready to accept connections
dbservice_1  | Checking for script in /app/prestart.sh
dbservice_1  | Running script /app/prestart.sh
dbservice_1  | Let the DB start: wait for 10 seconds...
crawler_1    | 07.14.2021-04:49:01 - crawler - INFO - Slack API connection successfully established.
crawler_1    | 07.14.2021-04:49:01 - crawler - INFO - Wait for 15 seconds to allow DB services to start...
uiservice_1  | Checking for script in /app/prestart.sh
uiservice_1  | Running script /app/prestart.sh
uiservice_1  | Let the DB services start: wait for 15 seconds...
timers_1     | 07.14.2021-04:49:05 - __main__ - INFO - Wait for 15 seconds to allow DB services to start...
dbservice_1  | [2021-07-14 04:49:08 +0000] [1] [DEBUG] Current configuration:
dbservice_1  |   config: /gunicorn_conf.py
dbservice_1  |   bind: ['<IP_ADDRESS>:80']
dbservice_1  |   backlog: 2048
dbservice_1  |   workers: 2
dbservice_1  |   worker_class: uvicorn.workers.UvicornWorker
dbservice_1  |   threads: 1
dbservice_1  |   worker_connections: 1000
dbservice_1  |   max_requests: 0
dbservice_1  |   max_requests_jitter: 0
dbservice_1  |   timeout: 120
dbservice_1  |   graceful_timeout: 120
dbservice_1  |   keepalive: 5
dbservice_1  |   limit_request_line: 4094
dbservice_1  |   limit_request_fields: 100
dbservice_1  |   limit_request_field_size: 8190
dbservice_1  |   reload: False
dbservice_1  |   reload_engine: auto
dbservice_1  |   reload_extra_files: []
dbservice_1  |   spew: False
dbservice_1  |   check_config: False
dbservice_1  |   preload_app: False
dbservice_1  |   sendfile: None
dbservice_1  |   reuse_port: False
dbservice_1  |   chdir: /app
dbservice_1  |   daemon: False
dbservice_1  |   raw_env: []
dbservice_1  |   pidfile: None
dbservice_1  |   worker_tmp_dir: /dev/shm
dbservice_1  |   user: 0
dbservice_1  |   group: 0
dbservice_1  |   umask: 0
dbservice_1  |   initgroups: False
dbservice_1  |   tmp_upload_dir: None
dbservice_1  |   secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
dbservice_1  |   forwarded_allow_ips: ['<IP_ADDRESS>']
dbservice_1  |   accesslog: -
dbservice_1  |   disable_redirect_access_to_syslog: False
dbservice_1  |   access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
dbservice_1  |   errorlog: -
dbservice_1  |   loglevel: debug
dbservice_1  |   capture_output: False
dbservice_1  |   logger_class: gunicorn.glogging.Logger
dbservice_1  |   logconfig: None
dbservice_1  |   logconfig_dict: {}
dbservice_1  |   syslog_addr: udp://localhost:514
dbservice_1  |   syslog: False
dbservice_1  |   syslog_prefix: None
dbservice_1  |   syslog_facility: user
dbservice_1  |   enable_stdio_inheritance: False
dbservice_1  |   statsd_host: None
dbservice_1  |   dogstatsd_tags:
dbservice_1  |   statsd_prefix:
dbservice_1  |   proc_name: None
dbservice_1  |   default_proc_name: app.main:app
dbservice_1  |   pythonpath: None
dbservice_1  |   paste: None
dbservice_1  |   on_starting: <function on_starting at 0x7f7499904a60>
dbservice_1  |   on_reload: <function OnReload.on_reload at 0x7f7499501ee0>
dbservice_1  |   when_ready: <function WhenReady.when_ready at 0x7f7499511040>
dbservice_1  |   pre_fork: <function Prefork.pre_fork at 0x7f7499511160>
dbservice_1  |   post_fork: <function Postfork.post_fork at 0x7f7499511280>
dbservice_1  |   post_worker_init: <function PostWorkerInit.post_worker_init at 0x7f74995113a0>
dbservice_1  |   worker_int: <function WorkerInt.worker_int at 0x7f74995114c0>
dbservice_1  |   worker_abort: <function WorkerAbort.worker_abort at 0x7f74995115e0>
dbservice_1  |   pre_exec: <function PreExec.pre_exec at 0x7f7499511700>
dbservice_1  |   pre_request: <function PreRequest.pre_request at 0x7f7499511820>
dbservice_1  |   post_request: <function PostRequest.post_request at 0x7f74995118b0>
dbservice_1  |   child_exit: <function ChildExit.child_exit at 0x7f74995119d0>
dbservice_1  |   worker_exit: <function WorkerExit.worker_exit at 0x7f7499511af0>
dbservice_1  |   nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0x7f7499511c10>
dbservice_1  |   on_exit: <function OnExit.on_exit at 0x7f7499511d30>
dbservice_1  |   proxy_protocol: False
dbservice_1  |   proxy_allow_ips: ['<IP_ADDRESS>']
dbservice_1  |   keyfile: None
dbservice_1  |   certfile: None
dbservice_1  |   ssl_version: 2
dbservice_1  |   cert_reqs: 0
dbservice_1  |   ca_certs: None
dbservice_1  |   suppress_ragged_eofs: True
dbservice_1  |   do_handshake_on_connect: False
dbservice_1  |   ciphers: None
dbservice_1  |   raw_paste_global_conf: []
dbservice_1  |   strip_header_spaces: False
dbservice_1  | [2021-07-14 04:49:08 +0000] [1] [INFO] Starting gunicorn 20.0.4
dbservice_1  | [2021-07-14 04:49:09 +0000] [1] [DEBUG] Arbiter booted
dbservice_1  | [2021-07-14 04:49:09 +0000] [1] [INFO] Listening at: http://<IP_ADDRESS>:80 (1)
dbservice_1  | [2021-07-14 04:49:09 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
dbservice_1  | [2021-07-14 04:49:09 +0000] [14] [INFO] Booting worker with pid: 14
dbservice_1  | [2021-07-14 04:49:09 +0000] [15] [INFO] Booting worker with pid: 15
dbservice_1  | [2021-07-14 04:49:09 +0000] [1] [DEBUG] 2 workers
dbservice_1  | [2021-07-14 04:49:09 +0000] [14] [INFO] Started server process [14]
dbservice_1  | [2021-07-14 04:49:09 +0000] [14] [INFO] Waiting for application startup.
dbservice_1  | [2021-07-14 04:49:09 +0000] [15] [INFO] Started server process [15]
dbservice_1  | [2021-07-14 04:49:09 +0000] [15] [INFO] Waiting for application startup.
dbservice_1  | [2021-07-14 04:49:09 +0000] [14] [INFO] Application startup complete.
dbservice_1  | [2021-07-14 04:49:09 +0000] [15] [INFO] Application startup complete.
crawler_1    | 07.14.2021-04:49:16 - crawler - INFO - Starting crawling...
crawler_1    | 07.14.2021-04:49:16 - crawler - DEBUG - Channel: XXXX
crawler_1    | 07.14.2021-04:49:17 - crawler - DEBUG - Channel: XXXX
uiservice_1  | [2021-07-14 04:49:17 +0000] [1] [DEBUG] Current configuration:
uiservice_1  |   config: /gunicorn_conf.py
uiservice_1  |   bind: ['<IP_ADDRESS>:80']
uiservice_1  |   backlog: 2048
uiservice_1  |   workers: 2
uiservice_1  |   worker_class: uvicorn.workers.UvicornWorker
uiservice_1  |   threads: 1
uiservice_1  |   worker_connections: 1000
uiservice_1  |   max_requests: 0
uiservice_1  |   max_requests_jitter: 0
uiservice_1  |   timeout: 120
uiservice_1  |   graceful_timeout: 120
uiservice_1  |   keepalive: 5
uiservice_1  |   limit_request_line: 4094
uiservice_1  |   limit_request_fields: 100
uiservice_1  |   limit_request_field_size: 8190
uiservice_1  |   reload: False
uiservice_1  |   reload_engine: auto
uiservice_1  |   reload_extra_files: []
uiservice_1  |   spew: False
uiservice_1  |   check_config: False
uiservice_1  |   preload_app: False
uiservice_1  |   sendfile: None
uiservice_1  |   reuse_port: False
uiservice_1  |   chdir: /app
uiservice_1  |   daemon: False
uiservice_1  |   raw_env: []
uiservice_1  |   pidfile: None
uiservice_1  |   worker_tmp_dir: /dev/shm
uiservice_1  |   user: 0
uiservice_1  |   group: 0
uiservice_1  |   umask: 0
uiservice_1  |   initgroups: False
uiservice_1  |   tmp_upload_dir: None
uiservice_1  |   secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
uiservice_1  |   forwarded_allow_ips: ['<IP_ADDRESS>']
uiservice_1  |   accesslog: -
uiservice_1  |   disable_redirect_access_to_syslog: False
uiservice_1  |   access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
uiservice_1  |   errorlog: -
uiservice_1  |   loglevel: debug
uiservice_1  |   capture_output: False
uiservice_1  |   logger_class: gunicorn.glogging.Logger
uiservice_1  |   logconfig: None
uiservice_1  |   logconfig_dict: {}
uiservice_1  |   syslog_addr: udp://localhost:514
uiservice_1  |   syslog: False
uiservice_1  |   syslog_prefix: None
uiservice_1  |   syslog_facility: user
uiservice_1  |   enable_stdio_inheritance: False
uiservice_1  |   statsd_host: None
uiservice_1  |   dogstatsd_tags:
uiservice_1  |   statsd_prefix:
uiservice_1  |   proc_name: None
uiservice_1  |   default_proc_name: app.main:app
uiservice_1  |   pythonpath: None
uiservice_1  |   paste: None
uiservice_1  |   on_starting: <function OnStarting.on_starting at 0x7fa75978f160>
uiservice_1  |   on_reload: <function OnReload.on_reload at 0x7fa75978f280>
uiservice_1  |   when_ready: <function WhenReady.when_ready at 0x7fa75978f3a0>
uiservice_1  |   pre_fork: <function Prefork.pre_fork at 0x7fa75978f4c0>
uiservice_1  |   post_fork: <function Postfork.post_fork at 0x7fa75978f5e0>
uiservice_1  |   post_worker_init: <function PostWorkerInit.post_worker_init at 0x7fa75978f700>
uiservice_1  |   worker_int: <function WorkerInt.worker_int at 0x7fa75978f820>
uiservice_1  |   worker_abort: <function WorkerAbort.worker_abort at 0x7fa75978f940>
uiservice_1  |   pre_exec: <function PreExec.pre_exec at 0x7fa75978fa60>
uiservice_1  |   pre_request: <function PreRequest.pre_request at 0x7fa75978fb80>
uiservice_1  |   post_request: <function PostRequest.post_request at 0x7fa75978fc10>
uiservice_1  |   child_exit: <function ChildExit.child_exit at 0x7fa75978fd30>
uiservice_1  |   worker_exit: <function WorkerExit.worker_exit at 0x7fa75978fe50>
uiservice_1  |   nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0x7fa75978ff70>
uiservice_1  |   on_exit: <function OnExit.on_exit at 0x7fa7597190d0>
uiservice_1  |   proxy_protocol: False
uiservice_1  |   proxy_allow_ips: ['<IP_ADDRESS>']
uiservice_1  |   keyfile: None
uiservice_1  |   certfile: None
uiservice_1  |   ssl_version: 2
uiservice_1  |   cert_reqs: 0
uiservice_1  |   ca_certs: None
uiservice_1  |   suppress_ragged_eofs: True
uiservice_1  |   do_handshake_on_connect: False
uiservice_1  |   ciphers: None
uiservice_1  |   raw_paste_global_conf: []
uiservice_1  |   strip_header_spaces: False
uiservice_1  | [2021-07-14 04:49:17 +0000] [1] [INFO] Starting gunicorn 20.0.4
uiservice_1  | [2021-07-14 04:49:17 +0000] [1] [DEBUG] Arbiter booted
uiservice_1  | [2021-07-14 04:49:17 +0000] [1] [INFO] Listening at: http://<IP_ADDRESS>:80 (1)
uiservice_1  | [2021-07-14 04:49:17 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
uiservice_1  | [2021-07-14 04:49:17 +0000] [9] [INFO] Booting worker with pid: 9
crawler_1    | 07.14.2021-04:49:17 - crawler - DEBUG - Channel: XXXX
uiservice_1  | [2021-07-14 04:49:17 +0000] [10] [INFO] Booting worker with pid: 10
uiservice_1  | [2021-07-14 04:49:17 +0000] [1] [DEBUG] 2 workers
uiservice_1  | [2021-07-14 04:49:17 +0000] [9] [INFO] Started server process [9]
uiservice_1  | [2021-07-14 04:49:17 +0000] [9] [INFO] Waiting for application startup.
uiservice_1  | [2021-07-14 04:49:17 +0000] [10] [INFO] Started server process [10]
uiservice_1  | [2021-07-14 04:49:17 +0000] [10] [INFO] Waiting for application startup.
crawler_1    | 07.14.2021-04:49:18 - crawler - DEBUG - Channel: XXXX
crawler_1    | 07.14.2021-04:49:18 - crawler - DEBUG - Channel: XXXX
dbservice_1  | {"loglevel": "debug", "workers": 2, "bind": "<IP_ADDRESS>:80", "graceful_timeout": 120, "timeout": 120, "keepalive": 5, "errorlog": "-", "accesslog": "-", "workers_per_core": 1.0, "use_max_workers": null, "host": "<IP_ADDRESS>", "port": "80"}
dbservice_1  | <IP_ADDRESS>:48474 - "PUT /message/ HTTP/1.1" 422
crawler_1    | 07.14.2021-04:49:18 - crawler - ERROR - [('http://dbservice:80/message/',), {'data': '[{"username": "U01J8RK7EHJ", "text": "test2", "timestamp": "1626191253.000700", "channel_id": "C01TEM06X28", "reply_count": 0, "reply_users_count": 0, "thread_length": 5, "link": null, "reactions_rate": 0.0}, {"username": "U01J8RK7EHJ", "text": "test", "timestamp": "1626188532.000300", "channel_id": "C01TEM06X28", "reply_count": 1, "reply_users_count": 1, "thread_length": 4, "link": null, "reactions_rate": 0.0}]'}, '{"detail":[{"loc":["body"],"msg":"value is not a valid list","type":"type_error.list"}]}']
crawler_1    | Traceback (most recent call last):
crawler_1    |   File "/app/common/extras.py", line 29, in try_request
crawler_1    |     raise ValueError(str([args, kwargs, answer.text]))
crawler_1    | ValueError: [('http://dbservice:80/message/',), {'data': '[{"username": "U01J8RK7EHJ", "text": "test2", "timestamp": "1626191253.000700", "channel_id": "C01TEM06X28", "reply_count": 0, "reply_users_count": 0, "thread_length": 5, "link": null, "reactions_rate": 0.0}, {"username": "U01J8RK7EHJ", "text": "test", "timestamp": "1626188532.000300", "channel_id": "C01TEM06X28", "reply_count": 1, "reply_users_count": 1, "thread_length": 4, "link": null, "reactions_rate": 0.0}]'}, '{"detail":[{"loc":["body"],"msg":"value is not a valid list","type":"type_error.list"}]}']
crawler_1    | 07.14.2021-04:49:18 - crawler - INFO - Messages from 5 channels parsed and sent to the database.
dbservice_1  | <IP_ADDRESS>:48476 - "GET /message/linkless HTTP/1.1" 200
uiservice_1  | [2021-07-14 04:49:19 +0000] [10] [INFO] Application startup complete.
uiservice_1  | [2021-07-14 04:49:19 +0000] [9] [INFO] Application startup complete.
uiservice_1  | {"loglevel": "debug", "workers": 2, "bind": "<IP_ADDRESS>:80", "graceful_timeout": 120, "timeout": 120, "keepalive": 5, "errorlog": "-", "accesslog": "-", "workers_per_core": 1.0, "use_max_workers": null, "host": "<IP_ADDRESS>", "port": "80"}
uiservice_1  | 07.14.2021-04:49:19 - UI - INFO - Slack API connection successfully established.
uiservice_1  | {"loglevel": "debug", "workers": 2, "bind": "<IP_ADDRESS>:80", "graceful_timeout": 120, "timeout": 120, "keepalive": 5, "errorlog": "-", "accesslog": "-", "workers_per_core": 1.0, "use_max_workers": null, "host": "<IP_ADDRESS>", "port": "80"}
uiservice_1  | 07.14.2021-04:49:19 - UI - INFO - Slack API connection successfully established.
timers_1     | 07.14.2021-04:49:20 - __main__ - INFO - Starting timer processor...
dbservice_1  | <IP_ADDRESS>:55308 - "GET /timer/nearest?time_border=2021-07-14T04%3A39%3A20.364433 HTTP/1.1" 200
dbservice_1  | <IP_ADDRESS>:55310 - "GET /timer/overdue?time_border=2021-07-14T04%3A39%3A20.375381 HTTP/1.1" 200
timers_1     | 07.14.2021-04:49:20 - __main__ - DEBUG - 0 overdue timers updated.
dbservice_1  | <IP_ADDRESS>:55312 - "GET /timer/count HTTP/1.1" 200

Thanks,
Have a good one! :)

Thanks for the waiting. I've discovered that I suddenly used old images and they were not rebuilding with the code.

I'll merge it later into the master after I look through the code for the other possible post-refactoring problems.
I'll not close the issue until you drop a message that everything's OK, so you can write here if anything.

Hello,
Thank you for updating!
I'm very happy to confirm that the 'ValueError'  issue has been resolved.
And also I confirmed that the Slack message crawled in the Postgres message table has been saved.
But during the time I run digestbot for a few hours today, I could not find a message related to bots in the my Slack workspace.
I expected digestbot DM to me, or digest a summary on the channel that had the original message, but it is not yet happened.
I would like to know if I have a good starting point to find out what I missed.
Thanks!

By default digestbot is reactive - it responds to your requests. Find the application in your workspace (if you registered the app with "digestbot" it can be found under this name in the list of the users) and write anything to it - it will provide help documentation.
As it is designed to be in the big spaces (with hundreds of thousands of people) being reactive is the only way not to be annoying.
It also has the ability to do what you want - to send you a digest with messages. It could be found in the "Timers" menu. You'll need to create a timer with a description of what channels to send and how often.

Yes, you need to provide an endpoint for the Slack and register this endpoint in the "apps" of the workspace.
On the local machine, it could be done using public IP or ngrok if you don't have one.

I finally made DigestBot responded to help and preset commands, but it was not successful to respond to top commands.
I think I'm probably wrong with the my digestbot slackbot's permissions. Maybe I can try to set up digestbot on next time.
top command response log
uiservice_1  | 07.17.2021-01:45:53 - UI - ERROR - Request params: {'blocks': '[\n  {\n    "type": "header",\n    "text": {\n      "type": "plain_text",\n      "text": "Choose the options for your top messages selection:"\n    }\n  },\n  {\n    "type": "section",\n    "text": {\n      "type": "plain_text",\n      "text": "Amount of messages to display:"\n    },\n    "block_id": "top_amount_selector",\n    "accessory": {\n      "type": "static_select",\n      "placeholder": {\n        "type": "plain_text",\n        "text": "N"\n      },\n      "initial_option": {\n        "text": {\n          "type": "plain_text",\n          "text": "5"\n        },\n        "value": "5"\n      },\n      "options": [\n        {\n          "text": {\n            "type": "plain_text",\n            "text": "3"\n          },\n          "value": "3"\n        },\n        {\n          "text": {\n            "type": "plain_text",\n            "text": "5"\n          },\n          "value": "5"\n        },\n        {\n          "text": {\n            "type": "plain_text",\n            "text": "10"\n          },\n          "value": "10"\n        },\n        {\n          "text": {\n            "type": "plain_text",\n            "text": "15"\n          },\n          "value": "15"\n        },\n        {\n          "text": {\n            "type": "plain_text",\n            "text": "20"\n          },\n          "value": "20"\n        }\n      ],\n      "action_id": "top_amount_selector"\n    }\n  },\n  {\n    "type": "section",\n    "text": {\n      "type": "plain_text",\n      "text": "Since:"\n    }\n  },\n  {\n    "type": "actions",\n    "block_id": "top_datetime_selector",\n    "elements": [\n      {\n        "type": "timepicker",\n        "action_id": "delta_timepicker",\n        "initial_time": "00:00"\n      },\n      {\n        "type": "datepicker",\n        "action_id": "delta_datepicker",\n        "initial_date": "2021-07-17"\n      }\n    ]\n  },\n  {\n    "type": "section",\n    "text": {\n      "type": "mrkdwn",\n      "text": "Sorting methods:"\n    },\n    "block_id": "top_sorting_selector",\n    "accessory": {\n      "type": "static_select",\n      "action_id": "top_sorting_selector",\n      "placeholder": {\n        "type": "plain_text",\n        "text": "Select a method"\n      },\n      "initial_option": {\n        "text": {\n          "type": "plain_text",\n          "text": "replies"\n        },\n        "value": "reply_count"\n      },\n      "options": [\n        {\n          "text": {\n            "type": "plain_text",\n            "text": "replies"\n          },\n          "value": "reply_count"\n        },\n        {\n          "text": {\n            "type": "plain_text",\n            "text": "length"\n          },\n          "value": "thread_length"\n        },\n        {\n          "text": {\n            "type": "plain_text",\n            "text": "reactions"\n          },\n          "value": "reactions_rate"\n        }\n      ]\n    }\n  },\n  {\n    "type": "section",\n    "block_id": "top_preset_selector",\n    "text": {\n      "type": "mrkdwn",\n      "text": "Pick a channel or preset from the dropdown list"\n    },\n    "accessory": {\n      "action_id": "top_preset_selector",\n      "type": "external_select",\n      "min_query_length": 0,\n      "placeholder": {\n        "type": "plain_text",\n        "text": "Select an item"\n      },\n      "initial_option": {\n        "text": {\n          "type": "plain_text",\n          "text": "all"\n        },\n        "value": "all"\n      }\n    }\n  },\n  {\n    "type": "actions",\n    "elements": [\n      {\n        "type": "button",\n        "text": {\n          "type": "plain_text",\n          "text": "Submit"\n        },\n        "style": "primary",\n        "value": "top_submission",\n        "action_id": "top_submission"\n      }\n    ]\n  }\n]', 'channel': 'D027SACGVFZ', 'link_names': 'true', 'unfurl_links': 'true', 'unfurl_media': 'true'}
uiservice_1  | 07.17.2021-01:45:53 - UI - ERROR - The request to the Slack API failed.
uiservice_1  | The server responded with: {'ok': False, 'error': 'internal_error'}
uiservice_1  | Traceback (most recent call last):
uiservice_1  |   File "/app/common/Slacker.py", line 320, in post_to_channel
uiservice_1  |     await self.retry_policy.execute(post)
uiservice_1  |   File "/app/common/resilence_library/retryafter.py", line 47, in execute
uiservice_1  |     result = await function()
uiservice_1  |   File "/usr/local/lib/python3.8/site-packages/slack/web/base_client.py", line 241, in _send
uiservice_1  |     return SlackResponse(**{**data, **res}).validate()
uiservice_1  |   File "/usr/local/lib/python3.8/site-packages/slack/web/slack_response.py", line 176, in validate
uiservice_1  |     raise e.SlackApiError(message=msg, response=self)
uiservice_1  | slack.errors.SlackApiError: The request to the Slack API failed.
uiservice_1  | The server responded with: {'ok': False, 'error': 'internal_error'}

Slack servers are not the best stable API ever ><. Unfortunately, besides the permissions of the app, it's hard to predict what's wrong when their servers return you "internal error".
My current permissions:
Bot token:

app_mentions:read
channels:history
channels:read
emoji:read
groups:history
im:history
im:read
im:write
incoming-webhook
links:read
links:write
mpim:history
mpim:read
reactions:read
users.profile:read
users:read
users:write

User token:

channels:history
channels:read
emoji:read
im:read
links:read
links:write
reactions:read
users.profile:read
users:read

Seems like the initial issue is resolved, so I'm closing this now. Feel free to open new one if anything.


Add list, create & delete for ServiceBindings

Description
Changes proposed in this pull request:

...
...
...

Related issue(s)

/test pre-busola-integration-test-k3s


Update pom.xml group-id

The project is using org.jboss.narayana which is part of the narayana project. It might be useful to update to org.jboss.web-servers or something like that?
For example, org.jboss.narayana is already at 5.9.x and I see the version of this is back to 5.0.1 so that seems like regressing version number.
/cc @zhfeng

yeah, I agree. Also I think we need to do this updating after decouple from the narayana parent get merged at first.

@zhfeng @csutherl So... #6 merged, and we can rename the group id.  I guess it is also worth pondering we might need a semver independent of Narayana itself.

+1, before our first release of the project we should restart at version 1 I guess given that this one version may work with multiple versions of Narayana. As far as the group ID, I'm not sure we want to tie it to web-servers. We could, but maybe calling it org.jboss.narayana-tomcat would work fine? Tomcat isn't really associated with JBoss other than being in the product, so it looks a bit odd to me. @jfclere, thoughts?

How about the io.narayana.tomcat ?

:+1: for io.narayana.tomcat

It wasn't clear to me why we would not include web-servers in the group ID as it lives under the web-servers organisation?
You could then have something like:
io.web-servers:narayana-tomcat

I :-1:  the minus symbol in package name from mod_cluster/mod-cluster days and then again, web servers is just a container organization for our limited public presence. It is not a one tool or a project. It contains both intricate Solaris build system harness and a completely unrelated Tomcat clustering peer lookup project. I don't think io.web-servers:narayana-tomcat semantic is a better option.

I prefer the io.narayana group for core Narayana components. This module is more similar to a module like this
https://github.com/wildfly/wildfly/blob/master/transactions/pom.xml#L38
So I was looking for a GAV that might match it but if we can't use web-servers then how about:
org.jboss.integration:narayana-tomcat?

I can be OK with org.jboss.integration:narayan-tomcat :)

Can someone advise whether or not we need to changing the packaging name to comply with a group id change? Should I s/org.jboss.narayana.tomcat/org.jboss.integration.narayana.tomcat/g ?

I did some poking around and found that org.jboss.integration.jboss-transaction-spi (for example) doesn't use the same package name, it uses org.jboss.tm so I guess the answer to my question is the group id doesn't have to be the same as the package. In that case, I think the PR is complete and ready to merge after the failing checks are resolved.

Resolved.


build: remove unneeded go mod tidy && go mod vendor

There has been a bad proxy somewhere that caused issues downloading or verfying the github.com/operator-framework/operator-sdk module. Things have recovered now, so the extra tidy/vendor commands are not needed anymore.
Closes: #384

As long as Test building container images / build_bundle fails, the problem obviously still exists. We'll nee to re-run the CI job on occasion to see if the issue has been resolved.

@mergifyio rebase

@mergifyio rebase

@mergifyio rebase

@Mergifyio rebase

make bundle fails in the GitHub Workflow... but it works on my laptop, of course :disappointed:

@mergifyio rebase

@mergify queue


Combine bulk label and reorder views.

Some work on flash messages needs to be done, but this closes #217.

The combined UI looks good, and I was able to renumber pages just fine.  But I haven't been able to get reordering working.  I get the error "Unable to save new order." as a flash message.

Huh, I wonder if style fixes broke it. I'll take a look after lunch.

@escowles Could you try to debug what's going on with reordering on your side? I can't get it to break


Parentheses

I find that when I am using the tool, parens always appear around my name, because authors seem to use (Y/N) instead of Y/N.
Could we fix this so it gets rid of parens?

Oddly enough, your JS code looks like it should fix this.

It's true that the previous version supported this, but not anymore; I reverted back to using regex to find the Y/N value to fix another bug. It's finally my weekend so hopefully I'll fix that + the issue with the "infinite scroll" thing.

Alright, thank you!


Please add --disable-seccomp-filter-sandbox

Please change your debs to add the --disable-seccomp-filter-sandbox flag to the .desktop file.

I'll rebuild the debs in a few minutes. I will be opening a PR on the pi-apps-coders/files repo to add the files.

@ryanfortner thanks!

repacked and uploaded. please merge https://github.com/Pi-Apps-Coders/files/pull/31, then I can make the changes to pi-apps scripts


docs(website): improve matching gitmoji tip

Description
Emojis are hard. The pattern was not matching the certain emojis.
The new pattern fixes the issue by adding the variation selectoru{FE0F}.
Further, this makes the zero-width joiner (u{200D}) optional, matching emojis both with and without the ZWJ.
How Has This Been Tested?
I tested the new pattern on my repo and found out many commits had been skipped: https://github.com/welpo/tabi/commit/1bb3c91b91585bb6317ed0d82e6d0c0fbc36e0b6
Types of Changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[X] Documentation (no code change)
[ ] Refactor (refactoring production code)
[ ] Other

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (4713f64) 41.30% compared to head (9584bb5) 41.30%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #486   +/-   ##
=======================================
  Coverage   41.30%   41.30%
=======================================
  Files          15       15
  Lines        1034     1034
=======================================
  Hits          427      427
  Misses        607      607

Flag
Coverage Δ

unit-tests
41.30% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Send email when PayPal masspay is denied

https://github.com/gratipay/inside.gratipay.com/issues/736#issuecomment-241554073

Hmm, do we send out emails to users when this happens?

I'm not sure that we do. We should if we don't ... new ticket?

Here is a ticket to notify ~users when they were supposed to receive payouts via PayPal but PayPal denied it.

+1 in https://gratipay.freshdesk.com/helpdesk/tickets/6190


File names are not used in completions even though they are recognized in links (with wiki.style = "file-stem")

Hey! First, thanks for this great LSP! It is the cornerstone of my Neovim/Obsidian workflow.
Status quo
For Marksman to play nicely with Obsidian, my .marksman.toml is:
[completion]
wiki.style = "file-stem"

Links are correctly referenced by their names. For example:
I am using [[XState]] for this project.

correctly points to XState.md and I can go do that file using "Go to reference".

Current behavior
When I then ask for completions for [[XS, I get nothing.

This is because XState.md does not have an h1 heading. In Obsidian, file names are used as document titles, so beginning a document with the same heading as the file name is redundant.
When I add the # XState heading at the top of XState.md, I do get XState.md as a suggestion:

Expected behavior
I would love it if marksman also included file names as completions. In this case, I would want XState.md to appear as a completion even if there is no # XState at the top of that file.
This would make the link resolution/autocomplete behave the same way. At the moment, the autocomplete does not show completions, but if I type the file name manually, the link is resolved correctly by marksman.
Related issues
Possibly related to https://github.com/artempyanykh/marksman/issues/122

Thanks for reporting @Gelio! I think this is perfectly reasonable and will improve the UX.

I think this should be addressed in 2024-12-04. Please, report if something doesn't work as expected.


Add more embedding providers

Add the embeding providers from: https://github.com/henomis/lingoose/tree/main/embedder

Example of OpenAI embeding provider: https://ai.casbin.com/providers/provider_embedding_openai
Interface: https://github.com/casbin/casibase/blob/master/embedding/provider.go

@yehong-z


http proxy that requires user and password

Is it possible to pass the http_proxy key in the config a username and password for proxies that requires them?

Users in proxies have the following syntax: USER:PASSWORD@IP:PORT
Perl treats @ as an array, meaning that Perl will think that IP is an array, so you have to
escape the character using \
example:
http_proxy => "http://shadow:testpassword\@whatever.tld:3200"


Add some color to '* has already been recorded in the archive' message to highlight output of download entry

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

[X] I understand that I will be blocked if I remove or skip any mandatory* field

Checklist

[X] I'm requesting a feature unrelated to a specific site
[X] I've looked through the README
[X] I've verified that I'm running yt-dlp version 2022.09.01 (update instructions) or later (specify commit)
[X] I've searched the bugtracker for similar issues including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue

Provide a description that is worded well enough to be understood
Basically title. When downloaded playlists messages of already downloaded video are merged into one white big output message.
My suggestion to add some color like in '[download] Downloading video i of n' message or something like that.
Provide verbose output that clearly demonstrates the problem

[X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
Well, there isn't any problems but here is verbose output.
[debug] Command-line config: ['-vU']
[debug] Encodings: locale cp1251, fs utf-8, pref cp1251, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2022.09.01 [5d7c7d6] (win32_exe)
[debug] Python 3.8.10 (CPython 64bit) - Windows-10-10.0.19041-SP0
[debug] Checking exe version: ffmpeg -bsfs
[debug] Checking exe version: ffprobe -bsfs
[debug] exe versions: ffmpeg 5.0-full_build-www.gyan.dev (setts), ffprobe 5.0-full_build-www.gyan.dev, phantomjs 2.1.1
[debug] Optional libraries: Cryptodome-3.15.0, brotli-1.0.9, certifi-2022.06.15, mutagen-1.45.1, sqlite3-2.6.0, websockets-10.3
[debug] Proxy map: {}
[debug] Loaded 1670 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2022.09.01, Current version: 2022.09.01
yt-dlp is up to date (2022.09.01)

Related: #3504, but it will take time for me to review it since it's not a priority and due to how big the full scope of changes are. If someone wants to make another PR with just the minimal changes suggested in this issue, I can merge it quicker

[download] Styles.ID(video_id): Styles.Emphasis(title) has already been recorded in the archive

makes sense imo

Hello, I have written a minimal PR for just this.
I did not change the line to include title, just added color to the line that was already being printed.


ctrl click to select multiple objects

On Windows, selecting more than one object is by either drawing a crosshair or pressing and holding CTRL and clicking each object that needs to be added to the selection.
On Excalidraw, this can be achieved by drawing a crosshair and covering the object(s) entirely and/or by holding Shift and either drawing multiple crosshairs or shift+click on each object.
My request is to add Windows-like behavior of holding CTRL and clicking each individual object that needs to be added to selection.
Feature Request

Ctrl/Cmd-click has a behavior bound to it of its own: drill-select, child-box-select, and later will have at least one more. In other words, it's taken. Moreover, most graphics/vector apps do the same (shift-click to add to selection, only), and Figma is using ctrl/cmd-click behavior same as we do.


instance_id fail client side validation

I was attempting to use .get_user() but that failed with the following error:
(<class 'ValueError'>, ValueError('Invalid value for `instance_id`, must be a follow pattern or equal to `/(private|offline|(wrld|wld)_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}:(\\d+)(~region\\(([\\w]+)\\))?(~([\\w]+)\\(usr_([\\w-]+)\\)((\\~canRequestInvite)?)(~region\\(([\\w].+)\\))?~nonce\\((.+)\\))?)/`'), <traceback object at 0x7ff339ff9300>)

The format of instance_id in this case was:  00000~hidden(usr_abc12345-0000-0000-00000-000000000000)
Disabling client side validation in the configuration works as a workaround.

Could you provide the version of the package you're using. This was fixed in a recent update iirc.

Oh I was using 1.15.0, I forgot to upgrade, by bad.


[DOCKER] Error When Playing Certain Songs From YouTube

Heya. Getting constant errors when trying to play certain songs like Closer from YouTube. Hopefully you can help me with this.
Here is the pastebin of the error: https://pastebin.com/kKcfinM9

I had a similar issue a few days ago, updating to the latest version of LavaLink solved it for me.

@MrCakeSlayer Are you using the Fredboat Docker build?

Because I just pulled from it again, using the latest version and it didn't work.

Heres a pastbin of my docker-compose.yml file: https://pastebin.com/s2F9vSgf

I'm getting a very similar if not the same error when playing songs from certain channels on YouTube. I'm not sure why specifics channels are giving problems yet. But I am getting this error.

@itsfoxbit When was 3.2.1 released and how do I update to it? Because I have already pulled v3 latest from docker, so it should have updated.
This is what it says its running though:
Build:          590
Build time:     24.07.2018 17:30:47 CEST
Branch          v3
Commit:         ab81dcd
Commit time:    24.07.2018 17:29:40 CEST
JVM:            10.0.1
Lavaplayer      1.3.7
2019-06-15T12:54:46.179294503Z
    :: Lavalink    ::
    :: Spring Boot ::        (v2.0.2.RELEASE)```

I somehow missed this issue completely.
You can recreate the docker-compose container after pulling with docker-compose up -d lavalink.

@Frederikam I already deleted the cached image and redownloaded it yesterday. Have you fixed it since then?

What is the version info? Are you sure you aren't still using a lavalink that is nearly a year old?

@Frederikam  Are you sure the Docker image has been updated? My version info was pasted above your 1st post in this issue.

It was updated a week ago https://cloud.docker.com/u/fredboat/repository/docker/fredboat/lavalink

Here are the steps I have taken:
• Stop and delete container in Kitematic
• Run docker rmi 4545d9ebe7f6
• Run docker-compose up --no-start
(It visibly downloads and extracts lavalink)
• Start the container
NOTE: you can see my docker-compose.yml in the pastebin linked earlier in this issue.

We don't push to the v3 branch anymore. It is not a version, it is a git branch. Instead you can pull from the master build of v3: master-v3
See https://hub.docker.com/r/fredboat/lavalink

So I should just pull from plain old fredboat/lavalink or from master-v3?

@Frederikam My bot is now returning a connection refused error:
INFO: Beginning startup sequence...
INFO: Scaling known.
ERROR: Error: connect ECONNREFUSED <IP_ADDRESS>:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
ERROR: Error: connect ECONNREFUSED <IP_ADDRESS>:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
WARN: LavaLink node ws://lavalink:80 disconnected!

Worked before reinstall.

What do you think connection refused means?
Post logs

Network configuration Is the same in kitematic… Also to answer your question, connection refused could mean 1 of 2 things. One would be that the service exists and is refusing a connection, and the other would be that it is connecting to a service that doesn't exist or the wrong service.

019-06-15 17:51:34.543  INFO 1 --- [           main] o.s.b.w.e.u.UndertowServletWebServer     : Undertow started on port(s) 2333 (http) with context path ''
2019-06-15 17:51:34.555  INFO 1 --- [           main] lavalink.server.Launcher                 : Started Launcher in 8.121 seconds (JVM running for 9.424)

Considering the fact that it doesn't seem to be receiving any connections at all...

Lavalink doesn't refuse connections itself.
it seems like you are trying to bind to port 80, by LL is running on 2333.

@Frederikam Running the websocket on port 80.

LAVALINK_SERVER_WS_PORT is no longer used, and was removed several months ago after a major update

Why so?

Just running them both on the same port now?

ERROR: Error: getaddrinfo ENOTFOUND lavalink lavalink:80
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)
ERROR: Error: getaddrinfo ENOTFOUND lavalink lavalink:80
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)
WARN: LavaLink node ws://lavalink:80 disconnected!

Set it to 80 and this now happens.

That's a problem with your docker configuration. It can't look up the hostname "lavalink" anymore

It reads my arangodb as being "arango"

Because this is how I connect to it: [{"host":"lavalink","port":80,"restPort":2333,"region":"us","password":"password"}]

It uses both the websocket port and the server port

Maybe try recreating your setup?
docker-compose down and docker-compose up -d

INFO: Fully ready, serving 1160 guild(s).
ERROR: Error: connect ECONNREFUSED <IP_ADDRESS>:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
ERROR: Error: connect ECONNREFUSED <IP_ADDRESS>:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
WARN: LavaLink node ws://lavalink:80 disconnected!
ERROR: ArangoError: database not found
    at new ArangoError (/opt/wildbeast/node_modules/arangojs/lib/async/error.js:71:21)
    at Object.resolve (/opt/wildbeast/node_modules/arangojs/lib/async/connection.js:254:32)
    at _hosts.(anonymous function) (/opt/wildbeast/node_modules/arangojs/lib/async/connection.js:130:26)
    at IncomingMessage.res.on (/opt/wildbeast/node_modules/arangojs/lib/async/util/request.node.js:78:21)
    at IncomingMessage.emit (events.js:187:15)
    at endReadableNT (_stream_readable.js:1094:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
ERROR: Error: connect ECONNREFUSED <IP_ADDRESS>:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
ERROR: Error: connect ECONNREFUSED <IP_ADDRESS>:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)

Now its not detecting arango or lavalink.

Okay... rebuilt databases. Now just not detecting lavalink.

Its back to
ERROR: Error: connect ECONNREFUSED <IP_ADDRESS>:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
ERROR: Error: connect ECONNREFUSED <IP_ADDRESS>:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
WARN: LavaLink node ws://lavalink:80 disconnected!

Okay... changed it to port 80 and now it can connect... Just not sure if it can control it since it uses both 80 and 2333.

Yup...
INFO: Fully ready, serving 1160 guild(s).
INFO: LavaLink node ws://lavalink:80 ready.
CMD: settings by ZandercraftGamesYT in Zandercraft Hosting
CMD: join-voice by ZandercraftGamesYT in Zandercraft Hosting
CMD: request by ZandercraftGamesYT in Zandercraft Hosting
ERROR: Error: Error: connect ECONNREFUSED <IP_ADDRESS>:2333
    at resolveTracks (/opt/wildbeast/src/encoders/lavalink.js:58:13)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Yep... Changed both to port 80. Now it works. Thanks! 😄

My emails o my god do not ever send that many comments it isnt discord
On Sun, 16 Jun. 2019, 4:28 am Frederik Ar. Mikkelsen, <
<EMAIL_ADDRESS>wrote:

Closed #200 https://github.com/Frederikam/Lavalink/issues/200.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/Frederikam/Lavalink/issues/200?email_source=notifications&email_token=AFUFOOZXV5KN5KPMGX7U3QLP2UYE5A5CNFSM4HXUOAG2YY3PNVWWK3TUL52HS4DFWZEXG43VMVCXMZLOORHG65DJMZUWGYLUNFXW5KTDN5WW2ZLOORPWSZGOR75CNVI#event-2415535829,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AFUFOO2IQWQDTWZSTMERRCLP2UYE5ANCNFSM4HXUOAGQ
.

or mute the thread

Sorry @MrJacz xD