Update google-api-client

The current version of this plugin requires version 0.9.20 of google-api-client.
The latest version of Fastlane to support this is 2.38.1. This means, than it's not possible to use Fastlane version 2.39 or higher due to the limitation from this plugin.
This plugin should be updated to the same google-api-client version as in the gemspec for Fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane.gemspec
# The Google API Client gem is *not* API stable between minor versions - hence the specific version locking here.
# If you upgrade this gem, make sure to upgrade the users of it as well.
spec.add_dependency 'google-api-client', '>= 0.13.1', '< 0.14.0' # Google API Client to access Play Publishing API

I am unsure what the problem you are encountering is, because I am using fastlane version 2.58.0 without issues.
I do that using ruby version 2.4.2 from rbenv. I had to manually update the version of the fastlane gem to 2.58.0 in Gemfile.lock, but it works.
I am guessing the problem is that bundle update will select fastlane version 2.38.1 instead, but I am unsure why it does that.

With the release of Fastlane version 2.39.0, the google-api-client got bumped in the fastlane gemspec from '~> 0.9.2' to '>= 0.12.0', '< 0.13.0'.
Gemspec for Fastlane 2.39.0:
https://github.com/fastlane/fastlane/blob/b8e0869a7ef268f45a9e6a357d6b56034a8c1818/fastlane.gemspec#L54
Gemspec for Fastlane 2.38.1:
https://github.com/fastlane/fastlane/blob/0a7a2486967a4ed21e178a2fa9d8c3d8e060fd76/fastlane.gemspec#L54
The gemspec for this translation plugin is specified to use version '0.9.20'. Whenever you run bundle update, then it tries to find the highest common denominator for google-api-client which happens to resolve to Fastlane 2.38.1.
https://github.com/trifork/fastlane-plugin-translation/blob/master/fastlane-plugin-translation.gemspec#L23
To resolve this issue, then the google-api-client simply needs to be bumped in the gemspec for this plugin. However it will most likely create problems since there has been breaking changes with the google-api-client gem.

I think it should be possible to update google-api-client to a higher version for this plugin. I have done it in the action before without problems. Have you tried updating it?

I have removed the requirements so the plugin relies on the same versions as fastlane does. I have not experienced any issues as a result.


Add xtxtech spiflash driver support (IDFGH-10838)

Answers checklist.

[X] I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
[X] I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
[X] I have searched the issue tracker for a similar issue and not found a similar issue.

General issue report
xtxtech
datasheet
0002-add-xtxtech-flash-driver-to-esp32s3.zip

This patch file indicates compatibility with the Winbond spiflash driver

Hi @yolee599, thank you for offering this patch. Could you please make a PR to https://github.com/espressif/esp-flash-drivers with this new driver? You can refer to https://github.com/espressif/esp-flash-drivers/pull/2 as an example of adding the driver.


Client_id used as username in Oauth authentication

Hi,
I have pretty trivial configuration:
public class OAAuthStockDataAuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private ClientDetailsService clientDetailsService;

    @Autowired
    private TokenStoreService tokenStoreService;

    @Override
    public void configure(ClientDetailsServiceConfigurer clientDetailsServiceConfigurer) throws Exception {
        clientDetailsServiceConfigurer.withClientDetails(clientDetailsService);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer authorizationServerEndpointsConfigurer) throws Exception {
        authorizationServerEndpointsConfigurer
                .authenticationManager(authenticationManager)
                .tokenServices(getTokenServices());
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer authorizationServerSecurityConfigurer) throws Exception {
        authorizationServerSecurityConfigurer
//                .allowFormAuthenticationForClients();
                .tokenKeyAccess("isAnonymous() || hasAuthority('ROLE_TRUSTED_CLIENT')")
                .checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')");
    }

    public DefaultTokenServices getTokenServices() {
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStoreService);
        defaultTokenServices.setSupportRefreshToken(true);
        defaultTokenServices.setClientDetailsService(clientDetailsService);
        return defaultTokenServices;
    }
}

and security config is like that:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private AuthenticationEntryPoint authenticationEntryPoint;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        ClientCredentialsTokenEndpointFilter tokenEndpointFilter = new ClientCredentialsTokenEndpointFilter();
        tokenEndpointFilter.setAuthenticationManager(authenticationManagerBean());
        http
                .authorizeRequests()
                .antMatchers("/oauth/token").anonymous()
                .antMatchers(HttpMethod.OPTIONS).permitAll()
                .anyRequest().authenticated()
                .and().httpBasic().authenticationEntryPoint(authenticationEntryPoint)
                .and().addFilterAfter(tokenEndpointFilter, BasicAuthenticationFilter.class)
                .csrf().disable();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .userDetailsService(userDetailsService)
                .passwordEncoder(passwordEncoder);
    }

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}

My idea is to send client_id/secret and username/password to get token. Client data I want to take from database using custom clientservice, while for getting user data I use custom user service.
Because by default is used BasicAuthenticationFilter I send request like this:

http://localhost:8443/oauth/token?grant_type=password&username=kono&password=123456
with header: Authorization:Basic b2FzZC1hdXRoLWNsaWVudDpteVNlY3JldA==
(Base64 encoded clientID and secret).

Bu problem is that after correct client is retrieved from database, same client_id is used in Userservice as username.
I do not understand why it is like that, and if it possible without overwriting AuthenticationManager to achieve such functionality: "I send client_id,secret,username,password" and if everything correct I get token.

same issue, and I wanna customzie BasicAuthenticationFilter. but it seems can not be override

I have the same problem. I'd appreciate your help if someone showed me a solution.  I wanna customzie BasicAuthenticationFilter and use custom AuthenticationProvider.

I having the exact same issue , I see that client details are successfully validated, but the end user - username and password are ignored and instead client_id is sent again to my custom user details service (those were part of my form-encoded key value pairs) . @konopiux : did you ever find a solution for it

i got same issue but little different . when i send the post form /oauth/token such as :

http://localhost:8901/oauth/token?password=1bbd886460827015e5d605ed44252251&username=510111112222233333&grant_type=password&client_secret=123&client_id=trs_ads

the token endpoint using the username as the client_id and search it form databases, finally spring can find client details when using the username as the client_id .
i don't know why , did you ever find a solution for it

have any solution for it?

Any solution?

Any solution?


chore(cargo): add metadata to Cargo.toml

I saw that some information is missing in Cargo.toml so I decided to add them via this PR. (They are useful for crates.io release)


SVG italic font-style

In the example SVG app, certain italic text (h,m,s in clock.svg, most words in text2.svg) is not displayed with italic style.

I can't duplicate this.
Make sure you've add an italicised font to FontManager.


Nodes: Unpublished drafts are visible

Unpublished drafts are visible, even when not logged in. They should only be visible to the author or authors.

I've decided this is not a bug. All content is public.


About manipulation of gradients

From Clipping gradient by 10 and nan correction, you made some manipulation of gradients.
Why is the gradients clipped by 10, what's the effect do you find if the gradients is too large?
Why will the gradients be nan in segment wise training process, you encounter the nan first or you know the nan is inevitable then you correct it, which one?

We use gradient clipping and nan correction in another project. You can remove it safely. We set 10 in gradients clipping to prevent large gradients, which may cause Nan problem.

@JingLiu95 why pruned model is larger than pretrained model???

Do you have an example?

@JingLiu95 Sorry, I forgot to perform fine-tune.py after channel pruning.py


Remove '$' and 'PM>' prefix from command line samples for copy&paste

Some command line samples include the $ or PM> prefix in them, which means the Copy button on them will produce incorrect results.
E.g. this page (now fixed): https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
Has this:

So when you press Copy, you end up with this in your clipboard:
$ dotnet tool install --global dotnet-ef --version 3.0.0-*

And if you paste that into a command window, it certainly won't work.
So, we should remove the $ and PM> prefixes from command line samples.

This is already fixed in current docs.


feat: add device prometheus label

[!IMPORTANT]
Please first see #5, which is a better alternative.

This pull request guarantees the addition of the Unix device as a Prometheus label. This proves quite handy, especially considering the dynamic nature of UNIX devices that may change with reboots. It empowers users by enabling them to perform aggregations using the sum by (device) clause."

I am closing in favour of #5.


Rebase after closing

There was an instance of a rebase being triggered by a PR closure.  This should not happen:

(Thanks to @Gijsvs for reporting.)

Here's how to extract the relevant logs:
journalctl -S "2022-09-02 13:23" -U "2022-09-02 13:28" -uhoff >closure-triggering-rebase.log


[todo-mvp-rxjava] setPresenter is called twice in addedittask module

From the code walkthrough it looks like we call setPresenter(presenter) twice in addedittask module.

Called from AddEditTaskActivity using Fragment instance (redundant??)
Called from AddEditTaskPresenter constructor (Right place)

From the other modules it looks like calling setPresenter from constructor of a presenter is the right place for this. Please opine.
Created PR for this issue - https://github.com/kkamaraj/android-architecture/pull/1

I'm very confused about it!

Issue fixed. Tests added to cover the view.setPresenter call in the constructor, also.
Thank you, @kkamaraj for reporting the issue!


Stop reporting totalTime metric for GpuShuffleExchangeExec

Signed-off-by: Andy Grove<EMAIL_ADDRESS>Spark does not report a totalTime metric for shuffle exchanges and the metric we were reporting for the non AQE case was misleading/confusing, and we reported zero for the AQE case.
This PR removes the totalTime metric.
This closes https://github.com/NVIDIA/spark-rapids/issues/952

build

build


Feature to change home page

Hi !
I am not a developer but i suggest you to add some methods to change home page instead of Instagram !
We can change app name/icon woth Apk editor & i tried to change home page but i wasn't successful
So its a request add option to change home page link
So we can use other links as home page
For example TikTok views home page

You can do it by using sketchware

Little detail's pls 🥺?

do you guys got any way to change the homepage?? I really need it like right now
Thank You !!

You can do it by using sketchware

but how ? please give me details my Whatsapp number : +923439643339


code-gen: support manyToMany relations

Not going to add this for now. In many cases some extra fields are added anyways, and we want to support lifting results in the query builder anyways. So closing this for now

Not going to add this for now. In many cases some extra fields are added anyways, and we want to support lifting results in the query builder anyways. So closing this for now


fix: golangci-lint errors and warnings

Closes https://github.com/opiproject/sztp/issues/390

Thanks @bhoopesh369 for you first contribution to OPI, we'll review this PR asap


Please upgrade symfony dependencies to 4.x

Hi
Could you please upgrade your dependencies on this project. At the moment this package is being used by daux.io and I would really like to see it's dependencies upgraded.
Nevertheless, I'm still having issues because of a nested dependency to your project (outside usage of daux.io).

You can use 1.1.0.


Preview/fe 1609 overlapping dates

Description

References

#0000

Closing due to issue with preview environment. Since purging of the keyvault in the azure deployment, isn't possible, when spinning up a new preview environment from the same branch, a new branch with a new name has to be created.


Light Flash/Strobe Suppression

There are some videos that have camera flashes in them
for example:
http://assetsprod2-a.akamaihd.net/tag_reuters_com_2017_newsml_ov6kua1nj_reuters_ingest/tag_reuters_com_2017_newsml_ov6kua1nj_reuters_ingest_LOWRES.mp4
this video gives me the following result: ['00:00:09.766', '00:01:23.266', '00:01:35.066']
Can I do something about it?

Hello @annishaa88;
Which detector algorithm are you using in this case, threshold, or content?  Currently there is only support to ignore subsequent camera flashes within a certain window (using the minimum-scene-length argument), but the initial flash in the window will still be detected.
That being said, after the following release of PySceneDetect (v0.5, where the focus is major changes to the Python API), I will look into adding additional support for ignoring camera flash in certain videos.  There are a few ideas I have that can solve this issue, but they will require some modification to the existing detection algorithms.
If you have any suggestions regarding how the implementation should be, by all means, your comments would be most welcome.  I will keep you posted as to my progress in this regard, and should hopefully have something for you to test after the next major release.

My apologies for the lack of update in regards to progress.  Unfortunately my development efforts have been focused on the release of the new v0.5 API/CLI, and not so much on enhancements/features.  I hope to have the new version released by the end of the month, at which time I can attempt to tackle this issue.
Just to confirm again @annishaa88, what command were you using to generate the results?  The specific detection algorithm/thresholds being used would be very useful information.

Also one idea I just had to solve this is to add the ability to specify an intensity value which if the frame exceeds it, scene detection will be disabled.  This might be rather easy to implement, so I will look into squeezing this in for the upcoming release.

Hi Breakthrough,
I have an example video that I have analyzed with bright flashes that cause erroneous scene breaks being detected. The music video for Growl by EXO is done in one continuous shot, but there are strobe lights that flash in the background. I analyzed the video using the content aware detector using the settings of threshold=30 and min_scene_len=10 and ended up with  a total of 83 scenes being detected (link). I would expect at least a couple due to transitions to and from title cards, but the strobes account for the vast majority.
On a side note, I have updated to the newest version, and have been liking it so far. The new API has been working great.

@Breakthrough
I have been doing some work on this problem recently and implemented a working example of an EdgeDetector (code here). I tried to style it after the existing detectors in PySceneDetect and it seems to be plug and play with my existing programs. I basically took the same approach that skvideo does in their scenedet function (docs) (github). This function is just an implementation of this paper (pdf). It adds a dependency on skvideo for their motion estimation code, and a dependency on scipy for some binary image morphology operations.
Some notes about edge detection:

I tried a bunch of different methods to automatically generate the low and high threshold for the Canny edge filter, but none of them performed as well as the method used by skvideo, so I ended up using the same method.
The motion estimation parameter r_dist is the radius (in pixels) over which the detector will look for motion in the frame. However, this is pixels in the scaled down image if downscale_factor is not 1 in the VideoManager object.
The performance is much slower than the other detectors. For some numbers to compare, I get ~20 fps detecting scenes in a 1080p video with ContentDetector with no downscaling. Using EdgeDetector, I need to downscale by 4x in order to match that 20 fps.

Results:

Music video for Growl by EXO (one continuous shot) analyzed by ContentDetector:

video
62 detected scenes (threshold=30, min_scene_len=10)

Same video analyzed by EdgeDetector:

video
10 detected scenes (threshold=0.4, min_scene_len=10, r_dist=6)

Overall, I am happy with it for my purposes, but different videos are going to require parameter tuning to get better accuracy. There are certain videos for which I have found the ContentDetector seems to perform better, while others perform better with the EdgeDetector. I am going to experiment a bit with using both in combination. Perhaps to do something akin to the RobustDetector you mentioned, would it make sense to add the ability to not add anything to a cut list unless all detectors added detect a cut for that frame? Currently, I believe a cut is added to the list if any of the detectors is triggered (which works great in some cases).

Hey, is there any progress on dealing with camera flash, or does anyone know any libraries that are able to deal with this?

Hey @dave-epstein;
Sorry, no progress yet on that front, I'd like to start cleaning up the backlog before addressing any new features at the present moment in time... My apologies, haven't had much time to keep up with the project lately.
I definitely do want to integrate this with PySceneDetect though.  In the meantime, any pull requests are still most welcome.
Thank you.

Interestingly, it appears that a pretty novel solution using a lookahead buffer was implemented in rav1e (which itself was based on the detect-content algorithm!):
https://github.com/xiph/rav1e/blob/master/src/scenechange/mod.rs
This indicates that an underlying design change will be required to support frame lookahead, but this seems like a viable (and awesome!) approach I never originally considered.  Will definitely be looking more into how this can be integrated into PySceneDetect to allow for adding flash suppression to detect-content.

I'll take a bite at this one for the v0.6.x release, as it's a really nice to have feature.  I think I managed to come up with a method that doesn't require a lookahead buffer, and has minimal impact on performance.  It doesn't use edge detection, but again the same method as rav1e just modified to use a state machine rather than frame lookahead.

I think my method may not perform as well as yours @wjs018, but will have minimal performance impact.  Will likely be using yours as a source of test footage.  It's probably worth shipping your edge detector with one of the next releases, as certain users will likely have the same use case as you did.

This has been implemented in the v0.6.x branch (link to download .zip), for users wishing to beta test this feature before it's official release.
Currently the suppression amount (called flicker_frames) is hard-coded and turned off, it can be changed by modifying line 89 of scenedetect/detectors/content_detector.py:
def __init__(self, threshold=30.0, min_scene_len=15, flicker_frames=0):

You can change flicker_frames to the desired amount/intensity of flicker suppression (e.g. flicker_frames=2 will suppress flashes up to 2 frames in length).

Quick update:

Need to port this to the v1.0 branch now instead of v0.6 along with unit tests
In addition to the window size, the ability to specify a different permissible threshold should also be provided (since the delta will be larger than expected as it will be comparing the current frame with one N frames previous)

Looks like the v0.6.x branch and zip were deleted.

Sorry about that, you can find an updated link here with the feature:
https://github.com/Breakthrough/PySceneDetect/archive/c46469e2bcceb8b33885a5bc2826c454a0ecba11.zip
I'll try to schedule this in for v0.6.1 or v0.6.2, but leaving it off by default until it has more testing.

I took a look at this again, and think there's a few main cases to deal with:

Exposure and colour controlled
Exposure controlled
Uncontrolled exposure

The video you posted @wjs018 falls under category 1. If you look at the delta in hue channel, it's very low throughout the video.  I've been experimenting with combining the EdgeDetector implementation you provided with ContentDetector and have gotten promising results so far with adequate performance.
The idea is you can pass a set of weights for the deltas in hue, saturation, luma, and edges.  This would allow both cases 1 and 2 to be dealt with by providing different sets of weights, or always considering only hue/edge information to provide higher confidence.  Also need to look more into filtering the edges based on video resolution, but this is all doable.
Case 3 will need a separate approach, something like a low-pass filter on the luma channel.  Going forwards I would like to integrate all of this into ContentDetector and provide options to control the mode/channel weights and filtering, rather than separate detectors.  This should make it easier to try different combinations.
There definitely needs to be more work done in determining default weights, so the initial release will probably keep them the same as today (i.e. equal weights for HSL and zero weight on edges for now).  Essentially, making ContentDetector much more robust by considering edge information and sudden brightness changes.

What do you think of doing auto tuning the thresholds to standard deviations throughout the video? Performance might be a bit worse. It tends not to catch pan shots combined with flash though. I had the same thought about combining the two with my own version of content aware detector.
""" Experimental edge_detector module for PySceneDetect.

This module implements the EdgeDetector, which compares the difference
in edges between adjacent frames against a set threshold/score, which if
exceeded, triggers a scene cut.
"""

# Third-Party Library Imports
from os import link
from typing import Iterable, List, Tuple
import enum
from tkinter import W
from cv2 import imshow
import numpy
import cv2

# New dependencies
from skvideo.motion.gme import globalEdgeMotion
from scipy.ndimage.morphology import binary_dilation

# PySceneDetect Library Imports
from scenedetect.scene_detector import SceneDetector

def calculate_frame_score(current_frame_hsv: Iterable[numpy.ndarray],
                          last_frame_hsv: Iterable[numpy.ndarray]) -> Tuple[float]:
    """Calculates score between two adjacent frames in the HSV colourspace. Frames should be
    split, e.g. cv2.split(cv2.cvtColor(frame_data, cv2.COLOR_BGR2HSV)).

    Arguments:
        curr_frame_hsv: Current frame.
        last_frame_hsv: Previous frame.

    Returns:

        Tuple containing the average pixel change for each component as well as the average
        across all components, e.g. (avg_h, avg_s, avg_v, avg_all).

    """
    current_frame_hsv = [x.astype(numpy.int32) for x in current_frame_hsv]
    last_frame_hsv = [x.astype(numpy.int32) for x in last_frame_hsv]
    delta_hsv = [0, 0, 0, 0]
    for i in range(3):
        num_pixels = current_frame_hsv[i].shape[0] * \
            current_frame_hsv[i].shape[1]
        delta_hsv[i] = numpy.sum(
            numpy.abs(current_frame_hsv[i] - last_frame_hsv[i])) / float(num_pixels)

    delta_hsv[3] = sum(delta_hsv[0:3]) / 3.0
    return tuple(delta_hsv)

sigma = 0.33

def unsharp_mask(img, blur_size=(21, 21), imgWeight=1.5, gaussianWeight=-0.5, retries=3):
    if(retries == 0):
        return img
    gaussian = cv2.GaussianBlur(img, (5, 5), 0)
    return unsharp_mask(cv2.addWeighted(img, imgWeight, gaussian, gaussianWeight, 0), blur_size=blur_size, imgWeight=imgWeight, gaussianWeight=gaussianWeight, retries=retries-1)

def compute_frame_transforms(frame: numpy.ndarray) -> float:
    """Computes the edge metrics for a frame."""
    # Convert to grayscale
    _bw = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    _hsv = cv2.split(cv2.cvtColor(frame, cv2.COLOR_BGR2HSV))
    # Some calculation to determine canny thresholds
    _median = numpy.median(_bw)
    _low = int(max(0, (1.0 - sigma) * _median))
    _high = int(min(255, (1.0 + sigma) * _median))
    # Do our Canny edge detection
    img_invert = cv2.bitwise_not(_bw)
    img_smoothing = unsharp_mask(img_invert, (9, 9))
    final = cv2.divide(_bw, 255 - img_smoothing, scale=255)
    final = cv2.threshold(final, _low, _high, cv2.THRESH_BINARY_INV)[1]
    _edges = cv2.Canny(final, _low, _high, apertureSize=3, L2gradient=True)
    # cv2.imshow('final', final)
    # cv2.imshow('edges', _edges)
    # cv2.waitKey(1)
    _contrast = _bw.std()
    return (_edges, _contrast, _bw, _hsv)

class EdgeDetector(SceneDetector):
    """Detects cuts using changes in edges found using the Canny operator.

    This detector uses edge information to detect scene transitions. The
    threshold sets the fraction of detected edge pixels that can change from one
    frame to the next in order to trigger a detected scene break. Images are
    converted to grayscale in this detector, so color changes won't trigger
    a scene break like with the ContentDetector.

    Paper reference: http://www.cs.cornell.edu/~rdz/Papers/ZMM-MM95.pdf
    """

    def __init__(self, similar=0.75, confirm=1.25, initial=0.3, r_dist=6, buffer_size=9):
        super(EdgeDetector, self).__init__()
        # first pass threshold
        self.initial = initial
        # similarity standard deviations threshold
        self.similar = similar
        # confirm standard deviations threshold
        self.confirm = confirm
        # distance over which motion is estimate (on scaled-down image)
        self.r_dist = r_dist
        self.last_frame = None
        self.last_scene_cut = -3
        self.contrasts = []
        self.frame_scores = []
        self.p_maxes = []
        self.buffer = []
        self.buffer_size = abs(buffer_size)
        self.saved_frames = []
        self.p_contrast_median = 0.0
        self.p_max_median = 0.0
        self.p_hue_median = 0.0
        self.p_sat_median = 0.0
        self.p_lum_median = 0.0
        self.p_sum_median = 0.0
        self.p_contrast_std = 0.0
        self.p_max_std = 0.0
        self.p_hue_std = 0.0
        self.p_sat_std = 0.0
        self.p_lum_std = 0.0
        self.p_sum_std = 0.0
        self._metric_keys = ['p_max', 'p_in', 'p_out', 'p_contrast', 'p_delta']
#         self.cli_name = 'detect-content'

    def _percentage_distance(self, frame_in, frame_out, r):
        diamond = numpy.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]])

        E_1 = binary_dilation(frame_in, structure=diamond, iterations=r)
        E_2 = binary_dilation(frame_out, structure=diamond, iterations=r)

        combo = numpy.float32(numpy.sum(E_1 & E_2))
        total_1 = numpy.float32(numpy.sum(E_1))

        return 1.0 - combo/total_1

    def _compute_edges_p_max(self, last_edges, curr_edges):
        # Estimate the motion in the frame using skvideo
        r_dist = self.r_dist
        disp = globalEdgeMotion(numpy.array(last_edges, dtype=bool),
                                numpy.array(curr_edges, dtype=bool),
                                r=r_dist,
                                method='hamming')

        # Translate our current frame to line it up with previous frame
        comp_edges = numpy.roll(curr_edges, disp[0], axis=0)
        comp_edges = numpy.roll(comp_edges, disp[1], axis=1)

        # Calculate fraction of edge pixels changing using scipy
        r_iter = 6      # Number of morphological operations performed
        p_in = self._percentage_distance(last_edges, comp_edges, r_iter)
        p_out = self._percentage_distance(comp_edges, last_edges, r_iter)
        p_max = numpy.max((p_in, p_out))

        return p_max, p_in, p_out

    def process_frame(self, frame_num, frame_img):
        # type: (int, numpy.ndarray) -> List[int]
        """ Detects difference in edges between frames. Slow transitions or
        transitions that happen in color space that won't show in grayscale
        won't trigger this detector.

        Arguments:
            frame_num (int): Frame number of frame that is being passed.

            frame_img (Optional[int]): Decoded frame image (numpy.ndarray) to perform scene
                detection on. Can be None *only* if the self.is_processing_required() method
                (inhereted from the base SceneDetector class) returns True.

        Returns:
            List[int]: List of frames where scene cuts have been detected. There may be 0
            or more frames in the list, and not necessarily the same as frame_num.
        """
        metric_keys = self._metric_keys
        _unused = ''

        # If we're on the first frame, insert dummy values for delta and return
        if(len(self.buffer) < 3):
            curr_edges, curr_contrast, curr_bw, _hsv = compute_frame_transforms(
                frame_img)
            self.buffer.append(
                (frame_num, curr_edges, curr_contrast, curr_bw, _hsv, {}))
            p_contrast_pct = 0.0
            return []

        # Fraction of edge pixels changing in new frame, max, entering, and leaving
        p_max, p_in, p_out = 0.0, 0.0, 0.0

        if (self.stats_manager is not None and
                self.stats_manager.metrics_exist(frame_num, metric_keys)):
            p_max, p_in, p_out, p_contrast, p_delta = self.stats_manager.get_metrics(
                frame_num, metric_keys)

        else:
            # Get last element of buffer
            (last_frame_num, last_edges, last_contrast, last_bw,
                last_hsv, last_diff) = self.buffer[-2]
            # Get current frame transforms
            (curr_edges, curr_contrast, curr_bw,
                curr_hsv) = compute_frame_transforms(frame_img)
            # Compute difference in frames
            p_max, p_in, p_out = self._compute_edges_p_max(
                last_edges, curr_edges)
            p_delta = calculate_frame_score(curr_hsv, last_hsv)
            p_contrast = abs(curr_contrast - last_contrast)
            p_contrast_pct = 1
            if (curr_contrast > 0 and last_contrast > 0):
                p_contrast_pct = p_contrast/(numpy.min([curr_contrast, last_contrast]) /
                                             numpy.max([curr_contrast, last_contrast]))
            # record metrics
            if self.stats_manager is not None:
                self.stats_manager.set_metrics(frame_num, {
                    metric_keys[0]: p_max,
                    metric_keys[1]: p_in,
                    metric_keys[2]: p_out,
                    metric_keys[4]: p_delta,
                    metric_keys[3]: p_contrast
                })
            # save metrics for standard deviation calculations
            self.contrasts.append(p_contrast)
            self.frame_scores.append(p_delta)
            self.p_maxes.append(p_max)
            # save diffs between frames to avoid recalculating
            curr_diff = {}
            last_diff[last_frame_num] = curr_diff[frame_num] = (
                p_max, p_delta, p_contrast)
            self.buffer.append(
                (frame_num, curr_edges, curr_contrast, curr_bw,  curr_hsv, curr_diff))

        # cv2.imshow("curr_bw", frame_img)
        # cv2.imshow("last_bw", curr_edges)
        # cv2.waitKey(1)
        # if threshold is met mark for cut calculation
        if p_max >= self.initial or p_contrast_pct >= self.initial:
            # get last saved frame if there is one
            last_buffer = None
            if len(self.saved_frames) > 0:
                last_saved_frame = self.saved_frames[-1]
                last_buffer = last_saved_frame[1]
            # if buffer is not the same as the last buffer we have our first potential cut in this buffer
            # save the buffer
            if last_buffer is not self.buffer:
                self.saved_frames.append(
                    (frame_num, self.buffer))
            # if buffer is the same as the last buffer, add this potential cut to the buffer and extend the life of this buffer
            else:
                # update saved frames with new frame_num and shift buffer
                self.buffer = self.buffer[:]
                self.saved_frames[-1] = (frame_num, self.buffer)

        # if the buffer size is reached and we're not within the buffer size of the last saved frame, drop frames from the buffer
        if len(self.saved_frames) == 0 or frame_num > self.saved_frames[-1][0] + self.buffer_size:
            self.buffer = self.buffer[-self.buffer_size:]

        return []

        def get_or_create_diff_std(self, buffer_element, target_buffer_element):
        (frame_num, _edges, _contrast, _bw, _hsv, diffs) = buffer_element
        (frame_num_t, _edges_t, _contrast_t, _bw_t,
         _hsv_t, diffs_t) = target_buffer_element
        linked_diff = diffs_t.get(frame_num, None)
        if linked_diff is None:
            p_max, _p_in, _p_out = self._compute_edges_p_max(_edges_t, _edges)
            p_delta = calculate_frame_score(_hsv_t, _hsv)
            p_contrast = abs(_contrast-_contrast_t)
            linked_diff = (p_max, p_delta, p_contrast)
            diffs[frame_num_t] = linked_diff
            diffs_t[frame_num] = linked_diff
        (p_max, p_delta, p_contrast) = linked_diff
        (p_hue, p_sat, p_lum, p_sum) = p_delta
        (p_hue_std, p_sat_std, p_lum_std, p_sum_std) = (
            abs(p_hue-self.p_hue_median)/self.p_hue_std,
            abs(p_sat-self.p_sat_median)/self.p_sat_std,
            abs(p_lum-self.p_lum_median)/self.p_lum_std,
            abs(p_sum-self.p_sum_median)/self.p_sum_std
        )
        p_max_std = abs(p_max-self.p_max_median)/self.p_max_std
        p_contrast_std = abs(
            p_contrast-self.p_contrast_median) / self.p_contrast_std
        return (p_max_std, p_contrast_std, p_hue_std, p_sat_std, p_lum_std, p_sum_std)

    def confirm_cut(self, diff):
        (p_max_std, p_contrast_std, p_hue_std,
         p_sat_std, p_lum_std, p_sum_std) = diff
        count = 0
        if p_lum_std > self.confirm:
            count += 2/3
        if p_hue_std > self.confirm:
            count += 1/3
        if p_hue_std > self.confirm:
            count += 1/3
        if p_max_std > self.confirm:
            count += 1
        if p_contrast_std > self.confirm:
            count += 1

        if count >= 2:
            return True

    def confirm_similar(self, diff):
        (p_max_std, p_contrast_std, p_hue_std,
         p_sat_std, p_lum_std, p_sum_std) = diff
        count = 0
        if p_lum_std < self.similar:
            count += 2/3
        if p_hue_std < self.similar:
            count += 1/3
        if p_hue_std < self.similar:
            count += 1/3
        if p_max_std < self.similar:
            count += 1
        if p_contrast_std < self.similar:
            count += 1

        if count >= 2:
            return True

    def get_weighted_delta(self, diff_std):
        p_max_std, p_contrast_std, p_hue_std, p_sat_std, p_lum_std, p_sum_std = diff_std
        weights = [3, 3, 1, 1, 1, 1]
        distributions = [p_max_std, p_contrast_std,
                         p_hue_std, p_sat_std, p_lum_std, p_sum_std]
        weighted_sum = []
        for std, weight in zip(distributions, weights):
            weighted_sum.append(std*weight)
        return numpy.sum(weighted_sum)/numpy.sum(weights)

    def post_process(self, frame_num):
        cut_list = []
        (p_hues, p_sats, p_lums, p_sums) = zip(*self.frame_scores)
        self.p_hue_median = numpy.nanmedian(p_hues)
        self.p_sat_median = numpy.nanmedian(p_sats)
        self.p_lum_median = numpy.nanmedian(p_lums)
        self.p_sum_median = numpy.nanmedian(p_sums)
        self.p_hue_std = numpy.nanstd(p_hues)
        self.p_sat_std = numpy.nanstd(p_sats)
        self.p_lum_std = numpy.nanstd(p_lums)
        self.p_sum_std = numpy.nanstd(p_sums)
        self.p_contrast_median = numpy.nanmedian(self.contrasts)
        self.p_max_median = numpy.nanmedian(self.p_maxes)
        self.p_contrast_std = numpy.nanstd(self.contrasts)
        self.p_max_std = numpy.nanstd(self.p_maxes)
        stats_manager = self.stats_manager
        frame_updates = []
        delta_rate = []
        for saved_frames in self.saved_frames:
            _frame_num, buffer = saved_frames
            start_buffer = buffer[0]
            end_buffer = buffer[-1]
            first_frame_index = 0
            second_frame_index = 1
            while second_frame_index < len(buffer):
                diff = self.get_or_create_diff_std(
                    buffer[first_frame_index], buffer[second_frame_index])
                delta = self.get_weighted_delta(diff)
                delta_rate.append((buffer[second_frame_index][0], delta))
                if self.confirm_cut(diff):
                    frame_updates.append(
                        buffer[second_frame_index][0])
                first_frame_index += 1
                second_frame_index += 1

            if len(frame_updates) == 0:
                continue

            last_frame_update = frame_updates[0]
            grouped_frame_updates = [[last_frame_update]]
            for frame_update in frame_updates[1:]:
                if frame_update > last_frame_update + self.buffer_size:
                    # Initialize a new group
                    grouped_frame_updates.append([frame_update])
                else:
                    grouped_frame_updates[-1].append(frame_update)
                last_frame_update = frame_update

            cut_list += self.get_cuts_from_buffer_group(
                grouped_frame_updates, buffer)
        # skip first cut because it will be tied to start delta
        return cut_list[1:]

    def get_cuts_from_buffer_group(self, grouped_frame_updates, buffer):
        cut_list = []
        for frame_updates in grouped_frame_updates:
            first_frame_index = 0
            last_frame_index = len(frame_updates) - 1
            # find index of first frame in buffer
            for frame_index in range(len(buffer)):
                if buffer[frame_index][0] == frame_updates[0]:
                    first_frame_index = frame_index
                if buffer[frame_index][0] == frame_updates[-1]:
                    last_frame_index = frame_index
            second_frame_index = 0
            first_frame_index -= 1
            ##cv2.imshow("curr_bw", buffer[first_frame_index][3])
            ##cv2.imshow("last_bw", buffer[last_frame_index][3])
            # #cv2.waitKey(1000)
            second_frame_index = 0
            # for all frames between first and last frame_updates
            frame_updates_passed = []
            while second_frame_index < len(buffer)-1:
                if 0 not in [len(frame_updates_passed), len(frame_updates)] and frame_updates[0] - frame_updates_passed[-1] <= 3:
                    frame_updates = frame_updates[1:]
                second_frame_index += 1
                if(buffer[second_frame_index][0] not in frame_updates):
                    continue
                first_frame_index = second_frame_index - 1
                second_frame_index += 1

                found_similar = False
                similarity = 0

                start_second_index = second_frame_index
                while buffer[first_frame_index][0] > frame_updates[0]-3 and first_frame_index >= 0:
                    while not found_similar and second_frame_index < len(buffer) and (second_frame_index - start_second_index) < 4:
                        if self.confirm_similar(
                            self.get_or_create_diff_std(
                                buffer[first_frame_index], buffer[second_frame_index]
                            )
                        ):
                            found_similar = True
                            break
                        second_frame_index += 1
                    if found_similar:
                        break
                    first_frame_index -= 1
                    second_frame_index = start_second_index
                if found_similar:
                    # filter out the frame_updates that between the start_index and forward_index
                    frame_updates_to_remove = []
                    for frame_update in frame_updates:
                        if frame_update >= buffer[first_frame_index][0] and frame_update <= buffer[second_frame_index][0]:
                            frame_updates_to_remove.append(frame_update)
                    # remove the frame_updates in frame_updates_to_remove
                    for frame_update in frame_updates_to_remove:
                        frame_updates.remove(frame_update)
                else:
                    frame_updates_passed += [frame_updates[0]]
                    frame_updates = frame_updates[1:]
                second_frame_index = 0
            # add the first and last frame_updates not removed to the cut_list
            if len(frame_updates_passed) > 0:
                step = len(frame_updates_passed) - 1
                if step == 0:
                    step = 1
                cut_list += frame_updates_passed[::step]
        return cut_list

@DrSammyD that should probably be a separate issue/feature request.  Ideally I'd like to try and use some kind of online algorithm for estimating the threshold (with a reasonable buffer size), but using a sliding window might be sufficient for that purpose.  That being said, it's a very good idea and should definitely be pursued in the right forum.  Feel free to file a new bug report or create a discussion for that.

Does anyone have any links to videos they can share exhibiting this behavior?  I would like to start compiling a list of test cases to use for validating this, or at least better categorize the classes of issues that need to be solved for this.

I've made progress on this, and there will be a new flash filter that can be enabled/disabled in v0.7.  When a rapid set of cuts is detected (i.e. several consecutive scenes less than the min-scene-len option), subsequent cuts will be suppressed until min-scene-len frames pass without a cut.
This effectively merges consecutive sequences of scenes shorter than min-scene-len, grouping the areas where flashing occurs into a contiguous scene.  On the above video with min scene length as the default (0.6 seconds):

Detector
# Scenes
# Scenes w/ Filter

detect-content
123
74

detect-adaptive
104
(TBD)

Here's an example of how the flash grouping looks in action:
https://github.com/Breakthrough/PySceneDetect/assets/125316/28d4a036-6b57-4a04-a152-4fecd783208e
Without the filter, detect-content emits 10 different clips for this segment, and misses a cut that occurs just after the above video ends. Without the filter, detect-adaptive performs better, emitting only 8 clips for this segment, and doesn't miss the subsequent cut.  This doesn't affect any material without flashes, so I will enable this by default in the next release for both the API and the command line program.  This won't resolve the flashing issue entirely, but will greatly reduce the impact it has on the output when it does occur.

The last things missing to close this out is:

[ ] Integrate flash filter with HashDetector
[ ] Integrate flash filter with HistogramDetector


Refactored top_gen.py

I was struggling to follow along with what top_gen.py was doing, so I refactored it a little as I went.
The commits:

I added types, made the configuration immutable, and simplified the logic a little.
I split the two stages of top_gen.py, configuration parsing and file generation, into their own files.

Note, the templates and generated output remain untouched to show this refactor doesn't change functionality.

Wow, this is a massive rewrite. From an initial read-through it looks better to me than the original. When you run this new top generator, does it generate identical SystemVerilog for the pinmux?

Yep, I put a bit of work into making sure it generates exactly the same output

@marnovandermaas happy for me to merge this?


8344.3 In POST /api/services micro handler, get rabbitMQ creds from systemInt

https://github.com/Shippable/pm/issues/8344
Pass those on boot to the micro containers

complete. closing.


Display cached crates in UI

Add a toggle to show crates from crates.io in the UI, too.

Thanks for the feedback. I didn't plan to generate the docs for the cached crates, but I'll look into that.

I would love to see this feature enabled as well to allow looking at the cached crates.

TODO:

[ ] Add max_version column to cratesio_crate table
[ ] Add documentation column to cratesio_meta table (link to docs.rs)
[ ] Add icon to UI in Crates view, to distinguish between kellnr and crates.io crates (add icon to CrateCard)
[ ] Add switch in UI in Crates view, to enable or disable the display and search of cached crates
[ ] Add conditional search for cached crates to search endpoint in web_ui.rs

Q: How to handle, if the crate card is clicked in the UI?

Forward to the corresponding crates.io page
Show all details of the crate, like it is done for kellnr crates

All missing values need to be added to the DB

For the first iteration, linking to crates.io seems fine.

Have to think about linking to crates.io as stated above, as the list of cached versions of a crate would not be accessibly with this approach. If a click on the CrateCard forwards to crates.io instead of opening the Crate view, which displays the available version, this information is lost to the user.

For the first iteration, I decided to just link to crates.io. Everything else can be delivered if requested in later versions.


Unable to click on button Overlay on map

Hi @wf9a5m75 I have a button on google map but its not become clickable till the time i set map.setClickable(false); in my code but then i am unable to move the map or zoom it manually .But if i set it to map.setClickable(true) after button click then again the button becomes unclickable.
Is there any way to fix this .
Thanks in Advance

You must put your button under the map div

I already tried that but still didnt worked.I am having a pullup footer on map
sample code
` //map div

    </ion-pull-up-content>
</ion-pull-up-footer>

`

Same here, there is nothing to do, if you put some html over the map (even if the html is under the map).
The map continue to scroll, and you cannot access the event linked to your html previously inserted.

Did you guys execute map.refreshLayout()?
Or try the maps plugin v2.

@wf9a5m75 Do you have a solution for this now?
When you have an element (a tag or button) which is position:absolute; and z-index:9999; you can see the button over the map, but it doesn't recieve the "click" event! How can we solve this with the 1.4.0 Version?

The plugin v1.4 checks only the child elements of the map div.
The plugin v2 checks all html elements.

I'm using V2, and am having this issue. I can see the button, but I can't click it.

@shaneparsons how about if your app has sidemenu?

According to the docs this is who the plugin suppose to work, to overcome this: use setClickable()
https://github.com/mapsplugin/cordova-plugin-googlemaps-doc/tree/master/v1.4.0/class/Map#mapsetclickable


Opening a new terminal or splitting an existing one always asks for cwd

Steps to Reproduce:

Open a terminal with workbench.action.terminal.new or workbench.action.terminal.split

What happens:

Visual Studio Code asks for a working directory.

What should have happened instead:

Visual Studio Code just opens the terminal, since I already have:
"terminal.integrated.cwd": "/c/java"
in my settings.json.

This is quite annoying when working with a bigger number of terminals, especially if they're quite transient (you open one, do stuff, close it, open another one, etc.). In case anyone's wondering, this would be the kind of workflow you'd have in screen/tmux (from which I'm transitioning right now).

Version
1.23.1
Commit d0182c3417d225529c6d5ad24b7572815d0de9ac
Date 2018-05-10T17:11:17.614Z
Shell 1.7.12
Renderer 58.0.3029.110
Node 7.9.0
Architecture x64

Keybindings:
{
    "key": "ctrl+shift+t",
    "command": "workbench.action.terminal.new",
    "when": "terminalFocus"
},
{
    "key": "ctrl+shift+-",
    "command": "workbench.action.terminal.split",
    "when": "terminalFocus"
}

Does this issue occur when all extensions are disabled?: Yes

Using these should solve your problem: workbench.action.terminal.newInActiveWorkspace and workbench.action.terminal.splitInActiveWorkspace

Awesome!
Somewhat separate, is there a settings reference anywhere? The settings file doesn't have comments for the terminal.integrated.* settings 😢

Settings should all have comments?

You're right, my bad, I meant the commands 😕

Yes keybindings have no comments at the moment, we've talked about this in the team before 😃


Stuck on "Could not connect to TF2"

I followed the instructions on how to use this program and nothing happens. The program did not detect TF2 running in Windows. Did I mess something up?

Apologies for not getting back to you. If you'd still like to try resolve this issue you could post what you have in your autoexec.cfg file and in your TF2 launch options to double check there is nothing missing.

Apologies for not getting back to you. If you'd still like to try resolve this issue you could post what you have in your autoexec.cfg file and in your TF2 launch options to double check there is nothing missing.

I'm also having the same issue. I do use masterconfig w/ toonhud so maybe that's why? I don't know.
Autoexecute:
ip <IP_ADDRESS>
rcon_password tf2bk
net_start
Launch options:
-condebug -conclearlog -usercon -exec custom.cfg -novid -nojoy -nosteamcontroller -nohltv -particles 1 -precachefontchars -noquicktime -voice_maxgain 8 -voice_overdrive 1

I'm having this same issue

I'm having this same issue

Sadly (for us, not for bash09's sanity), bash09 uses linux. Also, it seems like it's a mix between master config and windows 11
Use pazer instead, https://github.com/PazerOP/tf2_bot_detector

I was having the same issue while running mastercomfig. I was able to resolve it by creating a setup_hook.cfg file and putting the autoexec settings in there instead. Mastercomfig sort of hijacks the autoexec behavior and runs its own. See: advanced config

I was having the same issue while running mastercomfig. I was able to resolve it by creating a setup_hook.cfg file and putting the autoexec settings in there instead. Mastercomfig sort of hijacks the autoexec behavior and runs its own. See: advanced config

Oh, thanks!


Add ability to upgrade to latest version in rustic-outdated-mode

Implements two features:

Ability to mark a specific crate to upgrade it to the latest available version
Ability to mark all creates to upgrade to the latest available version

The README has also been updated with the relevant documentation.

Thanks!


chore(RHINENG-5940 && RHINENG-2215) Upgrade React 18 and PF 5

This PR upgrades Tasks to React version 18 and PatternFly version 5. Most components have been updated, but we're still using the deprecated Table component. I'm creating a card to update to the new Table.
I made some updates to components that will slightly change the spacing of certain components because the updated PF5 classes caused some strange spacing. These changes should be minor.

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

Comparison is base (c776fd4) 82.89% compared to head (5442119) 82.41%.
 Consider uploading reports for the commit bacb26a to get more accurate results

Files
Patch %
Lines

...rc/SmartComponents/RunTaskModal/InputParameters.js
27.27%
7 Missing and 1 partial :warning:

src/SmartComponents/RunTaskModal/SystemsSelect.js
62.50%
3 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #137      +/-   ##
==========================================
- Coverage   82.89%   82.41%   -0.48%
==========================================
  Files          67       67
  Lines        1415     1422       +7
  Branches      462      453       -9
==========================================
- Hits         1173     1172       -1
- Misses        211      218       +7
- Partials       31       32       +1

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

@bastilian this is ready for re-review.


[chore] Refactor commands to be simpler/more focused

Background
When working through the code for the discord bot, I noticed that there was lots of repeats of this code structure:
https://github.com/freeCodeCamp/discord-bot/blob/e0aa80506a5c9276d31d2162274a0b60a13a504b/src/commands/ban.ts#L33-L49
The purpose of this code is to identify whether the request is made inside a Guild and whether the person making the request has appropriate permissions to affect the command (in the latter case, it also requires them to be in a guild, as permissions are handled at the guild level).
I find this to be somewhat "risky" code because it's (1) a bit hard to parse if you're not used to it and (2) if it's not copy/pasted correctly then there's some small risk that it won't behave as expected (e.g. if you forget the ! at the start of !member.permissions.has(...), then it will not gate properly).
Also, this boilerplate takes up a pretty significant part of the run handler for smaller commands. For example, in unban, the guild/permissions boilerplate is 28 lines of the 72 line function (over 1/3 of the entire function body). By removing this boilerplate code from command callbacks, it allows us those callbacks to focus more on their unique behaviors.
Finally, if test coverage is improved at some point for this project, testing commands would be easier if each command's test suite didn't need to also test the guild/authZ code (which in some cases would require additional mocking).
Proposal
I propose that we isolate the guild and authZ logic into metadata for each command, enforced via TypeScript's typing system.
Command would be extended/mimicked by interfaces for GuildCommand and PrivilegedCommand. PrivilegedCommand would extend GuildCommand (as all privileged commands --- i.e. commands requiring permissions --- would necessarily have to be executed within the context of a guild).
In order to provide runtime-accessible typing information, GuildCommands would have a property guildOnly, which must be true if present. Similarly, PrivilegedCommands would have a requiredPermissions array that will accept bigint values representing permissions. Examples:
export const rank: GuildCommand = {
  guildOnly: true,
  data: ...
  run: async (Bot, interaction) => { ... },
};

or
export const ban: PrivilegedCommand = {
  guildOnly: true, // required because privileged commands can only be run in a guild.
  requiredPermissions: [PermissionFlagsBits.BanMembers],
  data: ...
  run: async (Bot, interaction) => { ... },
};

To provide enforcement of the constraints of the special command types, each special command must have its run handler be "wrapped" before they are registered in order to provide the enforcement. So as to discourage/prevent future contributors from accidentally registering "unwrapped" commands, a WrappedCommand interface that is orthogonal to (i.e. does not match) the other command types. We can then make the command register require only WrappedCommand objects.
A wrapper might look like this:
const wrapGuildCommand = (command: GuildCommand): WrappedCommand => {
  return {
    ...command,
    wrapped: true,
    async run(Bot, interaction) {
      if (!interaction.inCachedGuild()) {
        await interaction.reply("This command can only be used in a guild.");
        return;
      }

      return command.run(Bot, interaction);
    },
  };
};

One more advantage to wrapping is that it makes the special command types more predictable. For example, today, commands oftentimes have to account for the possibility that interaction.member, interaction.guildId, or interaction.guild may be undefined (example).
The run callbacks for PrivilegedCommand and GuildCommand could actually be set to ChatInputCommandInteraction<"cached"> because we know based on the success of the wrapper code that we're in a cached guild. This will allow safe and unchecked usage of interaction.member, etc.
I think this offers an overall improvement to code readability and testability.
I have (even though it's a bit out of order) put together a PR with code that does all this for early review. This Issue provides the needed context and formal proposal for that PR.
Future Work
I can see this going further in the future.
For example, commands that require a target (e.g. ban or kick) could have that logic pulled out in a similar way. There might also be opportunities to improve handling of options for commands, though given the configurability of those, it might be a larger effort.
Additionally, I think this provides opportunities for improved testing (as noted above). This feels especially useful with regard to tools like PrivilegedCommand because we can be sure that if a command matches the right interface then it will have enforce permissions correctly (within the realm of reason --- e.g. it can't know if you just don't say it needs a permission).
Open to getting feedback on the proposal here or in the associated PR.

Fixed by #261


adding entry for Hugh Beaver

British engineer, found of Guinness Book of World Records

Please sign your commits following these rules:
https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work
The easiest way to do this is to amend the last commit:
$ git clone -b "patch-1" git@github.com:klinden/docker.git somewhere
$ cd somewhere
$ git commit --amend -s --no-edit
$ git push -f

Ammending updates the existing PR. You DO NOT need to open a new one.

could you also add a woman to the list? See https://github.com/klinden/docker/blob/3236ce210f8ab3a8d33b2d210a89d4bc491ead19/pkg/namesgenerator/names-generator.go#L81

Thanks! Almost there; can you squash your commits?

@thaJeztah Sure thing :)

LGTM, thanks!

LGTM
On 1 Aug 2016 22:26, "Sebastiaan van Stijn"<EMAIL_ADDRESS>wrote:

LGTM, thanks!
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/docker/docker/pull/25294#issuecomment-236696757, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAdcPJeuClRp240mU2pTffV8CrqxCOqqks5qblZagaJpZM4JZsSG
.

win2lin failure is unrelated; merging


Adds the trademark symbol to the ArcGis string

Adds :tm: symbol to the ArcGis string and updates the icon.

Frontend tests were OK :+1: (details)

Frontend tests were OK :+1: (details)

@viddo, @josecruz: can you review code and design, please?

:+1:

Frontend tests were OK :+1: (details)

S of Server needs to be on caps here:

Frontend tests were OK :+1: (details)

Well spotted, @josecruz, but it seems I took the capture before I put the 's' in uppercase, so it's fixed in the code.

Oh sry! Looks perfect to me then :+1:


Add typedoc comments to describe methods / classes

Should match how most other Aurelia libraries work to allow generating documentation.

done


Passing a Rust function as argument

I'm using pyo3 to make a Python package wrapping a high performance numerical simulation library I'm writing. One of my library functions is a higher order function that acts takes an argument of type F satisfying the trait bound F: Fn(f64) -> f64. How do I go around wrapping it ? I'm trying to do something like
#[pyfn(m, "variable_poisson")]
fn higher_order_py<F>(
    _py: Python, tmax: f64, lambda: F,
    max_lambda: f64) -> Vec<EventStruct>
where F: Fn(f64) -> f64
{
    // do something using higher_order(tmax, lambda, max_lambda)
}

but then I get the following compile error :
error[E0283]: type annotations required: cannot resolve `_: pyo3::FromPyObject<'_>`
  --> src/lib.rs:28:1
   |
28 | #[pymodinit]
   | ^^^^^^^^^^^^
   |
   = note: required by `pyo3::ObjectProtocol::extract`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0283`.
error: Could not compile `pointprocessespy`.

To learn more, run the command again with --verbose.
error: cargo failed with code: 101

The short answer is that the conversion isn't implemented and that you need to use workarounds. Since this is a common question, I've decided to write a bit about this for the guide and attached it below.

Currently, there are no conversions between Fns in rust and callables in python. This would definitely be possible and very useful, so contributions are welcome. In the meantime, you can do the following:
Calling a python function in rust
You can use ObjectProtocol::is_callable to check if you got a callable, which is true for functions (including lambdas), methods and objects with a __call__ method. You can call the object with ObjectProtocol::call with the args as first parameter and the kwargs (or NoArgs) as second paramter. There are also ObjectProtocol::call0 with no args and ObjectProtocol::call1 with only the args.
Calling rust Fns in python
If you have a static function, you can expose it with #[pyfunction] and use wrap_function! to get the corresponding PyObject. For dynamic functions, e.g. lambda and functions that were passed as arguments, you must put them in some kind of owned container, e.g. a box. (Long-Term a special container similar to wasm-bindgen's Closure should take care of that). You can than use a #[pyclass] struct with that container as field as a way to pass the function over the ffi-barrier. You can even make that class callable with __call__ so it looks like a function in python code.

Thank you for your answer, I'm working on converting a Python function passed as a lambda: F with trait bound F: ObjectProtocol to a
Fn(f64) -> f64

using the following closure:
let f = |x: f64| {
    let args = (x,);
    let resobj = lambda.call1(args).unwrap().to_object(py);
    let result: f64 = resobj.extract(py).unwrap();
    result
};

One problem remains though, my higher_order needs to be shared between threads (my code is multithreaded using rayon), and the code will not compile because we get an Rc from the lambda.

The core problem is that you can't make multithreaded calls into the python interpreter due to the GIL. The PyObject lambda is internally holding a marker stating that the current thread holds the GIL. This marker allows operations such as call1 without passing py each time. Since the marker must not be move to another thread, it "anchors" itself using a Rc<()>. You'll either have to find a pattern where the PyObject stays on the main thread (e.g. something with channels) or use some raw pointer and unsafe to lock and unlock the GIL on each threaded whenever you need it.
It's a pity that we have to deal with the GIL, but I hope this helps to work around it.

I see, the function's internals are not converted to Rust internals so Rust needs to call back to the Python function object, which cannot be shared because of the GIL. I'll try something with channels then, maybe write up the boilplate function converter (for single thread) and make a PR


vim acts crazy in recent builds

Environment
Windows build number: Win32NT             10.0.18362.0 Microsoft Windows NT 10.0.18362.0
Windows Terminal version commit: 200e90d1c64cb8ad3f48b808ac695bac5bb6e696

Any other software?

Visual Studio Community 2019 16.3.3

Steps to reproduce
vim Terminal\src\cascadia\TerminalApp\TerminalPage.cpp
yank and paste second line.

Expected behavior
pasted line appears text, below scrolls down

Actual behavior
pasted line appears text scrolls up.
At this point there is no consistency between cursor and location in the file.
Hitting "u" to undo even when at the "Already at the oldest change" point removes the text under the cursor and scrolls everything up. leading  to multiple copies of the vim status line
Confirms this is a problem even when ssh [-ing] to a remote machine and using vim there not the local windows instance as well.

Last known working commit:   2c8b3243dca0c48dd05ecd7b420a7a03b3e19c93  Wed Sep 25 22:00:06 2019 -0700

Screenshot is after simply hitting "u" 6 times.

This might be related to #3052, actually. If you revert the change from 5d906d9f3e78a467c1914a1b8b6fde92e7d86090, does it resolve?

Thanks, yes reverting 5d906d9 fixes this issue for me.


[FEATURE REQ] Add CidrBlock logic to Azure SDK

Library or service name.
What library or service is this request related to? Azure Networking as well as any other service that uses CIDR notation for ACLs.
Is your feature request related to a problem? Please describe.
What feature would you like to get added? What problem is it solving?
I have an object that I use to provision Address space across multiple resources by doing CIDR logic on top of System.Net.IPAddress class and the use of a couple new structs (IP4Numeric and IP6Numeric) to be able to do the arithmetic on the data.  Code is "complete" for my use cases, unit tests are in place for "happy-path" and some failure conditions.
dotnet rejected the feature, but I'm sure this logic will be very useful for Azure implementations.
dotnet Issue:
https://github.com/dotnet/runtime/issues/36428
note... i've added these two methods to CidrBlockExtensions since that issue was created:
public static CidrBlock NextBlock(this CidrBlock cidrBlock;
public static IEnumerable Subnet(this CidrBlock cidrBlock, int howMany)
an example use of this for the use case where I have a "cloud data center" and I want to cut it up into subnets per resource group... then i can cut that up into VNets and Subnets.
Resource Group -> VNet subnetting (sorry for the overloading of term, but the VNet is a subnet of the overall data center supernet):
            var rgAddressSpace = new Dictionary<string, CidrBlock>(StringComparer.OrdinalIgnoreCase);
            List<string> resourceGroupNames = GetResourceGroupNames();
            var subnets = (supernetAddressSpace?.Subnet(resourceGroupNames.Count) ?? Enumerable.Empty<CidrBlock>()).ToList();
            for(int i = 0; i < resourceGroupNames.Count; i++)
            {
                var rgName = resourceGroupNames[i];
                var subnet = subnets[i];
                rgAddressSpace.Add(rgName, subnet);
            }

Subnetting the VNET into the ISubnet address space(s).
            var subnetAddressSpaces = vnetAddressSpace.Subnet(subnetCount).ToList();
            var vnetName = GetResourceNameByGroupNameAndSuffix(resourceGroup.Name, VnetResourceSuffix);
            var subnets = Enumerable.Range(1, subnetCount) // ordinal based... make sure to subtract by one in the value selector in .ToDictionary
                .Select(i => Tuple.Create(i, GetResourceNameByGroupNameAndSuffix(resourceGroup.Name, SubnetSuffix, i)))
                .ToDictionary(t => t.Item2,
                             (t =>
                             {
                                 var name = t.Item2;
                                 var i = t.Item1 - 1;
                                 var subnetSpace = subnetAddressSpaces.ElementAt<CidrBlock>(i);
                                 _logger.LogDebug($"Will provision {name} with address space {subnetSpace}");
                                 return subnetSpace.ToString();
                             }));

Thank you for your feedback.  Tagging and routing to the team member best able to assist.

This sounds like useful helper methods for CIDR scenarios. Assigning to Azure Network team for feedback.

This is interesting - bringing to PM team for discussion

was awaiting feedback from PM Team if this was interesting or not... I can execute a PR, but I'm going to limit it to just adding the classes to your library unless the PM team decides they would like this change.


Bug fix: Modify v3.yaml file

(cherry picked from commit edce963)

Coverage decreased (-0.04%) to 70.476% when pulling 08126838ef1709af595f72be715f0118f7dc0d47 on little-cui:master into bcc17b0312c38b948907bc3fb7de77be70e5978e on ServiceComb:master.


pooler:time_as_{millis, micro}/2 tests break with rebar3 on R15B03-1

from #66:

Travis is failing test cases on R15B03-1, which seems to be related to rebar3 mess (I'm guessing it's not loading paths correctly since it cannot find pooler:time_as_{millis, micro}/2). I'm a strong advocate of using build tools which are agnostic to what OTP version your system is running. A build tool shouldn't change behaviour depending on what target you're aiming for.

What is the benefit of running rebar3 for a dependency project such as Pooler? This project has only edown as a dependency and Pooler isn't doing any advanced project management that requires Rebar3. So why not go with a build tool that's small, doesn't rely on specific OTP versions to work correctly and which also can be used in as many projects as possible?
For example erlang.mk, as far as I know rebar3 will invoke make for projects that aren't rebar3. Even if it doesn't,  we can generate a rebar.config[1] and keep it in the project. This should work fine with erlang.mk based projects and rebar and as well with any other build tool which invokes make.
I'm currently tinkering with this but would like to hear what peoples' opinions are about it.
[1] https://erlang.mk/guide/compat.html 11.2

rebar3 will not invoke make for projects at all -- unless specifically configured to do so in the rebar.config with a hook.
And note that erlang.mk has a lot of Erlang code in it and its plugins. So saying it is agnostic to the OTP version is wrong. It likely does less (I don't think it uses https for fetching deps for example) so may work with more OTP versions, but that is different from saying it is agnostic.
The prebuilt rebar3 escript is built using OTP 16 and we don't officially 'support' anything older than that.
Benefits for using rebar3 are the same whether a project is a "dependency project" or anything else. No matter the type of project you are going to be running tests and dialyzer and creating docs, possibly making use of profiles for those and if you have any dependencies then the dependency tracking (switch branches to a branch with a diff version dep and it'll fetch it/rebuild) and upgrading is useful.

I'm closing it as outdated. Please reopen if you disagree.


Openshift fix

After this small fix connaisseur runs as a normal helm deployment inside OKD / OpenShift 4 (tested with OKd 4.7).
Only set the value: openshift: true in your value.yaml file.
Reason
Openshift and OKD are using secure container by default (randomized user and group execution). So we have to disable the fixed user and group setting. This let OpenShift decide ;-)

Thanks for contributing @pflaeging ! You are pointing out an important compatibility issue with the secure defaults.
I think your last sentence almost nails it: we should just let the user decide ;-)
I'd propose to simply expose the whole security context and annotation (comment the annotation and make a note for k8s <v1.18) via helm/values.yaml under deployment. before resources. Would that work for you?

Jepp, that would be OK for me.

Also:

changed the base branch to develop (merged to master for releases)
we should rename the commit for semantic commits, maybe feat: expose security context and annotations in values.yaml
have you tested on Openshift / OKD? We should add a note in the docs then.

The patched version is running in an OpenShift 4.6 cluster and in an OKD 4.7 cluster without problems (I'm only checking specific namespaces!).

Let me know if I should support!

Thx ;-)
:peter


Driver crashes reporting an error code -11

Sporadically it happens that when operating, so we're receiving point clouds, that we suddenly don't receive any point clouds anymore.
The linux kernel reports an error code of -11.
I would copy the printout here, but for some reason I cannot copy paste it here, nor upload an image of it...
This would indicate a segmentation fault, memory access violation.
Is this a known issue?
We are using driver version v3.3.0

Thank you for your feedback. This is not a known issue. What lidar are you using? Are you using ROS-1, ROS-2 or the sick_scan_xd API?
The error may be related to issue #385 (debug assertion). Please update with branch feature/issue_update_2407xx and try again.
If the problem persists, please build with debug information (cmake flag -DO=0), run sick_scan_xd in gdb (using launch-prefix="gdb -ex run --args" in the ROS launch file or gdb --args ./build/sick_scan_xd_api_test <launchfile> for the API) and send a backtrace (command bt in gdb) for further analysis.

Hi,
We're using the Multiscan 136, ROS2 humble and the corresponding ROS driver.
We'll try updating the driver to see if that fixes the issue, but we're currently in the field and returning back tomorrow, so we might nog report back immediately...

@Navsea Thanks for following up. I am closing this thread for now, but please feel free to reopen it if you have any new information or further issues.


DirectQuery in PBI Service

It says that 2 sources are available directly in the service: Spark and Azure SQL DWH. Is this information really accurate?  Isn't that possibility deprecated? Thank you

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

ID: 1ed1625f-12a2-5962-2959-696188711efe
Version Independent ID: d8796367-6bd1-c63c-db86-59eb5a66c213
Content: Using DirectQuery in Power BI - Power BI
Content Source: powerbi-docs/desktop-directquery-about.md
Service: powerbi
Sub-service: powerbi-desktop
GitHub Login: @davidiseminger
Microsoft Alias: davidi

@AnaSeremet Thank you for the comment. This issue has been passed on to the original author.


Bug in tB v417?

Not sure this is an error in ArrayList or something else, but as of v417, I cannot compile my project:
compilation (codegen) error detected in 'Enumerator.Class_Terminate' at line #142

Problem persists in v418 & v419... but I can compile in v416.

I think I found the problem and reported the issue. Looks like you just have to turn off experimental Project Property "Constant Function Folding" set to "No" and recompile it...

Fixed in v420!

Hi @GCuser99

Fixed in v420!

Many thanks for involving and getting it fixed by yourself!! That's very helpful =)


Arduino example doesn't compile with 1.8.2

Due to ISComm refactor, the arduino example does not compile

In fact, this seems to be the case for all the examples

Kiran.  I just cloned and compiled the InertialSenseSDK repo and all of the
example projects built just fine for me.  Can you post what errors you are
seeing?

@kiranshila It looks like we intended to removed GpsParser.cpp from SDK repo, but didn't.  Do you know where that file gets used?   Deleting it seems to be fine as it is not a dependency for any other file in the SDK.

I removed the GpsParser.cpp and GpsParser.h from the SDK.  Let me know if I missed something here, but it shouldn't be needed.

@waltjohnson How are you building the Arduino project?
src/IS_Example/main.cpp: In function 'void setup()':
src/IS_Example/main.cpp:46:8: error: 'struct is_comm_instance_t' has no member named 'buffer'; did you mean 'buf'?
Compiling .pio/build/is_example/FrameworkArduino/IPAddress.cpp.o
   comm.buffer = s_buffer;
        ^~~~~~
        buf
src/IS_Example/main.cpp:47:8: error: 'struct is_comm_instance_t' has no member named 'bufferSize'
   comm.bufferSize = sizeof(s_buffer);
        ^~~~~~~~~~
src/IS_Example/main.cpp:50:21: error: too few arguments to function 'void is_comm_init(is_comm_instance_t*, uint8_t*, int)'
   is_comm_init(&comm);
                     ^
In file included from src/IS_Example/main.cpp:3:0:
lib/INS_Arduino_SDK/ISsdk/ISComm.h:531:6: note: declared here
 void is_comm_init(is_comm_instance_t* instance, uint8_t *buffer, int bufferSize);
      ^~~~~~~~~~~~
src/IS_Example/main.cpp:55:12: error: 'struct is_comm_instance_t' has no member named 'buffer'; did you mean 'buf'?
       comm.buffer,
            ^~~~~~
            buf
src/IS_Example/main.cpp:62:12: error: 'struct is_comm_instance_t' has no member named 'buffer'; did you mean 'buf'?
       comm.buffer,
            ^~~~~~
            buf
src/IS_Example/main.cpp: In function 'void loop()':
src/IS_Example/main.cpp:76:56: error: too many arguments to function 'protocol_type_t is_comm_parse(is_comm_instance_t*)'
     uint32_t message_type = is_comm_parse(&comm, inByte);
                                                        ^
In file included from src/IS_Example/main.cpp:3:0:
lib/INS_Arduino_SDK/ISsdk/ISComm.h:605:17: note: declared here
 protocol_type_t is_comm_parse(is_comm_instance_t* instance);
                 ^~~~~~~~~~~~~
src/IS_Example/main.cpp:81:41: error: 'struct is_comm_instance_t' has no member named 'buffer'; did you mean 'buf'?
       handleINSMessage((ins_1_t *)(comm.buffer));

As I mentioned, this seems to be inconsistent with your refactor of ISComm.

Thanks, Kiran.  We will fix this issue.

Thanks, Kiran. We will fix this issue.

I'm almost done with the PR, testing on hardware right now

Thanks, Kiran.  We'll look for your PR.

Yeah I'm still not getting any data back from the unit.
I'm setting the message broadcasts with
  messageSize = is_comm_get_data(&comm, DID_INS_1, 0, sizeof(ins_1_t), 50);
  INS_SERIAL.write(
      comm.buf.start,
      messageSize); // Transmit the message to the inertialsense device

But I am not receiving a single byte back from the unit

Any movement on this?

Bump.
We'd very much like to update our uINS modules to the latest firmware because of several other problems - mainly the AR ratio not being shown properly on new boot-ups in FW1.8.0 - looks like you fixed that in the latest firmware.
We can't update though until this issue with the Arduino code / libs is working :( We tried to update a week or two ago and nothing worked during a field test of our gear because we didn't realize the embedded code needed to be completely different.

Hi @kiranshila, and @coyt,
I spent some time today fixing the the Arduino example code, but I've not had a chance to test it yet. Once the testing is completed I'll let you know!

Awesome! Thanks for the support.
If you think it's ready for testing, we're happy to update one of our units and test out the fixes first thing Monday.

Can you send me an email at<EMAIL_ADDRESS>and we can talk about
details?
[image: Inertial Sense] http://www.inertialsense.com/
Andrew Priddis
Sr Systems Engineer
<EMAIL_ADDRESS>inertialsense.com http://www.inertialsense.com/
On Fri, Jul 17, 2020 at 7:00 PM Coyt Barringer<EMAIL_ADDRESS>wrote:

Awesome! Thanks for the support.
If you think it's ready for testing, we're happy to update one of our
units and test out the fixes first thing Monday.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/inertialsense/InertialSenseSDK/issues/30#issuecomment-660397387,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AKPNQ7DY7SKLVKUSGUSPRATR4DXZFANCNFSM4OWYYJIA
.


Error when integrating SE3 with the same vector given as input and output

I don't think it would impede performance much since quaternions are fixed-size but you probably know better than me.

You can clearly see that without copying the original quaternion in a temporary the chack that is done later after update the quaternion to determine if the sign has been reversed (const Scalar dot_product = res_quat.dot(quat);) becomes useless as it always returns exactly 1.0 because res_quat and quat are precisely pointing to the same memory space :)

Could you add such an example then in https://github.com/stack-of-tasks/pinocchio/blob/devel/unittest/joint-configurations.cpp? It will allow to not reproduce such bugs in the future.

Thanks in advance @duburcqa for your help.

The test here is already checking this. Just that random sampling is not a sufficient without many retry. I suggest modifying the test to check many random configuration to be generic. What do you think ?

This is fine for me to add the randomization of the test to be sure to output a failure case.
Thanks a lot @duburcqa.

I will have a look at it on sunday I think. I'm quite busy by then.

@duburcqa Do you have any idea when do you plan to finish this PR?

I will do it tomorrow. Sorry I have been quite busy lately.

No problem, thanks a lot for the short notice.

I updated the unit tests. It fails as expected without the proposed patch. I had to increase the tolerance because it was now failing otherwise due to running evaluating the tests 50 times with different samples now.

I'm also concerned about the updated tolerance thresholds. I could eventually find some time to investigate this issue.

I've shortly investigated the issue of this PR, and it is, in fact, solved by a more advanced formula present in Pinocchio 3x.


Update b.js

Please check if the PR fulfills these requirements

[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

[ ] Bugfix
[ ] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Other... Please describe:

What is the current behavior? (You can also link to an open issue here)
What is the new behavior?
Does this PR introduce a breaking change?

[ ] Yes
[ ] No

If this PR contains a breaking change, please describe the following...

Impact:
Migration path for existing applications:
Github Issue(s) this is regarding:

Other information:
#216

This PR was closed for the following:

No description filled out in PR template
No change information
Incorrect or lacking reference to github issue

We ❤ would love ❤ to have your contributions, and we appreciate the time you have taken to submit a PR, however require the aforementioned information before we being reviewing it. You can open a separate PR and reference this one once you have made those changes.
Thank you!!!


Pagination: scroll to top with results page change

Set up listener on query params to trigger scroll to top.

@drewda This solution appears to work for the offset and the add-a-feed flow. Would you please review the pr https://github.com/transitland/feed-registry/pull/270?

@meghanhade looks good!

@drewda ok, thanks for checking!


Some functions are getting nil params at compile

I found two functions where are 1st nil parameters gets added into lua file, which aren't defined.
Will increase the list if i find new ones.

print
SendToServer

I just updated the declarations with the latest version I had locally, these should work better for you. You can get them from https://github.com/TypeScriptToLua/Dota2Declarations.
Next time you have issues with the dota declarations, please make an issue there instead of on this repo, this is just for tstl ;)

Ah k, wasnt aware about that.

For those following along at home, you'll want @noSelfInFile


enable glusterd service

So we don't have to start glusterd service manually after restarting nodes. It is not done yet. https://gluster.readthedocs.io/en/latest/Administrator Guide/Start Stop Daemon/


⚠ PrivateHD has degraded performance

In bbad386, PrivateHD ($PHD) experienced degraded performance:

HTTP code: 200
Response time: 2475 ms

Resolved: PrivateHD performance has improved in 14beb9f.


Use specified execution space in view allocations

Partial fix for #641

In the end, specifying an execution space with Kokkos::WithoutInitializing shouldn't really matter but that's more like a Kokkos implementation detail and it shouldn't hurt to specify it nonetheless.

Not true, may be used for an async allocation

It is so verbose right now to create a view without initializing. Can we please introduce a macro to shorten that?

It is so verbose right now to create a view without initializing. Can we please introduce a macro to shorten that?

A macro? no.  A free function? sure.

How about this:
-  Kokkos::View<ArborX::Point *, MemorySpace> particles(
-      Kokkos::view_alloc(execution_space, Kokkos::WithoutInitializing,
-                         "Example::points"), n);
+ Kokkos::View<ArborX::Point *, MemorySpace> particles(
+      KokkosExt::NoInit(execution_space, "Example::Points), n);

Less sure about the init version, it won't be any shorter. But could use KokkosExt::Init for consistency.
-  Kokkos::View<ArborX::Point *, MemorySpace> particles(
-      Kokkos::view_alloc(execution_space, "Example::points"), n);
+ Kokkos::View<ArborX::Point *, MemorySpace> particles(
+      KokkosExt::Init(execution_space, "Example::Points), n);

I do not want to decide this in this PR

Defining a free function sounds very close to going back to Kokkos::ViewAllocateWithoutInitializing which we wanted to deprecate in Kokkos but then didn't really. Hence, I'm not quite sure if that's a good direction.

I do not want to decide this in this PR

We don't have to merge with it. But I'd like to figure out if you are completely opposed to the idea, or see some value in it. If something like that is submitted as a PR, what are your arguments going to be?

I don't think your current suggestions improves readability.  I am not convinced it is a problem we need to solve.


Interleaved 1F1B

Add interleaved 1F1B.
To do that:

We modularize code into forward_one_chunk and backward_one_chunk

Implemented. Closing.


Keep repo in sync; typo in html

Try to keep the repo in sync with what you're running. There's a typo in your html/js. The HTML is hooking onClick to testKey, but the function is named testkey in the js.

Issue was fixed


Stopped working due to change in format with local key

I tried using the plugin but it says that my local key is not valid even though it is.
I tried with this plugin and it works, but it doesn't have the best support for Tadiran AC's. Can you please update the plugin to work again?
Might help to look here

i found how to fix the problem over the net and also send to nati the fixing
for fixing all need to do to go to hombridge teminal and get inside the folder with this command:
cd /var/lib/homebridge/node_modules/homebridge-tadiran-ac
and edit file index.js with the command:
nano index.js
and scroll down to the line:
if (!/^[0-9a-f]+$/i.test(device.key)) return this.log.error('%s, key for %s (%s), is not a valid key.', device.key.replace(/.{4}$/, '****'), d>
and just put in the beginning 2 "//" it will need to look like this:
//if (!/^[0-9a-f]+$/i.test(device.key)) return this.log.error('%s, key for %s (%s), is not a valid key.', device.key.replace(/.{4}$/, '****'), d>
save the file.
ctrl x' 'Enter Y
and now restart homebridge
works great


Use curl instead of wget

Fixes issue with installer failing to build with the following:
wget: error getting response: Connection reset by peer
The command '/bin/sh -c wget
https://github.com/andyshinn/alpine-pkg-glibc/releases/download/2.22-r5/glibc-2.22-r5.apk
&& apk --allow-untrusted add glibc-2.22-r5.apk && rm glibc-2.22-r5.apk
&& rm -rf /var/cache/apk/*' returned a non-zero code: 1

This is due to busybox wget in Alpine not supporting https. Use the installed curl instead.

:ship:


Upgrade to latest Cake Release

Currently 1.2.0

:tada: This issue has been resolved in version 3.7.0 :tada:
The release is available on:

GitHub Release
NuGet Package
Chocolatey Package