Improve bucket query documentation & refactor pagination constant

Issue #, if available: N/A
Description of changes:

BUCKET_PAGINATION_LIMIT in the Influx migration script has been renamed to MAX_BUCKET_PAGINATION_LIMIT to give a better sense of why 100 has been chosen as its value.
Instructions for manually checking the number of records within a Timestream for InfluxDB bucket has been improved in README.md.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Previous merged PR for other changes relating to determining bucket series counts: https://github.com/awslabs/amazon-timestream-tools/pull/185


Find number of chunks required for a file

More changes coming!

@ghoshbishakh I feel these are the changes required in the FileManager module. Please review.


Weed has more bag_capacity_steps than pickup_steps

https://github.com/MichalD96/Perico-heist-goods-counter/blob/d1b8637637ac9e82901775b166cb61870bcce2db/data/targets.json#L36
https://github.com/MichalD96/Perico-heist-goods-counter/blob/d1b8637637ac9e82901775b166cb61870bcce2db/data/targets.json#L37
For every other secondary target the amount of steps match.
I'm not sure if this is correct. From my experience it seems like 10 clicks is enough to pick up the whole stack (which would sum up to 37.5% and not 35% like the website is showing).

It's possible that I have no idea what I'm talking about, though :) In which case I would greatly appreciate some additional explanations as to how the pickup system works exactly and where you got these pickup step values from (I would love to see the source for myself).

Yes, you are absolutely right that weed bag is 37.5%, but all values on the website are rounded down due to a little bug in game.
The easiest is to show that bug on coke bag. When you collect 1 stack of coke (10 clicks), it fills the bar in right down corner in 45%, however when you pick up second stack of coke it fills the bag in 100%.
It is impossible to make precise counter, because this bug is the bigger the more you mix secondary targets in your bag, and bug multiplies by amount of players. Also in some cases you can fill your bag in 105% when you pick up gold as last target, and you already have weed and coke in your bag.
All values in targets.json are directly from game files, and seems you found the bug, i need to check this values again, because it is impossible to have 11 pickup steps, i messed something up. 🤔

Cool! Thanks for the explanation. I think I'm getting the hang of this.
Though, are you sure that weed is correct now? It's showing 11 clicks for me at the moment:

I am still testing different precision levels, and i think i will come back to previous settings. The problem is i set full bag as 100%, in game it is 1800 units, and R* can change it any time.
In case of this 11 clicks, usually when i play with friends we take amount of players -1 more clicks on last target from the list, and it works perfectly.
4 players +3 clicks
3 players +2 clicks
2 and 1 player +1 click
This precision change should fix it, but i see it still doesn't work in every case.
I need to rewrite the counter with current information i have from the game, because adding targets to 100% bag capacity was a bad idea.

I wish I had better understanding of this system - I would love to contribute. I will play around with the calculator when heisting with my friends and if I find a way to improve it, I will create a PR.
Anyway, I guess I should close this issue since the difference is by design. Thanks for the explanations!


Alias kokkos-kernels target

Temporary fix until this is handled in kokkos-kernels

On second thought move this closer to find_package(KokkosKernels)

Done

Codecov Report

Merging #18 (7703aca) into master (e5d634a) will increase coverage by 0.04%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master      #18      +/-   ##
==========================================
+ Coverage   92.64%   92.69%   +0.04%
==========================================
  Files          42       42
  Lines        3972     3970       -2
==========================================
  Hits         3680     3680
+ Misses        292      290       -2

Impacted Files
Coverage Δ

src/Picasso_ParticleInit.hpp
95.31% <0.00%> (+2.88%)
:arrow_up:

Continue to review full report at Codecov.

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


[Github] base-slider plugin tries to set attribute on undefined object controlsContainer

1. Why is this change necessary?
base-slider plugin tries to set attribute on undefined object controlsContainer when slider doesn't have controls defined
2. What does this change do, exactly?
handle case when controlsContainer is undefined
3. Describe each step to reproduce the issue or behaviour.
When a slider doesn't have controls, controlsContainer is undefined.
Method _initAccessibilityTweaks tries to set tabindex attribute on undefined object, causing plugin initialization failure
4. Please link to the relevant issues (if any).
5. Checklist

[x] I have rebased my changes to remove merge conflicts
[ ] I have written tests and verified that they fail without my change
[x] I have created a changelog file with all necessary information about my changes
[ ] I have written or adjusted the documentation according to my changes
[ ] This change has comments for package types, values, functions, and non-obvious lines of code
[x] I have read the contribution requirements and fulfil them.

Imported from Github. Please see: https://github.com/shopware/shopware/pull/4665

[public] Shopware automated response: This issue is linked to the internal issue: NEXT-38216
[created from NEXT-38216, comment 493261]

The new method (added in <IP_ADDRESS>) also creates issues with base sliders with custom configuration. This portion of the method calls the sliders goTo method, which leads to strange behavior when clicking (and by that focusing) a slider item. It's scrolling the slider by the index of the item, and even tries this on breakpoints, where the slider is disabled. See video attached.
item.addEventListener('focusin', () => {
    const currentSliderInfo = this._slider.getInfo();

    // Prevent native browser function to scroll items into view.
    if (wrapperEl) {
        wrapperEl.scrollLeft = 0;
    } else {
        this.el.scrollLeft = 0;
    }

    // Keep the element which has focus on first slide position.
    if (index !== currentSliderInfo.index) {
        const newSlide = index - currentSliderInfo.cloneCount;

        this._slider.goTo(newSlide);
    }
});

https://github.com/user-attachments/assets/d7c34b34-eff4-4c41-b334-57184caf1e01

I can confirm that behaviour (SW <IP_ADDRESS> PRE-Release-Store) - KL Angelsport

Method was put behind a feature flag with release <IP_ADDRESS> https://github.com/shopware/shopware/blob/v<IP_ADDRESS>/changelog/release-6-6-6-1/2024-09-05-fix-product-slider.md?utm_campaign=release-news&utm_medium=email&_hsmi=325340999&utm_content=325340999&utm_source=hs_email

Hey @dithom, sorry for the late response, I was on vacation the last two weeks.

EDIT: @Phil23 I don't see the necessity for keeping the item in focus at first position. A user who needs to rely on accessibility tools can focus the sliders controls to change the index. Could you help me understand the decision, maybe I'm missing something here? And maybe you can consider making this optional with a flag like keepFocusedSlideAtFirstPosition?

The reason behind this was to keep focused content always in view and make the navigation via keyboard more natural. Having people do this via focusing the arrow button can be seen as a bad pattern because you have to tab-navigate between the content of the slider and the arrows all back and forth, which would be a bad user experience. A slider is basically just a list of items that should be tabbed through naturally when navigating a page. Navigating via the arrow keys assumes that I am able to see the items that are in view.
I will give this another look and try to improve the solution.


Remove next build?

What if next start checked if there were any differences in contents of ./, and re-built before running only if necessary?

That way you wouldn't be able to deploy to now, since at the server start it won't be able to write files. https://zeit.co/now

@tuckerconnelly that's because it's a two different things.
Usually we build the project once and then run many times for different times with many containers.


Spark related changes FBR and PEx

The PR Introduces changes required for Spark Connector like a Full Bucket Read and Parallel Extract and minor fixes.
It is reincarnation of https://github.com/basho/riak-java-client/pull/612 and here is a task list from the original PR created after review:

[x] Merge merge-dpclient-ts1.3 branch into this one. #621
[x] Fix Full Bucket Read Test
[x] Add Javadocs to for "should provide more details about coverageContext"
[x] Remove commented out line
[x] Remove self() function
[x] Add javadoc for withReturnBody() in SecondaryIndexQueryOperation:Builder
[x] Undo auto bucket cleanup in ITestBase.java, switch tests that need it to extend ITestAutoCleanupBase.java
[x] Switch bracket style to newlines before and after.

build it please

Looks pretty good, and alternate coverage tests work (yey).  A few minor notes incoming...

+1 with the requested docs changes.

build it please

Buildbot isn't picking up the last change, but 05fbe31 was successful, only changes since then are comment related.
+1 merge it.


mesosphere/hdfs:Could not find or load main class org.apache.mesos.hdfs.scheduler.Main

I tried the same steps mentioned in URL https://github.com/mesosphere/hdfs but on running ./bin/hdfs-mesos got error as :
Error: Could not find or load main class org.apache.mesos.hdfs.scheduler.Main
Any idea about the same ?

Issue has been resolved by following the steps :
wget https://github.com/mesosphere/hdfs/archive/0.1.6.tar.gz
tar -xvf 0.1.6.tar.gz
cd hdfs-0.1.6
./bin/build-hdfs
cd build/hdfs-mesos-0.1.6
./bin/hdfs-mesos
Also had changed JAVA_HOME to jdk

I downloaded the 0.1.6.tar.gz archive but when sudo ./bin/build-hdfs i am receiving the following error, does anybody know how to overcome it?
FAILURE: Build failed with an exception.

What went wrong:
Could not create service of type TaskArtifactStateCacheAccess using TaskExecutionServices.createCacheAccess().

Failed to create parent directory '/opt/mesos-hdfs-build/hdfs/hdfs-0.1.6/.gradle' when creating directory '/opt/mesos-hdfs-build/hdfs/hdfs-0.1.6/.gradle/2.8/taskArtifacts'


Updated invalid devServer.proxy example code

It seems the last proxy example omitted the array format used in the example before it. Initial example did not work with webpack 4.13.0 and webpack-dev-server 3.1.4. The updated version worked fine.

Posted bug report for webpack-dev-server at https://github.com/webpack/webpack-dev-server/issues/1438

Thank you @petterm lets wait and hear from them to decide on what steps to take with this PR (close or merge)

As issue webpack/webpack-dev-server#1438 has been accepted as a bug report this pull request is no longer relevant.

i just wanted to say THANK YOU for filing the bug report and creating this PR - i've spent over an hour trying to figure out why the example in the docs wasn't working as expected.


Improve Access and User Consent document

What type of PR is this?
documentation
What this PR does / why we need it:
Defines terms and keeps them consistent throughout, improves clarity in English writing.
Which issue(s) this PR fixes:
N/A
Special notes for reviewers:
Changelog input
 release-note access-and-user-consent documentation update

Additional documentation
docs

Hi @chrishowell
could you please split the PR into a "better English one" and one or more for consistent use of terms and better definitions?
I would like to get the easy stuff approved and then start the discussion on the rest. Which might still lead to some discussion. Thanks for the PR. I am a bit overwhelmed by it

@chrishowell @AxelNennker This is a great contribution, thank you Chris!
I agree with Axel, it will be much easier to handle if we isolate the proposed changes in different PRs. The "better English" one will probably be the easiest to approve. However, the one about the terms and definitions (saying that I pretty much agree with the ones you propose), there is a specific https://github.com/camaraproject/IdentityAndConsentManagement/issues/98 issue to revisit terms and definitions and I can imagine that it will require further discussions.
On the other hand, I've labeled the PR with ICM backlog as it would have to be addressed in the next release. We are already closing the second release candidate of current release 0.2.0-rc.2, which is only intended for bug fixes. Also, among the changes you suggested, some of them have greater impact than they look:

Changing the title of the Purpose section would change the link reference to that section, and would require updating existing references to that section in all other documents in all subprojects that point to it. That's not possible for this meta release at this stage.
Also, you propose changes to the info.description template, which is included in all CAMARA APIs. this is a very sensitive text to change, as it represents the ICM agreement between many participants. And this text is copied into all API specifications. So if it is changed, it would have to be carefully revised and updated in all API subprojects. So that would certainly be work for another release.

Thanks for reviewing :) it's a bit difficult to split this into multiple PRs as the 'better English' comes with using defined terms..

Thanks for reviewing :) it's a bit difficult to split this into multiple PRs as the 'better English' comes with using defined terms..

@chrishowell As discussed by the team in yesterday's WG call, in order to move things forward, could you split the content of this PR into three:

One focused on just updating the terms and definitions. So that the WG can agree on the terms to be used in the rest of the documentation. Please keep the same changes you propose in the PR.
Another editorial one, simply including the same "better English" changes you propose in this PR. You can assume for the moment that the terms and definitions are the ones you proposed. And then it may need some adjustments if something is changed in the previous PR.
And finally, another independent PR just for changes in the info.description template, which could also fix other issues like #178.

FYI @chrishowell @AxelNennker @sebdewet This PR is now split into:

#212
#213
#214

@sebdewet @AxelNennker It's ok with you if I close this PR after the split?


Add a type for HTTP header dates

Continuation of #15

when I should merge

I believe I'm OK with this.

Let me know when I should merge (I had one last question).

@carllerche did you still have a question?

👍


Providing path to executable

I recently switched to Neomake from Syntastic and am working on getting Python checking set up correctly.  I would like to use flake8 to lint my files, but because of my virtualenv setup, the actual flake8 executable is not in my $PATH if the directory I'm working in is using a different virtualenv.  Is there some way to hard-code the path to the executable for a particular maker?

Well, I was able to point the maker at the right executable by doing this:
let g:neomake_python_enabled_makers = ['flake8']
let g:neomake_python_flake8_maker = {
  \ 'exe': $PYENV_ROOT . '/versions/3.5.0/bin/flake8'
  \ }

but this seems to have messed with some other settings; I no longer see the output of how many errors and warnings there were in Airline like I did before.  Is this because the new config and existing config don't get merges properly?  How does one add to the existing config instead of overwriting it?

I got it to work by doing this
" call pylint using the current python (venv or global)
let g:neomake_python_venvpylint_maker = {
    \ 'exe': 'python',
    \ 'args': [
        \ '`which pylint`',
        \ '-f', 'text',
        \ '--msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}"',
        \ '-r', 'n'
    \ ],
    \ 'errorformat':
        \ '%A%f:%l:%c:%t: %m,' .
        \ '%A%f:%l: %m,' .
        \ '%A%f:(%l): %m,' .
        \ '%-Z%p^%.%#,' .
        \ '%-G%.%#',
    \ }

let g:neomake_python_enabled_makers = ['venvpylint']

Curious to know whether there's a better way.

Using virtualenv and flake8, I was able to make it work by doing as follow:
let g:neomake_python_enabled_makers = ['flake8']
let g:neomake_python_flake8_maker = {
  \ 'exe': '/home/matheus/.config/nvim/env2/bin/flake8',
  \ 'args': ['--format=default'],
  \ 'errorformat':
      \ '%E%f:%l: could not compile,%-Z%p^,' .
      \ '%A%f:%l:%c: %t%n %m,' .
      \ '%A%f:%l: %t%n %m,' .
      \ '%-G%.%#',
  \ 'postprocess': function('neomake#makers#ft#python#Flake8EntryProcess')
  \ }

AFAIK, there's no better way at the moment.

One option I'm trying for getting python checkers per-environment to work is adding the ~/.pyenv/shims to my path. Then I can rely on vim-pyenv to handle activating the correct environment. This seems to require the least configuration and I don't have to override or add new checkers.
The main side effect with this approach:
Say I have pep8 in environment A and pylint in environment B. Then there will be a shim for each, but if I run pep8 while B is active, the command will exit with code 127 (command not found).
Neomake "sees" both pep8 and pylint and will try to run both, but one will always "fail" with 127.
Thus, it would be nice if Neomake caught the 127 exit code and ignored / suppressed it.

Thus, it would be nice if Neomake caught the 127 exit code and ignored / suppressed it.

:+1:
Do you like to create a PR? Or a separate issue to discuss it?

@blueyed New issue here: #537.
This issue may be a little broader (I'm still looking at how to handle Node binaries installed via NVM), or @alexlafroscia may be looking for a difference solution (maybe a way to override the path to a maker without having to redefine it?).
Not sure when I can get to a PR for the 127 thing, so if someone else wants to implement this go for it.
For future reference, here is an updated version of the script I'm using to add rbenv and pyenv to my path. (This is mainly for nvim-qt which wouldn't get this from my shell.)
For the below to work, I'm using vim-pyenv and vim-rbenv. Also recommend rbenv-bundler.
" Set rbenv root.
if empty($RBENV_ROOT)
  let s:rbenv_root = $HOME . '/.rbenv'
else
  let s:rbenv_root = $RBENV_ROOT
endif

if isdirectory(s:rbenv_root)
  " Add rbenv bin to path.
  let s:rbenv_bin = s:rbenv_root . '/bin'
  let $PATH = substitute($PATH, ':' . s:rbenv_bin, '', '')
  let $PATH .= ':' . s:rbenv_bin

  " Add rbenv shims to path.
  let s:rbenv_shims = s:rbenv_root . '/shims'
  let $PATH = substitute($PATH, ':' . s:rbenv_shims, '', '')
  let $PATH .= ':' . s:rbenv_shims
endif

" Set pyenv root.
if empty($PYENV_ROOT)
  let s:pyenv_root = $HOME . '/.pyenv'
else
  let s:pyenv_root = $PYENV_ROOT
endif

if isdirectory(s:pyenv_root)
  " Add pyenv shims to path.
  let s:pyenv_shims = s:pyenv_root . '/shims'
  let $PATH = substitute($PATH, ':' . s:pyenv_shims, '', '')
  let $PATH .= ':' . s:pyenv_shims
endif

" Bonus example to set deoplete-jedi path from vim-pyenv.
augroup pyenv-deoplete-jedi-path
  autocmd!
  autocmd User vim-pyenv-activate-post
    \ let g:deoplete#sources#jedi#python_path = g:pyenv#python_exec
  autocmd User vim-pyenv-deactivate-post
    \ unlet g:deoplete#sources#jedi#python_path
augroup END

I am closing this issue, since it's being solved and several examples have been provided.

Which approach is better?

Explicitly setting path to the venv's flake8
Or adding your venv's bin/to your $PATH from inside your init.vim?

Would appending to $PATH cause potential conflicts with packages in project venvs?


Documenting reduction module

Hi. I tried to read dask.array.reductions, and added some documentations.
I put it here and hope the next guy will understand this faster than me.
Comments added are enclosed by {{ and }}
Sorry if this is not the right place to put this.
import dask.array as da
import numpy as np
import operator
from collections import Container, Iterable, Sequence
from dask.base import tokenize
from toolz import compose, partition_all, get, accumulate, pluck
from itertools import product, repeat
from dask import sharedict
from dask.array.core import _concatenate2, Array, lol_tuples, handle_out
from functools import partial, wraps
from dask.compatibility import getargspec, builtins
from dask.context import _globals
from dask.utils import funcname
from math import log, ceil

# -- dask.array.reduction ------------------------------------------------------
def arg_reduction(x, chunk, combine, agg, axis=None, split_every=None,
                  out=None):
    """Generic function for argreduction.

    Parameters
    ----------
    x : Array
    chunk : callable
        Partialed ``arg_chunk``.
        {{The signature should be chunk(x, axis, offset_info).
        This function is mapped to every blocks of x with offset_info.}}
    combine : callable
        Partialed ``arg_combine``.
        {{
        The signature should be arg_combine(data, axis=None, **kwargs). This
        function merges results of arg functions over the blocks.
        }}
    agg : callable
        Partialed ``arg_agg``.
    axis : int, optional
    split_every : int or dict, optional
    """
    if axis is None:
        # {{ axis == None means to perform reduction over all axes }}
        axis = tuple(range(x.ndim))  # {{ axis can be a tuple of integers }}
        ravel = True
    elif isinstance(axis, int):
        # {{
        # Normalize the axis.
        #     Might be simpler to use:
        #         axis = np.core.multiarray.normalize_axis_index(axis, x.ndim)
        #         axis = (axis,)
        # }}
        if axis < 0:
            axis += x.ndim
        if axis < 0 or axis >= x.ndim:
            raise ValueError("axis entry is out of bounds")
        axis = (axis,)
        ravel = x.ndim == 1  # {{ Check if we need to ravel }}
    else:
        raise TypeError("axis must be either `None` or int, "
                        "got '{0}'".format(axis))

    # Map chunk across all blocks
    name = 'arg-reduce-chunk-{0}'.format(tokenize(chunk, axis))
    old = x.name
    # {{
    # keys is the list of multi-indices for each block of the array.
    # For example, a dask array consist of 2 x 3 blocks would have keys:
    #     [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
    # }}
    keys = list(product(*map(range, x.numblocks)))
    # {{
    # offsets is the tuple of offsets of each block within the overall array
    # For example,
    #     a chunk shape of ((2,), (2, 2)) mean the overall array is:
    #         *a------*b------+
    #         | 2 x 2 | 2 x 2 |
    #         +-------+-------+
    #          subarr0 subarr1
    #
    #     The offset of subarr0 is (0, 0), which is the coordinate of the *a
    #     corner within the overal array.
    #     The offset of subarr1 is (0, 2), which is the coordinate of the *b
    #     corner within the overall array.
    # }}
    offsets = list(product(*(accumulate(operator.add, bd[:-1], 0)
                             for bd in x.chunks)))
    if ravel:
        # {{ offset_info is a generator that yields (offset, shape of overall
        # array) for each block in the overall array. }}
        offset_info = zip(offsets, repeat(x.shape))
    else:
        # {{
        # Get the offset of block over the 0th target axis as a map
        # Example:
        #     axis:              (0,)
        #     offset:            [(0, 0), (0, 2)]
        #     0th target axis:   axis[0], which is 0
        #     list(offset_info): [0, 0]
        # }}
        offset_info = pluck(axis[0], offsets)

    # {{
    # Calculate new chunk shapes.
    # The new chunk shapes is identical to chunk shapes of the input dask
    # array, except all block's dimension along each target axis is
    # reduced to 1.
    # For example,
    #     If the chunk shapes of input dask array are ((2, 2, 2, 1,), (4, 4,),)
    #     and reduction is along axis 0, the chunk shapes of the output dask
    #     array is ((1, 1, 1, 1,), (4, 4),)
    # }}
    chunks = tuple((1,) * len(c) if i in axis else c for (i, c)
                   in enumerate(x.chunks))
    # {{
    # Create dask graph that maps the chunk function onto each block of
    # the input dask array.
    # Each task is chunk_funct((old,) + k, axis, off) where:
    #     (old,) + k refers to a block of the input dask array
    #     off is the offset information for the block.
    # }}
    dsk = dict(((name,) + k, (chunk, (old,) + k, axis, off)) for (k, off)
               in zip(keys, offset_info))

    # {{
    # tmp holds the result of mapping the chunk function over all blocks
    # of the input dask array.
    # }}
    # The dtype of `tmp` doesn't actually matter, just need to provide something
    tmp = Array(sharedict.merge(x.dask, (name, dsk)), name, chunks,
                dtype=x.dtype)
    dtype = np.argmin([1]).dtype
    result = _tree_reduce(tmp, agg, axis, False, dtype, split_every, combine)
    return handle_out(out, result)

def _tree_reduce(x, aggregate, axis, keepdims, dtype, split_every=None,
                 combine=None, name=None):
    """Perform the tree reduction step of a reduction.

    Lower level, users should use ``reduction`` or ``arg_reduction`` directly.

    {{
    Parameters
    ----------
        x : dask.core.Array
            dask array where the chunk function has already been mapped onto
            all blocks.
        aggregate : callable
            The aggregate function is applied to the merged blocks in the
            last merging step of tree reduction. If combine is not provided,
            same is true for the intermediate merging steps of tree
            reduction.
        combine : callable, optional
            If this is provided, combine function is applied to the merged
            blocks in every intermediate merging steps of tree reduction.
        split_every : dict, int, or NoneType
            If this is a dictionary, keys are integers representing axis and
            each value v means to merge every v block over corresponding
            axis.
            If this is None, the 'split_every' value in the context is used
            if presence, otherwise, this is 4.
            If this is an integer, this means to merge every split_every
            blocks over each axis.
    }}
    """
    # Normalize split_every {{ to a dictionary }}
    split_every = split_every or _globals.get('split_every', 4)
    if isinstance(split_every, dict):
        split_every = dict((k, split_every.get(k, 2)) for k in axis)
    elif isinstance(split_every, int):
        n = builtins.max(int(split_every ** (1 / (len(axis) or 1))), 2)
        split_every = dict.fromkeys(axis, n)
    else:
        split_every = dict(
            (k, v) for (k, v) in enumerate(x.numblocks) if k in axis)
    # Reduce across intermediates
    # {{
    # Find appropriate depth of the tree, which is maximum among ceil(log based
    # split_every[i] of x.numblocks[i]) for all non-one x.numblocks,
    # which are the number of blocks along each dimension.
    # This works because a fully balanced tree with n leaf nodes has height
    # log_b(n) where b is 2 for binary tree. See
    # https://stackoverflow.com/questions/2307283/
    # }}
    depth = 1  # {{ depth of the tree }}
    for i, n in enumerate(x.numblocks):
        if i in split_every and split_every[i] != 1:
            depth = int(builtins.max(depth, ceil(log(n, split_every[i]))))
    # {{ -- intermediate merging steps --
    # combine is used for intermediate merging steps if provided.
    # Otherwise, aggreate is used. }}
    func = compose(partial(combine or aggregate, axis=axis, keepdims=True),
                   partial(_concatenate2, axes=axis))

    for i in range(depth - 1):
        x = partial_reduce(func, x, split_every, True, dtype=dtype,
                           name=(name or funcname(
                               combine or aggregate)) + '-partial')
    # {{ -- last merging step --
    # func means to first concatenate the blocks and then apply aggreate to
    # the merged blocks. }}
    func = compose(partial(aggregate, axis=axis, keepdims=keepdims),
                   partial(_concatenate2, axes=axis))
    return partial_reduce(func, x, split_every, keepdims=keepdims, dtype=dtype,
                          name=(name or funcname(aggregate)) + '-aggregate')

def partial_reduce(func, x, split_every, keepdims=False, dtype=None, name=None):
    """Partial reduction across multiple axes.

    Parameters
    ----------
    func : function
        {{func is applied to each group of input blocks that are merged to a
        block in the result. func returns the block in the result }}
    x : Array
    split_every : dict
        Maximum reduction block sizes in each dimension.

    Examples
    --------
    Reduce across axis 0 and 2, merging a maximum of 1 block in the 0th
    dimension, and 3 blocks in the 2nd dimension:

    >>> partial_reduce(np.min, x, {0: 1, 2: 3})    # doctest: +SKIP
    """
    # {{ name is unique name for the resulting dask array }}
    name = (name or funcname(func)) + '-' + tokenize(
        func, x, split_every, keepdims, dtype)  # {{ name for tasks }}
    # {{
    # parts explicitly represent which blocks are merged along which
    # dimension.
    # For example,
    #     split_every: {0: 4}
    #         this means to merge every 4 blocks along the 0th dimension
    #         and don't modify other dimensions.
    #     x.numblocks: (3, 5)
    #     parts:       [[(0, 1, 2)], [(0,), (1,), (2,), (3,), (4,)]]
    #         this means along dimension 0, reduce the 0th-2nd blocks to
    #         one block (this operation is broadcasted over other
    #         dimensions), and leaves dimension 1 intact.
    # }}
    parts = [list(partition_all(split_every.get(i, 1), range(n))) for (i, n)
             in enumerate(x.numblocks)]
    # {{
    # keys represent the multi-index to the blocks of the result of this
    # partial reduction.
    # For example,
    #     parts: [[(0, 1, 2)], [(0,), (1,), (2,), (3,), (4,)]]
    #     keys:  [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)]
    # }}
    keys = product(*map(range, map(len, parts)))
    # {{
    # out_chunks is the chunk shape of the result when keepdims is True
    # Assumes all resulting blocks have a size of 1 along each target axis.
    # If reduction is performed along an axis, the dimensions of all resulting
    # blocks along the axis is set to 1. If reduction is not performed
    # along an axis, the dimensions of the resulting block along the axis
    # is not modified.
    # For example,
    #     x.chunks:    ((1, 1, 1), (2, 2, 2, 2, 2))
    #     split_every: {0: 4}
    #     out_chunks:  [(1,), (2, 2, 2, 2, 2)]
    #     Along axis 0, the reduction merge every 4 block into 1
    #     block. Each resulting block has a size of 1 along axis 0.
    #     Along axis 1, the reduction does not change the sizes of the
    #     block. The chunk shape along axis 1 remains (2, 2, 2, 2, 2).
    # }}
    out_chunks = [tuple(1 for p in partition_all(split_every[i], c))
                  if i in split_every else c for (i, c) in enumerate(x.chunks)]

    if not keepdims:
        # {{ if keepdims is False, the axes that are reduced would disappear
        # in the result. (Of course this again assumes the reduced dimensions
        # would have a size of 1 instead of something else.) We get rid of the
        # elements for these axes for each key in keys and for each chunk
        # description in out_chunks. }}
        # {{ out_axis is the list of axes of x that are not reduced.}}
        out_axis = [i for i in range(x.ndim) if i not in split_every]
        # {{ lambda that get multiple elements of each element of k }}
        getter = lambda k: get(out_axis, k)
        keys = map(getter, keys)
        out_chunks = list(getter(out_chunks))
    dsk = {}
    # {{
    # iterate over all blocks s of the result and yield p, the grouping
    # of input block that merge to s, and k, the multi-index to block s
    # among all blocks of the overall result. s is not explicitly
    # provided by the iterator.
    # Example:
    #     parts:                  [[(0, 1, 2)], [(0,), (1,),]]
    #     list(product(*parts)):  [((0, 1, 2), (0,)),
    #                              ((0, 1, 2), (1,))]
    # }}
    for k, p in zip(keys, product(*parts)):
        # {{
        # decided is a dictionary where the keys are axis that are not
        # reduced, and the value is the block index of the input blocks that
        # merged to the current result block over the axis represented by the
        # key. dummy is same as decided, except the keys are axis that are
        # reduced.
        # Example:
        #     p: ((0, 1, 2), (0,)) means the current block of the result is
        #        merging the input block with block indices (0, 0), (1, 0),
        #        and (2,0)
        #     decided: {1: 0} means the 1st dimension is not modified. For
        #         the input blocks the merged to the current block of the
        #         result, these input blocks have block indices of 0 along
        #         the 1st dimension.
        #     dummy: {0: (0, 1, 2)} means the 0th dimension is modified. For
        #         the input blocks the merged to the current block of the
        #         result, these input blocks have block indices of 0, 1,
        #         and 2 along the 0th dimension.
        # }}
        decided = dict((i, j[0]) for (i, j) in enumerate(p) if len(j) == 1)
        dummy = dict(i for i in enumerate(p) if i[0] not in decided)
        # {{
        # g is the list of keys to the input blocks that would merge to the
        # current result block.
        # }}
        g = lol_tuples((x.name,), range(x.ndim), decided, dummy)

        # {{ (name,) + k is the key to the current block in the result. }}
        dsk[(name,) + k] = (func, g)
    return Array(sharedict.merge(x.dask, (name, dsk)), name, out_chunks,
                 dtype=dtype)

def make_arg_reduction(func, argfunc, is_nan_func=False):
    """Create a argreduction callable.

    Parameters
    ----------
    func : callable
        The reduction (e.g. ``min``)
        This should have a signature like func()
    argfunc : callable
        The argreduction (e.g. ``argmin``)
    """
    chunk = partial(arg_chunk, func, argfunc)
    combine = partial(arg_combine, func, argfunc)
    if is_nan_func:
        agg = partial(nanarg_agg, func, argfunc)
    else:
        agg = partial(arg_agg, func, argfunc)

    @wraps(argfunc)
    def _(x, axis=None, split_every=None, out=None):
        return arg_reduction(x, chunk, combine, agg, axis,
                             split_every=split_every, out=out)

    return _

def arg_chunk(func, argfunc, x, axis, offset_info):
    # {{
    """ Operation over each block of the input dask array
    In the whole tree reduction, arg_chunk function is applied to the blocks
    of the input dask array to perform the 0th merging step.
    Parameters
    ----------
        func : callable
            func has a signature of func(x, axis=None, keepdims=None, *args,
            **kwargs). This returns the result of some operation over x.
            func can be created by keepdims_wrapper(numpy function such as
            np.min)
        argfunc : callable
            argfunc has a signature of func(x, axis=None, keepdims=None, *args,
            **kwargs). This returns the indices over x to the result returned
            by func.
        x : np.ndarray or
            a block in the overall dask array
        axis : tuple
            Indicate the reduction is performed on which axes.
            Either a tuple containing all axes (e.g. tuple(range(x.ndim))) or a
            tuple containing one axis (e.g. (2,)).
        offset_info : tuple
            a tuple in the form of (offset, total_shape) where offset is the
            coordinate of the 0th element of x in memory (e.g. x[0, 0, 0]
            if x.ndim == 3) within the overall dask array, and total_shape
            is the shape of the overall dask array.
    Returns
    -------
        result : np.ndarray
            result['vals'] is result of func, and result['arg'] is indices over
            the overall input dask array of tree reduction to result['vals'].
    """
    # }}
    # {{ Convert axis to numpy's representation of axis }}
    arg_axis = None if len(axis) == x.ndim or x.ndim == 1 else axis[0]
    vals = func(x, axis=arg_axis, keepdims=True)  # {{result of the operation}}
    arg = argfunc(x, axis=arg_axis, keepdims=True)  # {{indices to the result}}

    if arg_axis is None:  # {{ reduction is performed along all axes }}
        offset, total_shape = offset_info
        # {{
        # Calcultion of ind has three assumptions:
        # 1. the reduction operation reduces the target dimensions to 1
        # 2. func flattens x first before doing anything else when axis is None.
        # 3. argfunc returns flat indices to x
        # Assumption 2 & 3 are True for min, argmin, max, and argmax of numpy.
        # Together these three assumptions mean when axis is None every step of
        # the tree reduction returns an array of a single element with a
        # shape affected by keepdims kwarg within func and argfunc.
        #
        # That we only need to get 1 element means arg.ravel()[0] returns the
        # only element we need.
        #
        # ind is the multi-index over x to the single element returned by func
        # }}
        ind = np.unravel_index(arg.ravel()[0], x.shape)
        # {{Find Multi-index to the single element returned by func and over the
        #  overall input to tree reduction.}}
        total_ind = tuple(o + i for (o, i) in zip(offset, ind))
        # {{Flat index of the single element returned by func and over the
        # overall input to tree reduction.}}
        arg[:] = np.ravel_multi_index(total_ind, total_shape)
    else:
        # {{If we are performing reduction over a specific axis
        # Then, argfunc should return multi-indices over x to the result of
        # func. To convert this to the multi-indices over the overall dask
        # array, we just add offset_info}}
        arg += offset_info
    # {{If x is a masked array, convert it to a numpy array by replacing each
    # masked element by fill_value. fill_value }}
    if isinstance(vals, np.ma.masked_array):
        if 'min' in argfunc.__name__:  # {{if we are using argmin }}
            fill_value = np.ma.minimum_fill_value(vals)  # {{max allowed value}}
        else:  # {{otherwise, I guess we are using argmax }}
            fill_value = np.ma.maximum_fill_value(vals)  # {{min allowed value}}
        vals = np.ma.filled(vals, fill_value)

    # {{-- Put vals and args into a single array --
    # is it ok to use (vals, arg) to replace this? }}
    result = np.empty(shape=vals.shape, dtype=[('vals', vals.dtype),
                                               ('arg', arg.dtype)])
    result['vals'] = vals
    result['arg'] = arg
    return result

def arg_combine(func, argfunc, data, axis=None, **kwargs):
    # {{
    """Apply argfunc and return the overall indexing and values
    Returns
    -------
        result : np.ndarray
            result['vals'] is result of func, and result['arg'] is indices over
            the overall input dask array of tree reduction to result['vals'].
    See Also
    --------
        _arg_combine
    """
    # }}
    arg, vals = _arg_combine(data, axis, argfunc, keepdims=True)
    result = np.empty(shape=vals.shape, dtype=[('vals', vals.dtype),
                                               ('arg', arg.dtype)])
    result['vals'] = vals
    result['arg'] = arg
    return result

def arg_agg(func, argfunc, data, axis=None, **kwargs):
    # {{
    """Apply argfunc and return the overall indexing.
    Wrapper for _arg_combine. We defined this function because the vals are not
    useful for the intermediate steps in the tree reduction.
    See Also
    --------
        _arg_combine
    """
    # }}
    return _arg_combine(data, axis, argfunc, keepdims=False)[0]

def nanarg_agg(func, argfunc, data, axis=None, **kwargs):
    arg, vals = _arg_combine(data, axis, argfunc, keepdims=False)
    if np.any(np.isnan(vals)):
        raise ValueError("All NaN slice encountered")
    return arg

def _arg_combine(data, axis, argfunc, keepdims=False):
    """Merge intermediate results from ``arg_*`` functions
    {{
    Apply argfunc and return the value and overall indexing.
    Tree concatenation of the blocks is actually performed by _tree_reduce.
    This function apply argfunc to one of the blocks resulting from one
    merging step in _tree_reduce. The correct indexing within the overall
    input to tree reduction and values referred by the indices from argfunc
    are returned.
    Parameters
    ----------
        data : np.ndarray
            data['vals'] and data['arg'] are respectively the results of func
            and argfunc over a merged block (of np.ndarray type) from the
            previous merging step. data['arg'] contain indexing to data['val']
            within the overall input dask array to the tree reduction.
        axis : tuple
            Specifies the reduction is performed on which axes.
            This is either a tuple of all axes such as (0, 1, 2,), or a tuple
            for one axis such as (2,).
        argfunc : callable
            The signature is argfunc(x, axis, keepdims, *args, **kwargs).
            Can be a numpy function wrapped by dask.array.chunk.keepdims_wrapper
            This should return the indices (like np.argmin) to x. argfunc
            returns the indices within the overall input dask array and to the
            result of applying func on x. func is not explicitly an argument
            to this function.
        keepdims : Union[bool, NoneType]
    Returns
    -------
        arg : indices to vals and within the overall input dask array.
        vals : result of applying func on data['vals']
    }}
    """
    # {{
    # Fix axis. A reduction over all axes is translated to None. A reduction
    # over a specific axis (e.g. (2,)) is translated to an integer.
    # This is the reverse of translation of axes at beginning of the
    # arg_reduction function.
    # }}
    axis = None if len(axis) == data.ndim or data.ndim == 1 else axis[0]
    # {{input is a np.ndarray, and arg is indices of vals and over the overall
    # input to the tree reduction}}
    vals = data['vals']
    arg = data['arg']

    if axis is None:
        # {{if axis is none, we assume local_args is an indexing over vals
        # and to the result of this step. This is the behavior of np.argmin and
        # np.argmax with axis==None because they return an array of a single
        # number.}}
        local_args = argfunc(vals, axis=axis, keepdims=keepdims)
        vals = vals.ravel()[local_args]
        arg = arg.ravel()[local_args]
    else:
        # {{if axis argument is a specific axis, local_args is an indexing
        # over vals and to the result along the axis.}}
        local_args = argfunc(vals, axis=axis)
        # {{Convert indexing along an axis to proper multi-indexing}}
        inds = np.ogrid[tuple(map(slice, local_args.shape))]
        inds.insert(axis, local_args)
        vals = vals[inds]
        arg = arg[inds]
        # {{if keepdims, insert new axis to the results at the axes of
        # reduction}}
        if keepdims:
            vals = np.expand_dims(vals, axis)
            arg = np.expand_dims(arg, axis)

    return arg, vals

# -- dask.array.chunk ----------------------------------------------------------
def keepdims_wrapper(a_callable):
    """
    A wrapper for functions that don't provide keepdims to ensure that they do.
    {{
    Parameters
    ----------
        a_callable : callable
            The signature should be a_callable(x, axis, *args, **kwargs).
    }}
    """
    # {{ don't wrap if a_callable already has a keepdims keyword argument }}
    if "keepdims" in getargspec(a_callable).args:
        return a_callable

    @wraps(a_callable)
    def keepdims_wrapped_callable(x, axis=None, keepdims=None, *args, **kwargs):
        r = a_callable(x, axis=axis, *args, **kwargs)
        # {{ If keepdims is None or False, use the original function }}
        if not keepdims:
            return r
        # {{
        # If keepdims:
        #     Make result and x have same number of dimensions.
        #     This ensures the result will broadcast correctly against x.
        #     If axes is None:
        #         We are performing reduction over all axes of x.
        #         That means the result should be a single number of np type.
        #         Create n new dimensions where n == x.ndim.
        #     Otherwise, axes is a container, iterable, or sequence of integers.
        #         we are performing reduction over some of the axes of x.
        #         For each axis reduced, create new axis for the result
        #         For each axis not reduced, keep it the same way.
        # }}
        axes = axis

        if axes is None:
            axes = range(x.ndim)

        if not isinstance(axes, (Container, Iterable, Sequence)):
            axes = [axes]

        r_slice = tuple()
        for each_axis in range(x.ndim):
            if each_axis in axes:
                r_slice += (None,)  # {{ This is same as np.newaxis }}
            else:
                r_slice += (slice(None),)  # {{ get everything over this axis }}

        r = r[r_slice]

        return r

    return keepdims_wrapped_callable

chunk_min = keepdims_wrapper(np.min)
chunk_argmin = keepdims_wrapper(np.argmin)
argmin = make_arg_reduction(chunk_min, chunk_argmin)

# -- Main ----------------------------------------------------------------------
def main():
    arr = np.arange(60).reshape(6, 10)
    np.random.shuffle(arr.ravel())
    arr = da.from_array(arr, 2)
    print("original:")
    print(arr.compute())
    # print("numblocks", arr.numblocks)
    axis = 1
    amin = argmin(arr, axis=axis)
    print("axis:", axis)
    print("result")
    print(amin.compute())

main()

Would you like to do a PR to improve the documentation?


Add windows cpu support

Part of https://github.com/tensorflow/custom-op/issues/24

Thank you very much @yifeif !


Seed word backup:Text change on history page.

“confirmed” not “confirm”

Verified this issue on dev app v2.0.75(477)


BUG: Pivot Tables errors when using modin.pandas

Modin version checks

[X] I have checked that this issue has not already been reported.

[X] I have confirmed this bug exists on the latest released version of Modin.

[X] I have confirmed this bug exists on the main branch of Modin. (In order to do this you can follow this guide.)

Reproducible Example
import pandas as pd
import modin.pandas as mpd
import pandas as pd
import modin.pandas as mpd
x = [{'date': pd.Timestamp('2020-01-03 00:00:00'),
  'ticker': 'CTG',
  7: 0.08},
 {'date': pd.Timestamp('2020-01-03 00:00:00'),
  'ticker': 'CTI',
  7: 0.02},
 {'date': pd.Timestamp('2020-01-03 00:00:00'),
  'ticker': 'DIG',
  7: 0.01},
 {'date': pd.Timestamp('2020-01-03 00:00:00'),
  'ticker': 'DRC',
  7: 0.069},
 {'date': pd.Timestamp('2020-01-03 00:00:00'),
  'ticker': 'HNG',
  7: 0.029},
{'date': pd.Timestamp('2020-01-04 00:00:00'),
  'ticker': 'CTG',
  7: 0.081},
 {'date': pd.Timestamp('2020-01-04 00:00:00'),
  'ticker': 'CTI',
  7: 0.025},
 {'date': pd.Timestamp('2020-01-04 00:00:00'),
  'ticker': 'DIG',
  7: 0.013},
 {'date': pd.Timestamp('2020-01-04 00:00:00'),
  'ticker': 'DRC',
  7: 0.069},
 {'date': pd.Timestamp('2020-01-04 00:00:00'),
  'ticker': 'HNG',
  7: 0.023},]
df = pd.DataFrame.from_records(x).set_index('date')
df1 = pd.pivot_table(df, index = df.index, columns = ['ticker'])
df2 = mpd.pivot_table(df, index = df.index, columns = ['ticker'])

Issue Description
When using pivot tables with modin, appear ValueError: can not create pivot table with instance of type <class 'pandas.core.frame.DataFrame'>
The regular Pandas works fine. Can anyone help me please?

At the moment, Pandas objects are specifically not accepted by Modin. For this code to work, you need to explicitly convert Pandas' dataframe to Modin's dataframe like that:
mpd.pivot_table(mpd.DataFrame(df), index = df.index, columns = ['ticker'])

@modin-project/modin-core there are more and more situations where it would be convenient for users to pass pandas objects to Modin functions. We should rethink this.

there are more and more situations where it would be convenient for users to pass pandas objects to Modin functions. We should rethink this.

I think what we should do is to make a more describable error message in these situations, something like: "you're trying to pass pandas object to a modin's method, please make the conversion as follows...".
It could be a real pain to efficiently support both pandas and modin objects, so my vote here is only to make clear errors.

I think what we should do is to make a more describable error message in these situations, something like: "you're trying to pass pandas object to a modin's method, please make the conversion as follows...".

+1

It could be a real pain to efficiently support both pandas and modin objects, so my vote here is only to make clear errors.

We don't have to make the case with pandas dataframes fast (just give a warning that dataframe conversion takes time and if you want performance boost, you need to rewrite the code). Here it is more important to ensure seamless integration with other libraries, where the user does not have the ability to change imports.

@anmyachev  Thank you

I think what we should do is to make a more describable error message in these situations, something like: "you're trying to pass pandas object to a modin's method, please make the conversion as follows...".

A more detailed message is much appreciated. Since the error gave a warning in <class 'pandas.core.frame.DataFrame'>, I would  know that there's something wrong with the code related to pandas dataframe, but wouldn't necessarily know where to look for an answer


Feature Request: KMS Support

Are there any plans to support the kms systems (AWS KMS etc) that cosign supports instead of having to leverage k8s secrets to store the private key?

Hey @princespaghetti - this repo should be archived. This code has been moved upstream over to the real cosign repo: https://github.com/sigstore/cosign/tree/main/cmd/cosign/webhook


Adds support for running a paper server from a gradle task

Greatly aids in reducing the iteration time when testing, and is a step towards being able to hot-code-reload during debugging.
Blocking Hot Code Reloading:
I believe vane needs to be running in MojangMapping mode in order to get hot-code-reloading, due to the source mis-match after the jars get remapped.
Currently vane has a hard dependency on ProtocolLib that doesn't yet publish MojangMapped dev jars, and deobfuscating it is non-trivial.
Requires the user to accept the eula (maybe this shouldn't be committed :S) and copy Protocol Lib to the run/plugins directory.
after which gradlew runServer will setup a paper server, add the plugins and start it.

Yep certainly don't commit the eula. Dependency on ProtocolLib can maybe be removed, if there are suitable NMS callbacks for package receival


Verify fresh install of package from repo

A note on this and builds in general: I ran npm audit which told me to upgrade webpack.  I did (to @4.41.2), which then caused jupyter lab build to hang on npm pack.  I missed the audit message SEMVER WARNING: Recommended action is a potentially breaking change.  So, staying with webpack 3.x


[Nuxt Bridge]: Page without css styles

While loading the page or refreshing - you can see "bare page" for a while without css styles. Just white page and text. It takes a while for the css styles to load.
The problem is on dev and production.
Reproduction: Run a clean Nuxt Bridge project with WindiCSS.

+1 to that issue. Also after adding first time used class I have to restart Nuxt server, otherwise it won't show styling of that class.

+1 to that issue!

i've added a reproduction issue in nuxt-windicss ( maybe that's related to nuxt-windicss rather than windicss )
https://github.com/windicss/nuxt-windicss/issues/159

Seems like the problem actually in nuxt bridge itself, neither in windicss package nor nuxt-windicss
https://github.com/nuxt/framework/issues/1207


Add reference to README to command --help

This PR extends the description shown when datalad-installer --help is run to include (among other things) instructions to consult the README in this repository for full documentation.
Closes #118.

Thx!

Thank you @jwodder !


Add support to functions within @slice()

Right now, this doesn't work as a way to shuffle the rows.
using TidierData
using StatsBase

@chain df begin
  @slice(sample(1:n(), n())
end

There are two issues here:

@slice() doesn't allow functions to be run inside of it
n() may or may not be parsed correctly here.

We need to support functions within @slice(). We may also want to define a local function n() within the @slice() macro that returns nrow() to ensure that n() can be used in functions inside of @slice().
This is not an immediate priority but we should come back to this because it may allow for a simpler implementation of @slice_sample() in the future.

This is fixed in #75.


Redis 6 config support

Hi Team,
I see that azure has started to support redis 6 in preview mode now.
To consume from script we need support for configuration of redis version from the API.
Can you check and provide the same

@anasokan, the latest version is<EMAIL_ADDRESS>Does it meet your need?


Feature request: WASD + Mouse - Non-Orbit Navigation

Is your feature request related to a problem? Please describe.
I work with a lot of files that are models of areas and buildings with rooms. I'd like to have a better camera navigation for these kinds of 3D models, where the orbit camera currently implemented is not optimal.
Describe the solution you'd like
I'd like something similar to the "Walk Navigation" feature in blender, where I can use WASD(QE)(Shift) to move camera, and mouse to look around. This kind of editor-movement is also common in game engines such as Unity and Unreal.
Describe alternatives you've considered
N/A. I have read the docs and could not find any. And I have also checked existing issues.
Additional context
This is where the blender feature is found if youd like some inspiration.

Contribution
I will unfortunately not be able to contribute to this feature. Feel free to close the issue if it is out of scope or already in your plans.

Hi @Strepto
This is indeed an interesting idea but it is quite far reaching to implement right. We will think about it :)


Add a depext on procps/proctools

Feather uses pgrep (in src/feather.ml), which is not necessarily
installed on the system. It is part of procps package on Debian and
proctools on homebrew.
Add the relevant depexts.
Closes https://github.com/charlesetc/feather/issues/26

Thanks for the PR!


Items not categorized correctly when adding via AddItemToCategory

Addon Version
v0.1.91
World of Warcraft Version
Classic Era (And SoD/Hardcore)
Describe the bug
In my plugin for BetterBags I am using AddItemToCategory to add certain items to custom categores (for ItemRack) which was previously working but seems like it broke with the most recent update. Now I am seeing items in categories which are not in there (Interestingly they were previously, in case that is useful information)
However, this behavior is also inconsistent, since not every time the same items are being added to the same category. Noticed this when reloading occasionally

Example image shows bugged item list for category on the left (all custom categories added by my plugin look like this)
The highlighted items in the bag do not belong to this category as you can see the ItemRack UI on the right for comparison
In case you want to see the source code to clear things up: https://github.com/DJSchaffner/BetterBags_ItemRack/blob/main/main.lua
Steps to reproduce

Add items to custom category via plugin
Check item list for category

Fixed in alpha


1st demo link is 404

https://github.com/STRML/react-grid-layout#demos
https://strml.github.io/react-grid-layout/examples/0-showcase.html isn't there

Thanks, forgot to merge to gh-pages. Fixed.


Stack "spotty-instance-tacotron-i1" was not created.

I try to run Tacotron example following the Medium article, but got an error
Creating IAM role for the instance...
Preparing CloudFormation template...
  - volume "tacotron-i1-workspace" will be created
  - volume "tacotron-i1-docker" will be created
  - availability zone: auto
  - maximum Spot Instance price: on-demand
  - AMI: "Deep Learning Base AMI (Ubuntu) Version 19.2" (ami-07ab02efef2ffe373)
  - Docker data will be stored on the "docker" volume

Volumes:
+-----------+---------------+------------+-----------------+
| Name      | Container Dir | Type       | Deletion Policy |
+===========+===============+============+=================+
| workspace | /workspace    | EBS volume | Retain Volume   |
+-----------+---------------+------------+-----------------+
| docker    | -             | EBS volume | Retain Volume   |
+-----------+---------------+------------+-----------------+

Waiting for the stack to be created...
  - launching the instance...
Error:
------
Stack "spotty-instance-tacotron-i1" was not created.
Please, see CloudFormation logs for the details.

Where do I find CloudFormation logs?
I am using Windows 10 with Git bash (MinGW64).
And another question, I cloned the tacotron repo but needed to rename Dockerfile to Dockerfile.spotty. Why is it not named correctly in the repo? I worry if I do things correctly.

I found a closed issue with where to find CloudFormation logs, this is what I have there
Max spot instance count exceeded (Service: AmazonEC2; Status Code: 400; `
Error Code: MaxSpotInstanceCountExceeded;
Request ID: 0425df51-b33d-4e56-9441-a4a9ad5bc338)
--

I forgot to create requirements-spotty.txt (again I am puzzled why it is not in the docker directory already?), now it is a different error
There is no Spot capacity available that matches your request.
(Service: AmazonEC2; Status Code: 500; Error Code: InsufficientInstanceCapacity)

and if I add onDemandInstance: true it is
You have requested more vCPU capacity than your current vCPU limit of 0 allows for the instance bucket that the specified instance type belongs to.
Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit.
(Service: AmazonEC2; Status Code: 400; Error Code: VcpuLimitExceeded)

Not sure now I am on the right path, requesting limit adjustment seems incorrect here. Can you please with what to do here?

I cloned the tacotron repo but needed to rename Dockerfile to Dockerfile.spotty
I forgot to create requirements-spotty.txt (again I am puzzled why it is not in the docker directory already?), now it is a different error

The Rayhane-mamah/Tacotron-2 is not my repo and it doesn't contain changes that needed for training with Spotty. The point of that article was to show how to train an arbitrary model with Spotty.

There is no Spot capacity available that matches your request.

You can try to use another region where Spot instances are available. To check spot instance prices in particular regions, you can use the spotty aws spot-prices command:
$ spotty aws spot-prices -i p3.2xlarge -r eu-west-1
Getting spot instance prices for "p3.2xlarge"...

Price  Zone
0.9915 eu-west-1b
0.9915 eu-west-1c
3.3050 eu-west-1a

You have requested more vCPU capacity than your current vCPU limit of 0 allows
Not sure now I am on the right path, requesting limit adjustment seems incorrect here. Can you please help with what to do here?

Apparently, new AWS accounts have very low limits for EC2 services. You can read how to increase them here: Amazon EC2 Service Limits
.

Closing the issue, but feel free to reopen it if you have more questions.


synapseutils is missing in the list

For spark projects that publish a jar with a set of dependencies. Usually, there is a need to include synapseutils.  This is needed at compile time.
I personally had to struggle to determine the name of this Jar. After lots of Google Search, arrived at the name, to have a provided dependency in my project.
Would have saved me time, if the jar name atleast was mentioned on this page

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: d8880660-6169-2c7b-1147-3801f4368f8e
Version Independent ID: 65686b43-764c-f265-b893-a646de19c9cd
Content: Azure Synapse Runtime for Apache Spark 3.2 - Azure Synapse Analytics
Content Source: articles/synapse-analytics/spark/apache-spark-32-runtime.md
Service: synapse-analytics
Sub-service: spark
GitHub Login: @DaniBunny
Microsoft Alias: dacoelho

Thanks for the feedback! We have assigned the issue to the content author to further review this and update the document as appropriate.

Thanks for your dedication to our documentation. Unfortunately, at this time we have been unable to review your issue in a timely manner and we sincerely apologize for the delayed response. We are closing this issue for now, but if you feel that it's still a concern, please respond and let us know. If you determine another possible update to our documentation, please don't hesitate to reach out again. #please-close


pages may have less than RESULTS_PER_REQUEST

if (total_so_far - start) < RESULTS_PER_REQUEST:
    break

depending on the filters used, I'm seeing many pages have less than 100 results per page even if there are multiple pages. here is an example url:
https://washingtondc.craigslist.org/search/apa?search_distance=1&postal=20071&availabilityMode=0
Run document.querySelectorAll("#sortable-results .row").length == 51 despite the top showing 1 to 100 of 1177.

You're right. I didn't realize this. I'm still thinking what would be a good way to fix it though ... any ideas?

You could scrape the page for that number. The selector would be span.rangeTo.

yeah what I do right now is:
def get_current_offset_from_response(doc):
    return int(doc.cssselect("#searchform span.pagenum span.rangeFrom")[0].text)

def get_number_of_posts_on_current_page_from_response(doc):
    return int(doc.cssselect("#searchform span.pagenum span.rangeTo")[0].text)

def get_num_total_posts_from_response(doc):
    return int(doc.cssselect("#searchform span.pagenum span.totalcount")[0].text)

doc = lxml.html.fromstring(requests.get(get_query_url(
        area, "search", offset=0, sort=sort, **kwargs)))
num_total_posts = get_num_total_posts_from_response(doc)
num_posts_on_page = get_number_of_posts_on_current_page_from_response(doc)
# yield posts on first page

for offset in range(100, num_total_posts, 100):
    doc = lxml.html.fromstring(requests.get(get_query_url(
            area, "search", offset=offset, sort=sort, **kwargs)))
    # yield posts on this page


Can't access lock file when performing forget/check

Output of restic version
restic 0.9.3 compiled with go1.11.1 on windows/amd64
How did you run restic exactly?
I'm running three restic commands sequentially - backup, forget (with prune) and check.

What backend/server/service did you use to store the repository?
Local disk. Windows 10 Pro.
Expected behavior
I expect all these commands to work without any errors every time.

Actual behavior
I'm running backup with --quiet flag and I don't see any error messages spit out, which makes me believe that backup itself is done successfully. However, running forget after backup shows the following output:
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 588.946255ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 546.672148ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 896.500398ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 1.171012508s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 3.351752264s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 5.172108509s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 5.102365118s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 11.36725609s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 8.257503061s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 15.848447829s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 320.7184ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 640.466149ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 898.972917ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 1.300936819s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 1.80019984s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 3.91249865s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 8.306766816s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 9.899700585s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 10.140919524s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 20.143098869s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Applying Policy: keep the last 60 snapshots, 30 daily, 4 weekly, 3 monthly snapshots
snapshots for (host [emperor], paths [j:\documents]):
...
# list of snapshots follow here

And after that I see output from check (which implies that forget exited with exit code 0 since I'm running commands with &&):
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 621.861845ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 845.062006ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 843.481213ms: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 1.261209931s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 3.236096517s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 2.22105914s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 8.320329679s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 12.01927326s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: Access is denied.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 12.207128758s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: The system cannot find the file specified.
Load(<lock/c36d0cf6d4>, 0, 0) returned error, retrying after 21.332079465s: open \\?\j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec: The system cannot find the file specified.
load indexes
check all packs
check snapshots, trees and blobs
no errors were found

Again, it seems that this command exits successfully. However, notice that the lock file name is exactly the same between forget and check commands!

Steps to reproduce the behavior
Hard to say since it doesn't happen every time and not with every repo (I'm backing up different disks to different repos).

Do you have any idea what may have caused this?
I'm having one backup process running at the same time (backing up once every day) so there's no way that some other restic process accesses the same repo at the exact same time. There seems to be some problem regarding cleaning up the lock file or some other problem (although "Access denied" error seems weird).
Do you have an idea how to solve the issue?
I don't know how these lock files are exactly created by restic, but it seems to me that there are no actual file locks used - if it were then lock files would not have locks on them anymore after process exit. However, maybe that is not the reason at all since there is this weird "Access denied" error. Is restic doing anything weird with the NTFS file system ACL and lock files?
Did restic help you or made you happy in any way?
Yes, of course!

Hm, it looks like there's a leftover lock file in the repo that restic is unable to read. Did you run a backup with the privileges of a different account, and maybe that one was aborted? Can you try running restic unlock, and if that does not help, manually remove the file?

Sorry for long delay for reply. To answer your questions - no, I'm running backup once per day using Windows Task Scheduler having only one active restic process per repo (I will explain below) and I will receive an e-mail when backup has completed. I'm receiving that e-mail and it has lock warnings in it. I can see that this lock error does not happen every time and happens with different disks.
Just for clarification - I'm backing up different physical disks to different restic repositories on a backup disk. I'm doing it sequentially and not in parallel.

Unlock is safe to run, it only removes stale locks. If you use --remove-all (or something like that, can't remember off-hand) it gets a little dicey but only if you have conflicting operations running at the same time.

Okay, but isn't original problem the fact that there are any stale locks? Shouldn't they be removed after process exits in any way?

At some point, one instance of restic left a lock file in the repo. You're right, that should not happen. I don't have any idea why it happened. The next time restic is run, it tried to access the file and was not granted access by the operating system. Did you maybe at one point in time run restic with a different user account? Or did some (automatic?) process change the ownership or access modes for the files in the repo?
Can you check the access rights for the file j:\backup\locks\c36d0cf6d432c72d82c90d7adce5c4f3614c7591bc5163d0d0566b1748a3ceec?

No, as already stated then restic is being run only by Windows Task Scheduler once per day. It has also ticked Run with highest privileges. It seems that restic exits and lock file is not cleaned up everytime. However, I cannot check access rights since that lock file will be deleted at one point (see error message The system cannot find the file specified. above). This makes it seem that after some wait time lock file will be removed after all.
Is there any reason why actual file locking mechanism by OS is not used so that locks would be automatically released no matter what happens with the restic process?

Is there any reason why actual file locking mechanism by OS is not used so that locks would be automatically released no matter what happens with the restic process?

Probably because restic is designed to work cross platform instead of locking into s particular file system.

I'm having restic unlock --remove-all now before backup, forget and check. It still fails occasionally. For example:
Remove(<lock/ecf878fc84>) returned error, retrying after 468.745285ms: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 590.792243ms: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 1.624251763s: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 1.374102459s: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 1.439923449s: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 2.083217688s: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 7.200532415s: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 6.170866771s: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 11.871376183s: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Remove(<lock/ecf878fc84>) returned error, retrying after 16.589776768s: Chmod: chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
chmod \\?\j:\backup\locks\ecf878fc846ead2d4c0c8c48df05ea945ceca7b57b16530fea0cf4cce6e320e2: Access is denied.
Chmod
github.com/restic/restic/internal/backend/local.(*Local).Remove
	/restic/internal/backend/local/local.go:222
github.com/restic/restic/internal/limiter.(*rateLimitedBackend).Remove
	<autogenerated>:1
github.com/restic/restic/internal/backend.(*RetryBackend).Remove.func1
	/restic/internal/backend/backend_retry.go:98
github.com/cenkalti/backoff.RetryNotify
	/restic/vendor/github.com/cenkalti/backoff/retry.go:37
github.com/restic/restic/internal/backend.(*RetryBackend).retry
	/restic/internal/backend/backend_retry.go:36
github.com/restic/restic/internal/backend.(*RetryBackend).Remove
	/restic/internal/backend/backend_retry.go:97
github.com/restic/restic/internal/restic.RemoveAllLocks.func1
	/restic/internal/restic/lock.go:296
github.com/restic/restic/internal/repository.(*Repository).List.func1
	/restic/internal/repository/repository.go:585
github.com/restic/restic/internal/backend.(*RetryBackend).List.func1.1
	/restic/internal/backend/backend_retry.go:133
github.com/restic/restic/internal/backend/local.(*Local).List.func1
	/restic/internal/backend/local/local.go:267
path/filepath.walk
	/usr/local/go/src/path/filepath/path.go:358
path/filepath.walk
	/usr/local/go/src/path/filepath/path.go:382
path/filepath.Walk
	/usr/local/go/src/path/filepath/path.go:404
github.com/restic/restic/internal/fs.Walk
	/restic/internal/fs/file.go:99
github.com/restic/restic/internal/backend/local.(*Local).List
	/restic/internal/backend/local/local.go:238
github.com/restic/restic/internal/limiter.(*rateLimitedBackend).List
	<autogenerated>:1
github.com/restic/restic/internal/backend.(*RetryBackend).List.func1
	/restic/internal/backend/backend_retry.go:127
github.com/cenkalti/backoff.RetryNotify
	/restic/vendor/github.com/cenkalti/backoff/retry.go:37
github.com/restic/restic/internal/backend.(*RetryBackend).retry
	/restic/internal/backend/backend_retry.go:36
github.com/restic/restic/internal/backend.(*RetryBackend).List
	/restic/internal/backend/backend_retry.go:126
github.com/restic/restic/internal/repository.(*Repository).List
	/restic/internal/repository/repository.go:579
github.com/restic/restic/internal/restic.RemoveAllLocks
	/restic/internal/restic/lock.go:295
main.runUnlock
	/restic/cmd/restic/cmd_unlock.go:44
main.glob..func24
	/restic/cmd/restic/cmd_unlock.go:16
github.com/spf13/cobra.(*Command).execute
	/restic/vendor/github.com/spf13/cobra/command.go:762
github.com/spf13/cobra.(*Command).ExecuteC
	/restic/vendor/github.com/spf13/cobra/command.go:852
github.com/spf13/cobra.(*Command).Execute
	/restic/vendor/github.com/spf13/cobra/command.go:800
main.main
	/restic/cmd/restic/main.go:86
runtime.main
	/usr/local/go/src/runtime/proc.go:201
runtime.goexit
	/usr/local/go/src/runtime/asm_amd64.s:1333

And let me re-iterate - there is only once process of this whole thing running by Task Scheduler and it is always ran with the same user rights. I don't understand how it is even possible that it will get access denied errors.
Without me doing anything with these locks/problems, the next morning there might be no errors whatsoever so it's not happening 100% of the time.

@jarmo Does this issue still exist? Could this be interference by some anti-virus software? As you stated that there is only one restic process running, it must be some external interference.

Closing this issue for now as it seems like it is caused by something external and not restic.

I can confirm that I have not experienced this problem anymore. Running restic version 0.11.0.


V5.2.2 Release Candidate Testing

Release Candidate V3 out. Only updated the connection retry on the current XMPP harmony hub communication. No new api was put in for the harmony.
https://github.com/bwssytems/ha-bridge/releases/download/v5.2.2RC3
Please verify results and post here.
v5.2.2
Bug fixes found through issues
#923 HABridge sometimes executes both "on" and "dim" command enhancement question
#927 Added quotes around strings in json response for huemulator
#944 Binding to all IP addresses bug question
#945 Harmony activities not working after restarting hub enhancement question
#970 wrong IP address from habridge bug question
#980 UPnP listen by interface rather than address? Or listen on <IP_ADDRESS>? bug question
#992 Domoticz discovery fails when using https without any credentials enhancement question
#1001 MQTT / Java 8 Issue question
#1013 Cant set dim to 1 enhancement question

@toms001 what release were you using previously?

5.2.1 / aptalca / docker-image

@toms001 assuming you are still using docker here. I will need to check how the new changes play with docker's IP handling.

@toms001 Confirmed, not a docker issue but a code issue. Thanks for testing, new RC2 soon.

I get a java.lang.Error:
Nov 15 15:24:41 raspi2 java[17147]: java.lang.Error: Unresolved compilation problem: |?Syntax error, insert ";" to complete Statement|
Nov 15 15:24:41 raspi2 java[17147]: #011at com.bwssystems.HABridge.hue.BrightnessDecode.replaceIntensityValue(BrightnessDecode.java:65)

Yep, built the ha-bridge with a bad class. new version coming.

Thanks for the update!
This might be a good time to bring up a tiny thing that I didn't want to create a whole new ticket for. Would it be possible to have the 'bridge devices' page remember my preferred sorting? For example, when sorting by ID, name, etc. it would be great if it saved that. Currently, it seems to sort randomly on each page load.

@gohamstergo Well, currently with the angular control I use, that would be a ticket for an enhancement.

okie doke, I can create a ticket

Harmony communication does still not work after hub restart here with 5.2.2RC2. Allthough Alexa now confirms "ok" on a Harmony activity nothing happens, it works after a bridge reinit though.
Log shows:
WARN | Send heartbeat failed | net.whistlingfish.harmony.HarmonyClient
then
WARN | Issue in communcicating with Harmony Hub, retrying connect....
but without reinit of ha bridge communication will not pick up again

@scholzmichael Thanks for the testing... We are a step further as in the past the reinit would not fix it,

I will look into the harmony issue as I thought I had it internally reinit the plugin.

@scholzmichael
would you please share your script to reinit three times a day?
i have the exact same issue and i'm very new to all this stuff :)
Thanks in advance and have a merry christmas to all :)

RC4 is now available and should run in most Java Run-times due to the removal of JAXB and also updated Harmony Hub disconnect detection.

Right now: positive feedback to Harmony issue, no fallout up to now (approx. 24h). Will monitor further...

This is now released!


Median of Two Sorted Arrays [Leetcode - Hard]

Can you please assign this to me. For C++.

@Lekheshwar Assigned in C++

@Lekheshwar Closing this issue as I've assigned this problem here: https://github.com/piyushsharma220699/Hacktoberfest-2021/issues/93
Just to remove redundancy 👍🏻


docs: update readme.md

@CodiumAI-Agent /review

PR Reviewer Guide 🔍
Here are some key observations to aid the review process:

⏱ Estimated effort to review: 1 🔵⚪⚪⚪⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ No major issues detected


Batch Sql doesn't error out

Which version and edition of Flyway are you using?
6.2.4
If this is not the latest version, can you reproduce the issue with the latest one as well?
(Many bugs are fixed in newer releases and upgrading will often resolve the issue)
Which client are you using? (Command-line, Java API, Maven plugin, Gradle plugin)
MVN
Which database are you using (type & version)?
Oracle 11g
Which operating system are you using?
Unix
What did you do?
(Please include the content causing the issue, any relevant configuration settings, the SQL statement that failed (if relevant) and the command you ran.)
I have a versioned patch with lots of DML's.
So I first delete the data and then Insert the data to make the patch re runnable.
For eg:
DELETE FROM TABLE1 where col1 between 110 and 500;
DELETE FROM TABLE2 where col1 between 110 and 500;
DELETE FROM TABLE3 where col1 between 110 and 500;
COMMIT;
INSERT INTO TABLE3 (col1,col2) VALUES (110,'ABC');
The insert statement fails due to unique constraint violation. On further debugging the issue I found that col1 in TABLE2 didn't exists, but since the 3 delete's were executed in batch first one was executed, second one gave error but not halted flyway migration and third delete was skipped.
Now when insert is executed, since  3rd delete was skipped it gives unique constraint violation.
What did you expect to see?
Build should be halted if any of batch execution is unsuccessful.
What did you see instead?
Build skipped rest of sql statements in batch.

Can you provide a minimal reproduction script?

V570004_script.zip
PFA a sample script.
If migration done wth flyway.batch=true, it is success
but flyway.batch=false, fails the patch which should be done also when flyway.batch=true

Hi.. any update on the issue?

Hello, sorry for our unresponsiveness. I've put this on our team's backlog to look at now.


Hand simulation cleanup to better define the purpose of SimulatedHand Data vs. SimulatedHandState.

Overview
SimulatedHandData contains all information necessary for SimulatedHand. It can be used to reproduce hand movement (this will become important for tests!)
SimulatedHandState is used only for keeping track of changes through keyboard and mouse input. It gets baked into SimulatedHandData when hand simulation is used, but other methods of creating hand movement are possible (test animation).
The InputSimulationService now owns the actual SimulatedHandData instances (for both hands) and exposes them publicly. This will later allow tests to modify the hand data without using the SimulatedHandDataProvider, thus separating it from keyboard and mouse input.
Testing for update hand device data happens in the service now instead of the SimulatedHandDataProvider. This avoids the indirection through OnHandDataChanged callbacks and makes the service less dependent on the SimulatedHandDataProvider.
Changes

Fixes: # .

/azp run


Cookbook and ember services

Docs for using ember services, as requested in https://github.com/toranb/ember-redux/issues/12

I merged this in and updated it to have the consistent JS syntax highlighting - thanks for submitting this awesome pattern :)


Python Environments Window WCAG 4.1.2: (devenv/list item 'Packages (Conda)') The Name property of sibling list items should be unique.

The following accessibility issue needs investigation.

App: devenv
Element path: list item 'Packages (Conda)'
Issue Details: The Name property of sibling list items should be unique. WCAG 4.1.2
How To Fix: Provide unique names for sibling list items.
This accessibility issue was found using Accessibility Insights for Windows, a tool that helps debug and find accessibility issues earlier. Get more information and download this tool at https://aka.ms/AccessibilityInsights.

Not repro


Marks Linux build_aar_module_test to be flaky

Issue link: https://github.com/flutter/flutter/issues/102318

Closing with https://github.com/flutter/flutter/pull/102329.


Documentation links are broken on https://www.lean.io/docs/lean-cli

Clicking on any of the documentation links from https://www.lean.io/docs/lean-cli returns a 404.
It looks like perhaps there is an extra 'v2' in the url path, or the v2 folder has never been pushed to the lean.io site.
Example:
window.location.href = '/docs/v2/lean-cli/user-guides/local-data'
Dropping the 'v2' seems to work, though I don't know if this is actually the correct page:
https://www.lean.io/docs/lean-cli/user-guides/local-data

Thanks good catch its the right page we'll fix the redirection -
On Thu, Jan 6, 2022 at 1:03 PM Adam Belmont @.***>
wrote:

Clicking on any of the documentation links from
https://www.lean.io/docs/lean-cli returns a 404.
It looks like perhaps there is an extra 'v2' in the url path, or the v2
folder has never been pushed to the lean.io site.
Example:
window.location.href = '/docs/v2/lean-cli/user-guides/local-data'
Dropping the 'v2' seems to work, though I don't know if this is actually
the correct page:
https://www.lean.io/docs/lean-cli/user-guides/local-data
—
Reply to this email directly, view it on GitHub
https://github.com/QuantConnect/lean-cli/issues/56, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AD5F5DFCG2LCWIQQSDHDKPDUUX7T7ANCNFSM5LNHALIQ
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

--
Jared Broad
www.quantconnect.com
Phone-USA: +1<PHONE_NUMBER>
Democratizing Finance, Empowering Individuals
Facebook http://www.facebook.com/QuantConnect | Twitter
https://twitter.com/#!/QuantConnect | LinkedIn
http://www.linkedin.com/company/quantconnect | Skype: jaredbroad
We're recruiting! Join us and make your mark on the future of finance
https://www.quantconnect.com/jobs


Click on an object on cpu profile (table) replaces the page

I think this is too intrusive.
Building these tables, sorting them and finding an interesting object - all is gone after a single click.
Maybe Observatory should always open a new page?

By single click you mean selecting an element from the list or navigating to that element's page?
In the first case it would be a bug, but I can't reproduce it.
I the second case I think that can be interesting

Yes, sorry, of course navigating to that element's page.


An error occurs when finalising invoice creation

@scottrepreneur @memosys this is new. Can you confirm that you can reproduce it?

Occasional!

Does the transaction succeed here? Can you catch a loom recording with the console window visible when you see this?

@scottrepreneur I was able to reproduce it. It seems that ankr deprecated their Goerli RPC, but you can find the full loom here. Invoice creation on Gnosis works fine.
https://www.loom.com/share/82501c83a69e4b75ac66c56eed4b44f3?sid=30236a77-b657-4b17-9b81-2c05a647978c

This appears to be goerli related, closing. Please reopen, if occurring on other networks.


fix: git should ignore example build dirs

Currently if I build lake, I get a bunch of git-untracked build files in examples/ffi/build/ and examples/ffi-dep/build/. These build directories should be in gitignore. I think ignoring build/ is wrong or confusing because there is a Lake/Build/ directory.

What version / commit of Lake are you on? For one, there is no examples/ffi-dep/build anymore. Also, each example package has a .gitignore which already ignores the example's build directory. Thus, I am confused as to how you are getting these build directories.

I was building lake via a submodule in lean4. Just deleting everything seemed to fix it so I'll close.


Purchase price not available when adding stock from a part page

@G-Pereira is 'Purchasable' enabled for that part? Part pricing only shows up when that is enabled.

No, i am most interested in knowing how much the part (assembly) costs to know what is my profit margin. How can I do that?

Keep in mind that the original topic of this issue is the price of a stock item, not a part. Please answer my question anyway

That makes sense, my bad. I think it shouldn't show in the other case as well then.
There's another issue which the subject as moved to this question so i will close this one.


Please check ioBroker.tino with js-controller 2.0

Hi,
the new js-controller 2.0 will come into latest repository in the next days and we want to make sure that all adapters are working well. We already did a 2 weeks Beta test and so some adapter were aleady checked and some needed slight adjustments.
You can find more information in https://github.com/ioBroker/ioBroker.js-controller/issues/482 and in the ioBroker Forum. If you have more technical questions please write in the referenced issue or in the Developer thread please. General questions are best in the genral thread.
Please update your systems to js-controller 2.0 and check your adapter.
Please close this issue once you have checked your adapter or received successfull reports from users.
Thank you very much for your support. Please contact us in the other Threads or Forum on any question.

Tested with js-controller 2.0.14 --> Works as expected, also in compact mode.