Histogram with multiple columns - complete version.

Sorry - I can't manage to separate the modification of the script.

I think the title of the histogram window should not contain the column names. This is redundant (see the column header) and therefore the title should simply be 'Histogram'.

@walter-weinmann Thanks for this. We are busy tomorrow with an installation but can probably integrate this after tomorrow.
Maybe we would like to have one column per grouping attribute in the future. Also the sorting on the GUI side was not too comfortable back in the old days. Will check in your version and give feedback soon.

@walter-weinmann Its ok with the script quote removal though its not related it can still part of this PR as its too trivial
Can you please paste some screen-shots here to give an idea of how its looks in with your PR?

I agree with the sorting which is very unfortunate for numeric values. I'm
not sure about the usage of the histogram - but I think a descending
default sort with count would be appropriate.
Having one column per grouping attribute is much more effort implementation
wise and I'm not quite sure about the advantage for the user.
On 26 January 2016 at 20:52, Stefan Ochsenbein<EMAIL_ADDRESS>wrote:

@walter-weinmann https://github.com/walter-weinmann Thanks for this. We
are busy tomorrow with an installation but can probably integrate this
after tomorrow.
Maybe we would like to have one column per grouping attribute in the
future. Also the sorting on the GUI side was not too comfortable back in
the old days. Will check in your version and give feedback soon.
—
Reply to this email directly or view it on GitHub
https://github.com/K2InformaticsGmbH/dderl/pull/154#issuecomment-175198442
.

--

Walter Weinmann

Obertorplatz 4
CH-4130 Rheinfelden
Tel +41 (0)61 841 06 10

Schulstrasse 1
CH-6037 Root
Tel +41 (0)41 530 39 70

[image: Inline images 1]
[image: Inline images 2]
On 26 January 2016 at 20:58, Bikram Chatterjee<EMAIL_ADDRESS>wrote:

@walter-weinmann https://github.com/walter-weinmann Its ok with the
script quote removal though its not related it can still part of this PR as
its too trivial
Can you please paste some screen-shots here to give an idea of how its
looks in with your PR?
—
Reply to this email directly or view it on GitHub
https://github.com/K2InformaticsGmbH/dderl/pull/154#issuecomment-175201074
.

--

Walter Weinmann

Obertorplatz 4
CH-4130 Rheinfelden
Tel +41 (0)61 841 06 10

Schulstrasse 1
CH-6037 Root
Tel +41 (0)41 530 39 70

Git couldn't handle image through mail...

Should be ok now.
On 26 January 2016 at 21:28, Bikram Chatterjee<EMAIL_ADDRESS>wrote:

Git couldn't handle image through mail...
[image: image]
https://cloud.githubusercontent.com/assets/913008/12593900/aa37af4a-c473-11e5-94f5-e7ac7b4209a3.png
—
Reply to this email directly or view it on GitHub
https://github.com/K2InformaticsGmbH/dderl/pull/154#issuecomment-175210792
.

--

Walter Weinmann

Obertorplatz 4
CH-4130 Rheinfelden
Tel +41 (0)61 841 06 10

Schulstrasse 1
CH-6037 Root
Tel +41 (0)41 530 39 70

Somehow images are still not rendering in my browser. I, however, could follow the links and see them. Re-posting for anyone else having the same problem.
Thanks @walter-weinmann

and

cc @stoch if you have any comments on look-n-feel

I think the _showHistogram function should be simplified. Instead of
    _showHistogram: function(data) {
        var self = this;
        var columnId = data.columnId;
        console.log('show histogram ' + JSON.stringify(data));

        var title = '';
        var _separator = '';
        for(var c = 0; c < columnId.length; ++c) {
           for(var colId in self._origcolumns) {
                if(self._origcolumns[colId] === columnId[c]) {
                    var columns = self._grid.getColumns();
                    for(var i = 0; i < columns.length; ++i) {
                        if(columns[i].field === colId) {
                            title += _separator + columns[i].name;
                            _separator = ' | ';
                            console.log(columns[i].name);
                            break;
                        }
                    }
                    break;
                }
            }
        }
        $('<div>').appendTo(document.body)
            .statsTable({
                title          : title + " histogram",
                initialQuery   : self._cmd,
                columnIds      : columnId,
                dderlStatement : self._stmt,
                parent         : self._dlg
            })
            .statsTable('load', 'histogram');
    },

we should have:
    _showHistogram: function(data) {
        var self = this;
        var columnId = data.columnId;
        console.log('show histogram ' + JSON.stringify(data));

        $('<div>').appendTo(document.body)
            .statsTable({
                title          : 'Histogram',
                initialQuery   : self._cmd,
                columnIds      : columnId,
                dderlStatement : self._stmt,
                parent         : self._dlg
            })
            .statsTable('load', 'histogram');
    },

Now the result looks as follows:

We could also choose a different separator character for the histogram columns.
And finally the default sorting could be first count descending and second the combined histogram columns ascending.

Here are two examples with the suggested default sort:

and

The code changes in module dderl_fsm function handle_sync_event:
    ?Debug("Histo Rows ~p", [Result]),
    HistoRows = [[nop, Value, integer_to_binary(Count), 100 * Count / Total] || {Value, Count} <- Result],
    SortFun = fun(X,Y) ->
        X2 = lists:nth(2,X),
        Y2 = lists:nth(2,Y),
        X3 = lists:nth(3,X),
        Y3 = lists:nth(3,Y),
        if
            X3 > Y3 -> true;
            X3 < Y3 -> false;
            X2 > Y2 -> false;
            true -> true
        end
    end,
    HistoRowsSort = lists:sort(SortFun,HistoRows),
    HistoRowsWithId = [[Idx | lists:nth(Idx, HistoRowsSort)] || Idx <- lists:seq(1, length(HistoRowsSort))],


[WIP] Initialize Authentication record with correct class from create_from_params

When creating authentication records for a provider via #create_from_params or #edit_with_params we have to initialize the authentication record with the proper class so that the @auth_changed handling is invoked.
If we set the :type => "AuthToken" at the same time as setting the auth_key= then we're not setting the subclass until after the record is saved, and thus we are not queueing the initial authentication_check_types_queue
Fixes https://github.com/ManageIQ/manageiq/issues/20622

WIP pending specs

This is a fix primarily for provider creation with DDF forms, I'm going to mark this jansa/no since no providers are created with DDF there and I don't want to impact stability of the jansa branch needlessly.
If some other issue comes up that requires the Authentication STI fix however there is nothing that would block this change going back to any release branch.


[Bug]: Datasources were duplicated during fork/import

Is there an existing issue for this?

[X] I have searched the existing issues

Description
The user was trying to connect to git. When that did not work, they tried to import/fork the app in different workspaces and noticed that the data sources were duplicated. Moreover, exported app json showed different datasource binding compared to the App UI
Steps To Reproduce
More context - https://theappsmith.slack.com/archives/C0341RERY4R/p1686592539141759
Public Sample App
No response
Environment
Production
Issue video log
No response
Version
Latest

When forking an app to a workspace that already has a datasource with the same name and type, the datasource gets duplicated. However, when exporting the app and importing it to this workspace, it works as expected - the datasource does not get duplicated and the APIs are tied to the existing datasource.
More details in this ticket.

Encountered this issue on v1.28

Still exists on latest version v1.41


✨ [Feature]

Before feedback (在反馈之前)

[X] There are no features that I want to submit in Issues (当前 Issues 中没有我将要提交的新功能)

Describe Feature (描述功能)
Model with id being uuid as primary key. How do you think would be the best way to implement this? having a second struct called ModelUuid? Or a more complex tree of structs?

Like this? https://github.com/goravel-ecosystem/market-backend/blob/master/src/go/user/app/models/user.go

Yep! Thanks a lot.


fix cuda compilation issue

resolves https://github.com/opencv/opencv/issues/23946
resolves https://github.com/opencv/opencv/issues/23945
resolves https://github.com/opencv/opencv-python/issues/871

Replaced by https://github.com/opencv/opencv-python/pull/938


Allow specifying of liquibase docker version

Currently :latest is always used:
https://github.com/liquibase/liquibase-github-action/blob/93a18ea3aa903e6e05213dcba43e1578d8b60679/Dockerfile#L1
We should default to :latest but allow overriding with a specific docker image tag

There is also the potential issue that someone would specific a liquibase version that's not compatible with action.yml spec.

My current pipeline is broken because on Friday Liquibase released v4.12.0 which has breaking change for snowflake. This is the problem with using latest always.

@gopisaba :
There was a gap in time where "latest" took the snowflake extension out and before before we upgraded to 4.12.0 which includes the snowflake support directly.
But currently "latest" should work with snowflake just fine. We are looking to improve the docker image management, including ensuring that "latest" builds only come from complete releases. But is the image currently in latest still an issue for you?

We are using liquibase github actions and it is using the latest docker image always. The pipeline got broken when liquibase bumped the version to 4.12.0.
Unexpected error running Liquibase: SQL compilation error:
parse error line 8 at position 44 near '<EOF>'.
syntax error line 6 at position 0 unexpected 'if'. [Failed SQL: (1003) CREATE
OR REPLACE PROCEDURE SCHEMA.PROCNAME(
    SCENARIO_NAME VARCHAR(6),
    SCENARIO_YEAR VARCHAR(4)
) RETURNS STRING LANGUAGE JAVASCRIPT EXECUTE AS CALLER AS '
if(!["El1", "El21"]
    .includes(SCENARIO_NAME)){
        throw "Invalid SCENARIO_NAME Error!"]

The above changeset works perfectly well in 4.10.0 but broken in 4.12.0. I thinks it is good idea to pin the version and if someone wants to upgrade they have test it before upgrading especially when the new version has some BREAKING CHANGE in it.

@gopisaba Are you able to give your complete failing changeset? The error listed is saying the SQL itself is invalid and it seems like it should just be the SQL you  had passed us along. But perhaps there is something else going on in there, like changelog parameters or something else?

This is the stored procedure that works perfectly well in v4.11.0
CREATE
OR REPLACE PROCEDURE SCHEMA.PROCNAME(
    SCENARIO_NAME VARCHAR(6),
    SCENARIO_YEAR VARCHAR(4)
) RETURNS STRING LANGUAGE JAVASCRIPT EXECUTE AS CALLER AS '
if(!["El1", "El21"]
    .includes(SCENARIO_NAME)){
        throw "Invalid SCENARIO_NAME Error!"
    }

if(!SCENARIO_YEAR.startsWith("20") || !(SCENARIO_YEAR.length==4)){
    throw "Invalid SCENARIO_YEAR Error!"
}

var JOB_NAME = "Job Name 1";
var SUMMARY = "Summary of the Job";

# AND REST OF THE STORED PROC

but in v4.12.0, the liquibase update fails
Starting Liquibase at 10:26:21 (version 4.12.0 #3073 built at 2022-06-17 05:59+0000)
Liquibase Version: 4.12.0
Liquibase Community 4.12.0 by Liquibase
Running Changeset: update/proj1/changelogs/changelog-dml.xml::ID-001::Auth
Unexpected error running Liquibase: SQL compilation error:
parse error line 8 at position 44 near '<EOF>'.
syntax error line 6 at position 0 unexpected 'if'. [Failed SQL: (1003) CREATE
OR REPLACE PROCEDURE SCHEMA.PROCNAME(
    SCENARIO_NAME VARCHAR(6),
    SCENARIO_YEAR VARCHAR(4)
) RETURNS STRING LANGUAGE JAVASCRIPT EXECUTE AS CALLER AS '
if(!["El1", "El21"]
    .includes(SCENARIO_NAME)){
        throw "Invalid SCENARIO_NAME Error!"]
For more information, please use the --log-level flag

Changeset for the above stored procedure
    <changeSet id="ID-001" author="Auth" runOnChange="true" >
        <comment>Stored procedure to move data from X to Y layer</comment>
        <sqlFile path="update/proj1/procedures/001_CREATE.sql"/>
    </changeSet>

Thanks for fixing the issue with liquibase. Since it is broken, I ended up writing my own github actions to pin the version to v4.11.0. It would be nice to give the option to pin the version in this actions.

Hi @gopisaba , thanks for using Liquibase! We're about to publicly announce our brand new github actions that support all Liquibase commands, command parameters, and global parameters. That includes pinning the version of liquibase starting with 4.17!  Take a look!
https://github.com/liquibase-github-actions


Fix Login and Register screen's overflow issue

Clicking on any textfield of login or register screen, it cause overflow error when opening keyboard.

Issue fixed


bug: recent PMs > more conversations too long and without scroll bar

when I click on 'more conversations' under Private Messages a huge list opens that extends beyond my screen. Stream disappear entirely. Only a click on Home rescues me from it.
It should be a lot shorter and with a scroll bar.

I think the problem here is that we're mimicking the "more topics" behavior of zooming to the stream, which works well, but that the implementation isn't quite right.
In particular, we don't hide the "Home" menu item above, which creates the confusion that you're seeing everything and thus scrolling down will get you to the other things, and we don't have the "back" button. I think we should align this UI with "more topics". Thoughts?

See also #5404, where Robert is advocating for the collapse strategy for streams/topics.  We should try to solve both of these issues in a consistent way.  I'm leaning toward the collapse strategy.

@zulipbot  claim

Can we give a fixed max-height like 100px for the ul. Issue can be fixed by this.

@zulipbot claim

@zulipbot claim

@zulipbot claim

Hi, are there any updates on the bug? As in, what are the options that have been implemented/rejected?

Hi @kryptc, I am not aware of any current activity, so I am reminding folks of this on chat:
https://chat.zulip.org/#narrow/stream/9-issues/subject/Private.20messages/near/614781
Feel free to chime in on chat.
I'll vote that we should just set a max-height here and be done with it.

Reopening since we had to revert this in 1768fd2f600fb7c8677edf061f4900b13736647b due to problems with the scrollbar appearing in Linux.  @akashnimare FYI.
The correct fix probable involves using ui.setup_scrollbar on the private messages scrollable region in addition to just doing overflow-y.

@zulipbot claim


Refactor use of int as indices

Many integers are used through the code to represent objects or indices, but could lead to bugs. We need something more robust.

Close with #27


Question on templates.

Do the new templates support the latest csla? The previous templates had support up to csla ver 4.5.7 I believe.
Do you believe that CSLA is the framework to go behind a html 5 angular web app?

The templates are quite up to date - they even support the LazyGetPropery feature.
Concerning Csla 4.7 beta, the answer is yes and no:
Yes - the generated code runs on 4.7
No - there is no support for the new features.
CSLA .NET is the framework to go behind any front end. Don't forget it can be consumed as XML or JSON WebServices. If your front end can consume WebServices, you can use CSLA .NET.


[Proposal] Protocol Relative asset urls

For all the assets on my site I've wrapped the paths in the asset() helper.
As defined here https://github.com/laravel/framework/blob/e4d8493eaf5fc568bdb995c63c0768334bfa2a1e/src/Illuminate/Support/helpers.php#L386 Which is a helper for this method https://github.com/laravel/framework/blob/master/src/Illuminate/Routing/UrlGenerator.php#L113
The problem I have is that when viewed over HTTPs my assets do not load, as I did not pass secure true as a second parameter. As such my browser blocks the loading of HTTP assets as I'm browsing over HTTPS
In my case, knowing that my server can handle HTTPs requests I could go back into my code and pass in the second parameter to asset() but I think that is a little yucky. A lot of I'd have to type true quite a lot. And if one of our developers running the site on their local machine didn't have HTTPs setup the assets again wouldn't load.
But lets just say I always knew HTTPs would work, and that I didn't mind typing true all the time. What about the packages my app consumes?
Lets say I'm using the FrozenNode Admin package. In some of their views they use the asset() helper and also don't request secure assets https://github.com/FrozenNode/Laravel-Administrator/blob/cb1e12e718454b26075e687e6b5e5bf16d3e7979/src/views/layouts/default.blade.php
IMO The currently the asset helper isn't much help due to the above issues.
Proposed Solution - The asset helper should return protocol relative URLs http://www.paulirish.com/2010/the-protocol-relative-url/
This was if my site is loaded over HTTP my assets load over HTTP, and if it loads over HTTPS my assets load over HTTPS too!
We could keep the second parameter of asset() to give developers the option of always getting a HTTPS asset url if required. But IMO I don't see a valid use case for this.
Would be more than happy to be the one to submit the PR for this.
Thoughts?
Side Note: I'm about 3 months into Laravel and now just started using it for client projects, and am loving it.

Yeah, I'm having the same issue, Heroku as well. Was a solution ever found?

You probably have to set your trusted proxies correctly.

Has anyone been able to solve this on Heroku? I am still having this problem.

@hoshomoh Can't really remember. But looking over the comments I think this was was caused because I hadn't set the trusted proxies for the site which affected URL generation
Install this https://github.com/fideloper/TrustedProxy

Setting a trusted proxy allows for correct URL generation, redirecting, session handling and logging in Laravel when behind a proxy.

Thanks @thomaswelton, I already installed https://github.com/fideloper/TrustedProxy and made all necessary changes. But, it's still not working my assets are still loaded over http on on https. I am managing my domain with CloudFlare, not sure if there is any relationship.

I noticed the detection of HTTPS does not work on my machine running XAMPP on Windows.
The variable HTTPS on the array $_SERVER is used to detect if the request is secure, but that value does not exist on my setup.

@hoshomoh Were you able to solve this? I'm having this issue as well.


Push/pull local and remote content

Before token:

Type in address of remote
Log in to the remote
Token is generated upon success and stored in the local CMS

After token:

Push:

Search for remote counterpart

If none found, just add content
If found, ask if merge or replace

Pull:

Get list of content for pane (schemas/content/forms/connections)
Check content to pull (or select all)
Pull one at a time

If local counterpart was found, prompt to merge, skip or replace (and a checkbox for "all")
If no local counterpart was found, just add it

This is much too complicated, better use #122


import( /* webpackPrefetch:true */ breaking when upgraded to React v16.6

Bug report

When using import(/* webpackPrefetch: true */ "some-dynamically-imported-file") React dom throws an error as below:
   ERROR in ./node_modules/react-dom/cjs/react-dom.development.js
    Module build failed (from ./node_modules/babel-loader/lib/index.js):
    SyntaxError: node_modules/react-dom/cjs/react-dom.development.js: Unexpected token, expected ";" (13467:235)

      13465 |             {
      13466 |               if (defaultExport === undefined) {
    > 13467 |                 warning$1(false, 'lazy: Expected the result of a dynamic import(/* webpackPrefetch: true */" call. ' + 'Instead received: %s\n\nYour code should look like: \n  ' + "const MyComponent = lazy(() => import('./MyComponent"))", moduleObject);
            |                                                                                ^
      13468 |               }
      13469 |             }
      13470 |             lazyComponent._status = Resolved;
        at _class.raise (node_modules/@babel/parser/lib/index.js:3939:15)
        at _class.unexpected (node_modules/@babel/parser/lib/index.js:5248:16)
        at _class.semicolon (node_modules/@babel/parser/lib/index.js:5232:40)
        at _class.parseExpressionStatement (node_modules/@babel/parser/lib/index.js:7676:10)
        at _class.parseStatementContent (node_modules/@babel/parser/lib/index.js:7272:19)
        at _class.parseStatement (node_modules/@babel/parser/lib/index.js:7153:17)
        at _class.parseBlockOrModuleBlockBody (node_modules/@babel/parser/lib/index.js:7707:23)
        at _class.parseBlockBody (node_modules/@babel/parser/lib/index.js:7694:10)
        at _class.parseBlock (node_modules/@babel/parser/lib/index.js:7683:10)
        at _class.parseStatementContent (node_modules/@babel/parser/lib/index.js:7212:21)

I had to do the following to reproduce the error:
npm cache clean --force && rm -rf node_modules package-lock.json && npm i

Thereafter starting the WebPack started showing the issue.
My best guess here is, ReactDOM has it's own syntax check which is conflicting with Webpack.
webpack version:  4.23.1
Node.js version: 10.12.0
Operating System: Ubuntu 18.04
Additional tools: none

@tirthbodawala looks problem on babel side, maybe in you environment, please create minimum reproducible test repo

Sure @evilebottnawi after removing /* webpackPrefetch: true */ everything seems to work as expected so was not sure, if React/Babel/Webpack has the bug.
Will create a repo and share it.

Could you add you babel version and babel config?

Sure. Will do that as well.
On Mon, Oct 29, 2018 at 12:36 PM Tobias Koppers<EMAIL_ADDRESS>wrote:

Could you add you babel version and babel config?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/webpack/webpack/issues/8282#issuecomment-433807725,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AKw2_xmeauGWUBW4LdnkcM1-GCofHmngks5upqj2gaJpZM4X7uR8
.

--
Tirth Bodawala
Founder
Atyantik Technologies
w: www.atyantik.com  e<EMAIL_ADDRESS>

It's a bug in prefetch-loader. It seem to use RegExp to replace import() calls and also replaces the import() in the react warning string. File it there.


fix degenerate splines in vimlogo.svg

Fixed degenerate splines in vimlogo.svg from https://www.vim.org/logos.php. Also cleaned up the design just a touch. I tried to separate what were interesting idiosyncrasies of the original design and what were errors. This update will allow vinyl cutting, simple editing, large prints, and better conversion to raster formats.
FWIW, there are five file formats of the Vim logo in the repo and all five are different. This best matches the Vim logo on vim.org.

thanks.

as of 2023 Jan 30,

I suppose this is a typo? I'll fix it up when I include it.

thanks.

as of 2023 Jan 30,

I suppose this is a typo? I'll fix it up when I include it.

Not a typo. It looks like over time each file format for the Vim logo was put together by a different person either from scratch or from a different source. That would explain why they are all different. I'm happy to create a pr to make them all match if that is desired, or they could all be left as they are to give a little bit of choice.
Thank you.


Fixed Google Collab Embedding issue

Changelog

Updated the older embedmedia from default "None" to "False"

Summary of Changes
Checklist

[-] I have read the Contributing Guidelines
[-] I have written a descriptive PR title (see top of PR template for examples)
[-] I have added a test case to prevent software regression

Reviewer Checklist

[ ] The PR title is descriptive enough
[ ] The PR is labeled appropriately
[ ] Regression test(s) are implemented

Superseded by #3974, which also fixes issue #3741.


Unable to scroll to Persistent Workspaces until they have been visited

Regression?
No
System Info and Version
 System/Version info
Hyprland, built from branch  at commit 918d8340afd652b011b937d29d5eea0be08467f5  (flake.lock: update).
Date: Tue Jun 25 12:06:02 2024
Tag: v0.41.2, commits: 4886

flags: (if any)

System Information:
System name: Linux
Node name: twelfth-pc
Release: 6.10.3-arch1-1
Version: #1 SMP PREEMPT_DYNAMIC Sun, 04 Aug 2024 05:11:32 +0000

GPU information:
0a:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD103 [GeForce RTX 4070 Ti SUPER] [10de:2705] (rev a1) (prog-if 00 [VGA controller])

os-release: NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo

plugins:

======Config-Start======

Config File: /home/theonetwelfth/.config/hypr/hyprland.conf: Read Succeeded

# #######################################################################################
# AUTOGENERATED HYPR CONFIG.
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
# #######################################################################################

# This is an example Hyprland config file.
# Refer to the wiki for more information.
# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/

# Please note not all available settings / options are set here.
# For a full list, see the wiki

# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf

################
### MONITORS ###
################

# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,1.5

###################
### MY PROGRAMS ###
###################

# See https://wiki.hyprland.org/Configuring/Keywords/

# Set programs that you use
$terminal = konsole
$fileManager = dolphin
$menu = tofi-drun | xargs hyprctl dispatch exec --

#################
### AUTOSTART ###
#################

# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:

exec-once = hyprpaper  # Wallpaper engine

exec-once = waybar  # Status bar
exec-once = nm-applet --indicator  # NetworkManager tray applet

# exec-once = $terminal
# exec-once = nm-applet &
# exec-once = waybar & hyprpaper & firefox

#############################
### ENVIRONMENT VARIABLES ###
#############################

# See https://wiki.hyprland.org/Configuring/Environment-variables/

env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24

env = GDK_BACKEND,wayland,x11,*
env = QT_QPA_PLATFORM,wayland
env = SDL_VIDEODRIVER,wayland
env = CLUTTER_BACKEND,wayland

env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_MENU_PREFIX,arch-
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland

env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = QT_STYLE_OVERRIDE,kvantum
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_QPA_PLATFORMTHEME,qt6ct

env = GTK_THEME,Nordic-darker

#####################
### LOOK AND FEEL ###
#####################

# Refer to https://wiki.hyprland.org/Configuring/Variables/

# https://wiki.hyprland.org/Configuring/Variables/#general
general {
    gaps_in = 5
    gaps_out = 20

    border_size = 2

    # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
    col.active_border = rgba(fda63aee) rgba(ff5a00ee) 45deg
    col.inactive_border = rgba(595959aa)

    # Set to true enable resizing windows by clicking and dragging on borders and gaps
    resize_on_border = false

    # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
    allow_tearing = false

    layout = dwindle
}

# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
    rounding = 0

    # Change transparency of focused and unfocused windows
    active_opacity = 1.0
    inactive_opacity = 1.0

    drop_shadow = false
    shadow_range = 4
    shadow_render_power = 3
    col.shadow = rgba(1a1a1aee)

    # https://wiki.hyprland.org/Configuring/Variables/#blur
    blur {
        enabled = true
        size = 3
        passes = 1

        vibrancy = 0.1696
    }
}

# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
    enabled = true

    # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

    bezier = myBezier, 0.05, 0.9, 0.1, 1.05

    animation = windows, 1, 7, myBezier
    animation = windowsOut, 1, 7, default, popin 80%
    animation = border, 1, 10, default
    animation = borderangle, 1, 8, default
    animation = fade, 1, 7, default
    animation = workspaces, 1, 6, default
}

# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
    pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = true # You probably want this
}

# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
    new_status = master
}

# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
    force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
    disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
}

#############
### INPUT ###
#############

# https://wiki.hyprland.org/Configuring/Variables/#input
input {
    kb_layout = us,ru
    kb_variant =
    kb_model =
    kb_options = grp:win_space_toggle
    kb_rules =

    follow_mouse = 1

    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.

    touchpad {
        natural_scroll = false
    }
}

# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
    workspace_swipe = false
}

# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device {
    name = epic-mouse-v1
    sensitivity = -0.5
}

xwayland {
    force_zero_scaling = true
}

####################
### KEYBINDINGSS ###
####################

# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
$shiftMod = SUPER SHIFT

# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, Q, exec, $terminal
bind = $mainMod, C, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, R, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle

# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d

# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6

# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6

# Scroll through existing workspaces with mainMod + scroll
bind = $shiftMod, right, workspace, e+1
bind = $shiftMod, left, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

##############################
### WINDOWS AND WORKSPACES ###
##############################

# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules

# Example windowrule v1
# windowrule = float, ^(kitty)$

# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$

windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.

workspace = 1,persistent:true
workspace = 2,persistent:true
workspace = 3,persistent:true
workspace = 4,persistent:true
workspace = 5,persistent:true
workspace = 6,persistent:true

exec-once = hyprctl dispatch workspace 2 && hyprctl dispatch workspace 3 && hyprctl dispatch workspace 4 && hyprctl dispatch workspace 5 && hyprctl dispatch workspace 6 && hyprctl dispatch workspace 1

======Config-End========

Description
When multiple persistent workspaces are defined, you can only scroll to the workspaces you have visited during the current session. By "scrolling" I mean workspace e+1.
Only scrolling is broken in this way - workspace <number> works fine.
How to reproduce

If you have a non-native implementation of persistent workspaces (like in Waybar), disable it.
Define multiple workspaces like this:

workspace = 1,persistent:true
workspace = 2,persistent:true
workspace = 3,persistent:true
workspace = 4,persistent:true
workspace = 5,persistent:true
workspace = 6,persistent:true

Ensure no windows autostart in these workspaces.
Restart Hyprland session, this should automatically put you into workspace 1. Try scrolling using commands or keybinds. Confirm that it doesn't work.
Switch to another persistent workspace.
Switch back to workspace 1. Try scrolling. Confirm that scrolling only works for workspace 1 and the workspace you've just visited.
Restart Hyprland session again. Confirm that scrolling doesn't work.
Optionally use the following workaround to "initialize" workspaces at start (I should probably make a script instead of hardcoding these):

exec-once = hyprctl dispatch workspace 2 && hyprctl dispatch workspace 3 && hyprctl dispatch workspace 4 && hyprctl dispatch workspace 5 && hyprctl dispatch workspace 6 && hyprctl dispatch workspace 1

Crash reports, logs, images, videos
No response

Reproduced this on v0.42.0 as well


Add cirq.testing.assert_same_diagram

This method would do two things:

Strip the diagrams for you, so you didn't have to worry about trailing newlines in the code.
Give better error messages than python's default string error message.

For point 2, the main thing that is required is to append the actual diagram and reference diagram without abbreviation. Pytest is far too abbreviation heavy for the diagrams.
Secondarily for point 2, a better diff should be included. The information is 2d instead of line-based, and the diff should be similarly 2d. Show a copy of the actual diagram with any character positions that differ from the reference diagram replaced by ■ or some other obtrusive char.

For use cases I have encountered, I often want to ignore differences due to insertion strategies, i.e., I'd want to shove all gates to the left before comparing.

That would be better described as a circuit equivalence rather than a diagram equivalence.

CircuitDag would be good for that.

Probably, but it would have to support customizing node equality.  The matching in the two graphs wouldn't compare equal by default.

You can do it with is_isomorphic.


added command parameter

Here is the missing parameter for the new command ;) #17

Adding it in right now and doing a big refactor :)


How to set ?

How to set (RPC,)?
Because, i'm not understand RPC

I hope to get proper instructions written up soon.  For now, here is something that may help
https://github.com/tuaris/FaucetRPC


Unknown entity when using Xiaomi Smart Plug

I have perfectly connected a Xiaomi Smart Plug into Deconz addon. It adds the following entities:

The actual switch which can be on and off.
Current power Sensor in Watts (W).
Another sensor which is in kWh which I assume is power consumption.

However, this last sensor's value is always unknown. Any idea why?

We have no idea, the better place to ask this, is @ dresden/deconz.
Add-ons wrap existing software, we don't write or maintain the deconz/phoscon app.


[ALLUXIO-2119] Remove use of Whitebox in UnderFileSystemFileInStream Test

https://alluxio.atlassian.net/browse/ALLUXIO-2119

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/10990/
Test PASSed.

alluxio-bot, check this please

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/11003/
Test PASSed.

LGTM


new script PathToWindowOrDoor

this one helps to convert 2 point path to new door&windows

Hey Groch, There are some merge conflicts that need to be resolved before I can go ahead and merge these changes.

Hi, i think my other commit introduced a folder creation that interract with it, i see threads talking that similar issues happen when renaming files and i think it's kind of that
i updated my fork, rebased my branch and merged from master, and it still says no change to commit ...
can you point me how i can help ? ^^'


PanResponder.onPanResponderMove not responding for pinch

Hello,
I cannot get event that more than 2 touches in my Android 6.0.1/iOS 9.3 device with RN.29, which is very annoying
Help needed, any suggestion will be highly appreciated.
PanResponder.create({
onPanResponderMove: (evt, gestureState){
if(evt.nativeEvent.touches.length<2)  //move
//if(evt.nativeEvent.changedTouches.length<2)  //also move?
else  //pinch, this condition is never called.
}
...
})
//Is PanResponder changing the API ?
thanks very much!

looks like the PanResponder is not so popular,

Hi there! This issue is being closed because it has been inactive for a while.
But don't worry, it will live on with ProductPains! Check out its new home: https://productpains.com/post/react-native/panresponderonpanrespondermove-not-responding-for-pinch
Product Pains has been very useful in highlighting the top bugs and feature requests:
https://productpains.com/product/react-native?tab=top
Also, if this issue is a bug, please consider sending a pull request with a fix.

having same issue, tried to create 4 drag and drop circle for iOS device, but it only worked 2 touches

I am having same issue: move event does not fire anymore when there are 2 fingers in the screen

Please vote for https://react-native.canny.io/feature-requests/p/panresponderonpanrespondermove-not-responding-for-pinch

Hi @slorber, I've just faced with same problem and it looks like PanResponder.onPanResponderMove don't work only when it place in Modal. I was trying to implement image view component with zoom in Modal and fail, but when I replaced Modal with simple View the handler started to response.


[Preview] Item and Query Request Options: Adds Dedicated Gateway MaxIntegratedCacheStaleness

Pull Request Template
Description
Currently, the integrated cache (with the dedicated gateway) has a default expiration time for each of the entries in the cache (CacheEntryExpirationTime) of 5 minutes. Any response served from cache is guaranteed to be no staler than this CacheEntryExpirationTime. In the existing design, CacheEntryExpirationTime cannot be configured by customers.
For customers to have more control over how stale each of their requests could be, we plan to introduce a new “RequestOption” called “MaxIntegratedCacheStaleness”. This option will allow the customer to set a lower bound on the lifespan of the response from the cache for each request. If the lifetime of the response stored in the cache is greater than the value indicated by “MaxIntegratedCacheStaleness”, that item will not be served from the cache and the request will go to the backend.
Type of change
Please delete options that are not relevant.

[] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[] This change requires a documentation update

Closing issues
To automatically close an issue: closes #IssueNumber

/azp run

/azp run

@soeom please update PR description accordingly (it still shows the template)

@soeom please update PR description accordingly (it still shows the template)

Done. Thanks

/azp run

/azp run

/azp run


Microsoft.ApiManagement Services_Get returns a numerical value for vpnType

Per the (swagger)[https://github.com/Azure/azure-rest-api-specs/blob/0bef2b99ad6d52781e3c308bc6b420f6eef59ef7/specification/apimanagement/resource-manager/Microsoft.ApiManagement/stable/2016-10-10/apimdeployment.json#L971], the return type is supposed to be a string/enum.
This is causing generated SDKs to fail on deserialization.

Hey @johanste ! Could you give more context about about what you actually receive from Azure?

This issue was fixed on service side. Please reactivate if you still see this ussur


Fix path to react-native when developing outside of the example app

In #502, the local maven url pointing to the react-native node module
changed to work better for the example app. However, that broke the path
to react-native when developing in the context of the library, not the
example app. In this PR, specify both paths.
cc: @felipecsl @chrisknepper

nice! lgtm

Just published 0.8.1 that includes this change.

It turns out 0.8.1 was faulty, because my working directory had an additional example app containing the react-native node module, which got published as part of the NPM package (:facepalm:), causing a @providesModule error, so I've unpublished it and published 0.8.2.  Use that instead!


chore: make @storybook/cli a dev dependency

Makes @storybook/cli a dev dependency since it isn't needed in production.

:tada: This PR is included in version 1.355.2 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


install instructions

So I ran
bower install greuler

but there is nothing in the bower_components/greuler/dist/ dir.
Is that the expected behaviour? (I'm new to bower).

thanks for the feedback @ivanistheone, working on it right now

fixed ^_^


Small refactors to make the code prettier

Codecov Report

Merging #56 into master will increase coverage by 0.16%.
The diff coverage is 86.2%.

@@            Coverage Diff             @@
##           master      #56      +/-   ##
==========================================
+ Coverage   77.45%   77.61%   +0.16%
==========================================
  Files          12       14       +2
  Lines         204      210       +6
  Branches       46       46
==========================================
+ Hits          158      163       +5
- Misses         38       39       +1
  Partials        8        8

Impacted Files
Coverage Δ

src/pages/invoice.js
93.54% <100%> (+2.08%)
:arrow_up:

src/lib/transactions.js
84.21% <84.21%> (ø)

src/components/CollectiveAddress.js
85.71% <85.71%> (ø)

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 993247b...1e7bdd0. Read the comment docs.


High-level interface

Hello,
Working with the code to make a Python wrapper I realise it would be nice to have a high level interface - some convenience functions such as an iterator (getter) providing all the points in cartesian coordinates, an iterator over all the scans, each providing its own iterator over the points.

Agreed, this makes sense. The early versions had such an "simple" interator for points that just returned a predefined struct with simple doubles for XYZ and floats for RGB etc. I removed it when I added the full direct access for the original values. It needs to come back because this is very useful for many cases were you do not want to deal with the many different low level representations.

Today I released version 0.6.0 that now includes a simple iterator. I also updated the e57-to-xyz example to use it. It has also a few convenience options to help with typical requirements. It can for example apply the pose automatically to the Cartesian coordinates, skip invalid coordinates, convert spherical to Cartesian coordinates or fall back on intensity as color replacement.
Hope this is aligned with what you imagined!


Changes required for daal4py USM integration

@michael-smirnov  can do you attach a result private CI with you changes?

/intelci: run

/intelci: run

@Mergifyio backport rls/2021.2-rls


Adapter objects access

Hello,
I have a question about accessing the adapter variables. I want to read the status variables into my AOI Neo Creator. Everything works so far, only the status variables only show the "roomba.0.states._connected", the others are not shown via the AIO Creator
Have viewed and compared the access settings and found no differences. Everything is displayed correctly in the iobroker. Is the problem with the adapter, if so what could it be, or with the NEO Creator?

No activity sind 2020.
If the problem still exists with the newest release (1.2.1) please open a new issue.


Carry test #1585 - Add image digest annotation for snapshotters

Signed-off-by: Samarth Shah<EMAIL_ADDRESS>

The master branch on this repository has been merged into containerd/containerd. Please rebase your change onto containerd master and open a pull request there.


regex parsing error with urls

https://d2lang.com/tour/interactive#links
the : probably messing it up

I'm not sure I'm seeing what you're seeing.  What's the error?
Although I could make a case for the single quote getting colored incorrectly.

ah i thought it was the colon, but it's the single quote causing problems. the original issue was i was seeing the ending bracket be error coded red. but it happens whenever i have a single quote.


Support markdown in slack message notification.

Support markdown in slack message notification.
Addresses https://github.com/travis-ci/travis-ci/issues/9487

@BanzaiMan @igorwwwwwwwwwwwwwwwwwwww can you please take a look at this PR? thanks in advance.

Config: https://github.com/BanzaiMan/com_testing/blob/f35d05dbd21a9fa36fd64b89490096ce638a3a1a/.travis.yml#L17-L25
Build: https://staging.travis-ci.com/BanzaiMan/com_testing/builds/235990
Result:

Examples:
    template:
      - "Build <%{build_url}|#%{build_number}> %{build_id} (<%{compare_url}|%{commit}>) of %{repository}:%{branch} by %{author} %{result} in %{duration}"
      - "_%{commit_message}_"
      - "*%{message}*"
      - "~%{message}~"
      - "`use monotype`"
      - >-
        ```
          foo bar
          multiline
          pre-formatted comment
         ```

Awesome! Thanks. Also just tried it and it's working.
https://github.com/commercetools/commercetools-sync-java/pull/326


Exceptions when deserializing from NetworkStream .. Hyperion seems to try to deserialize incompletely received messages

I have been getting random exceptions when deserializing objects from NetworkStream.  It seems that Hyperion is not waiting for the whole message but trying to deserialize a message that is half received
It works fine if the client and the server are running on the same machine but when they are running on different machines I am getting exceptions like null reference exceptions or it is trying to look for types with half written assemblies for example if I have JMM.Util.Msg it is throwing exceptions saying somthing like cannot find type "JMM.Ut". I was able to fix the problem by using BinaryWriter/BinaryReader to write an int indicating the msg length followed by a byte[] obtained from Hyperion serializer of the message.
This is my deserialization code:
var msg = wireSerRead.Deserialize(ns);
This is my serialization code:
wireSerWrite.Serialize(msg, ms);
var msArr = ms.ToArray();
await ns.WriteAsync(msArr, 0, msArr.Length);
ns is of type NetworkStream
ms is of type MemoryStream
my serializers are instantiated like so:
Serializer wireSerRead = new Serializer(new SerializerOptions(false, false));
Serializer wireSerWrite = new Serializer(new SerializerOptions(false, false));

Hi, I also got into this issue.
I use Hyperion in a ServiceStack plugin to exchange REST data.
For bigger request I got unexpected NullReferenceException. I was lucky that the error was reproducible.
First solution was to use a BufferedStream, but as soon as the buffer size was smaller than the payload size the error occured again. So I only covered the error instead of fixing it.
Digging into Hyperion code I found the following code which is the same in all ValueSerializers:
e.g. in class DoubleSerializer.ReadValueImpl()
 stream.Read(bytes, 0, Size);
This is the position where bytes where taken from stream to be consumed so here must be the problem.
Checking the type of stream in the ServiceStack plugin showed me that it provides me a "System.Net.ConnectStream". Seems to be something like a NetworkStream. Because network is unreliable but handled via TCP my theory was.
If you execute a Read() on a stream you expect that it returns your amount of bytes or provide some EOF.
What if the stream returns you only some of your requested bytes even when there are more bytes abailable in future?
Was this allowed?
Searching the inet made it clear:
https://stackoverflow.com/questions/33972270/networkstream-reads-fewer-bytes-than-expected
https://stackoverflow.com/questions/39892520/stream-based-on-streamsocket-returns-less-data-than-requested
That explains:

Why the provided solution via BinaryReader worked because I think BinaryReader will handle that case internally
Why Hyperion fails deserializing with an unexplainable exception. Hyperion assumes that if it asks for n bytes from the stream that n bytes will be read. But with "unreliable" streams there are situations where this assumption doesn't work, hence the exception.

Question is now who is responsible to ensures that there are only "full" reads?

Hyperion could do this by itself
Or Hyperion only supports streams which ensures this.

For completion I provide a an implementation of a stream extension method which ensures "full reads":
 /// <summary>
/// Repeats reading from stream if stream returns less than requested bytes per read.
/// Throws if stream can't provide enough bytes
/// </summary>
public static int ReadFull(this Stream stream, byte[] buffer, int offset, int count)
{
	if (count == 0)
		return 0;

	var totalReadBytes = 0;
	do
	{
		var readBytes = stream.Read(buffer, offset + totalReadBytes, count - totalReadBytes);
		if (readBytes == -1)
			throw new InvalidOperationException("Unexpected end of stream");
		if (readBytes == 0)
			throw new InvalidOperationException("Insufficent bytes available from stream");

		totalReadBytes += readBytes;
	}
	while (totalReadBytes < count);

	return totalReadBytes;
}

Here is also an implementation for a stream which only allows FullReads. If you encapsulate your stream with it you can safely use the hyperion deserializer:
public class FullReadStream : Stream
    {
        private readonly Stream _stream;

        public FullReadStream(Stream stream)
        {
            _stream = stream;
        }

        public override bool CanRead => _stream.CanRead;
        public override bool CanSeek => _stream.CanSeek;
        public override bool CanWrite => _stream.CanWrite;
        public override long Length => _stream.Length;

        public override long Position
        {
            get { return _stream.Position; }
            set { _stream.Position = value; }
        }

        public override void Flush()
        {
            _stream.Flush();
        }

        public override long Seek(long offset, SeekOrigin origin)
        {
            return _stream.Seek(offset, origin);
        }

        public override void SetLength(long value)
        {
            _stream.SetLength(value);
        }

        public override int Read(byte[] buffer, int offset, int count)
        {
            return _stream.ReadFull(buffer, offset, count);
        }

        public override void Write(byte[] buffer, int offset, int count)
        {
            throw new NotSupportedException();
        }
    }

@Ralf1108 I don't think, that there's a need to use that stream by default, as it solves problems only in case of subset of streams allowing partial reads, while bringing extra weight to those which doesn't need them.
Personally I think, we should stick with requiring full-read streams for now. Maybe it will change in the future.

@Horusiath I am not sure about that.
As MSDN states for streams Read() methods:
https://msdn.microsoft.com/en-us/library/system.io.stream.read(v=vs.110).aspx
An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached
The assumption in stream usage in Hyperion is wrong according to the documentation. This is maybe a theoretical bug but it is still an incomplete usage of the stream.
What about using the extension method which provides a fast path for the practiacal cases and a fallback for the theoretical ones?

Hyperion is a serializer. Its job is to translate bytes into types and vice versa, in a correct way, as fast as possible.
Dealing with incomplete byte arrays because its being used in a networking context. Is not its responsibility. Its the responsibility of the user to make sure its being fed a complete byte array.
IMHO This request is like asking json.net to accept an incomplete json string and not blow up.
Garbage in, garbage out.

Can't agree with that.
Hyperion reads bytes from a stream and assumes all n bytes were read.
The documentation of the used "Read()" method points out that this is not enforced by the stream class.
So for me hyperion is using the stream wrong and its using violates the stream class contract.
Instead of using the stream.Read() method in a wrong way it should use

the stream in a correct way
outsource the correct usage by using a binary reader or specific stream implementation (e.g. using FullReadStream)

which fulfilles the assumption from Hyperion of streams .
Not fixing that means that Hyperion serializer will have to state out in its documentation that it wont work with all streams which fulfilles the stream contract provided by MSDN.
So all in all Hyperion seems to violate the Liskov principle here as it only works correctly with a subset of all possible stream derivatives.
Btw. you pointed out that Hyperion would deal with incomplete byte arrays which is incorrect. Hyperion deals with a stream of bytes which requires to follow the stream contract.

Proposal for "ReadFull()" extension method with fast path.
If compiler would inline this there shouldn't be a noticeable performance penalty.
public static class StreamExtensions
{
    /// <summary>
    /// Repeats reading from stream until requested bytes were read.
    /// Returns if stream can't provide enough bytes
    /// </summary>
    public static int ReadFull(this Stream stream, byte[] buffer, int offset, int count)
    {
        // fast path for streams which doesn't deliver partial results
        var totalReadBytes = stream.Read(buffer, offset, count);
        if (totalReadBytes == count)
            return totalReadBytes;

        // support streams with partial results
        do
        {
            var readBytes = stream.Read(buffer, offset + totalReadBytes, count - totalReadBytes);
            if (readBytes == 0)
                break;

            totalReadBytes += readBytes;
        }
        while (totalReadBytes < count);

        return totalReadBytes;
    }
}

any progress if this will be merged?

Maybe somebody can spin up BenchmarkDotNet to check if there is a performance penalty?

So maybe this issue can be closed if there is no intention to fix it?
Issue here was just a misunderstanding of the differences between a byte array and a stream of bytes.

@Ralf1108 Do you have a fork with your suggested stream changes?
Streams in .net are always allowed to return partially read data, this is different from garbage-in-garbage-out, because the stream has not finished and it will (eventually) return full data. Json.net (and other stream based serializers) do correctly handle such cases.

@marius-klimantavicius see my fork at Ralf1108/Hyperion and commit dcc036f8eea952476a15350960ec5011ac9296af

to simulate the original issue just replace the body of method ReadFull with this code
return stream.Read(buffer, offset, count)
Then you see the failing serialize/deserialize tests which requires more than 1 byte of the stream.

added PR #185

PR was merged so this is fixed in next Hyperion release

That's great to know @Ralf1108


Uint8List to String

Hey, first thanks for migrating to null safety.
Previously in the flutter_apple_sign_in package i had this line of code:
  final AppleIdCredential appleIdCredential = result.credential;

  OAuthProvider oAuthProvider = new OAuthProvider("apple.com");
  final AuthCredential credential = oAuthProvider.credential(
    idToken: String.fromCharCodes(appleIdCredential.identityToken),
    accessToken:
        String.fromCharCodes(appleIdCredential.authorizationCode),
  );

and it worked fine, and now idToken and accessToken cannot be set because identityToken and authorizationCode give error:
The argument type 'Uint8List?' can't be assigned to the parameter type 'Iterable<int>'.

Hello @dukaric1991 ,
thnx for this.
I'll have a better look later today and come back with a response.

quick questions;

can u plz share the Flutter version you have? simply by running flutter doctor -v
what you've set in your pubspec.yaml for environment:

I am on Flutter 2.2.0
environment:
  sdk: '>=2.12.0 <3.0.0'

I have now tried with these two lines and the error is gone, but i need to try thic code on my mac to see if it works correctly.
  Iterable<int> identityToken = appleIdCredential!.identityToken as Iterable<int>;
  Iterable<int> authorizationCode = appleIdCredential.authorizationCode as Iterable<int>;

Current code:
  final AppleIdCredential? appleIdCredential = result.credential;

  OAuthProvider oAuthProvider = new OAuthProvider("apple.com");
  Iterable<int> identityToken = appleIdCredential!.identityToken as Iterable<int>;
  Iterable<int> authorizationCode = appleIdCredential.authorizationCode as Iterable<int>;
  final AuthCredential credential = oAuthProvider.credential(
    idToken: String.fromCharCodes(identityToken),
    accessToken:
        String.fromCharCodes(authorizationCode),
  );

I'm using this plugin in all of my Flutter apps, I just did a round of debugging and noticed no issue.
Can you plz make sure your Flutter version is v2 or higher?
Just in case, sharing the code snippet from my apps which works flawlessly.
List<Scope> scopes = const [Scope.email, Scope.fullName];
final AuthorizationResult result = await TheAppleSignIn.performRequests([AppleIdRequest(requestedScopes: scopes)]);

switch (result.status) {
      case AuthorizationStatus.authorized:
          final appleIdCredential = result.credential;
          final oAuthProvider = OAuthProvider('apple.com');
          final credential = oAuthProvider.credential(
            idToken: String.fromCharCodes(appleIdCredential.identityToken),
            accessToken: String.fromCharCodes(appleIdCredential.authorizationCode),
          );

          final authResult = await FirebaseAuth.instance.signInWithCredential(credential);
          final firebaseUser = authResult.user;
          //  ...persist etc etc....
          return firebaseUser;
      case AuthorizationStatus.error:
          // handle error case
      case AuthorizationStatus.cancelled:
          // handle error case
}

ok now I see, the issue comes from this
environment:
  sdk: '>=2.12.0 <3.0.0'

This requires your  app codebase & implementations to be strictly null safe as well.
Usually, in my apps I use
environment:
  sdk: ">=2.8.0 <3.0.0"

So that this gives me flexibility to make my codebase hybrid (partial null safe)  while using any package that is all null safe.
It might sound like a workaround but flexibility is always good.

did my last suggestion help?
plz let me know if you have any further questions.

no response thus closing this issue assuming it is resolved
you are welcome to open new issue if you need


Apostrophes wreak havoc on hyphenation

This is related to #265, but that case is somewhat specific to a language anomaly and needing a way to setup exceptions. But there is a more general problem.
Basically any time apostrophes get involved everything goes to pot. Interestingly Unicode right single quotation marks fail in a different way that straight apostrophes. Here is an MWE:
\begin[papersize=a6]{document}
\font[family=Libertinus Serif,size=9pt,language=tr]
Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın Rab'bimize Tanrı'nın

Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın Rab’bimize Tanrı’nın

Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının Rabbimize Tanrının
\end{document}

This is especially puzzling to me because there are no shortage of hyphenation points in either of these words, nor are they different for the different quote styles:
> showHyphenationPoints("Tanrı’nın", "tr")
Tan-rı-’-nın
> showHyphenationPoints("Tanrı'nın", "tr")
Tan-rı-'-nın
> showHyphenationPoints("Rab’bimize", "tr")
Ra-b-’-bi-mize
> showHyphenationPoints("Rab'bimize", "tr")
Ra-b-'-bi-mize

This is actually essentially the same bug as #265. The problem is about how text is being segmented; SILE isn't seeing "words" any more, only nodes after the text has been shaped by Harfbuzz and then formed into nodes by unicode.lua on the basis of each character's Unicode Character Database linebreak type. Quotation marks have a break type of "qu" and so are being formed into their own token by line 58 of unicode.lua.
> SU.concat(makenodes("Tanrı’nın", { language = "tr" }))
"N<22.28515625pt>^6.15234375-0.146484375v(Tanrı)N<2.2900390625pt>^7.1044921875-0v(’)N<13.7451171875pt>^4.6875-0v(nın)"

Maybe we should pass through quotes just like we do with combining marks. I have a patch which would potentially do this, but I am worried if it would break other languages by allowing strange hyphenation points:
> > showHyphenationPoints("sti'cious", "en")
"sti'-cious"

Can you push that to a test branch? I'd be interested in trying such a change. I have an idea we might need to look at some language specific tweaks in this department.
Another day, another book, another issue that I think is related to this: my verse references are breaking on figure/en-dashes; e.g.:
Deneme olarak metin burada (İbraniler 5:9; 6:1–
7) ve daha fazla metin.

I have a non-breaking space after the book name, but I would like to inhibit (or at least severely penalize) breaks before and after – in the same way it doesn't break on : or ). My preference would be to encourage a break on the space between ; 6 or after the parenthesis, but not in the middle of the number range.
Unfortunately this isn't quite standard Turkish usage. According to the official Turkish Language Institute people Turkish doesn't have a figure dash or en-dash at all. It has either a hyphen or a long (em) dash. However using hyphens for everything -including insertions like this one- quickly gets messy and many publishers use a figure dash as well. I'm one of those that thinks the figure dash adds something over using the same glyph used for hyphenation, ergo I'd like to be able to define rules for its usage that inhibit it being a line breaking character. This seems to me to be about the same problem as I'm having with apostrophes, only in reverse.

I'm not going to push it to a test branch, because it will break English, but here's the patch:
diff --git a/languages/unicode.lua b/languages/unicode.lua
index 7bc7aae..4c63384 100644
--- a/languages/unicode.lua
+++ b/languages/unicode.lua
@@ -55,7 +55,7 @@ SILE.nodeMakers.unicode = SILE.nodeMakers.base {
       self:addToken(char,item)
       self:makeToken()
       self:makePenalty(0)
-    elseif lasttype and (thistype ~= lasttype and thistype ~= "cm") then
+    elseif lasttype and (thistype ~= lasttype and thistype ~= "cm" and thistype ~= "qu") then
       self:makeToken()
       self:addToken(char,item)
     else
@@ -65,7 +65,7 @@ SILE.nodeMakers.unicode = SILE.nodeMakers.base {
       end
       self:addToken(char,item)
     end
-    if thistype ~= "cm" then lasttype = chardata[cp] and chardata[cp].linebreak end
+    if thistype ~= "cm" and thistype ~= "qu" then lasttype = chardata[cp] and chardata[cp].linebreak end
   end,
   iterator = function (self, items)
     self:init()

Hey that looks more like it!
Is there a general way to  control which side of the apostrophe to break on? I'd typically like to keep it on the trailing line before the hyphen instead of bumping it to the new line, but since there are break points on both sides of the apostrophe in does whatever is best for the word spacing and sometimes they stay and sometimes they don't.

I'm wondering, given that this seems to be a small number of words in Turkish, whether another possible solution is to use the Unicode WORD JOINER character?

@r12a The list of possible words is by no means small (I could find hundreds of words to use as examples), and one of the principals I'm working from is that clean source text shouldn't need special treatment to be typeset. Obviously in the case of language exceptions having control characters like that might be acceptable, but we're not talking about exceptions here — this is the rule.

Ok, thanks for clarifying.


ChangeLegacyShadow_State bug

This line:
    Set object_shadow_state of (oBtn1(self)) to (not(liLogImage))
results in:
    Set Enabled_State of (oBtn1(self)) to (not(li to liLogImage
but should have been:
    Set Enabled_State of (oBtn1(self)) to liLogImage

Fixed!


fixing execution of tests on German system

This is the second fixed version of my messup earlier.
This pull request fixes #244 + adding a simple method to add more cultures.

Excellent, thanks!


SHR is decoded as INVALID

I just noticed that the remix debugger is decoding 0x1b as INVALID instead of SHR.
I can't find a way to check if I'm running the latest version, but I just force-refreshed the site,  and it still decodes it that way.

I think solidity always uses SHR before jumping into the actual functions now, so this should be easy to validate.

closed by #1299 . Reopen if any issue is observed.


Extension for scipy.spatial.distance.cdist

scipy.spatial.distance.cdist is a great function that provides fast calculation of pairwise distance between two lists of points.
I want to get the pairwise min distance between many lists of points. By using cdist in two for loop function is very slow [[ np.min(cdist(x,y)) for y in list ]for x in list]
I was wondering if there are any extension function like cdist not just to get distance between two lists of points, but to get get pairwise distance between many lists of points.
Thanks!

A binary space partitioning tree might be helpful.
scipy.spatial.cKDTree.query or similar once you've initialized the k-d tree data structure. You'd still need to loop, I think, but there's built-in low-level code for finding the pairwise nearest neighbors.
That may also have the advantage of not scaling the space complexity as much, since those cdist results can get pretty big for the case where you only want the min dist.

I tried the cKDTree as followed (let me know if I did something wrong here):

Maybe because my list of points are too large (2000 lists), it seems building a tree for each loop is not the best strategy.

You should build each tree only once and then query it multiple times:
trees = [cKDTree(x) for x in ellipse_list]
[[ x.query(y) for y in ellipse_list] for x in trees]

Thanks for your suggestion! I tried again and it is slightly faster. I feel probably it is better for me to constrain the possible pairs instead of use the full pair-wise.

A few more thoughts:

Shouldn't you only need x-1 trees? If there are 3 lists of points x in ellipse_list, you can get the requisite min dist comparisons with only two trees and queries on the last list of points since you shouldn't have to query List3->1 or List3->2 after doing list1->3, list2->3.
what about heuristics like the distance_upper_bound argument to prune the tree searches? if you only care about min dist, then just pick any random pair of points from a set being compared as the cap, since that is either the minimum or some real distance cap above it; if the data sets are highly structured / orderd, shuffling might also help, but that requires more testing
you might also be able to get some intelligent caps on min distance because of things like knowing the distance between L1 and L2, and L3 and L2, so that min dist between L3 and L1 has a cap of the sum of the other minimums to be used for distance_upper_bound; these relationships might even compound / reduce in interesting ways with more lists and relationships between them
could also consider n_jobs argument to use multiple cores or something like dask to delay the evaluation and perform on multiple cores after getting reasonable guesses for distance_upper_bound, maybe

Thank you for your suggestion. I think I will limit the combination number first based on proximity distance.
One thing to mention is that, for the n_jobs, I tried it, and the running time increased from 3 min to 1h30 min for unknown reason when I set n_jobs=-1.

One thing to mention is that, for the n_jobs, I tried it, and the running time increased from 3 min to 1h30 min for unknown reason when I set n_jobs=-1.

this sounds like a bug. if you could open a new issue with a reproducible example, that would be useful


Performance optimization for connecting to the room

Hi!
In our app, we need to make the use of the network as efficient as possible in order to keep the transmitted video of the highest possible quality. We are having quite an unusual setup, where the app connects to the room, and then a broadcast extension connects to the same room under a different identity. App is used to hold a call, extension is used to broadcast screen share. Now I expect that having two connections at the same time puts more weight on the network connection.
My question here is: do you use some kind of performance optimizations to publish/subscribe only that what is necessary? Is there some setting I can use to tell Twilio in the broadcast extension, that that connection is supposed to just publish, but we do not need to subscribe anything for that particular connection? The broadcast extension is supposed to share the screen, but it does not present anything to the extension user.
Thanks!
Best
Milan

@piyushtank Thank you. It would be really helpful if you could provide an example of how do use the encoding parameters to give strong preferential network priority to the broadcast extension. Is it just setting a high minimum? A really short example would be super helpful. Thank you for all your great work.

Specifically, maximize the quality of the broadcast video

Hi Developers,
The original question was about connecting to a broadcast extension without subscribing to Tracks. This has been possible since 2.10.0. We have also updated RepalyKitExample to use EncodingParameters in order to constrain bandwidth usage, and updated the MultiPartyExample to demonstrate how to use less bandwidth when sharing the camera.
I'm closing this ticket since the original questions have all been answered.
Best,
Chris


Fix image moves permanently when swipe down

Explanation of Change

When swiping down an image attachment, it doesn't go back to its place. The root of the issue is the function that captured an old canvas value. This PR fixes it by making sure the canvas size is added to the useCallback deps.
Fixed Issues

$ https://github.com/Expensify/App/issues/51465
PROPOSAL: https://github.com/Expensify/App/issues/51465#issuecomment-2446960948
Tests

Same as QA Steps

[x] Verify that no errors appear in the JS console

Offline tests

Same as QA Steps
QA Steps

Send an attachment to any chat
Open the attachment
Swipe the image down a little
Verify it goes back to its initial position

[x] Verify that no errors appear in the JS console

PR Author Checklist

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

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

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

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

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

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

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

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

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

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

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

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

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

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

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

Screenshots/Videos

Android: Native

https://github.com/user-attachments/assets/76aa79ee-95b9-4607-bc2f-48ba9673d25a

Android: mWeb Chrome

iOS: Native

https://github.com/user-attachments/assets/bcf8204a-190e-42b1-9382-bc5ef8f2f83c

iOS: mWeb Safari

https://github.com/user-attachments/assets/b05fcb86-ad91-4865-ac4f-d184f78e176d

MacOS: Chrome / Safari

https://github.com/user-attachments/assets/425ed9e1-e683-4380-94b5-16f824d80981

MacOS: Desktop

https://github.com/user-attachments/assets/86f5c3e8-ea5a-4972-aa98-a42dda8f0815

Swiping the image on mWeb chrome throws an error (on main too).

Additional videos:
Double tap zoom:
https://github.com/user-attachments/assets/e3746fb8-a831-4b7f-9c35-561dedae0d7e
Pinch:
https://github.com/user-attachments/assets/16d804c6-335e-4034-8488-9b04ddda419e
Avatar crop modal:
https://github.com/user-attachments/assets/5616523d-c628-4d5a-941f-e9236aa33eb6

@bernhardoj  If we have just one image, everything looks fine to me, but if we upload two images, especially with different heights, then swipe a bit to the side, so that you can see both images, and then swipe down, something strange is happening:
https://github.com/user-attachments/assets/ace12fff-79a5-4417-b89e-ba069a400cc5
Can you reproduce it? I haven't tested it in main yet. I'll take a look and see if I can find the root. Thanks.

Not exactly the same, but it always behave strangely after uploading a new image, on main too.
https://github.com/user-attachments/assets/598f1458-1251-4779-a27e-5c746c1e18e9
https://github.com/user-attachments/assets/65963204-84be-40ba-9e69-a601f016837b

Reviewer Checklist

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

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

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

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

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

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

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

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

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

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

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

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

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

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

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

Screenshots/Videos

Android: Native

https://github.com/user-attachments/assets/58b1467c-b485-416c-bb51-553f80f15eb2

Android: mWeb Chrome

https://github.com/user-attachments/assets/9744ae46-2e3c-4ff3-b231-791b0c42c6db

iOS: Native

https://github.com/user-attachments/assets/3f7a0e77-1494-49c9-ad2b-bfde8abb1a21

iOS: mWeb Safari

https://github.com/user-attachments/assets/a87c0d52-2e15-48c3-a155-45b89f85a33e

MacOS: Chrome / Safari

https://github.com/user-attachments/assets/c8cfd9bf-3cb2-4c5e-857f-cc859e4a0889

MacOS: Desktop

https://github.com/user-attachments/assets/2d59ef40-e9f7-4749-8d92-ff7bfe5ff9a7

Not exactly the same, but it always behave strangely after uploading a new image, on main too.

I understand, we can try to investigate this strange behavior from the side, however, only on iOS, when after this strange behavior our initial issue is observable again, do you think they are connected? Are we be able to fix it here? If it's worth it. I can't find what might be causing it yet, I'll come back if I find anything.

Not exactly the same, but it always behave strangely after uploading a new image, on main too.

True, however, apart from this strange behavior, I believe that the problem we are trying to solve still persists, If we only have one image, everything works fine, with two:
https://github.com/user-attachments/assets/beeeb4aa-d328-4a48-aff1-8807fb15d315
What do you think @bernhardoj?

Gerat! Let me know if I can help in any way.

I'm having problem with my iOS. It doesn't respond to press.

It works normally back and I can repro this. The root cause is that the finishPanGesture isn't called because shouldDisableTransformationGestures is true.
https://github.com/Expensify/App/blob/afa7b33107747d0242acfd01d032d5339be390d9/src/components/MultiGestureCanvas/usePanGesture.ts#L233-L238
From the comment, looks like it's expected?

From the comment, looks like it's expected?

I see, thanks for clarifying, that makes sense. @bernhardoj what do you think about preventing swiping in more than one direction? Example: preventing "swiping sideways" if we are performing another gesture, in this case "swiping down". Not allowing two movements to be made at the same time. I tested it on Whatsapp and this is how they do it there, I couldn't record a video to illustrate it better, but if it wasn't clear, let me know. Do you think it would be feasible here? Thank you.

Yeah, I prefer to prevent that too, but I think we need the team's input first about changing this behavior.

Yeah I totally agree with the suggestion of only allowing swiping in one direction at a time 👍

Nice. @bernhardoj do you think we can make these changes here? Thanks.

Updated. Please check

Nice! Looking good, except for one detail: when adding a new photo, we could skip the upload by swiping the image down:

iOS: Native - main

https://github.com/user-attachments/assets/6dda9ab8-4b31-42a4-b7e0-002a46416176

Now, after the changes, I can't:

iOS: Native - testing PR

https://github.com/user-attachments/assets/2feca7f5-640e-4f8f-8c19-2c2b6c152972

@bernhardoj, was that intentional? Other than that, everything else looks great.

re-testing

Thanks for the changes @bernhardoj, in native everything looks good now:

Android: Native

https://github.com/user-attachments/assets/9bf23224-4a74-4aed-b3a2-b78e5741e221

iOS: Native

https://github.com/user-attachments/assets/104aca35-20c3-4bcd-983d-0e2a0795e3a1

However, in mobile web, when we already have some images uploaded, I can't dismiss the image by swiping down:

Android: mWeb Chrome

https://github.com/user-attachments/assets/8f1b6e51-e477-4893-af38-7d0be1a0d0e2

iOS: mWeb Safari

https://github.com/user-attachments/assets/903ec359-6dce-4824-b7f0-552515eeb5e0

Otherwise everything looks fine:

MacOS: Chrome / Safari

https://github.com/user-attachments/assets/b916720a-61bf-47a9-a51a-d9566eda161c

MacOS: Desktop

https://github.com/user-attachments/assets/218a7d67-c1f3-45f4-be09-1dc5d0d87abd

Let me know if I can help in any way. Thank you.

Retesting

Sorry @bernhardoj, but it seems to be worse on mWeb:

mobile_mWeb

https://github.com/user-attachments/assets/dbdb1401-60fc-4678-9d1d-05e03ff123a9

In native still fine:

native

https://github.com/user-attachments/assets/87f017b0-937d-4ae8-9df8-82457fba4f5e

Do you have any idea what it could be? Let me know if you find anything.

One last thing, is there another test we should add to cover the slightly changed behaviour?

...what do you think about preventing swiping in more than one direction? Example: preventing "swiping sideways" if we are performing another gesture, in this case "swiping down". Not allowing two movements to be made at the same time. I tested it on Whatsapp and this is how they do it there

One last thing, is there another test we should add to cover the slightly changed behaviour?

...what do you think about preventing swiping in more than one direction? Example: preventing "swiping sideways" if we are performing another gesture, in this case "swiping down". Not allowing two movements to be made at the same time. I tested it on Whatsapp and this is how they do it there

Well noted @Julesssss. @bernhardoj can you change it for us? Thank you.

Added the test.

Thank you @bernhardoj!  What do you think @Julesssss? Thanks.

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


add Click & minor fix

Adafruit LIS3DH Python driver
Using initial build by Matt Dyson
This build:

Adds Click detection - initiatilation routine for either single click or double click detection as per data sheet
Click detection either bu polling register or using a GPIO interrupt with user defined handler.
partitions the driver class and the test calls
Fixes bug in 16G Range (incorrect divisor)

Looks awesome - thanks! I've added a note inline about point 4.
Could you replace the tab characters with spaces though? Will fit better with the rest of the script


fix document book input name query

I believe it is a typo in The document book section form.
The input name attribute should be q for let search = move || query().get("q").cloned().unwrap_or_default(); working.

Thanks!


minor: statically bind static statically

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

npm package (@beta dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 2.2.0-prerelease-test-skip.1 :tada:
The release is available on:

npm package (@prerelease-test-skip dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Support MetaMask Snap Polkadot

Support connect with MetaMask Snap Polkadot (https://github.com/ChainSafe/metamask-snap-polkadot)

Hi, thank you for creating this Issue! Would the maintainers of this repository be receptive to receiving a Pull Request that adds support for the Polkadot Wallet Snap? Are there any resources available for contributors who would like to add support for a new wallet?

@saltict @Thiendekaco - curious about the status of this enhancement and any thoughts you may have on my previous question.

Hi, thank you for creating this Issue! Would the maintainers of this repository be receptive to receiving a Pull Request that adds support for the Polkadot Wallet Snap? Are there any resources available for contributors who would like to add support for a new wallet?

Hi @danforbes, sorry for late reply.
We are happy to review and merge contributed pull requests. Please feel free to contribute and submit PR to us anytime. Thank you so much!


Style tweak

There is a style tweak in the comment.

Use git commit --amend to rework this commit. Since it is just minor style tweak, you don't really have to explain much.


How to design a plugin that may requires one trait from interface crate, and provides another in interface crate?

Recently I am developing for a massive embedded chip debugger software. I uses abi_stable to design its plugin system, because this software may allow users to install plugins for backends, interface adapters and chip targets. I could design one interface crate, but here are still two (or maybe three) types of plugin crates that I need to implement:

Service provider plugins. They should rely on no interfaces (actually backed with operating systems or other native code), and provides services (maybe traits) in interface crate;
Adapter plugins. They may rely on one or more interfaces, providing one or more interfaces at the same time. That could represent a protocol adapter, a hub or a switch as hardware;
Consumer plugins. They could rely on interfaces, but provides nothing. That could be a debug logger or devices for measuring.

To make things clear I have an example. Users may plug a JTAG dongle onto USB slot, then connect target MCU board with this dongle.  So here I need three plugins. First one wraps WinUSB or other operating system specific functions to provide universal USB structures in interface crate. Second one wraps dongle protocol support that requires USB traits and provides JTAG traits. Third one requires JTAG and provides a universal chip target flash trait. Finally the application may enumerate all flash traits using all three plugins and pick one flash trait to perform the flash write command.
Here I need to implement all three plugins. The first could be easy as it could be implemented as a trait object that could provide to interface crate, as examples in abi_stable project have done. But the second and third ones are somehow tricky (I haven't find a way) to write, because they not only provides interfaces like usual plugins, but also requires one interface from the crate thus somehow performs just like an application.
Is there existing solutions to my problem? Or how should I design a system that allows plugin to provide interface implementations as well as requires some interfaces? Please provide with useful suggestions or example code, thanks!

This is a help-wanted issue. I don't know if it's proper to post it here; if not, please let me know. Thanks!

I haven't thought about how to design a plugin system beyond the basic "plugins are dynamic libraries that implement a fixed trait" style of plugin.
My problem is that I don't even know how this would look in a regular Rust library that doesn't use dynamic linking,and it's harder when you add abi_stable.

@rodrimati1992 Yes this is considered as a dynamic library manager. That's usually somehow the same structure if we use any ABI standard.

Many years ago when I was developing distributed system at Synapse I thought this system was useless and unnecessary, I didn't solve this problem at that time. After first release, users are not able to make plugins thus have to compile with their own code attached, resulting in many many branches and finally I was scolded badly by users for years only because I was their project developer. So after that I think it's necessary to write a plugin system like this to finish my project now.