Maker never finishes processing a rollover which results in not rolling over the CFD anymore

Version: maker 0.4.2 mainnet
This happened after a restart, when the taker trying to rollover.
The maker seems to be stuck in processing the previous rollover. It seems the rollover on the maker side never properly added a RolloverFailed event, which leads to not being able to rollover this CFD anymore.
I think this will result for closing the position.
Maker logs:
2022-02-22 12:12:14
{"timestamp":"2022-02-22T01:12:14.11142713Z","level":"WARN","fields":{"message":"Rollover failed: Failed to execute command on CFD: The CFD is already being rolled over","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::model::cfd"}

2022-02-22 12:12:13
{"timestamp":"2022-02-22T01:12:13.094641618Z","level":"INFO","fields":{"message":"Received rollover proposal","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::rollover_maker"}

2022-02-22 12:12:13
{"timestamp":"2022-02-22T01:12:13.088726235Z","level":"INFO","fields":{"message":"Received proposal from taker 87785a1289d567417a590105b8920cb3feffc3928d976cf2425eb10cd7bc7879","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::maker_cfd"}

2022-02-22 12:07:10
{"timestamp":"2022-02-22T01:07:10.257848094Z","level":"INFO","fields":{"message":"Received rollover proposal","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::rollover_maker"}

2022-02-22 12:07:10
{"timestamp":"2022-02-22T01:07:10.245095962Z","level":"INFO","fields":{"message":"Received proposal from taker 87785a1289d567417a590105b8920cb3feffc3928d976cf2425eb10cd7bc7879","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::maker_cfd"}

2022-02-22 12:04:24
{"timestamp":"2022-02-22T01:04:24.071937592Z","level":"WARN","fields":{"message":"Failed to acquire DB connection: pool timed out while waiting for an open connection","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::rollover_maker"}

2022-02-22 12:02:53
{"timestamp":"2022-02-22T01:02:53.160638345Z","level":"INFO","fields":{"message":"Received rollover proposal","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::rollover_maker"}Show context

2022-02-22 12:02:53
{"timestamp":"2022-02-22T01:02:53.148288852Z","level":"INFO","fields":{"message":"Received proposal from taker 87785a1289d567417a590105b8920cb3feffc3928d976cf2425eb10cd7bc7879","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::maker_cfd"}

2022-02-22 11:59:44
{"timestamp":"2022-02-22T00:59:44.19816453Z","level":"DEBUG","fields":{"message":"Unable to calculate profit/loss without current price","order_id":"67413ff7-a4e2-4594-badb-7ecdfdbed192"},"target":"daemon::projection"}

Taker logs:
The taker keeps trying, but it always fails:
2022-02-22 01:22:53  WARN daemon::model::cfd: Rollover failed: Maker did not respond within 30 seconds order_id=67413ff7-a4e2-4594-badb-7ecdfdbed192
2022-02-22 01:23:39  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 30
2022-02-22 01:23:39 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645492980), bid: Price(36990.5), ask: Price(36991) }
2022-02-22 01:24:27  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 22
2022-02-22 01:24:27 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493040), bid: Price(36951.5), ask: Price(36952) }
2022-02-22 01:25:15 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493100), bid: Price(36914.5), ask: Price(36915) }
2022-02-22 01:25:15  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 21
2022-02-22 01:26:03  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 22
2022-02-22 01:26:15 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493160), bid: Price(36952.5), ask: Price(36953) }
2022-02-22 01:26:51 DEBUG daemon::monitor: Got notification for new block block_height=724379
2022-02-22 01:26:51  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 21
2022-02-22 01:27:15 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493220), bid: Price(36945), ask: Price(36945.5) }
2022-02-22 01:27:39  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 21
2022-02-22 01:28:28 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493280), bid: Price(36908.5), ask: Price(36909) }
2022-02-22 01:28:28  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 22
2022-02-22 01:28:28  WARN daemon::model::cfd: Rollover failed: Maker did not respond within 30 seconds order_id=67413ff7-a4e2-4594-badb-7ecdfdbed192
2022-02-22 01:29:16 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493340), bid: Price(36891), ask: Price(36891.5) }
2022-02-22 01:29:16  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 21
2022-02-22 01:30:03  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 20
2022-02-22 01:30:15 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493400), bid: Price(36913), ask: Price(36913.5) }
2022-02-22 01:30:51  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 21
2022-02-22 01:31:15 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493460), bid: Price(36890.5), ask: Price(36891) }
2022-02-22 01:31:39  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 21
2022-02-22 01:32:26 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493520), bid: Price(36954), ask: Price(36954.5) }
2022-02-22 01:32:26  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 21
2022-02-22 01:33:14  WARN daemon::connection: Heartbeat pulse measurements fell behind more than heartbeat interval (10), likely missing a heartbeat from the maker. Diff between pulses: 22
2022-02-22 01:33:15 DEBUG daemon::bitmex_price_feed: Received new quote: Quote { timestamp: Timestamp(1645493580), bid: Price(36957.5), ask: Price(36958) }
2022-02-22 01:33:19  WARN daemon::model::cfd: Rollover failed: Maker did not respond within 30 seconds order_id=67413ff7-a4e2-4594-badb-7ecdfdbed192

Eventually this leads to this problem on the maker:

2022-02-22 12:43:30
{"timestamp":"2022-02-22T01:43:30.48956953Z","level":"WARN","fields":{"message":"Actor daemon::maker_cfd::Actor<daemon::oracle::Actor, daemon::maker_inc_connections::Actor, daemon::wallet::Actor> has been processing message daemon::maker_cfd::AcceptRollover for 1840 seconds","log.target":"xtra::context","log.module_path":"xtra::context","log.file":"/home/runner/.cargo/git/checkouts/xtra-092fb79b35830946/b90ffec/src/context.rs","log.line":318},"target":"xtra::context"}

it appears the maker is stuck processing the rollover

Restarting the taker does not help (i.e. re-estabilshing a connection from the taker side does not help).
The maker remains stuck, so I assume this will lead to my CFD being force closed unless I restart the maker:
2022-02-22 01:46:57  WARN daemon::model::cfd: Rollover failed: Maker did not respond within 30 seconds order_id=67413ff7-a4e2-4594-badb-7ecdfdbed192

After some more analysis I think accepting the rollover in maker_cfd1 actually gets stuck. It keeps sending to the rollover actor forever and never finishes. I can wrap that in timeouts as well (same for all the .send to actors in maker_inc_connections

Note that when maker_cfd actor is down nothing really works anymore. The maker also does not send out orders anymore

This was patched using timeouts for sending messages to actors during ephemeral protocol handling in taker and maker as part of release 0.4.4.
Long term solution outlined here: https://github.com/itchysats/itchysats/issues/1469

On the taker side we changed the timeout patch to dispatching the messages to the actors async. See #1515

This was for an old version.


Added VX Viewer

also fixes https://cognitedata.atlassian.net/browse/CONTEXT-264

Video: https://drive.google.com/file/d/16aMW_B2Hb89jNEhXLyX8eZU-g22Vg2j0/view?usp=sharing

they are sadly not on npm :'( i copied it and modified from a random gist


the size of Alluxio docker image is too large

Alluxio Version:
2.1.0-SNAPSHOT
Describe the bug
The docker image of allxuio/alluxio:2.1.0-SNAPSHOT is 1.09 GB. It's too large.
To Reproduce
Steps to reproduce the behavior (as minimally and precisely as possible)
Expected behavior
A clear and concise description of what you expected to happen.
Urgency
Describe the impact and urgency of the bug.
Additional context
Add any other context about the problem here.

/ping @madanadit

This operation increases disk size from 740MB to 1.3GB
# if Alluxio user, group, gid, and uid aren't root|0
# then create the alluxio user and set file permissions accordingly
RUN if [ ${ALLUXIO_USERNAME} != "root" ] \
    && [ ${ALLUXIO_GROUP} != "root" ] \
    && [ ${ALLUXIO_UID} -ne 0 ] \
    && [ ${ALLUXIO_GID} -ne 0 ]; then \
      addgroup -g ${ALLUXIO_GID} -S ${ALLUXIO_GROUP} && \
      adduser -u ${ALLUXIO_UID} -S ${ALLUXIO_USERNAME} -G ${ALLUXIO_GROUP} && \
      usermod -a -G root ${ALLUXIO_USERNAME} && \
      mkdir -p /journal && \
      chown -R ${ALLUXIO_UID}:${ALLUXIO_GID} /opt/* /journal && \
      chmod -R g=u /opt/* /journal; \
    fi

Seems the operation above doubles the size of docker images.
docker history alluxio/alluxio:test
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
f493109eb43b        4 minutes ago       |5 ALLUXIO_GID=1000 ALLUXIO_GROUP=alluxio AL…   628MB
bb616ecb5075        4 minutes ago       /bin/sh -c #(nop) COPY file:ce5b6a28ee56de07…   6.18kB
aa38d0d87dbf        4 minutes ago       /bin/sh -c #(nop) COPY dir:07e9f97965b1e71a2…   83B
0a229b64821a        4 minutes ago       |5 ALLUXIO_GID=1000 ALLUXIO_GROUP=alluxio AL…   22B
7d36e7f82818        4 minutes ago       /bin/sh -c #(nop) ADD file:eba0045cd7db83531…   628MB
a87758d5b735        5 minutes ago       |5 ALLUXIO_GID=1000 ALLUXIO_GROUP=alluxio AL…   7.12MB
6c43ed8c07ad        5 minutes ago       /bin/sh -c #(nop)  ARG ALLUXIO_GID=1000         0B

I think it's due to chown: https://stackoverflow.com/questions/30085621/why-does-chown-increase-size-of-docker-image


Update headers with glossary and simplified examples

Overview
closes #1628
Test Notes/Sample Code

Notes:

@jonthegeek This is ready for re-review. Along with a few typos and \dontruns being removed, I also had to fix most of the visualization and widget examples to used filtered versions of the reporting data frames so that only one metric and snapshot date (if applicable) was being fed into the functions. This wasn't caught earlier because it doesn't throw an error- it just creates a chaotic plot. Should we add a safeguard against this in the form of an error message? or are we assuming that most people are using MakeCharts() and so they don't have to worry about this filtering typically? @jwildfire @samussiah

we could also auto-filter to latest date and first metric in these functions and provide an alert/message that lets the user know what happened. This way, the output will always be reasonable, and if the user wanted something different, they will be aware of the filtering that occured.

@lauramaxwell We ran into this issue in the POC I'm updating for Friday's meeting, in Widget_GroupOverview(). There we're manually filtering to dplyr::filter(SnapshotDate == max(SnapshotDate)), but it would probably be good to build that sort of check into everything. I know at least one function does it right now. I think @jwildfire was thinking we'd standardize that for 2.1.


getInitialProps from _app are lost when using withPasswordProtect()

Describe the bug
Any props set within custom _app component are lost when exporting withPasswordProtect()
To Reproduce
Steps to reproduce the behaviour:

Setup a custom _app file with getInitialProps setting a value.
Export using withPasswordProtect()
Login successfully
Console log _app props on page and they're undefined
Leave everything as is except remove withPasswordProtect() and your props will re-appear on the page

Expected behavior
Props from _app shouldn't be overwritten or lost.
Stack
Node fermium, Next 12, next-password-protect 1.7

+1

You should be able to attach getInitialProps to the instance returned from the HOC instead. See this modified example from the readme:
import { withPasswordProtect } from "next-password-protect";

// Before: export default App;
const ProtectedApp = process.env.PASSWORD_PROTECT
  ? withPasswordProtect(App, {
    // Options go here (optional)
    loginApiUrl: "/login",
  })
  : App;

// Set getInitialProps on HOC instance
ProtectedApp.getInitialProps = () => {
  //
};

export default ProtectedApp;


Getting error wrong file name all time when I'm using stdin

PHP CS Fixer version 1.10
cat ./src/RM/Response.php | php ./bin/php-cs-fixer fix --diff -
   1) stdin.php
      ---------- begin diff ----------
      --- Original
      +++ New
      @@ @@

      -class Response extends RM\Response
      +class stdin extends RM\Response

You should turn off PSR0 fixer.
It was also already disabled by default in 2.x line.
Also, it would be great to disallow run of that fixer (return false in supports method) if input file is StdInFile.

@maZahaca please try #1356

Thanks!

Closing due to merge of #1356


Add ability to apply easing functions to curves

This allows you to apply a bezier easing function any shared curves, as discussed in #16. The endpoints of the existing curve are preserved, and the inner values are fit to the chosen curve.

@stevenpetryk I'm happy to merge this after the merge conflicts are resolved 👍


Cannot convert to .onnx

Running:
Traceback (most recent call last):
  File "scripts/convert_to_onnx.py", line 5, in <module>
    from models.with_mobilenet import PoseEstimationWithMobileNet
ModuleNotFoundError: No module named 'models'

causes errors.
Is there a reason I am not able to convert the .pth to .onnx using the included script?

I pulled from the OpenVINO model zoo and converted using OpenVINO utilities, no longer necessary

Great!


Graph Creation Request Fails When Specifying List of document_ids

Describe the bug
Call to create_graph() with list of document_ids via Python SDK yields SQLAlchemy error
To Reproduce
Steps to reproduce the behavior:

Ingest documents
Enumerate document ids by calling get_all_documents()
Attempt to initiate graph generation by calling create_graph() with list of document_ids from step 3
See error:

[
  "This step failed with error (psycopg2.errors.UndefinedFunction) operator does not exist: uuid = text\nLINE 4:          WHERE document_id = ANY(ARRAY['e28e8cd3-03e8-5b07-8...\n                                   ^\nHINT:  No operator matches the given name and argument types. You might need to add explicit type casts.\n\n[SQL: \n            SELECT document_id, group_ids, user_id, type, metadata, title, version, size_in_bytes, ingestion_status, created_at, updated_at, restructuring_status\n            FROM document_info_local_llm_neo4j_kg\n         WHERE document_id = ANY(%(document_ids)s)\n            ORDER BY created_at DESC\n            OFFSET %(offset)s\n            LIMIT 100\n        ]\n[parameters: {'document_ids': ['e28e8cd3-03e8-5b07-85c3-2beef509fbb0', 'b54b0b42-e0cd-5f18-b66c-9c2d6ab197ab', 'd8e36b31-7886-5b6d-8f56-8efec19f5bf9', '157b2b58-0fdc-58db-93aa-84ed ... (3700 characters truncated) ... -e036-5851-8ebc-8c92ef765a25', '041c2250-1da4-51e3-932e-8d0364daccf1', 'ea553d32-d2ff-5604-9437-ae49b8a0e0a1', '1c7f0a3e-4f40-5339-801a-6a53c408ec44'], 'offset': 0}]\n(Background on this error at: https://sqlalche.me/e/20/f405)\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py\", line 1967, in _exec_single_context\n    self.dialect.do_execute(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py\", line 941, in do_execute\n    cursor.execute(statement, parameters)\npsycopg2.errors.UndefinedFunction: operator does not exist: uuid = text\nLINE 4:          WHERE document_id = ANY(ARRAY['e28e8cd3-03e8-5b07-8...\n                                   ^\nHINT:  No operator matches the given name and argument types. You might need to add explicit type casts.\n\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.10/site-packages/hatchet_sdk/worker/runner/runner.py\", line 191, in inner_callback\n    output = task.result()\n  File \"/usr/local/lib/python3.10/site-packages/hatchet_sdk/worker/runner/runner.py\", line 309, in async_wrapped_action_func\n    raise e\n  File \"/usr/local/lib/python3.10/site-packages/hatchet_sdk/worker/runner/runner.py\", line 285, in async_wrapped_action_func\n    return await action_func(context)\n  File \"/app/core/main/hatchet/restructure_workflow.py\", line 83, in kg_extraction_ingress\n    documents_overviews = self.restructure_service.providers.database.relational.get_documents_overview(\n  File \"/app/core/providers/database/document.py\", line 117, in get_documents_overview\n    results = self.execute_query(query, params).fetchall()\n  File \"/app/core/providers/database/relational.py\", line 31, in execute_query\n    return execute_query(self.vx, query, params)\n  File \"/app/core/providers/database/base.py\", line 16, in execute_query\n    result = sess.execute(query, params or {})\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py\", line 2362, in execute\n    return self._execute_internal(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py\", line 2256, in _execute_internal\n    result = conn.execute(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py\", line 1418, in execute\n    return meth(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/elements.py\", line 515, in _execute_on_connection\n    return connection._execute_clauseelement(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py\", line 1640, in _execute_clauseelement\n    ret = self._execute_context(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py\", line 1846, in _execute_context\n    return self._exec_single_context(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py\", line 1986, in _exec_single_context\n    self._handle_dbapi_exception(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py\", line 2355, in _handle_dbapi_exception\n    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py\", line 1967, in _exec_single_context\n    self.dialect.do_execute(\n  File \"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py\", line 941, in do_execute\n    cursor.execute(statement, parameters)\nsqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedFunction) operator does not exist: uuid = text\nLINE 4:          WHERE document_id = ANY(ARRAY['e28e8cd3-03e8-5b07-8...\n                                   ^\nHINT:  No operator matches the given name and argument types. You might need to add explicit type casts.\n\n[SQL: \n            SELECT document_id, group_ids, user_id, type, metadata, title, version, size_in_bytes, ingestion_status, created_at, updated_at, restructuring_status\n            FROM document_info_local_llm_neo4j_kg\n         WHERE document_id = ANY(%(document_ids)s)\n            ORDER BY created_at DESC\n            OFFSET %(offset)s\n            LIMIT 100\n        ]\n[parameters: {'document_ids': ['e28e8cd3-03e8-5b07-85c3-2beef509fbb0', 'b54b0b42-e0cd-5f18-b66c-9c2d6ab197ab', 'd8e36b31-7886-5b6d-8f56-8efec19f5bf9', '157b2b58-0fdc-58db-93aa-84ed ... (3700 characters truncated) ... -e036-5851-8ebc-8c92ef765a25', '041c2250-1da4-51e3-932e-8d0364daccf1', 'ea553d32-d2ff-5604-9437-ae49b8a0e0a1', '1c7f0a3e-4f40-5339-801a-6a53c408ec44'], 'offset': 0}]\n(Background on this error at: https://sqlalche.me/e/20/f405)\n"
]

Expected behavior
Successful initiation of extraction for graph generation
Screenshots

Desktop (please complete the following information):

OS: Ubuntu
Browser Fireforx (130.0 64-bit)
Version: 24.04.1 LTS

Additional context
r2r version
3.1.20

Looks like there's an issue with the sql query. I'll push a fix shortly. Meanwhile, could you try running create-graph with no args? It should run on all ingested documents.

@br00t4c Can you try updating in a few minutes? We are pushing a fix related to the way that prompts are returned by the system, which should address the issue you are seeing.


Feature request: Create a bundle of all javascript cards

I was thinking when updating Lovelace cards; if you where to build a bundle of all the files, then you wouldn't need to add every cards javascript files to the lovelace-config.
I assume it might create a caching problem if hosted by home assistant, so you also might want to create a webserver for the hosting with strict cache-control headers.

This would indeed be a good feature, but I don't see this as being viable now.

Some plugins require to be loaded before others.
HACS cannot be 100% about the type to set.

Because of this, I can not provide a stable solution for this.


Docs site bug with # in code blocks

The docs site has an issue with # in code blocks being parsed as headers and are shown in the sidebar.
e.g. http://fuse-box.org:3333/plugins/vueplugin

Thanks, good one! 👍


dependency-check fails to read content of Package.swift

Background:
We have many libraries that do include other libraries in them. These are listed in Package.swift. For example take a look firebase Package.swift.
https://github.com/firebase/firebase-ios-sdk/blob/master/Package.swift
Issue: Dependency check fails to check these dependencies and therefore fails to check many dependencies actually used in projects.
Scan was run like this in root of our project
dependency-check --enableExperimental -s .

@jeremylong I can see this pr went in. Did it fix the issue? Wanted to try but there is not release yet with this change.
https://github.com/jeremylong/DependencyCheck/pull/3443

Tested with release 6.3.0 and result is still the same.

Noticed that analyzer.swift.package.resolved.enabled=true is missing from dependencycheck.properties. Is there plans to enable it?
PS
Took the project down, added this config and managed to compile the project but have some run time issues so not able to test my self.

We accept PRs!

Good to know! Lets see what we can do here :)

Works with latest. Closing the ticket


This is wonderful

Please excuse me if I open an issue for this. But I want to share that, in my opinion, U++ is one of the most wonderful C++ tools!
Thank you very much for the great work.
Feel free to close this issue when you want.

Well, spread the word :)
Thanks.
On Tue, Feb 7, 2023 at 10:21 AM Davide Rosa @.***>
wrote:

Please excuse me if I open an issue for this. But I want to share that, in
my opinion, U++ is one of the most wonderful C++ tools!
Thank you very much for the great work.
Feel free to close this issue when you want.
—
Reply to this email directly, view it on GitHub
https://github.com/ultimatepp/ultimatepp/issues/145, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AARH236QI4GG2GQD3KEYBOLWWIHYFANCNFSM6AAAAAAUTWQJYA
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

Hello,
Thanks for good words! If you want to talk more I encourage you to join our forum and Discord server.
Klugier

Thank you a lot for the invitation to the forum and Discord, I will join.
And sure I will promote the use of U++!


[Improve]Use Jackson replace Fastjson (#1971)

Check list

[ ] Code changed are covered with tests, or it does not need tests for reason:
[ ] If any new Jar binary package adding in your PR, please add License Notice according
New License Guide
[x] If necessary, please update the documentation to describe the new feature. https://github.com/apache/incubator-seatunnel/tree/dev/docs

Hi Kris, #1971 will release on 2.1.2, Do we must merge this PR into 2.1.2 to reduce risk？

Hi Kris, #1971 will release on 2.1.2, Do we must merge this PR into 2.1.2 to reduce risk？

I think it's better best


plans for services?

I'm pretty sure they don't have an official api, but have you looked into adding/deleting from the lists as services? I used ourgroceries back in the day but moved away because of lack of HA integration actually, so this is very cool regardless.

yeah I plan to add other functionality. I wrote the python library as well here so things like deleting/adding and crossing things out need to be added ther first

@ljmerza Is this something you'd be looking for contributions on? I'd also like to use add/remove services and am happy to help. But I see you already made some updates to the python library for this so I wouldn't want to duplicate effort if you have something already in the works...

All I have left is to add the lovelace card logic but I've been brainstorming how to make the UI. I'm thinking either a regular input appears or a modal for adding a new item. Also deciding on a confirm modal on delete.

@burnnat added ability to add and remove items from a list in v1.2.0


Referral

Keep track of how members arrive to the collectives. see #18 for more detail.

https://github.com/OpenCollective/opencollective-website/issues/158


Moving a file to another folder will erase existing file with no confirmation and no backup

Godot 3.0.4
I was reorganizing a project just before starting to version it, but I realized I moved a file in another folder where a file of the same name already existed. Godot erased the old one without asking me, and I cannot find the file in the recycle bin... so I actually lost whatever that file contained.
Please add a dialog for this.
Repro:

Have the following file structure:

folder/
- camera.gd
- subfolder/
    - camera.gd

Move camera.gd in a folder where the other camera.gd is
Notice Godot didn't ask anything, nothing in the log, and you lost one of the two files forever

Looks the same as #18622 (already solved in master)

Indeed, duplicate of #18622.


Unique optimizer denoising options

Issue Description
What did you expect to see happen?
I would like to be able to manipulate the number of optimization point evaluations to mitigate noise from stochastic models separate from increasing the number of gradient evaluations to improve the gradient estimation.
What did you see instead?
Currently these are mixed together as "numGradAvgIterations".
This is critical for improving optimizing on the hybrid project.

For Change Control Board: Issue Review
This review should occur before any development is performed as a response to this issue.

[x] 1. Is it tagged with a type: defect or improvement?
[x] 2. Is it tagged with a priority: critical, normal or minor?
[x] 3. If it will impact requirements or requirements tests, is it tagged with requirements?
[x] 4. If it is a defect, can it cause wrong results for users? If so an email needs to be sent to the users.
[x] 5. Is a rationale provided? (Such as explaining why the improvement is needed or why current code is wrong.)

For Change Control Board: Issue Closure
This review should occur when the issue is imminently going to be closed.

[x] 1. If the issue is a defect, is the defect fixed?
[x] 2. If the issue is a defect, is the defect tested for in the regression test system?  (If not explain why not.)
[x] 3. If the issue can impact users, has an email to the users group been written (the email should specify if the defect impacts stable or master)?
[x] 4. If the issue is a defect, does it impact the latest stable branch? If yes, is there any issue tagged with stable (create if needed)?
[x] 5. If the issue is being closed without a merge request, has an explanation of why it is being closed been provided?

Closure checklist passed...
Closure approved via #1163 (New optimization class)


Session in incorrect state after JupyterLab build

To reproduce

Open a pipeline to start a session
Go to the global settings to configure JupyterLab
Press "BUILD"

Note: The pop-up incorrectly shows twice and the build is actually never triggered.

Navigate back to the pipeline editor.

Note: It indicates that the session is still running. However, running docker ps shows that the session's containers were successfully stopped by the build action.
What should happen

The pop-up with warning should only show once
The JupyterLab build should have been triggered
The session status indicator in the pipeline editor should correctly represent the state of the session.

Fixed by https://github.com/orchest/orchest/pull/245


Fixed glog, gmock and gflags dependencies.

Fixes https://github.com/google/google-api-cpp-client/issues/33

Also fixes https://github.com/google/google-api-cpp-client/issues/36


Layout bug on iPad when contained in split view controller

Something definitely changed between previous version and 6.0 beta regarding layout. This issue does not exist in previous version or iPhone. Rotating iPad fixes the issue temporarily until a new controller is used.

I am using iOS8 with the current version of JSQMessagesViewController and the problem seems to appear again using a SplitViewController. The problem is here in JSQMessagesCollectionViewFlowLayout.m

(CGFloat)itemWidth
{
return CGRectGetWidth(self.collectionView.frame) - self.sectionInset.left - self.sectionInset.right;
}

self.collectionView.frame returns 320.0 an 703.5 during calculation of bubble sizes
Any idea how to fix it?


Smithy logo is cut off in new docs website in Firefox

Both the v1 and v2 doc websites exhibit this behavior. I can't reproduce in Chromium.

Thanks for reporting. I'm unable to reproduce this behavior, I'll need some more information about your environment. What is your operating system, and what is the Firefox version?

Firefox 103.0 on Ubuntu 18.04.6.

I can reproduce with Firefox 104.0.1 on Ubuntu 22.04 too.

Reproducible with FF on 20.04.
The preferred font Open Sans is not installed (seemingly by default), so Firefox ends up choosing DejaVu Sans as sans-serif for the SVG and both the overall width and weight of the text is affected. Chrome, for me, chooses Liberation Sans for sans-serif, which just so happens to fit within the viewbox.
Installed fonts-open-sans and the logo then appeared similar to Chrome. Removed it, and the logo was again distorted and cut off.
For something as visually-critical as a logo seems like we wouldn't want to rely on users having the right fonts. We could keep using an SVG version of this logo if we convert the text to a path instead. The logo looks like it could also use some cleanup regarding the hammer - it's a raster image, but is a simple shape and looks straightforward to turn into a path. Or just go full raster with the logo for browser usage (doesn't seem to exist in the repo yet). :shrug:


Documentation build not publishing to gh-pages correctly

In commit f9f2250356ba494a08f14ec7b some of the Markdown-based documentation was updated. The doc build for that commit ran successfully, but it did not update the gh-pages branch correctly, so the static documentation pages are stale.

The issue was solved by giving the right permissions to the account that publishes the pages on the Microsoft/Bond repo.


Add source views and forms to spree admin

This pull requests adds missing source views for CreditCard, Konbini, BankTransfer, WebMoney, and PayEasy. I've managed to recycle the checkout forms used when creating payments in the spree admin dashboard.
A few bugs I found and fixed when adding these forms:

We needed to permit attributes in Admin::PaymentsController for create orders via spree admin
The Javascript code for WebMoney would not work in the admin dashboard because it was inside frontend.js. I've inlined the Javascript to be included with the webmoney partial now
WebMoney was crashing because can_capture? was calling expires_at which the webmoney tables doesn't have because its a synchronous payment method.

TODO

Konbini, PayEasy, and Bank Transfer payments cannot be voided (we will need to disable this feature in spree)
Creating a payment in spree admin doesnt not actually create a payment in Komoju. I'll need to investiage why this is today.

@shioyama Think you could take a look? This just fixes the views in spree admin. There are a few other bugs related to "capturing" and "voiding" payments which I'll look into now.

@camelmasa's going to have a look at it.

@rramsden > This just fixes the views in spree admin
I confirmed that. Yes, that was fixed now.
Please continue to investigate for fix other bugs.

@rramsden I checked that failed payment's prepaid number will be blank.

Related those bugs :question: I don't know that.

@camelmasa is that a bug or a feature? haha

I'm getting an error about a missing method with_public_profile in Spree::Konbini on the new payments page, maybe my setup is different, just posting here for now:

I'm not really sure maybe our setups are different, but when I started working on this I had to mess around with the reusable_sources method which is called in the payment form here. I'm not sure how it would render without doing something about that because reusable_sources calls sources_by_order which assumes there is a scope with_payment_profile on the source (which does not exist for alternative payment methods). I had to add something there to get this view to render correctly for me.
Maybe my setup was different,  are you testing with enable_customer_profiles on or off? I'll keep digging.

So I find that if I add these scopes + method to all Komoju payment methods (other than credit card) the issue is gone:
scope :with_payment_profile, -> {}
scope :default, -> {}

def reusable_sources
  []
end

And actually about the latter method Spree mentions in a comment in the code that this should be overridden for custom gateways, so this makes sense, but I still don't understand how you guys didn't see it. Maybe our versions of spree or something are different? I'm running 3-0-stable (from the github branch), maybe that's the difference.

Confirmed that I see the error with 3.0.4 as well, fixed with the method added.

I also find that clicking "capture" on say a konbini payment does try to go to the gateway to capture it, but since there is no capture method on the activemerchant gateway it errors and falls through to capture(stream) in activesupport.
But actually I also see that when I create the konbini payment from the admin it does create it on Komoju, see below:

I can't capture it because of the issue above but that should just be a matter of aliasing capture to purchase or something in the konbini gateway. Not sure why we're seeing different things...

So adding a method capture to the am gateway allows you to capture a konbini payment that has been authorized on komoju:
def capture(money, payment, options = {})
  Response.new(true, "force captured")
end

Of course this does not mark the payment as captured on Komoju because we have no endpoint for doing that (normally it would only be captured when the customer actually pays, and in this case nobody has actually paid). So not sure if we actually want to allow this, but it does seem to work for me as expected.

Actually I think we can just return false from can_capture? for all asynchronous methods (konbini, bank transfer, payeasy), since you should not be able to capture them manually from spree anywhere (just through the callback, which uses payment.complete! which is not affected by can_capture?). That way the capture buttons will not show for those payment methods and we don't have to worry about it.
We can also get rid of the void buttons for these payment methods by changing can_void? to just return false always.

@shioyama thanks I was also thinking of just returning can_capture? since we can't capture directly from spree (they should be captured in Komoju). I will also set can_void? to false since out gateway doesn't support authorization/voiding.

@rramsden actually also just redefining actions to remove those should do it I think.

@shioyama I've removed void and capture actions from alternative payments

Thanks!


[Basic question] What are the learnable model parameters in Colbert?

Hi, I'm new to neural nets and pytorch, and after reading your paper+code I wasn't 100% sure what the learnable parameters in ColBERT are. I saw that you were responsive to even basic questions on Github (which is great IMO 👍👍), so I figured I'd ask.
Question 1: based on my understanding, in ColBERT we learn:

The linear embedding layer that maps from BERT's output dimension to the dimension used for MaxSim. This is learned from scratch?
Next, we fine-tune the pre-trained embeddings for all terms in BERT's vocabulary. This includes "[meta]" used in query augmentation, and however BERT represent "[Q]" and "[D"]. That is to say, we don't learn any new parameters here, rather we fine tune existing BERT parameters to the extractive Q&A datasets?

That's it right?
Question 2: in your paper in Section 3.2, Equations (1) for E_q and (2) for E_d before normalizing, you apply "CNN" to the BERT embeddings. Does this mean convolutional neural nets or something else? Is CNN represented anywhere in the code in forward e.g. for the Query?

Thanks for the questions, @maksimt!
The learnable parameters are all of the BERT ones (including the embedding layer for the vocabulary as well as all of the BERT encoder layers) and also the linear layer, which is learned from scratch indeed.
The CNN in the equation you mention refers to the linear layer. It was initially implemented as a unit-kernelsize CNN when we were exploring various designs.

Marking as resolved. Feel free to re-open if you have more questions!


@named annotation with condition

I get a use case where i needed two different interfaces to be provided with the same name, depending on API version (android)
@provides
@CustomScope
@Named("NotificationsJobManager")
AppJobManager getAlarmManagerJobManager() {...}

@provides
@CustomScope
@Named("NotificationsJobManager")
AppJobManager getJobSchedulerJobManager() {...}

JobScheduler appears on Android Lollipop, so it will be great to have something like:
@provides
@CustomScope
@Named("NotificationsJobManager")
AppJobManager getAlarmManagerJobManager() {...}

@provides
@CustomScope
@Named("NotificationsJobManager")
@Condition(Build.Version.SDK_CODE == 21)
AppJobManager getJobSchedulerJobManager() {...}

This will work like this:

If more than one @provides are annotated with same @named it will not compile
If those @named have a @condition annotation:

@condition annotated fields: only provide this ones if meet condition
method without annotation: use by default

Move the condition inside the method and alter the return value based on it. Alternatively, you can apply different modules based on the API level. Both of these are vastly more powerful since you can actually use runtime state in your conditionals (something that is required for your non-working example).


Sequencer Dockerfile

Tested building with: docker build -t sequencer .
Then:
➜  ~ docker run sequencer
node 0.1.0
Alberto Sonnino<EMAIL_ADDRESS>LambdaClass<EMAIL_ADDRESS>
USAGE:
    node [OPTIONS] <SUBCOMMAND>

OPTIONS:
    -h, --help       Print help information
    -v, --verbose    Turn debugging information on
    -V, --version    Print version information

SUBCOMMANDS:
    deploy    Deploy a local testbed with the specified number of nodes
    help      Print this message or the help of the given subcommand(s)
    keys      Generate a new keypair
    run       Run a single node

You probably have this planned for another PR, but it would be nice to have a makefile that builds/runs the image

You probably have this planned for another PR, but it would be nice to have a makefile that builds/runs the image

Exactly! The docker-compose.yml PR https://github.com/lambdaclass/starknet_stack/pull/27 is going to have that.


Out-of-workspace .code-snippets files missing from search in open editors

I think just the .code-snippets files.  At least no problem for these files:
    C: \Users\Mark\test.js                                             <= no workspace
    C: \Users\Mark\folder - operations\extension.js    <= a different workspace
Originally posted by @ArturoDent in https://github.com/microsoft/vscode/issues/115315#issuecomment-770049977

Hmm, I think these are probably under vscode-userdata scheme, which doesn't get searched by ripgrep. Same issue exists for settings.json.

Hmm, I think these are probably under vscode-userdata scheme, which doesn't get searched by ripgrep. Same issue exists for settings.json.


Fix LDAP user group related issues

User groups should not have same DN
Should not import an LDAP group if there is a user group with same DN

Pull Request Test Coverage Report for Build 7957

8 of 32 (25.0%)  changed or added relevant lines in 2 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.03%) to 63.893%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/ui/api/projectmember.go
7
31
22.58%

Totals

Change from base Build 7958:
-0.03%

Covered Lines:
11987

Relevant Lines:
18761

💛  - Coveralls


Implement blind relay support

This PR implements client connection support for the blind relay protocol (https://github.com/holepunchto/protomux-blind-relay). This allows peers running in both client and server mode to establish connections to other peers through blind relays. Additionally, an initial implementation of a connection pool has been added, providing a way to more efficiently manage and deduplicate connections to other peers. When provided with a connection pool, peers will use the pool for outbound connections to blind relays.

Removed use of the connection pool for outbound connections to relays for now and instead destroy the relay socket when the raw stream closes. This isn't optimal, but should at least be correct.

Thank you both of you, this is huge. 🙏🥳


Performance optimization:

"findLeo" seems to take 80% of the runtime for a JSON grammar example.

Avoids iterating over the row twice.
Avoids the creation of the anonymous function in the map/filter
high order functions.

Results in Chrome (V8).
X3 speed in JSON Grammar + Tokenizer.
x2 speed in JSON Grammar without Tokenizer.

Haha, see, this is exactly the kind of thing I would never think to do. I come from a Scheme background where that sort of thing is considered an abomination… :-)
Thank you for the optimization. I'm sure this kind of error is present all over nearley's source.

It is indeed an abomination :cry: .
But not an error. Only the hot spots that need to be optimized like that.
It's best that as much of the code as possible will stay in a functional style for maintainability.
(and sanity :smile: )
Here is an example of a super optimized RegExp based Lexer Tokenize method:
https://github.com/SAP/chevrotain/blob/master/src/scan/lexer_public.ts#L250
It is all for and while. no anonymous functions, no recursion, not even splitting to sub functions (~200 lines!) to avoid unnecessary function invocations.
On the other hand, code that only runs once on the initialization of that same Lexer engine instances and thus is not a hot spot. is using a much more functional style:
https://github.com/SAP/chevrotain/blob/master/src/scan/lexer.ts#L41
There are no absolutes, the most suitable tool/paradigm for the job should be chosen.

@bd82 To be fair, a lot of this mess can be avoided with a suitable JavaScript -> JavaScript compiler :-)

@bobbybee Such as?
Does Babel have a plugin that transforms functional code to imperative code?
Or are you referring to some other transpiler ?

@bd82 It's been a while, but I imagine Closure Compiler would do this if it's such an important optimization, no?

Lets assume that it does do so for built-in JavaScript high order functions (map/filter/forEach).
That is easier, because their semantics are known (part of ECMA spec). although identifying that the the built-in functions are used could still be problematic.
Example:
var hasNativeLike = {
  map: function() { return 666},
  filter:function() { return this.map()}
}
var canBeOptimized = [1,2,3,4].map(...).filter(...)
var shouldNotBeOptimized = hasNativeLike.filter(...)

But would it do so for the dozens of custom methods commonly used by a projects like Lodash?  or Ramda?
var _ = require("lodash");
var result = _.dropWhile(_.reject([1,2,3], (x) => x % 2 ), (y)=> y >1)

In that case the semantics are not known in advance thus performing the optimization is harder.
I don't know what it can really do but from
the little details I managed to find about Google's closure compiler is that when advanced optimizations are active it performs dead code elimination and function inlining (in some cases).
not complete code transformations.


how to compile

hi:
could you detailed instructions the compiling steps?
thanks

Added a Dockerfile that takes care of this.


Tickets/DN-38649: derivation of senM for auxTel

Tech note describing the calculation of sensitivity matrix based on March 10th, 2023 observations.

added   numexpr_logger.setLevel(WARN)
to suppress these

View entire conversation on ReviewNB

Moved that to a section earlier.

View entire conversation on ReviewNB

Added explanation at the beginning of the tech note

View entire conversation on ReviewNB

added explanation at the beginning of this section

View entire conversation on ReviewNB

All review comments implemented, merging.


[Bug]-[1000]:Preserve the scroll position when coming back to the parent's property pane

Steps to reproduce the behaviour:

Drag and drop table widget on canvas
Open property pane
Click on column properties
Now click on back icon
Observe that user scroll to top and scroll is not maintained

@riodeuno I too feel this should be the intended behaviour, Can you think of a way to achieve this on a global level?

@somangshu It is clear that the panels open only on click of a property control which enables such a behaviour. In this case the primaryColumnsControl. When we close or go back in a panel we can make sure to scroll to the concerned property control. We're implementing something similar in the undo/redo feature.
Having said that, I would consider the project in which we deal with the re-organization and design of the property pane. Once this has been implemented, we can circle back to this issue and ascertain the legitimacy of this issue.

Small UX issue but impacts almost all table/button group/json form app users
Stats

Stat
Values

Reach
1000

Effort (months)
0.5

@rohitagarwal88 can you please triage this issue for ui-builders team to pick it up?

@rahulramesha : This problem should solve when we context switching?


[Tracking] Callstack performance audit of the App

Tracking issue for @adhorodyski and Callstack team performing performance audit of the app.

Adam from Callstack here, I'd like to work on this.

This is a performance audit of the Expensify app done by Callstack, following the DMAIC methodology. It will consist of 5 phases and result in a report summarising the whole report.
In the first phase we have defined the following metrics:

APK size in MB (App Size)
JS bundle size in MB (App Size)
App start time in MS (TTI)
Report screen load time in MS (TTI)
Sending a message in MS (TTI)
Average FPS on LHN (FPS)
Average FPS on Report screen load (FPS, CPU usage)
Search screen load time in MS (TTI)

Current status:

@adhorodyski is working on the JS bundle size in MB metric
@hurali97 is working on the APK size in MB metric

We've conducted the measurements (will post shortly) and are finishing up analysing them, you can expect separate comments with the findings.

Metric: JS bundle size in MB
Phase: Analysis
Commit hash: c09a3fead81512a4b01ccafff4c736301e0dbe89
Below is the breakdown of our findings from the analysis process. To sum this up, if we take the associated actions the JS bundle size can be reduced by at least ~11%.

Name
Platforms
Before
After
% Impact
Notes
Actions

date-fns locale imports
All
915 KB
15 KB
8%
Locales are being imported from the date-fns/locale module using named imports. This causes unused ones to end up in the bundle.
Importing only 'en-GB' and 'es' separately from their respective paths, eg. date-fns/locale/es to only include the ones in use.

@formatjs polyfills
Native
353 KB
0 B
3%
Hermes ships Intl polyfills starting from RN 0.65 on Android and 0.70 on iOS.
For native platforms, polyfills bundled with Hermes can be used.

underscore
All
20 KB
0 B
-
Both lodash and underscore utilities are being used.
Underscore can be removed in favor of lodash.

assets/images
All
Android - 1.93 MB, iOS - 2.57 MB
-
-
High res (svg), but high size images are being used regardless the usecase.
Static assets that are not being animated can be optimised by serving in other, more optimised formats.

assets/emojis
All
425 KB
-
-
Current approach to emojis is custom made (maintenance and size cost).
Custom code can be replaced with the node-emoji dependency. A contribution to emojilib will be needed to support ‘es’ locale.

Unused / deprecated / vulnerable dependencies
Additionally, some unused/deprecated/vulnerable dependencies have been identified in the process.

Name
Notes
Actions

npm audit
49 vulnerabilities (26 moderate, 21 high, 2 critical)
Apply npm audit fix to fix vulnerabilities.

unused dependencies
-
Remove: @react-native-firebase/analytics, fbjs, save, react-native-image-pan-zoom, react-native-image-size

unused devDependencies
-
Remove: @babel/plugin-proposal-export-namespace-from, @vercel/ncc, diff-so-fancy, react-native-clean-project (replace with RN CLI clean)

metro-react-native-babel-preset
Soon to be deprecated plugin is being used.
Swap metro-react-native-babel-preset with @react-native/babel-preset before migrating to<EMAIL_ADDRESS>

@mountiny Happy 2024!! 😊
Please feel free to invite anyone to the discussion here - we can now pick prioritised items from the list above to take actions right now or decide what's already taking place/can be postponed. We'd follow the same for all the metrics :)

Metric: APK Size in MB
Phase: Measurement
Commit hash: 6365aebb9cdb3dd4a66e77117afd0fb1b1fa8957
Measurements:
Baseline:
We gathered the following metrics on baseline ( without any improvements ) :
| APK Size MB | Download Size MB
-- | -- | --
All architectures | 126.6 | 123
  |   |
These metrics are gathered by generating a release APK using ENVFILE=.env.production ./gradlew assembleProductionRelease and then opening that APK in the APK Analyzer in Android Studio.

All architectures means arm64-v8a, armeabi-v7a, x86_64 and x86. By default an APK has all these 4 architectures included.

If we take metrics for one architecture like arm64-v8a, here are the results:
| APK Size MB | Download Size MB
-- | -- | --
arm64-v8a | 47.3 | 44.1
  |   |
Given that, if we are able to reduce the size of the APK for all architectures, it's perceived that each architecture separately would benefit from it.

Metric: APK Size in MB
Phase: Analysis
Commit hash: 6365aebb9cdb3dd4a66e77117afd0fb1b1fa8957
Optimisations Round 1:
We will start with enabling the Proguard and removing any resources that aren't used in the app and in the app's library.
shrinkResources true
minifyEnabled true

Once this is done, we will measure the affect of it on the APK:
| APK Size MB | Download Size MB
-- | -- | --
All architectures | 117.8 | 114.1
  |   |
The above measurements uses the default proguard-android.txt which is generated by android build system itself.
With Optimisations Round 2:
We applied all the optimisations from previous round with one change. And that’s we used the default proguard-android-optimize.txt which is also generated by android build system but it’s different than proguard-android.txt as it has a few optimisations flags.
| APK Size MB | Download Size MB
-- | -- | --
All architectures | 116.3 | 112.6
  |   |
This is a great result, saving around 10-11 MB as compared to the results in Measurements phase, seems like magic 🪄
There are other things to consider here:

Enabling Proguard requires extensive testing of the whole app even more when we use optimised version of Proguard.
It seems that enabling Proguard is trivial as it's only 2-3 liner but there are a handful of issues which are already taken care of and are not stated here. But for an example, the images didn't appear in the app and the reason for that is expo-modules was being ripped off and couldn't show images. To fix that we whitelisted the whole package for Proguard. Moving forward, we will take a closer look at it and only whitelist what is essential in expo-modules package to make the app work as expected.

Importing only 'en-GB' and 'es' separately from their respective paths, eg. date-fns/locale/es to only include the ones in use

Ok, this is very interesting, since we have a best practice in place that we should do import * as MyLib from '@libs/MyLib';
When we introduced this best practice, I thought that we determined it would not have an effect on bundle size because babel would strip out the unused imports and end up only importing the named imports that are actually used in the final bundle.
If this is not true, then I'd surmise that our current best practice might actually a bad practice?
In short, I agree with the change to use default imports from the date-fns/locale sub-modules directly, but I would also like to discuss if there's a new best practice we can extract from that to help optimize our bundle size more holistically.

For native platforms, polyfills bundled with Hermes can be used

I'm all for removing any polyfills we don't need anymore. Just keep in mind all the JS engines we're exposed to – not only Hermes but also the modern browser landscape.

Underscore can be removed in favor of lodash

This is already happening with the TypeScript migration, so 👎🏼 to any new coordinated effort to ditch underscore. Once all files are migrated to TypeScript we should have no more uses of underscore, at which point it can be removed.

Static assets that are not being animated can be optimised by serving in other, more optimised formats

Nah, let's just stick with svg.

Custom code can be replaced with the node-emoji dependency

It's not clear what impact this would have, positive or negative. So unless there's some clear improvement can be made, and it's shown to be significant "worth it", I don't think we should discuss this.
Also, I know in the future we'll want to support custom emojis, that would probably be a better time to discuss overhauls of our emoji implementation.

Apply npm audit fix to fix vulnerabilities

Yeah, sounds good. We should probably think about "chorifying" that – i.e: creating a recurring chore, say, every month or every quarter, that's assigned to someone to run npm audit and update vulnerable packages.
This would be a good one to bring to slack with a problem/solution. We already have robust code for creating and auto-assigning chores, so that part is pretty trivial if we agree that this would be a valuable chore to introduce. Would be a happy to discuss a P/S about this in slack.

👍🏼👍🏼 to removing any unused dependencies

Swap metro-react-native-babel-preset with @react-native/babel-preset before migrating to<EMAIL_ADDRESS>
This change is already included in the 0.73 upgrade PR here, so I think we should be covered there.

We will start with enabling the Proguard and removing any resources that aren't used in the app and in the app's library

Unfortunately I'm not familiar with this Android thing. Are there any potential downsides?

Hey @mczernek @staszekscp – curious if you have any experience with or recommendation regarding enabling Proguard?

On the one hand, proguard is as natural as air in native Android development - using it is natural and standard pattern once you go to production.
On the other, I don't see gains being huge here and yet I can see some risks. Since proguard is not so natural in RN ecosystem, some libraries might not be ready for it. There are cases when it can actually delete used code and resources if they are not referenced directly. As mentioned that would require extensive testing of whole app - risk it breaks something might not be huge, but it might happen pretty much anywhere.
Being completly honest, with RN apps I usually do one of two - enable proguard from the very start of development or just skip it altogether. However, being huge app we want to become, I think it might be viable to go through this at some point.

TBH, a couple of months ago we've enabled proguard with Michał  in order to check if it gives some performance gains on app startup time. The app booted, but we didn't see any difference in performance (also navigating between screens). Because of the risks Michał has mentioned above, we have decided that it is not the path it is worth to take. 😄 However, the app has changed a lot since, so it may be worth to check again.

@roryabraham @staszekscp @mczernek
These are some really valid points brought up and I agree with almost all of them. I would like to discuss a few things in detail:

note:  By using ProGuard, we mean using R8 which is enabled by default and leverages the ProGuard rules in order to perform the minification of the APK, if it's enabled.

- Enabling ProGuard in React Native:
As mentioned, some libraries aren't supporting ProGuard which makes it hard to enable it. I have had issues with ProGuard previously but in case of Expensify, things were pretty smooth. Mostly because aapt2 tool did the hardwork of generating a ProGuard configuration of all the classes, methods and fields used in our codebase. Which then later is combined with default proguard-android.txt or proguard-android-optimize.txt as configured. Finally we have a configuration.txt in app/build/outputs/mappings which have all of the ProGuard rules combined from above.

I had to add keep rules for BuildConfig and Expo Modules in order to pick the environment flags and show the assets and that's pretty much it. I navigated between a couple screens and things looked fine.

Given that there's a chance that in some flow we may face a crash or something, so we will need a regression testing in place.

In future, if we add a dependency to a library and we face a crash we might need to add the relevant keep rules in order to make things work, so it may be a continuous effort.

- Is Improving Native Bundle worth it:
Yes, the reason is related to the growth of the brand itself. It's proven that the apps with larger size face the most uninstalls than the one's with lesser size. You might know it already but stating just for the sake of it. This goes hand in hand with JavaScript Bundle size but we have different techniques to reduce it. For example, the size of an APK with arm64-v8a architecture for New Expensify is around 40 MB on google play store. The same architecture with ProGuard enabled with optimisations is around 33.7 MB, which is going to positively affect the downloads of the app.
What should we do?
Since we have a dedicated effort going on for performance audit and improvements, I would suggest we should try this and conduct a regression of the app and see if it negatively affects the app. By negatively I mean if it makes the app unusable by throwing ANRs, crashes or reducing the app functionality. If there's no such case or we are able to fix it if there is, then we are good to go with using ProGuard.

Thanks @roryabraham and everyone else jumping in. I agree with Rory's assessment, I think you know the hustle by now, we dont really like to do thing just for sake of doing them/ unless there is a clear reason/ benefit for us so we should skip doing those where this is not clear or negligeable.
In therms fo Proguard, I am on the same boat, I am not familiar with the complexities of this change, seems like everyone who is familiar with it agrees we should do it, but maybe not now. That feels like we can maybe put it on LOW in terms  of priority and come back to it once we get some more significant improvements in. Or would you say this is one of the best improvements we can get now?

Underscore can be removed in favor of lodash

This is already happening with the TypeScript migration, so 👎🏼 to any new coordinated effort to ditch underscore for now. Once all files are migrated to TypeScript we should have no more uses of underscore, at which point it can be removed.

Perfect, thanks for bringing this. Since we're (only) auditing the current state, we had to point out any of the improvements - even the ones that are currently ongoing. Let's skip it then!

For native platforms, polyfills bundled with Hermes can be used

I'm all for removing any polyfills we don't need anymore. Just keep in mind all the JS engines we're exposed to – not only Hermes but also the modern browser landscape.

Absolutely - we can bundle these separately based on the platform ans shave the size only where it's really possible. Should we treat this as an action item for the next phase? This can potentially shave off ~3% on mobiles.

Static assets that are not being animated can be optimised by serving in other, more optimised formats

Nah, let's just stick with svg.

Noted! Let's skip this part then. Mind sharing the reasoning behind it so we can make it clear for the future and not revisit this later? Is it just the quality or other aspects also play a role here?

Custom code can be replaced with the node-emoji dependency

It's not clear what impact this would have, positive or negative. So unless there's some clear improvement can be made, and it's shown to be significant "worth it", I don't think we should discuss this.
Also, I know in the future we'll want to support custom emojis, that would probably be a better time to discuss overhauls of our emoji implementation.

This is definitely a minor thing so we can ditch it, especially if there's a plan for further iterating on this functionality.
This can potentially bring a very small size improvement (less source code but bringing in a new dependency, the JSON will stay there for each translation) + and a small DX improvement tied to the potentially smaller maintenance costs & offloading some of the work to the external module (implementation, docs).
I understand your reasoning on this, I think it's fair to skip it :)

Apply npm audit fix to fix vulnerabilities

Yeah, sounds good. We should probably think about "chorifying" that – i.e: creating a recurring chore, say, every month or every quarter, that's assigned to someone to run npm audit and update vulnerable packages.
This would be a good one to bring to slack with a problem/solution. We already have robust code for creating and auto-assigning chores, so that part is pretty trivial if we agree that this would be a valuable chore to introduce. Would be a happy to discuss a P/S about this in slack.
But yes, in the meantime we can patch known vulnerabilities, but I want to make sure that proper testing is happening so we should manually upgrade them one-at-a-time and thoroughly test relevant functionality, rather than upgrading them all in one fell swoop with npm audit fix and hoping that everything works.

I love that we already have a process for this 😊 Let me add this as an action item to the next phase on this metric.

Importing only 'en-GB' and 'es' separately from their respective paths, eg. date-fns/locale/es to only include the ones in use

Ok, this is very interesting, since we have a best practice in place that we should do import * as MyLib from '@libs/MyLib';
When we introduced this best practice, I thought that we determined it would not have an effect on bundle size because babel would strip out the unused imports and end up only importing the named imports that are actually used in the final bundle.
If this is not true, then I'd surmise that our current best practice might actually a bad practice?
In short, I agree with the change to use default imports from the date-fns/locale sub-modules directly, but I would also like to discuss if there's a new best practice we can extract from that to help optimize our bundle size more holistically.

This one's tricky, indeed the correct babel setup should transform named imports into the default ones - unfortunately looks like none of this happened, we can see all of the translations being loaded together.
Coming up with a single 'best practise' would differ based on the tooling and whether this is an internal or external module (might rely on eg. a weird re-exporting pattern). Eg. a VSC plugin for import cost I use failed on this one, providing correct sizes only for the separated imports (both ~7kb).
For the future, I'd say we should stay cautious especially when importing for the first time from newly introduced dependencies & still rely on babel.
Short-term, have an action item for importing these separately. Shall I track this as one on the implementation phase?

👍🏼👍🏼 to removing any unused dependencies, but I'm skeptical of your analysis. For example, ncc is not unused. It's used to compile GitHub Actions here.
Maybe it would make sense to create a separate package.json to separate out GitHubActions-specific dependencies, but honestly doesn't seem worth it because they're all dev dependencies anyways and shouldn't really affect production bundle sizes.

Thank you so much for pointing this out! Totally my error, I've updated the original comment with this one striked through.
I think it makes sense to iteratively try to strip down the unused dependencies then, each one directly saves $ on the CI jobs. Do you think I can put this into the actionable items?

and come back to it once we get some more significant improvements in. Or would you say this is one of the best improvements we can get now?

This is the best improvements we can have at our hands as of now. Expensify's codebase is growing continuously and if we don't enable ProGuard now, there's a chance that in future, enabling ProGuard might get out of hands as by that time we would have more dependencies in place which may or may not work with ProGuard right away. We could try to make them work by ProGuard rules but that's a different story.
Reducing around 10MBs is considered really significant in terms of APK size as it's relatively complex to reduce the size of APKs. We do have other plans to try and further reduce the APK Size like LTO or native libraries optimisations manually but that's something which is experimental and may or may not benefit us.
I would suggest we enable ProGuard and have a QA regression testing on the generated APK. If there are any crashes reported by QA, gather them in some place and work on them to resolve those on a lower priority OR at the end of the audit. But if we don't face any crash in the regression, we will be good to go to use it right away.

Should we treat this as an action item for the next phase?

Yes, we can take steps to remove unnecessary polyfills.

Mind sharing the reasoning behind [sticking with svg]

Yeah, basically I don't want to deal with the development overhead of different image asset types or worry about resolutions. svg works consistently and looks good on all devices and resolutions, and with the recent introduction of expo-image is a lot more performant than it was. We also have an image optimization bot configured in this repo that automatically optimizes svgs to make them smaller.
That's just my opinion though, if it really does make a big difference we could talk about it, but I doubt it does.

Short-term, have an action item for importing [date-fns/locales] separately. Shall I track this as one on the implementation phase?

Yep, sounds good. 👍🏼

I think it makes sense to iteratively try to strip down the unused dependencies then, each one directly saves $ on the CI jobs. Do you think I can put this into the actionable items?

Yep, sounds good. if you find any dependencies that are truly unused and confirm that they're not used we can absolutely remove them 👍🏼

I would suggest we enable ProGuard and have a QA regression testing on the generated APK

@hurali97, sounds good 👍🏼
Feel free to open the PR and I can run an AdHoc build and have Applause run a full regression test suite on Android.

Actually, @adhorodyski and @hurali97, can we be sure to create separate issues for each of the action items? You can feel free to create them and link them here – they'll automatically be closed but I can reopen them for you.
Also, since we seem to be focusing on bundle size, should we make an issue to do a CI analysis on bundle size for every PR (excluding PRs that only affect GitHub Actions, HelpDot, or tests) that leaves a comment on the PR with the change in bundle size?

Good idea to break this up to its own issues, I believe they wont autoclose either as you should be whitelisted

Also, since we seem to be focusing on bundle size, should we make an issue to do a CI analysis on bundle size for every PR (excluding PRs that only affect GitHub Actions, HelpDot, or tests) that leaves a comment on the PR with the change in bundle size?

Totally agree with this 👍 We would need two separate issues for this, one for JS bundle size and second for App bundle size for android. Later, we can accommodate iOS and webpack bundles too.

1 message posted on a PR with these listed per platform, correct? Just want to get this right.

Yeah, just a single comment on each PR with the JS bundle size and native application size before and after the PR, along with the delta.
If new changes are pushed, we should cancel any analysis still in progress and kick off a new one. If a comment was already left, the previous comment should be hidden as outdated and then a new comment should be left (there are examples for how to do this in our CI already, see the comments left by testBuild.yml)

Team, please see this linked issue for the Search screen load time metric to better separate our discussions.

As of now, we are conducting measurements based on this flow. We are not taking into account the fresh install app startup as it has TTI until the SignIn page shows after the splash. This TTI doesn't reflect what a user will face on a daily basis. Hence, we opted for going with the flow described above.

I think this makes sense, I think fresh install is an edge case we do not have to focus on in here

Team, please see the update under https://github.com/Expensify/App/issues/34494#issuecomment-1900552863 on how we decided to unify 2 metrics and just stick with the Load time in MS for opening up a report.

Hi team! I've added new issue for tracking Average FPS on LHN -> #34986

Hi folks! 👋
Please take a look at the Send a message metric tracker #35225. The measurements section has been updated and analysis is coming soon 🔜 🚀

Hey guys 👋
Here's the metric tracker for App Startup. We have updated the measurements. The analysis phase is in progress and will be updated in the next week. We have some amazing results from analysis phase, so stay tuned 👍

Audit still underway

Hey everyone!
As the last analysis has just landed under this issue targeting Report screen load time, we need some of your help with wrapping up the last action items for the next phase of Implementation (please see the linked issue).
This next phase is currently in the works and PRs are going to be shared in the next days as we're finishing up defining the backlog items based on the discussions in the respective threads.

Why was I assigned here? To review PRs?

This is just a tracking issue @neil-marcellini

@adhorodyski @muttmuure I know that this is just a tracking issue, should we close it out as we're approaching the conclusion of this performance audit and starting another? Do we need a tracking issue or should we just use the #newdot-performance slack room for tracking?

I think we can close this one and just use the slack room for faster iteration, we can create some new tracking issue for the tracking v2 or a project board once we have specific issues just to be able to better track them
however, that would be done once we have the specific issues created


umr: unstable-2022-08-23 -> 1.0.8

Fixes the build and uses a stable version
Also switched to the gitlab fetcher, did a bit of cleanup and fixed umrgui
Description of changes

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

@Flakebi do you still maintain this package?

Sorry, was out for a couple weeks and got ill now, so I’ve been unable to test and respond.
I hope I can take a closer look next week.
IIRC the llvm dependency was there for disassembler support when debugging hangs.

Could you test the advanced use-case? My use case is very basic, so I did not cover it.


Adding an example for using batch unstable revalidate

Description

There previous explainer for on demand re-validation goes in depth on the feature. This one is a bit more focused on batch revalidating multiple paths in a non blocking api call.
Link to readme.md
Best Way to Test

navigate to the example
navigate between the pages to get the random jokes
trying revalidating using the button, after a bit of time you can reload and get new jokes.

Type of Change

[ ] Bug fix (non-breaking change that fixes an issue)
[x] New Example
[ ] New feature in existing example

New Example Checklist

[x] 🚀 Link to deployment URL on Vercel
[x] 📱 Is it responsive? Are mobile and tablets considered?
[x] 📚 README.md preview link in PR description (branch)
[x] ⚙ Secrets have instructions for how to set up in the readme
[x] 🛫 npm run new-example was run to create the example

Will instead edit the current on demand ISR example


Decimal-to-binary

@PandeySomya77 contribute here https://github.com/Ishaan28malik/Get-Dev-Resources


UseManifestExportFields.md is empty

Description for this rule is missing

There is no rule named UseManifestExportFields. So, I guess I will just remove this file. Thanks for reporting.


matrix-synapse: 1.24.0 -> 1.25.0

Motivation for this change
https://github.com/matrix-org/synapse/releases/tag/v1.25.0
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[x] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

This is a semi-automatic executed nixpkgs-review which does not build all packages (e.g. lumo, tensorflow or pytorch)
If you find some bugs or got suggestions for further things to search or run please reach out to SuperSandro2000 on IRC.
Result of nixpkgs-review pr 109265 run on x86_64-linux 1

1 package built:

matrix-synapse

This is a semi-automatic executed nixpkgs-review which does not build all packages (e.g. lumo, tensorflow or pytorch)
If you find some bugs or got suggestions for further things to search or run please reach out to SuperSandro2000 on IRC.
Result of nixpkgs-review pr 109265 run on x86_64-linux 1

1 package built:

matrix-synapse

Ported to stable as 1dbf0c9b5bda44262f0d1bb6dc42954730adadca

Ported to stable as 1dbf0c9b5bda44262f0d1bb6dc42954730adadca


Tweak survey infrastructure

Task/Issue URL: https://app.asana.com/0/361428290920652/1198222027640374
Description:
Some small tweaks to our survey infrastructure

only show surveys without a set day to installers who have been with us for more than 30 days
restrict surveys to US locale
fix issue where CTA could still show after survey completed
small UI tweaks

Steps to test this PR:
Setup

Open SurveyService and update to our sandbox endpoint "http://ddg-sandbox.s3.amazonaws.com/survey/survey-mobile.json"

Test restrictions

Run a fresh install on a non-US locale and ensure that the survey CTA does not show on the home screen (minimum installation days needs to be 30 and locale must be US).
Open CTAViewModel and change line 248 to be val daysInstalled = 30L, run the app again and ensure that the survey does show on the home screen (locale needs to be US).
Change locale to US.
Run the app again, the survey should now show.

Test survey is dismissed when done

Run through the survey completing it.
Ensure that the CTA disappears from the home screen.

Internal references:
Software Engineering Expectations
Technical Design Template

Thanks for the review @cmonfortep!


Updating to latest C# submodule

@jasonsandlin,
Thanks for your contribution as a Microsoft full-time employee or intern. You do not need to sign a CLA.
Thanks,
Microsoft Pull Request Bot


Support query with GET

Overview
Hello, first I would like to thank you for the awesome project and all the work that is put into it.
I was wondering is there any reason that GET is not supported for query as specified here as you can see the query is passed as a query string http://myapi/graphql?query={me{name}}
Benefits
If we allow GET requests it would be much easier to use caching mechanism such as varnish, cloudflare and other normal HTTP caching
Implementation
In the HTTP handler do a check we check if the request is a get request and only parse the the key query and we will populate only Query inside of the params struct. Would there be any limitations doing it like this?
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	var params struct {
		Query         string                 `json:"query"`
		OperationName string                 `json:"operationName"`
		Variables     map[string]interface{} `json:"variables"`
	}

	if r.Method == http.MethodGet {
		params.Query = r.URL.Query().Get("query")
	}

       // Skip this part
	if err := json.NewDecoder(r.Body).Decode(&params); err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
        }
	response := h.Schema.Exec(r.Context(), params.Query, params.OperationName, params.Variables)
	responseJSON, err := json.Marshal(response)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	w.Header().Set("Content-Type", "application/json")
	w.Write(responseJSON)
}

Hey, I'm a bit confused by your question. This is possible! I implement both GET and POST handlers for my GraphQL endpoint.

In general, I think people would only want to allow “GET” requests for “Query” Graphql queries and not “Mutations”. Otherwise there is a pretty severe security risk. Maybe it makes sense to make a function that parses the query with operationName just to figure out if it’s a query or mutation?

@nicksrandall what would the security risks be? I'd imagine security is agnostic of HTTP method

@tonyghita it totally depends on the domain of the software. An example could be a malicious user could send an innocent user an image with "src" of graphql query and then that query would be executed in context of innocent user without them knowing and potentially granting the malicous user access to something sensitive?

@tonyghita

Hey, I'm a bit confused by your question. This is possible! I implement both GET and POST handlers for my GraphQL endpoint.

With master? When I tried to send a GET request I kept getting 400 Bad Request and the reason being the current handler only handles POST requests, it cerinatly can be modified, I was just asking if it simple as that or if I am missing something.
I can open a PR for this to add support for it.

In general, I think people would only want to allow “GET” requests for “Query” Graphql queries and not “Mutations”

I agree with you doesn't seem like it is best practice to add mutations in a GET request, even the article @tonyghita linked too only shows the query.

Ah @SteveAzz you were asking particularly about the included handler. I understand now!
@nicksrandall true... a co-worker mentioned you also open up possibility of MITM over HTTPS.
I wonder if the "best practice" should be re-visited.

So, like I said before, this does bring up an interesting use case for a function to tell if request is a "query" or "mutation"?

So, like I said before, this does bring up an interesting use case for a function to tell if the request is a "query" or "mutation"?

What do you mean by that? It doesn't seem like the current handler in master supports mutations unless I am missing something? Are we suppose to use that handler or is it best practice to use our own handler?
Anyways, it doesn't matter, query and mutation have to be under their respective parent object, meaning if it a query it will the request will look like http://myapi/graphql?query={me{name}} we can simply ignore the mutation key from the query string.
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	var params struct {
		Query         string                 `json:"query"`
		OperationName string                 `json:"operationName"`
		Variables     map[string]interface{} `json:"variables"`
	}
	if err := json.NewDecoder(r.Body).Decode(&params); err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}

	response := h.Schema.Exec(r.Context(), params.Query, params.OperationName, params.Variables)
	responseJSON, err := json.Marshal(response)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	w.Header().Set("Content-Type", "application/json")
	w.Write(responseJSON)
}

The caching example already show how to handle both GET and POST requests


How to remove vertical scrollbar on Firefox

First of all thank you for giving us this accordion module, it's very generous of you.
I am testing its operation under different browsers.
In Firefox, when the panel opens I see a vertical scroll bar on the right. Once the panel is open, the bar disappears.
With Safari, Goocle Chrome and Opera this bar does not appear.
My question how to remove this bar in Firefox?
Thanks
OS X : 10.14.5
Safari : 12.1.1
Firefox : 67.0
Firefox Developer Edition : 68.0b5
Google Chrome : 74.0.3729.131
Opera : 60.0.3255.125

that's due to the animation of the content expanding from a collapsed height to max-height 100vh and the overflow changing from hidden to auto.
you could play around with when / if you even need the overflow to change.  maybe updating script to only change to auto after the expansion has run its course.
In the end though, this is more how Firefox treats content that is expanding in height with an overflow, where the scroll bar is present until it reaches max height and all the content can be revealed without need for a scroll bar.  Outside of what I noted above to work around this, this isn't really an issue but just how firefox behaves.


Doesn't save any data to database

Hey Antonio,
You have build awesome package.Thanks for providing Us. I am new in laravel. I had tried to use this. I have set up this package as that you have provided in your documentation. I am little bit confused.
Do I really need to make different database to track the visitor ?
Can't I use on my default database?
When I tried as you described like
$visitor = Tracker::currentSession();
var_dump( $visitor->client_ip );
var_dump( $visitor->device->is_mobile );
var_dump( $visitor->device->platform );
var_dump( $visitor->geoIp->city );
I get the following error
Trying to get property of non-object
Then I checked on database. Nothing was stored on the database but on tracker_errors above error was store.
Sorry for the bad English

same for me here I did enabled log option in config and I think its suppose to start tracking but it doesn't seems to all my table are empty still.

after I run php artisan tracker:updateparser, TWICE in it seems to start tracking the data and also removed the error that I'm getting "production.ERROR: Tracker: uaparser regex file not available. "Execute php artisan tracker:updateparser" to generate it."

Seems those problems are not happening to most of us. If it's still happening, please ask to reopen.

[Symfony\Component\Console\Exception\CommandNotFoundException]
Command "tracker:updateparser" is not defined.
Did you mean this?
tracker:tables
Any ideas how to execute the command?


RAML 1.0

Is RAML 1.0 supported?

I won't create new issue, but I try to update this one with bugs in this package and features which is not supported at this moment but should be, according RAML 1.0 spec.
A few days ago I have noticed that examples provided by path in DataType files are not parsed and included in objects, hovewer using plain notion seems work.
Also not sure why but jsonschema validator fails on some schemas. I have not researched why yet, but for example having this schema: http://jsonapi.org/schema and this JSON:
{
"data": [
{
"type": "country",
"id": "101",
"attributes": {
"country": "India",
"calling_code": [
91
]
}
}
]
``}
validation will fail. You can use some online tools for quick testing, like: http://jsonschemalint.com/

+1

RAML 1.0 support is provided in version series 3
RAML 0.8 support is provided in version series 2


Questions related to the authoring page of prompt-flow

While using the prompt-flow to develop a chat, I've come across a few questions related to the interface and its functionalities. Unfortunately, I couldn't find the answers I was looking for in the documentation and I was hoping you could assist me with these:

"Save" Buttons: I noticed that there are two "Save" buttons in the interface. Could you please clarify the difference between these two buttons and why there are two of them?
Version Comparison and Raw Files: I've seen the potential for comparing different versions of the same prompt-flow file and viewing the raw file, which could be incredibly useful for our project. However, I'm having trouble using this feature. Can you guide me on how to save new versions of a prompt-flow and how to compare them with the existing ones?
Accessing Previous Run Logs: On the prompt-flow page, I can view the logs of the last run, but I'm wondering if there's a way to access the logs of my previous runs as well. It would be really helpful to have all the logs in one place for reference and analysis.

Thanks!

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

ID: 4fe442d4-0e94-c430-b1e9-fa3d27704f07
Version Independent ID: ba9d1256-a0e0-c4ab-1d91-5e30ec33eec5
Content: Develop a standard flow in Prompt flow (preview) - Azure Machine Learning
Content Source: articles/machine-learning/prompt-flow/how-to-develop-a-standard-flow.md
Service: machine-learning
Sub-service: prompt-flow
GitHub Login: @jiaochenlu
Microsoft Alias: chenlujiao

@fraddddd
Thanks for your feedback! We will investigate and update as appropriate.

Hi @fraddddd

"Save" Buttons: The first "Save" button is located in the top right corner of the interface and is used to save any changes made to the prompt-flow file. The second "Save" button is located in the bottom right corner of the interface and is used to save any changes made to the settings of the prompt-flow, such as the name or description.

Version Comparison and Raw Files: To save a new version of a prompt-flow, you can click on the "Save" button in the top right corner of the interface. This will create a new version of the prompt-flow with the changes you made. To compare different versions of the same prompt-flow, you can click on the "Versions" button located in the top right corner of the interface. From there, you can select the versions you want to compare and click on the "Compare" button. To view the raw file of a prompt-flow, you can click on the "Raw" button located in the top right corner of the interface.

Accessing Previous Run Logs: To access the logs of your previous runs, you can click on the "Runs" button located in the top right corner of the interface. From there, you can select the run you want to view and click on the "Logs" button. This will show you the logs for that specific run. If you want to view the logs for all your previous runs, you can export them to a file by clicking on the "Export" button located in the top right corner of the interface.

I hope this helps! If there are any further questions regarding the documentation, please tag me in your reply and we will be happy to continue the conversation.

Hi @Naveenommi-MSFT
Thank you for your answer.
I'm sorry but I cannot see the features you are talking about and also the position of the buttons seems not to be the same as mine. Maybe I have a different version?
This is my interface

"Save" Buttons. I see:

Save #1: is on the top-right corner of the interface and it seems related to the whole flow. It is also automatically triggered when I run a node or work with the chat,
Save #2: it is inside the tab "Flow" so it seems related to all the content of nodes of my flow.
this layout is quite confusing, if Save#1 is just to save the prompt-flow name the position is not correct, and also I don't understand why is automatically triggered when executing the prompt-flow

Version Comparison and Raw Files: There is no "Versions" button located in the top right corner of the interface so I cannot select between different versions and when I click Save, the prompt-flow seems to be just saved. ALso, the compare is called "Diff mode" and it is a toggle, but it is not actually clear what is comparing
Accessing Previous Run Logs: I don't see here a "Runs" button.  I tried to download the logs, but only the logs of last call are downloaded

Can you please check if we have different versions and if so can you please let me know

if these features are available with my current version?
when your version will be available?

@fraddddd
Thank you for bringing this to our attention.
I've delegated this to content author @jiaochenlu, who will review it and offer their insightful opinions.

Regarding the save buttons,

Save Number 1:  the save in the upper right corner is a global save, which will save changes to the flow and the file list.
Save Number 2:  the save under the file tab will only save changes to this file. For example, the save in the flow.dag.yaml file tab will only save changes to this yaml file, while the save under another a.py will only save changes to this py file.
We apologize for the confusion about these two buttons. In the short term, we will explain this in the documentation and at the same time optimize the UX experience to make the save simpler and clearer.

The flow itself currently does not have version management. All edits are saved directly and cannot be reverted to changes before saving.

If you are a UI customer, we recommend that you clone a flow before editing it as an indirect version management.
If you are a code-first customer, we recommend using a code repository to manage the version of the flow file based on the commit version.
We have also heard a lot of demand from other customers for version management, and we will consider supporting this feature in Azure AI Studio.

Access to historical run logs is currently not supported yet, and the view results+logs of a single run will be the most recent results only. We are currently planning to support this feature, already in our roadmap, to support keeping a history record for the flow individual run.

If you have more questions, feel free to leave feedback on the portal, or leave your contact email. We are very glad to have a meeting with you and look forward to hearing more from you.


Rendering Overhaul

Rendering System needs to be rewritten and tweaked.

Needs to be more dynamic with shaders + more forgiving in case Entity lacks some components.


Support IaC  as optional (define services from config file)

⚠ Please verify that this feature request has NOT been suggested before.

[X] I checked and didn't find similar feature request

🏷 Feature Request Type
Other
🔖 Feature description
The monitoring service should be able to define services from config files (yaml or json) as an additional option.
We currently have over a hundred services to monitor and use too much effort to maintain this.
We use gitops for IaC and need to deploy new services while adding new services to monitoring services.
Same as #270
✔ Solution

allow adding/editing/removing services from config file like yml or json (should be optional)
similar to importing backup but it should be automatic loading.

❓ Alternatives
No response
📝 Additional Context
No response

Duplicate of https://github.com/louislam/uptime-kuma/issues/270

Duplicate of https://github.com/louislam/uptime-kuma/issues/270

#279 is closed and not been solved. Why is it closed too?
This request feature is add an option to import config file and not required option.
It's similar to #279 but isn't the same thing(or duplicate).


[SPARK-7286] [SQL] Deprecate !== in favour of =!=

Fixes subtle issues related to operator precedence, as discussed in SPARK-7286.
I'm not entirely sure this is the right thing to do, personally I think operator overloading is a slippery slope to symbol soup. Please feel free to comment on alternatives.
I anticipated this for Spark 1.7, let me know if I should change the deprecation warnings.

Can one of the admins verify this patch?

Why not use the more common <> symbol instead =!=?

It has the same issue as !==

@rxin, just wanted to check if this PR is acceptable?

=!= is just really ugly ... let's sleep on this and decide later. There is no rush since we are not doing it for 1.6.

I agree that its not pretty, however the only other fix I see is to remove "$" for columns instead

Since the next version of Spark is probably going to be a major release, would now not be a good time to consider renaming the operator as to achieve correct behavior?

Can one of the admins verify this patch?

We should definitely consider this for Spark 2.0.

Is this still under consideration? I have no problem closing the issue if you think it's not a good enough solution.

I think we should still consider it -- just haven't had time to think about it more yet.
Can we get somebody from the scala team to also chime in here?
cc @dragos

I like @jodersky's solution. As I mentioned on the JIRA, Slick uses the same operator, so at least there's a precedent, and some people might find it familiar.

@jodersky ok let's do this!
Rather than removing the old one, can you just deprecate it and add the new one?

nvm you've already deprecated it.
can you fix the doc?

jenkins, test this please

Btw, a general question, do you want me to squash commits as I ammend them to PRs?

I doesn't matter - the merge script automatically squashes them.

Test build #2609 has started for PR 9925 at commit b60939f.

Test build #2609 has finished for PR 9925 at commit b60939f.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Seems that some tests have added !==  in the mean-time, I'll update the references

alright
jenkins, test this please

jenkins, retest this please

What's up with jenkins? retest this please

retest this please

@JoshRosen, do you know why Jenkins isn't building this PR?

Not sure; maybe Jenkins was down during the last test requests? Let me try again.

Jenkins, retest this please.

Test build #52501 has started for PR 9925 at commit 2aa568e.

Thanks! Do you know what was the issue?

Test build #52501 has finished for PR 9925 at commit 2aa568e.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/52501/
Test FAILed.

Another use of !== had managed to slip in.

Jenkins, retest this please

@JoshRosen, sorry to bother you again. Jenkins is ignoring my requests, could it be that I'm not white-listed anymore?

Test build #2613 has started for PR 9925 at commit 214ebb2.

Jenkins now seems to be stuck on a build :(
@rxin, should I close this PR and create a new one, would this fix the Jenkins response issues?

I'm not sure - but that's probably a good thing to try.

Closing this PR, will reopen a new one


Device name is empty and it's impossible to change it.

Device name is empty. Tapping "Device name" does nothing.

Let's investigate this

Ok, fixed