Feat/bot orchestration

Before submitting this PR, please make sure:

[x] Your code builds clean without any errors or warnings
[x] You are using approved title ("feat/", "fix/", "docs/", "refactor/")

A description of the changes proposed in the pull request:
This Pull Request implements the features from Phase 1 of HIP-Bot Orchestration.
Tests performed by the developer:

Hummingbot tests
Tested each MQTT interface provided by the hummingbot client (https://github.com/klpanagi/hummingbot/blob/feat/bot_orchestration/brokers/README.md#integration-of-hummingbot-bots-with-message-brokers)
Tested from source installation and setup
Tested docker container installation and setup
Build a proof-of-concept dashboard for remote monitoring and control of multiple bots via MQTT.

Tips for QA testing:

Define a unique not random instance_id for each bot via the client configuration parameters.
Check the documentation provided in this PR: https://github.com/klpanagi/hummingbot/blob/feat/bot_orchestration/brokers/README.md
Use one of the broker compose deployments from here (emqx/rabbotmq) to locally deploy a message broker that supports the MQTT protocol.

PR update:

Test installation for AWS and WSL ubuntu20.04 works ok

However I am experiencing some issues with my macOs (m1) with the error below:

Tried to ./clean && ./uninstall && conda clean -a, same results
Tried to sudo pip install commlibs then ./install && conda activate hummingbot && ./compile then start the client but still no go

@rapcmia the problem is that @klpanagi has to add the dependencies to all the environment files below the setup folder

@rapcmia the problem is that @klpanagi has to add the dependencies to all the environment files below the setup folder

That is true, I have included dependencies only for linux environment.
I can add dependencies for other environments but how can I run tests for other environments. Can someone help me on running the tests for windows and mac environments? Any ready-to-use CI processes I can use?
Thanks in advance.
P.S. I will dig into this on Monday

https://github.com/hummingbot/hummingbot/blob/master/hummingbot/client/ui/hummingbot_cli.py#L110
In HummingbotCLI it has a self.app property and several others that are missing from HeadlessExecutor which I think is causing so many tests to fail

Opened a PR addressing my comments above here https://github.com/klpanagi/hummingbot/pull/6

@klpanagi this is interesting, is there an overview of how this works? we were about to implement something similar

@klpanagi this is interesting, is there an overview of how this works? we were about to implement something similar

Hello @ayushin, the MQTT bridge has input and output interfaces document here (Moved to another repository): https://github.com/klpanagi/hummingbot-brokers
In that repository you can also find deployments for rabbitmq and emqx supporting the MQTT layer (https://github.com/klpanagi/hummingbot-brokers/tree/main/compose).
Furthermore, @TheHolyRoger already created a branch for RogerThat  plugin to support this PR, forwarding tradingview signals to the MQTT where where multiple bots can listen from.

PR update:

emqx and rabbitMQ successfully setup
Tested emqx locally:

/logs: ok
/events: no go
/notify: ok
/start: ok
/stop: ok
/config: ok
/config: (single parameter)
/import: ok
/history: ok
/balance/limit: ok
/balance/paper: ok

Pending:

RabbitMQ
Test on multiple bots on AWS instance

PR update:

Test the latest version of emqx (v5)
Successfully deploy broker
Run mqtt_start or set mqtt_bridge.mqtt_autostart to true

The hummingbot client is trying to connect then failed (screenshot below)
Tested the MQTT endpoints and seems to work as expected.
mqtt_start

mqtt_bridge.qtt_autostart to true

On previous tests, we noticed that if there is a running MQTT broker it would display on logs that MQTT is already initiated!

Steps to reproduce:

Run the emqx broker ./launch.sh (make sure docker/docker desktop) is installed
Open the Hummingbot client and run mqtt_start, observe the log panel for failed connection
Change mqtt_bridge.mqtt_autostart to true and relaunch the client, observed the log panel  for failed connection
On another terminal, run a sample MQTT endpoint test

On the test above we used commlib-cli --host localhost --port 1883 --btype mqtt sub 'hbot/instance_id/log'

Attached:
logs_hummingbot.log

PR update:

Test the latest version of emqx (v5)

Successfully deploy broker

Run mqtt_start or set mqtt_bridge.mqtt_autostart to true

The hummingbot client is trying to connect then failed (screenshot below)
Tested the MQTT endpoints and seems to work as expected.
mqtt_start

mqtt_bridge.qtt_autostart to true

On previous tests, we noticed that if there is a running MQTT broker it would display on logs that MQTT is already initiated!
Steps to reproduce:

Run the emqx broker ./launch.sh (make sure docker/docker desktop) is installed

Open the Hummingbot client and run mqtt_start, observe the log panel for failed connection

Change mqtt_bridge.mqtt_autostart to true and relaunch the client, observed the log panel  for failed connection

On another terminal, run a sample MQTT endpoint test

On the test above we used commlib-cli --host localhost --port 1883 --btype mqtt sub 'hbot/instance_id/log'

Attached: logs_hummingbot.log

@rapcmia I could not reproduce on a clean hummingbot environment.
On a clean environment:

Run mqtt_start: Connection fails due to missing credentials
Set credentials for connecting to the message broker: config mqtt_bridge.mqtt_username & config mqtt_bridge.mqtt_password
Rerun mqtt_start: Connecting to MQTT broker succesfully
Set mqtt_bridge.mqtt_autostart to True
Restart bot: Bot automatically connects to the MQTT broker succesfully

Try to fetch the latest of the PR, I have pushed some commits yesterday addressing this kind of connection/disconnection issues. Reinstall the conda environment as I updated the commlib-py package. Please report back any findings.

@rapcmia I just pushed some commits which improve connections/disconnections and introduces the mqtt_stop command.

@klpanagi, i have a few questions

why do you create a separate message type for each command instead of command message type with arguments?
it would be nice to have some sort of common event bus instead of separate /hbot/$UID/... in order to be able to subscribe to all messages and see bots coming on and off line in mqtt
Would be nice not to hard-code /hbot and make it configurable
$UID is a bit confusing name, maybe rather $instance_id to keep it uniform with the rest of the code?

@klpanagi, i have a few questions

why do you create a separate message type for each command instead of command message type with arguments?
it would be nice to have some sort of common event bus instead of separate /hbot/$UID/... in order to be able to subscribe to all messages and see bots coming on and off line in mqtt
Would be nice not to hard-code /hbot and make it configurable
$UID is a bit confusing name, maybe rather $instance_id to keep it uniform with the rest of the code?

Formal definition of communication messages is highly suggested for topic-based communication. For example, because the type of the messages which arrive on topics cannot be validated by the message broker it is possible for another endpoint to publish a wrong message that can crash other endpoints. No that what you suggest is wrong...

Like REST in HTTP, we want resources to be semantically mapped to topic uris. This way external endpoints can subscribe to specific resources of a specific bot instance (e.g. the logs of bot_1 /hbot/bot_1/log), or to all of the resources of a specific instance (e.g. /hbot/bot_1/#). The prefix exists to define a namespace for an hbot environment. An external endpoint can listen to all bots by subscribing to hbot/#.

Yes I agree, I will put that in the client config with the name mqtt_uri_namespace. Pretty useful as one can deploy several environments in different namespaces on a single message broker.

I agree, I will replace it as you suggested.

OK, so one more question, why do you need to use comm-lib instead of something more standard like simple json messages?
And what is the reason of using mqtt instead of a simple redis pub/sub?
I think it would make the whole project much more simple and robust.

@ayushin commlib supports redis as well as mqtt
Redis support is planned for the future, but since this is a service/plugin based approach we chose to start with MQTT since it's more widely supported and more user-friendly.
There's extensive applications using MQTT which can be very easily plugged into hummingbot, including home-assistant which could be used as an extremely powerful Hummingbot "Orchestrator".

Hi @klpanagi good day,
It seems I did installed a incorrect version of docker thats why its returning the issue. Tested on AWS on latest commit and works ok for both emqx_v5 and rabbitmq deployment/setup

Try to fetch the latest of the PR, I have pushed some commits yesterday addressing this kind of connection/disconnection issues. Reinstall the conda environment as I updated the commlib-py package. Please report back any findings.

PR update:
On latest commit for emqx_v5 we are experiencing this error commblib.exceptions.RPCClientTimeoutError: Response timeout after 30 seconds testing endpoints even though we are able to get the expected behavior on the client. On the screenshot below we are able to run the start and stop tests but at the same time getting the response timeouts

Tried to stop/start the emqx_v5 docker container even removed it but still the same behavior
It seems it only happens on endpoints using rpcc
When testing import endpoint for incorrect or invalid strategy name using commlib-cli --host localhost --port 1883 --btype mqtt rpcc 'hbot/botid/import' '{"strategy": "pmm-testonly"}' the hummingbot client returns unhandled error and no way for us to manually import a strategy and have to relaunch the client to make it work again:
2023-01-02 14:53:11,522 - 237061 - hummingbot.core.utils.async_utils - ERROR - Unhandled error in background task: [Errno 2] No such file or directory: '/home/ubuntu/5945/conf/strategies/pmm-testonly.yml'
Traceback (most recent call last):
  File "/home/ubuntu/5945/hummingbot/core/utils/async_utils.py", line 9, in safe_wrapper
return await c
  File "/home/ubuntu/5945/hummingbot/client/command/import_command.py", line 46, in import_config_file
config_map = await load_strategy_config_map_from_file(strategy_path)
  File "/home/ubuntu/5945/hummingbot/client/config/config_helpers.py", line 579, in load_strategy_config_map_from_file
strategy_name = strategy_name_from_file(yml_path)
  File "/home/ubuntu/5945/hummingbot/client/config/config_helpers.py", line 535, in strategy_name_from_file
data = read_yml_file(file_path)
  File "/home/ubuntu/5945/hummingbot/client/config/config_helpers.py", line 558, in read_yml_file
with open(yml_path, "r", encoding="utf-8") as file:
FileNotFoundError: [Errno 2] No such file or directory: '/home/ubuntu/5945/conf/strategies/pmm-testonly.yml'

Suggestion: We could use this behavior of the client when calling a invalid or non-existing strategy file on import command:

Steps to reproduce:

Deploy emqx_v5
Open Hummingbot client and run mqtt_start or set autostart
Run any rpcc endpoint tests, on this example we used start and stop

For rabbitmq we observed that the initialization was able to accept the default username/password (admin/admin) however when we are about to run some endpoint tests its returning a authentication error:

On the screenshot below it was able to confirm mqtt connection successfully initialized
However when we are about to run some endpoint start test getting a authentication failed and the user seem to be set to blank or ''

Steps to reproduce:

Deploy rabbitmq on different terminal or splitscreen and observe
Open Hummingbot client and run mqtt_start or set autostart`
Notice the docker logs for rabbitmq accepting connection
Run any endpoint test and observe docker logs

Hello @rapcmia and thank you for the feedback.

PR update: On latest commit for emqx_v5 we are experiencing this error commblib.exceptions.RPCClientTimeoutError: Response timeout after 30 seconds testing endpoints even though we are able to get the expected behavior on the client. On the screenshot below we are able to run the start and stop tests but at the same time getting the response timeouts.

Tried to stop/start the emqx_v5 docker container even removed it but still the same behavior
It seems it only happens on endpoints using rpcc

This issue is related completely to the commlib-cli package that was not updated by me to adopt to the latest changes of commlib-py, which caused the event loop for RPCC to not work properly. I just updated commlib-cli to include the latest changes of commlib-py. Please update to the latest from master branch (commlib-cli:master) and you should get the response from the cli properly.

When testing import endpoint for incorrect or invalid strategy name using commlib-cli --host localhost --port 1883 --btype mqtt rpcc 'hbot/botid/import' '{"strategy": "pmm-testonly"}' the hummingbot client returns unhandled error and no way for us to manually import a strategy and have to relaunch the client to make it work again:
2023-01-02 14:53:11,522 - 237061 - hummingbot.core.utils.async_utils - ERROR - Unhandled error in background task: [Errno 2] No such file or directory: '/home/ubuntu/5945/conf/strategies/pmm-testonly.yml'
Traceback (most recent call last):
  File "/home/ubuntu/5945/hummingbot/core/utils/async_utils.py", line 9, in safe_wrapper
return await c
  File "/home/ubuntu/5945/hummingbot/client/command/import_command.py", line 46, in import_config_file
config_map = await load_strategy_config_map_from_file(strategy_path)
  File "/home/ubuntu/5945/hummingbot/client/config/config_helpers.py", line 579, in load_strategy_config_map_from_file
strategy_name = strategy_name_from_file(yml_path)
  File "/home/ubuntu/5945/hummingbot/client/config/config_helpers.py", line 535, in strategy_name_from_file
data = read_yml_file(file_path)
  File "/home/ubuntu/5945/hummingbot/client/config/config_helpers.py", line 558, in read_yml_file
with open(yml_path, "r", encoding="utf-8") as file:
FileNotFoundError: [Errno 2] No such file or directory: '/home/ubuntu/5945/conf/strategies/pmm-testonly.yml'

Suggestion: We could use this behavior of the client when calling a invalid or non-existing strategy file on import command:

Thanks for that, maybe we did never tried with wrong filepath (my bad)! @TheHolyRoger is in Super Sayian Mode (:fire:) and already prepared a fix (Fix MQTT import command) that it is now merged in this PR.

For rabbitmq we observed that the initialization was able to accept the default username/password (admin/admin) however when we are about to run some endpoint tests its returning a authentication error:

On the screenshot below it was able to confirm mqtt connection successfully initialized
However when we are about to run some endpoint start test getting a authentication failed and the user seem to be set to blank or ''

The authentication errors are for connections  from commlib-cli.  You need to pass authentication credentials to the CLI using the --username and --password arguments:
commlib-cli --host localhost --port 1883 --username admin --password admin --btype mqtt rpcc 'hbot/bot1/start' '{}'

Hi @klpanagi, good day to you
Thanks for the update and I can confirm that the following has been fix on the latest commit:

Updated the latest commlib-cli, all ok now

On latest commit for emqx_v5 we are experiencing this error commblib.exceptions.RPCClientTimeoutError: Response timeout after 30 seconds testing endpoints even though we are able to get the expected behavior on the client. On the screenshot below we are able to run the start and stop tests but at the same time getting the response timeouts

Added the username and password arguments for endpoint tests for both emqx_v5 and rabbitmq, all ok

However when we are about to run some endpoint start test getting a authentication failed and the user seem to be set to blank or ''

However the issue on import endpoint test we are getting this result for both exist or non-existing strategy file, a warning of  RuntimeWarning: Enable tracemalloc to get the object allocation traceback with a displayed This event loop is already running. Please see recording below:
https://user-images.githubusercontent.com/73840223/210304155-119853eb-8bcc-4c47-aeb4-9a2eb7fa2a91.mp4

While this happened, the client seem to work as expected and able to execute the import command call the strategy file.
Steps to reproduce:

Deploy emqx_v5 or rabbitmq
Check mqtt bridge connection by running mqtt_start
Run import endpoint test by calling the existing strategy file, no go
Run import endpoint test by calling the non-existing strategy file, no go

Hello @rapcmia  and thanks for the feedback.

However the issue on import endpoint test we are getting this result for both exist or non-existing strategy file, a warning of  RuntimeWarning: Enable tracemalloc to get the object allocation traceback with a displayed This event loop is already running.
While this happened, the client seem to work as expected and able to execute the import command call the strategy file.

Yeah, sorry about that, we messed up a bit with the event loop :/.
Pushed some commits that fixes the mess with event_loop.
Though, I noticed that there is a bug in the ImportCommand.import_config_file() method that causes a crash of the prompt if the given strategy configuration file does not exists on disk. This bug exists in development branch of the upstream. Please see below.

I have a solution, I will create a separate PR tomorrow and link to this one.

Hi @klpanagi I would like to test your PR as well if possible, however the links provided in the initial post for setting up the brokers etc are 404, do you have any current docs pls? Thanks

Hi @klpanagi I would like to test your PR as well if possible, however the links provided in the initial post for setting up the brokers etc are 404, do you have any current docs pls? Thanks

Hello @leocape.
Sorry about that, we moved the docs to a different repo.
I have just updated the initial post with the correct links.

Hi @klpanagi good day,
I can confirm that the latest commit fix the issue reported below, thank you

However the issue on import endpoint test we are getting this result for both exist or non-existing strategy file, a warning of  RuntimeWarning: Enable tracemalloc to get the object allocation traceback with a displayed This event loop is already running.

Apologies, I can confirm that this is a ongoing issue on development branch after some tests and reopen a ticket I remember related to this issue https://github.com/hummingbot/hummingbot/issues/3376.

Though, I noticed that there is a bug in the ImportCommand.import_config_file() method that causes a crash of the prompt if the given strategy configuration file does not exists on disk. This bug exists in development branch of the upstream. Please see below.

Hi @klpanagi I've done some testing and the subscription events are working well and reliably, great work.
While testing sending commands via publishing I'm getting errors - I'm not sure if its my message format that is causing the error, or if only commands over RPC is supported and publishing is not?
(It appears that the lib is trying to reply to that message with a message, instead of just publishing the response, and thats where its falling over - based on the commlib-cli docs it looks like its trying to handle an RPC messsage instead of a publish message) Given that I'm trying to publish the command I expect to not have to supply a responseTopic, or a reply_to as it shouldnt have to reply to the message, but if I dont include them it throws errors expecting them.
I'm testing sending from Node as that is the interface that we are using:
{
  data: {},
  header: {
    timestamp: Date.now(),
    reply_to: "",
    properties: {
      content_type: "application/json",
      content_encoding: "utf8",
    },
  },
};

Without specifying a response topic:
 client.publish("hbot/testbot/status", JSON.stringify(json));

With specifying a response topic:
 client.publish("hbot/testbot/status", JSON.stringify(json), {
    properties: { responseTopic: "hbot/testbot/log" },
  });

The error is thrown in paho/mqtt/client.py:
File
"/Users/leo/opt/anaconda/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py"
, line 3591, in _thread main
File
"/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py", line 1756, in loop_forever
r = self._loop(timeout)
File
"/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py", line 1164, in _loop
rc = self.loop_read()
File "/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py", line 1556, in loop_read
c = self._packet_read0)
File "/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py", line 2439, in _packet_read
c = self._packet_handle()
File "/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py", line 3033, in _packet_handle
return self._handle_publish)
self.loop_forever(retry_first_connection=True)
File "/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py"
line 3327, in _handle_publish
self._handle_on message(message)
callback..
name__,
AttributeError:
"functools.partial' object has no attribute
__name.
File
"/Users/leo/opt/anaconda/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py"
line 3561, in _handle_on message

If I add I dont add a repsonseTopic, it throws this one first, and then the one above:
10:59:19
- hummingbot_application - MQTT Bridge connected with success.
Exception in thread Thread-198:
File "/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py"
, line 3556, in _handle_on_message
callback(self, self._userdata, message)
File
"/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/commlib/transp
orts/mqtt.py", line 222, in _on msg_internal
callback(client, userdata, msg)
File "/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/commlib/transp
orts/matt.py"
, line 477, in _on_request_internal
self._send_response(resp, reply_to)
File "/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/commlib/transp
orts/matt.py", line 449, in _send_response
self._transport.publish(reply_to,
_resp, qoS=MQTTQoS.L1)
File "/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/commlib/transp
orts/matt.py", line 190, in publish
ph= self._client.publish(topic, pl, qos=qos, retain-retain,
File
"/Users/leo/opt/anaconda3/envs/hummingbot/lib/python3.8/site-packages/paho/matt/clie
nt.py", line 1228, in publish
raise ValueError('Invalid topic.")
ValueError: Invalid topic.

Also, after multiple starts and stops of the MQTT Bridge (I was restarting the bridge again and again after encountering the errors mentioned here), it eventually throws this error and does not start, I needed to restart the HB instance to get it to work again.
11:03:52 - hummingbot_application - Failed to connect MQTT Bridge: [Errno 24] Too many open
files

Sample node app to Publish an MQTT message:
const mqtt = require("mqtt");
const client = mqtt.connect("mqtt://localhost");

const json = {
  data: {},
  header: {
    timestamp: Date.now(),
    reply_to: "",
    properties: {
      content_type: "application/json",
      content_encoding: "utf8",
    },
  },
};

client.on("connect", function () {
  client.subscribe("hbot/testbot/hb", function (err) {
    if (!err) {
      console.log("Subscribed to Heartbeats");
    } else {
      console.log(err);
    }
  });
  client.subscribe("hbot/testbot/notify", function (err) {
    if (!err) {
      console.log("Subscribed to Notifications");
    } else {
      console.log(err);
    }
  });
  client.subscribe("hbot/testbot/events", function (err) {
    if (!err) {
      console.log("Subscribed to Events");
    } else {
      console.log(err);
    }
  });
  client.subscribe("hbot/testbot/log", function (err) {
    if (!err) {
      console.log("Subscribed to Logs");
    } else {
      console.log(err);
    }
  });

  client.publish("hbot/testbot/status", JSON.stringify(json));
});

client.on("message", function (topic, message) {
  console.log(`${topic}: ${message.toString()}`);
});

Hello @leocape,
The commands are implemented as Remote Procedure Calls (RPCs), thus they follow the ReqResp (Request-Response) communication pattern. A good guide about implementing RPCs over asynchronous message brokers is this from RabbitMQ. The specification requires a unique dynamically crafted uri for the RPC to send the response to the appropriate client (which issued the request). You cannot have a single topic uri for responses because this breaks the ReqResp pattern and can lead to undefined states of the system (e.g. A client gets a response from other's client request).
Commlib-py implements the RPC specification for message brokers over various transports/protocols, such as MQTT, AMQP and Redis. Your findings about how to properly call the commands without commlib-py are valid. You just have to follow the Request message specifications you mentioned.
As next steps, to ease the development of software that interracts with the bots, I would propose the implementation of the relevant hummingbot-remote-client in various programming languages. Initially JS and Python clients would be very useful for the community.
An example of what I mean, in Python:
from hbot_remote_client import Client

c = CommandsClient(bot_id="bot1")

c.start()
c.import("my_strategy")
c.start()

Also, notice that you can use several transports/protocols to interract with the bots, even that the bot uses MQTT. For example, if you use RabbitMQ as the message broker, you can remotely interract with bot resources (commands, logs, notifications etc) via AMQP, STOMP, MQTT, Web-STOMP, Web-MQTT etc.

Also, after multiple starts and stops of the MQTT Bridge (I was restarting the bridge again and again after encountering the errors mentioned here), it eventually throws this error and does not start, I needed to restart the HB instance to get it to work again.
11:03:52 - hummingbot_application - Failed to connect MQTT Bridge: [Errno 24] Too many open
files

Thank you @leocape for reporting your findings.
A client sould never crash the server!! :)
Seems like commlib-py does not properly handle exceptions thrown by the case of a missing or empty reply_to property of the RPC Message. Such messages shall be dropped at the transport layer. I will provide a fix in commlib-py and update the hummingbot client to adopt.

Thanks for the

Hello @leocape,
The commands are implemented as Remote Procedure Calls (RPCs), thus they follow the ReqResp (Request-Response) communication pattern. A good guide about implementing RPCs over asynchronous message brokers is this from RabbitMQ. The specification requires a unique dynamically crafted uri for the RPC to send the response to the appropriate client (which issued the request). You cannot have a single topic uri for responses because this breaks the ReqResp pattern and can lead to undefined states of the system (e.g. A client gets a response from other's client request).
Commlib-py implements the RPC specification for message brokers over various transports/protocols, such as MQTT, AMQP and Redis. Your findings about how to properly call the commands without commlib-py are valid. You just have to follow the Request message specifications you mentioned.
As next steps, to ease the development of software that interracts with the bots, I would propose the implementation of the relevant hummingbot-remote-client in various programming languages. Initially JS and Python clients would be very useful for the community. An example of what I mean, in Python:
from hbot_remote_client import Client

c = CommandsClient(bot_id="bot1")

c.start()
c.import("my_strategy")
c.start()

Also, notice that you can use several transports/protocols to interract with the bots, even that the bot uses MQTT. For example, if you use RabbitMQ as the message broker, you can remotely interract with bot resources (commands, logs, notifications etc) via AMQP, STOMP, MQTT, Web-STOMP, Web-MQTT etc.

Thanks for the insight @klpanagi I appreciate it! Have been using it the last couple days with some new strategies that emit certain messages for other services to use (account balancing / email notifications / db updates etc), its so so good.
While the diff is open - 2 small nitpicks I noticed if you like:

hbot/{instance_id}/events should probably follow the convention of the other interfaces and be singular instead of plural (hb / notify / log / event)

configs for enabling/disabling features would be nice to follow what I gather is the convention for the prompts (Asking a question and then providing the options for the user):

And yes agree fully some client libraries would be helpful too, I could help out with the JS one it doesn't look too taxing with such few commands required at this point

Hello @leocape and thank you for supporting this PR :)

hbot/{instance_id}/events should probably follow the convention of the other interfaces and be singular instead of
plural (hb / notify / log / event)

Agree! Also, it would be nice to have a command URI prefix for commands: e.g. {namespace}/{instance_id}/command/start
If @rapcmia & @cardosofede approves these changes at this point I will prepare a merge that addresses them asap.

configs for enabling/disabling features would be nice to follow what I gather is the convention for the prompts (Asking a question and then providing the options for the user):

I do not agree with this approach, as it will strongly bind MQTT features to the TUI and prompt dependencies and we do not want that. There are intentions to enable Hummingbot to run in headless mode (to TTY/TUI/Prompt) on a next phase of the HIP. This will allow preconfigured bots/strategies to run headless in a device/machine/infrastructure-agnostic manner. Pros are: 1) easiness of deploying anywhere, 2) lower resource (cpu load, mem) requirements.

And yes agree fully some client libraries would be helpful too, I could help out with the JS one it doesn't look too taxing with such few commands required at this point

Awesome! This can be of a lot of help, as I hate JS (\m/) and will allow the community to build web-enabled components and apps for controlling, monitoring and orchestrating multi-bot environments from the Web.
Meanwhile of our conversation, I have developed the Python client and created a PR  to add to a separate repo.
Maybe @cardosofede can create a relevant repo for the JS client (hbot-remote-client-js) and contribute there. Of course, I dont know if this should pass votes of a HIP first...

And yes agree fully some client libraries would be helpful too, I could help out with the JS one it doesn't look too taxing with such few commands required at this point

Awesome! This can be of a lot of help, as I hate JS (\m/) and will allow the community to build web-enabled components and apps for controlling, monitoring and orchestrating multi-bot environments directly from the Web.
Meanwhile of our conversation, I have developed the Python client and created a PR to add to a separate repo. Maybe @cardosofede can create a relevant repo for the JS client (hbot-remote-client-js) and contribute there. Of course, I dont know if this should pass votes of a HIP first...

Great stuff thanks for the PR that will help! I will get to a JS version over the next couple of weeks, shall we open a chat somewhere maybe discord for client libraries - others can hopefully contribute as well..

And yes agree fully some client libraries would be helpful too, I could help out with the JS one it doesn't look too taxing with such few commands required at this point

Awesome! This can be of a lot of help, as I hate JS (\m/) and will allow the community to build web-enabled components and apps for controlling, monitoring and orchestrating multi-bot environments directly from the Web.
Meanwhile of our conversation, I have developed the Python client and created a PR to add to a separate repo. Maybe @cardosofede can create a relevant repo for the JS client (hbot-remote-client-js) and contribute there. Of course, I dont know if this should pass votes of a HIP first...

Great stuff thanks for the PR that will help! I will get to a JS version over the next couple of weeks, shall we open a chat somewhere maybe discord for client libraries - others can hopefully contribute as well..

Sure! Maybe we can creater a HIP for the client libraries to be developed...
@cardosofede What do you think about this?


subscribers: Add warning when administrator unsubscribes last user fr…

Fixes: #24025

Screenshots and screen captures:

Self-review checklist

[x] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[x] Explains differences from previous plans (e.g., issue description).
[x] Highlights technical choices and bugs encountered.
[x] Calls out remaining decisions and concerns.
[x] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[x] Each commit is a coherent idea.
[x] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[x] Visual appearance of the changes.
[x] Responsiveness and internationalization.
[x] Strings and tooltips.
[x] End-to-end functionality of buttons, interactions and flows.
[x] Corner cases, error conditions, and easily imagined bugs.

Thanks! Please note the details of the issue description:

Icon before stream name (I just updated it from # to lock)
Question mark after modal heading
Link from "arvhived"

In the future, I recommend reviewing your work carefully to see of it matches what's described, and posting a question if you don't understand some part of the description.

Thanks! Can you add some space to the left of the lock? It should be visually associated with the name of the stream.
Also, I don't see a link from "archived" in the screenshot above?

The link should be on the word "archived", which is not what the screenshot shows. There is no need for a help center link from the title.

@akarsh-jain-790 If you have addressed the feedback above, please post updated screenshots.

@alya I apologize for the delay. I was in the middle of my exams, but now that they are over, I have updated the PR and description as per your suggestions.

Thanks!
Why is there an outline around the confirmation button? I don't see that in other modals.

Hm, it's definitely inconsistent across different modals, but I guess that's a separate discussion.
@sahil839 would you be up for reviewing this one?

We may need to decide how to handle cases when user names and stream names are long.
We should at least have then lock icon and stream name in the same line. For long streams, I am not sure if we can have some part of the stream name extend to next line. @alya FYI.

Mmm, yeah, good callout. Agreed about the icon. The second screenshot with the long stream name looks OK to me.

@sahil839, I have marked the string for translation as requested. Regarding the issue with the lock icon and stream name, perhaps I could create a separate pull request to address it.

Updated the PR.

Added commit to update the modal shown when a user unsubscribes themselves with following changes

Added "?" at the end of heading.
Added link to help doc on "archived".

Also did some refactors in the new commit so that the original commit in this PR can use the existing template and not the new template.

These are the screenshots for the modal shown when user unsubscribe themselves -

Regarding this comment, we can implement in such a way that the icon and stream name always be in same line, but that would break in cases like when stream names are too long to fit in a line with stream icon and would also not look good in cases when the user name is not too long like below -

I don't think we can implement in such a way that we avoid any blank space and also make sure that there is atleast one letter of the stream name and icon in same line.

I missed adding the confirmation modal when trying to unsubscribe user from a private stream from streams list in user profile modal. Will update the PR after adding it.

Updated the PR to open the "#streams" view when user tries to unsubscribed the last user from a private stream, like we did when user tried to unsubscribe themselves from a private stream. @alya can you take a look at this once?

Thanks! The solution of going to settings makes sense to me since we do it for the other case too... Can we add a tooltip to warn the user, like we do for unsubscribing from private streams? "Use stream settings to unsubscribe the last user from a private stream."
If that's easy to do, you can go ahead and mark the PR for integration review with that small tweak. Everything else looked great to me in manual testing.

Added commit to show tooltip.

@timabbott ready for your review.

Merged, thanks @akarsh-jain-790 and @sahil839!


Complete rework of Dynamic Parameter Injection.

:rocket: Now with bug-free (*) support for functions!  :rocket:
The code was completely rewritten in a cleaner, streamlined way, as well as the introduction of the ParameterConfigurator prototype, which is a flat key/valuestore that works as an injection engine of the implementation.
Main changes:

Now instead of NX.foo you must use NX.get("foo").
NEW!: To call stored functions use NX.call("mymethod") and NX.call("mymethod", ["stringArg", 42]) for methods using arguments. You can also interchange NX.get() with NX.call() if you know your stored value is a function, because under the hood NX.get() checks for a function and if so passes it with arguments to NX.call()
Documentation update with more examples and usage changes.

I'm very excited with this code, and i'm planning on creating a standalone library called Potat to further explore this way of using JSON to generate Javascript code, and to incentivize bug fixes which can be mirrored into nexrender as well.
(*) Chance of bugs may still be present. Like in, you know, every piece of software that's ever been created.

Another amazing pull request!
I can see that custom function stuff goes quite deeply now since custom functions become a kind of a base for more, and allow additional, even more, complex stuff to be built upon. I'm wondering now, should we maybe extract all of this from script asset type, and create a new type for it. Or even a separate json job entry, like job.data or something like that.
It seems to me it can become some sort of a data layer that could be accessible in all scripts defined in the job, and even further possible in all expressions as well. Not yet sure if it is technically possible tho.
What do you think @dukuo

That's an interesting idea! A shared context between scripts in a data section of a job. I like it!
I guess that expressions could have some sort of communication as well, i'm researching some possible approaches to it; let's sit this PR for a bit until we get the full scope of what we can achieve with this new approach.

I figured we can go even more advanced and introduce a paired environment. Right now, all of the scripting stuff is happening inside of the After Effects engine. To add any external dynamic values/data to the scripts you would need to prefetch them before starting and inject them.
However, we can modify your ParameterConfigurator to actually work as a bidirectional data-binding layer on top of the TCP connection that can be created using Socket object in the scripting env, and a simple TCP server in nexrender-core part. That would mean that any .call/.get operation (on a function) would actually trigger a remote function that would execute on nexrender (nodejs) side, with access to anything you would want to have access to, like databases, HTTP API requests, you name it, and then return the result to the scripting env. Basically your project Potat would be able to use any es6 language constructs since it would be executed on nodejs side of things.
Calling .set method from the scripting side would directly set values for related expressions to update their current data. (Since expressions can't have access to anything above the expression itself, we can do it only one-directional way, and that would limit expressions from being able to use .set)
And in turn, going further, we can even introduce async-based .set, and some sort of .call calls (call functions that were attached via .bind or something like that) from the nodejs side, which would trigger a network request update the overall state to the scripting & expressions, pretty much giving you the ability to control everything externally.

Possibly my mind went too far, and all the things that I wrote could actually be made later since they kinda sound like a major change to the whole system and would probably be a nice feature next major release (v2.0.0)
So as a simpler alternative we can merge this PR rn, if you feel like you finished with it, and eventually, I'll start working on a major update.

Alright sounds like a very interesting challenge. Let me give it a moment before we merge this PR, I want to come up with a basic attempt at it.

On the other hand—these changes are breaking and (as a best practice) should maybe have merited a major version bump.
Fairly straightforward fix, though.

Also—sorry for the spam posts, just commenting as I'm reading more / thinking about this—what's up with the move to NX.get("") and NX.call("")?
I find this a bit uglier than previously... is there not some clean way to get a standard JS object into the script without all these weird wrappers?


A bug?! in get_next_segment or best_link function

in #19, we are implementing from_edge option for stroke function. According to the test below, the expected stroke is the red line:
test_that("strokes can be formed starting from a given edge", {
  new_l1 <- sf::st_linestring(c(p1, p2, p3))
  sfc <- sf::st_sfc(new_l1, l4, l7)
  # p1 - p2 - p3
  #         \
  #           p5 - p6
  expected <- sf::st_sfc(sf::st_linestring(c(p1, p2, p5, p6)))
  actual <- stroke(sfc, flow_mode = FALSE, from_edge = list(3))
  expect_setequal(actual, expected)
})

However, the best_links table shows that l3 includes s1, see [3,]     1   4, but l1 doesnot include s3, see [1,]    NA   2.
> best_links
     start end
[1,]    NA   2
[2,]     1  NA
[3,]     1   4
[4,]     3  NA

The values (NA   2) will be returned by the function get_next_segment which is a length of two. This is an issue. One way to fix this has been implemented here, assuming that if a link does not include a segment, the get_next_segment should return NA. But I am not sure if this is the best solution.

Thanks for raising the issue! I had a look at it in a bit more detail and I am afraid the solution might be a bit more involved.
So, in the search for strokes in the general case (so when from_edge is NULL), the links are reciprocal (if link A is connected to B, B is connected to A). I have implemented this with the get_next_segment function, which should find the segment that continues the current one via a given link. However, this was somehow relying on the reciprocity of linking: starting from segment A, get_next_segment considers its link B and checks which segments B is connected to; these segments will be A and a third segment C, so I could discard A (since that is the segment where one is coming from), and only consider C as continuation.
But when setting from_edge, we drop the reciprocity requirements. So, in your example, you consider segment 3,  take segment 1 as link and try to find the continuation. Since segment 1 does not list segment 3 as a link, get_next_segment return both "NA" (end-point) and segment 2 as potential continuations - hence the issue..
Not sure right now what the solution might be, I will give it some thoughts..


Updated python packages December 2024.

The flow to update are as follow:

Run uv tree -d 1 --outdated to get  list of packages with updates.
Update the package version in pyproject.toml
Run uv sync, this will install all the new packages and sync the uv.lock file.

The command will alert of any dependency conflicts, you need to resolve these.

Run pre-commit run --all-files, this will run the uv commands needed to update all the requirements* files. (Info is taken from the uv.lock file so it must be updated before this step.)

I think this is ready, in all my testing today I didn't seem to have any issues


wrong version number (1.0)

seen in both in about dialog & readme.md (upper line)

Just fixed in readme,  1ec6ba1c1bb2afde5 fixed the dialog.
Thanks!


navbar & footer added

Fixes #238

Upcoming events missing
Sharing not working
missing tags of events
Create event button on top moving around
Not showing event type, e.g. "Online Event"
Use blue color same as on previous version, please
Call for speakers not visible
Groups not showing
Use gray instead of white on footer
Distribute footer more similarly to previous version
No language switcher available
header too big
"Create event" on header not blue
Font on header should not be bold
"eventyay" on header should be further left (and not hardcoded)

All of the above points, needs setting up different libraries. If I do them in this PR, it will become unnecessarily long. Future bugs would be hard to track.

As, there is literally no-one using this site, we can take up these things step by step.

Please solve what can be solved without additional libraries. I do not think each single points requires a complete library., e.g. a very simple thing is that the header is too big and font bold. Please go through the list and fix as much as possible. If we would have opened issues for each single point in the past we would not have gotten as far as we are today.

[x] Upcoming events missing
[x] "eventyay" on header should be further left
[x] Not showing event type, e.g. "Online Event"
[x] "Create event" on header not blue
[x] Use gray instead of white on footer
[x] Use blue color same as on previous version, please
[x] Font on header should not be bold
[x] header too big

Thanks. So, lets follow up about open points in the next PR.


Update calll to deprecated method

I believe you are correct, I will review this.

The same changes have been proposed and also merged in #193, but thank you for the PR nonetheless :)

Apologies for never getting back.
Glad that this has made it in anyway, cheers!


download firefox and chrome binaries together

I´am able to download firefox binaries for my project by set the environment variable:
npm config set PUPPETEER_PRODUCT firefox npm i puppeteer

Then inside of my project I run:
npm i puppeteer

This works fine. However when I change it back to chrome and reinstall it:
npm config set PUPPETEER_PRODUCT chrome npm i puppeteer
npm i puppeteer

It will delete the firefox binaries and only install chrome again. I tried to run npm update after switching the PUPPETEER_PRODUCT environment variable however this doesn´t work and nothing gets updated.
How can I download firefox and chrome binaries together? That I can easily switch the product value?
client = await puppeteer.launch({  product: 'firefox'  }); // or product: 'chrome'

Please notice that I can not just create a hello world project and set product: 'firefox' because the binaries does not exist and will not automatically downloaded. For any default puppeteer install only the chrome binaries will exist.
Switching to firefox won´t work until you change the environment variable PUPPETEER_PRODUCT to firefox and reinstall puppeteer and download the firefox binaries.

As it seems you can only not on windows via terminal:

PUPPETEER_PRODUCT=firefox npm install puppeteer

On linux you can run the command above and it will download the binaries. There is actually no need to use this on linux:

npm config set PUPPETEER_PRODUCT chrome npm i puppeteer

Firefox is not downloaded next to Chrome, see https://github.com/puppeteer/puppeteer/issues/8215#issuecomment-1157299074

To download Chromium and Firefox at the same time:

npm install puppeteer

This will install puppeteer and download chromium by default. Chromium will be put in node_modules/puppeteer/.local-chromium
cd node_modules/puppeteer
PUPPETEER_PRODUCT=firefox node install.js

This will download firefox. Firefox will be put in node_modules/puppeteer/.local-firefox

Source: https://github.com/puppeteer/puppeteer/issues/5743#issuecomment-621664876


Add DVCLive-Quickstart

To be used in Colab
Test in:
https://colab.research.google.com/github/iterative/dvclive/blob/colab/examples/DVCLive-Quickstart.ipynb

Codecov Report
Patch and project coverage have no change.

Comparison is base (3e0ac41) 95.81% compared to head (ea237c8) 95.81%.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #530   +/-   ##
=======================================
  Coverage   95.81%   95.81%
=======================================
  Files          41       41
  Lines        2628     2628
  Branches      221      221
=======================================
  Hits         2518     2518
  Misses         67       67
  Partials       43       43

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

Do you think we could use example-get-started-experiments for this?

I love the idea and direction and how fast you are improving it, @daavoo . I'm even fine to merge this :)

Do you think we could use example-get-started-experiments for this?

But I agree on this also. We should try to use the same project. It reduces the surface of things to maintain and remember for us.

I think having a colab notebook for example-get-started-experiments would be nice to have anyway.

I think having a colab notebook for example-get-started-experiments would be nice to have anyway.
Edit: agreed it's a minor note though and this looks good in general to me.

I did one for the blog post release:
https://colab.research.google.com/drive/1NTivljRYiySMJn-SHeWQSycBmSOVUbvA
What is hard is to make it "based on"/"linked to" the one from the GitHub repo, as this quickstart, because workflows are just too different in Colab. The notebook would have to be filled with conditions to alter the workflow depending on whether you are executing it in Colab or in a different context like a codespace or local machine.
This quickstart works fine because we don't really expect to also use it in a real git-based workflow. It is a one-time visit where you discard the end results.
To make it work git-based, you need to run git clone in colab, cd to the repo, somehow dump the current notebook changes to a file and track it with git, etc. It just becomes nonsense.

I did one for the blog post release:
https://colab.research.google.com/drive/1NTivljRYiySMJn-SHeWQSycBmSOVUbvA

LGTM. My suggestion was about reusing the use case, not tracking the colab notebook in the repo, and I think that notebook already does a good enough job of it. Can we combine these two notebooks so you use the experiment-get-started use case but highlight the DVCLive stuff and hide the irrelevant stuff?

We could optionally add it to example-repos-dev and/or example-get-started-experiments to keep changes in sync, but it the notebook itself doesn't need to "depend" on the repo.

We could optionally add it to example-repos-dev and/or example-get-started-experiments to keep changes in sync, but it the notebook itself doesn't need to "depend" on the repo.

I was actually thinking on adding it to dvclive/examples, and making that folder a little about Colab intro, as example-repos-dev is more about reproducing and generating a full git repo.

Merging this one, lets discuss improvements and ideas as follow ups


feat: upgrade to astro2.0

https://github.com/hendriknielaender/double-trouble/issues/38

https://github.com/withastro/astro/pull/5717#issuecomment-1401790744
could be just in dev 🤔

Added a fix so yarn build works with astro 2.0.
astro build + astro preview shows the prod build should be unaffected. Let's merge this bish!


Add error message for a message that is too large

Ticket: CS-6715

It would be useful for the user to see what the limit is, could we add that info?

There is the explanation https://spec.matrix.org/legacy/client_server/r0.6.1#size-limits for the M_TOO_LARGE error. I don't think it's convenient to display it to users in the error message.

@FadhlanR if the message is too large. Do we crop out the original message that was sent?

@tintinthong @habdelra Apologies for any confusion. 'Too Large Message' was not the error title; it was the message sent by the user. While adding the test in the host test, I was able to simulate the M_TOO_LARGE error without having a truly large message. To enhance clarity, I've moved the test to the matrix test.


[SPARK-49809][BUILD] Use sbt.IO in SparkBuild.scala to avoid naming conflicts with java.io.IO in Java 23

What changes were proposed in this pull request?
This pr change to use sbt.IO in SparkBuild.scala to avoid naming conflicts with java.io.IO in Java 23, and after this PR, Spark can be built using sbt with Java 23(current pr does not focus on the results of sbt/test with Java 23)
Why are the changes needed?
Make Spark be compiled using sbt with Java 23.
Because Java 23 has added java.io.IO, and SparkBuild.scala imports both java.io._ and sbt._, this results in the following error when executing
build/sbt -Phadoop-3 -Phive-thriftserver -Pspark-ganglia-lgpl -Pdocker-integration-tests -Pyarn -Pvolcano -Pkubernetes -Pkinesis-asl -Phive -Phadoop-cloud Test/package streaming-kinesis-asl-assembly/assembly connect/assembly

with Java 23
build/sbt -Phadoop-3 -Phive-thriftserver -Pspark-ganglia-lgpl -Pdocker-integration-tests -Pyarn -Pvolcano -Pkubernetes -Pkinesis-asl -Phive -Phadoop-cloud Test/package streaming-kinesis-asl-assembly/assembly connect/assembly
Using /Users/yangjie01/Tools/zulu23 as default JAVA_HOME.
Note, this will be overridden by -java-home if it is set.
[info] welcome to sbt 1.9.3 (Azul Systems, Inc. Java 23)
[info] loading settings for project global-plugins from idea.sbt ...
[info] loading global plugins from /Users/yangjie01/.sbt/1.0/plugins
[info] loading settings for project spark-sbt-build from plugins.sbt ...
[info] loading project definition from /Users/yangjie01/SourceCode/git/spark-sbt/project
[info] compiling 3 Scala sources to /Users/yangjie01/SourceCode/git/spark-sbt/project/target/scala-2.12/sbt-1.0/classes ...
[error] /Users/yangjie01/SourceCode/git/spark-sbt/project/SparkBuild.scala:1209:7: reference to IO is ambiguous;
[error] it is imported twice in the same scope by
[error] import sbt._
[error] and import java.io._
[error]       IO.write(file, s"$hadoopProvidedProp = $isHadoopProvided")
[error]       ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed

Does this PR introduce any user-facing change?
No
How was this patch tested?

Pass Github Actions
Manual check:

build/sbt -Phadoop-3 -Phive-thriftserver -Pspark-ganglia-lgpl -Pdocker-integration-tests -Pyarn -Pvolcano -Pkubernetes -Pkinesis-asl -Phive -Phadoop-cloud Test/package streaming-kinesis-asl-assembly/assembly connect/assembly

with Java 23, after this pr, the aforementioned command can be executed successfully.
Was this patch authored or co-authored using generative AI tooling?
No

This pr only fixes the compile and doesn't cover the test. There are some failing test cases, but I haven't fully investigated them yet.

Got it. Thank you. That sounds enough for now because Java 23 is not LTS.
Merged to master.

Thanks @dongjoon-hyun


Changes for DDD Melbourne 2025

New logo '25
Added conference date
Turned off dates except for conference date
Removed sponsors

Todo:

New hero image
Different shade of ddd melbourne logo


sometimes doesn't download in biggest size

for example, I download a image using this program and it gives me 700 x 502 at 245kb. I donwload from another program it gives me a better and bigger image 1200 x 846 at 532kb

give me the image id?
The app will only download the original size, not the resized version.
http://i2.pixiv.net/img-original/img/2016/10/11/00/30/01/59417201_p0.png
not  http://i2.pixiv.net/c/600x600/img-master/img/2016/10/11/00/30/01/59417201_p0_master1200.jpg

I'm downloading by member id, not image id  but here it is 58273991
so in this case, the original size is the 700 x 502 at 245 kb right?

It should be 532 KB (545,685 bytes). What is the image url when it parse the page?

rename db.sqlite to db.sqlite.bak and retry.

where is that?

srry I don't understand

on the app folder, filesize may vary.

yeah I just found it, srry

now it's fullsized
but does it work for member id?

Should be the same, cos internally it will call the same function.

I'm downloading from member id but it's still the same :/

what is the image url? It should be something like http://i1.pixiv.net/img-original/img/2016/08/15/21/13/34/58462144_p5.png

hmm, url looks ok. I suspect your internet provider do the compression/resizing.

rip

are you using mobile as the internet? anyway, you can use socks5 proxy to avoid isp compression.
Edit config.ini using notepad and set the correct value. You can get free proxy from google search.
[Network]
useproxy       ==> Set 'True' to use proxy server, 'False' to disable it.
proxyaddress   ==> Proxy server address, use this format:
		   http://<username>:<password>@<proxy_server>:<port> or
                   socks5://<username>:<password>@<proxy_server>:<port> or
                   socks4://<username>:<password>@<proxy_server>:<port>

No, I'm using a desktop with Ethernet

can you help me set up one? I don't know how

Edit config.ini using notepad and set the correct value. You can get free proxy from google search.
[Network]
useproxy       ==> Set 'True' to use proxy server, 'False' to disable it.
proxyaddress   ==> Proxy server address, use this format:
http://:@<proxy_server>: or
socks5://:@<proxy_server>: or
socks4://:@<proxy_server>:


[question] i18n file changes are not taken into account (spa hmr)

I'm submitting a ...  (check one with "x")
[x] bug report => check the README and search github for a similar issue or PR before submitting
[ ] support request => check the README and search github for a similar issue or PR before submitting
[ ] feature request

Current behavior

When adding keys to i18n files, changes are not taken into account. This works well on universal server (dev + prod) but not with spa.
Thanks  !
Expected/desired behavior

Keys should be translated when using {{'KEY' | translate}} and not showing KEY.
Minimal reproduction of the problem with instructions

modify an i18n file
clean cache, clean everything (even this step should not be needed)
load spa

Quick fix : clear every browser cache. But this should not happen in dev.

@theomathieubhvr I suppose you're using HMR on spa build and I have exactly the same issue right here.
I digged it a little and found out that's more or less connected with copy-assets-webpack-plugin and webpack-dev-server.
It's a known issue with the HMR; files copied through copy-assets-webpack-plugin are not taken into account.
Rebuilding the project using npm run build:spa-dev and then running npm run serve:spa would definitely solve this problem.
On the other hand, if you're using ngx-cache then the app seeks the cache (by default, should be local-storage) for i18n data. And yeah, clearing the cache (or just local-storage) would solve it.
Please feel free to to add anything if there're any points that I missed.

That's exactly it !
But in production, if I update my i18n keys, how can I force my users to reload their localstorage ?
Thanks !

You can set TTL (in terms of secs, ex: 300) right at the imports section of you app.module. I suppose there's no usage example on ngx-cache/core repository about TTL but see the cache.loader.ts to what params to pass. Also, don't forget to set the expiry param to undefined - otherwise it will override the TTL.


Focus is not working if tap on far object

I am currently using this awesome framework. But i notice sometime focus not working on objects which is far from camera. i'm not able to find why this happening so please help me. i also attache image. First two image is capture using this framework. and last two is capture from apple camera framework,

Hi @jjpatel1996,
I am facing the same issue, were you able to find a solution for this?

@aman836, You might need to dig in and figure out by working with autoFocus. Because, I could not able to recall.

@jjpatel1996 ok, thanks a lot for the direction.


in newest versions above ground floods are broken

on vow and offense i've seen it that the above ground floods no longer work
such that the flood stage is permanently stuck below ground, but the facility flood level works fine
also if it is not too much cost on performance having the underground flood stage stretch wider for potentially larger dungeon gens on rend and dine would be preferable as i have seen dungen go past the radius of the water especially with SCPBDungen

Yeah I've noticed the above ground issue, I think I know what's causing it so should be fixed soon. I'll look into the sizing haven't extensively tested on the high level moons yet.


Cluster Edit > Mirror > Rewrite Configuration

I expect to change the URL request rules, but there is no rewrite configuration.

@steved @flavio @izaac
See if you can support it ?
Because when I configure the systemDefaultRegistry=harbor.test.com/dockerhub_proxy of the router, an error system default registry: registers must be valid RFC 3986 URI will appear in the rke2 cluster.
If I configure systemDefaultRegistry=harbor.test.com cannot access my private server because my private server must have a dockerhub_proxy path, so you need to use the mirror rewrite to solve the problem.
rewrite:
  "^rancher/(.*)": "dockerhub_proxy/rancher/$1"


fatal error: zmq.h: No such file or directory

Hi, when I try to install npm<EMAIL_ADDRESS>I am getting following error:
<EMAIL_ADDRESS>install /bundle/bundle/programs/server/npm/node_modules/msgpack
node-gyp rebuild
make: Entering directory '/bundle/bundle/programs/server/npm/node_modules/msgpack/build'
CC(target) Release/obj.target/libmsgpack/deps/msgpack/objectc.o
CC(target) Release/obj.target/libmsgpack/deps/msgpack/unpack.o
CC(target) Release/obj.target/libmsgpack/deps/msgpack/vrefbuffer.o
CC(target) Release/obj.target/libmsgpack/deps/msgpack/zone.o
CC(target) Release/obj.target/libmsgpack/deps/msgpack/version.o
AR(target) Release/obj.target/deps/msgpack/msgpack.a
COPY Release/msgpack.a
CXX(target) Release/obj.target/msgpackBinding/src/msgpack.o
SOLINK_MODULE(target) Release/obj.target/msgpackBinding.node
COPY Release/msgpackBinding.node
make: Leaving directory '/bundle/bundle/programs/server/npm/node_modules/msgpack/build'

<EMAIL_ADDRESS>install /bundle/bundle/programs/server/npm/node_modules/zmq
node-gyp rebuild

make: Entering directory '/bundle/bundle/programs/server/npm/node_modules/zmq/build'
CXX(target) Release/obj.target/zmq/binding.o
../binding.cc:28:17: fatal error: zmq.h: No such file or directory
#include <zmq.h>
^
compilation terminated.
make: *** [Release/obj.target/zmq/binding.o] Error 1
zmq.target.mk:96: recipe for target 'Release/obj.target/zmq/binding.o' failed
make: Leaving directory '/bundle/bundle/programs/server/npm/node_modules/zmq/build'
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/opt/nodejs/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:211:12)
gyp ERR! System Linux 4.4.0-1031-aws
gyp ERR! command "/opt/nodejs/bin/node" "/opt/nodejs/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /bundle/bundle/programs/server/npm/node_modules/zmq
gyp ERR! node -v v4.8.3
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm ERR! Linux 4.4.0-1031-aws
npm ERR! argv "/opt/nodejs/bin/node" "/opt/nodejs/bin/npm" "rebuild" "--update-binary"
npm ERR! node v4.8.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the zmq package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs zmq
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls zmq
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR!     /bundle/bundle/programs/server/npm/npm-debug.log
npm WARN<EMAIL_ADDRESS>No description
npm WARN<EMAIL_ADDRESS>No repository field.
npm WARN<EMAIL_ADDRESS>No license field.
npm ERR! Linux 4.4.0-1031-aws
npm ERR! argv "/opt/nodejs/bin/node" "/usr/bin/npm" "install" "--unsafe-perm"
npm ERR! node v4.8.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>install: node npm-rebuild.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>install script 'node npm-rebuild.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the meteor-dev-bundle package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node npm-rebuild.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs meteor-dev-bundle
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls meteor-dev-bundle
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR!     /bundle/bundle/programs/server/npm-debug.log

From my own experience, this module requires Visual Studio Community build tools, specifically the C++ stuff to build in place your library. I think I did fine with the 2017 Community, and you probably will as well.
However, I recently swapped out my use of zmq, and changed over to zeromq https://www.npmjs.com/package/zeromq which contains pre-built libraries. The reasons are:

This package has been receiving regular updates,
This package was cloned from zmq, and the authors had a long discussion just a few weeks ago, that all is well, and that zeromq should be considered the official npm module when using 0MQ.

For my project, it as a seamless switch, as you might expect, so, unless you are married to using zmq, I would switch to zeromq.
Cheers.

i had a same problem with centos7
yum install -y zeromq-devel
it worked

apt-get install libzmq3-dev
on debian or ubuntu

yum install -y zeromq-devel
output:
No package zeromq-devel available.
Error: Nothing to do

apt-get install libzmq3-dev
on debian or ubuntu

thank，maybe i uninstall it before yesterday


Wrong sensor in the readme

there is an error in your readme in the YAML.
You put
type: custom:octopus-energy-greenness-forecast-card
currentEntity: event.octopus_energy
It should read
type: custom:octopus-energy-greenness-forecast-card
currentEntity: **sensor.**octopus_energy

Thanks, I was a bit lazy on the documentation, fixed and also added future ... must spend time making sure it's fully configurable. Was in a bit of a rush!


bug at shell example at readme.md

we should close channel at defer function. other while for loop listening cannot stop.

I updated the README closing the channel. However, I don't think that was related to your concern. The example is not meant to be a product, but rather a demonstration.
Running the code as-is in a loop will indeed result in the Stdin blocking until the next keystroke (added comment for that as well). You would need to create a pipe and pass that around instead of consuming os.Stdin directly.


Revert "Move left when exiting insert mode"

Reverts nushell/reedline#699

Personally sad to see this reverted, I have muscle memory from using vim/similar constantly. Reverting until it can be handled better/less buggy seems to be the right move, but wanted to voice my support for this behavior generally

I believe we reverted this because the history navigation by prefix failed if the cursor was in the wrong position when in vi mode.

Yes, and I think it's fine to revert the PR since the implementation seems to have been buggy. There was some discussion in #772 about this behavior being "annoying" or not appropriate for a readline, which I disagree with. I figured it made more sense to continue the discussion here rather than in #772 though.


Mast: Watch serious[\W_]+beauty[\W_]+professionals(?!.com)

Mast requests the watch of the watch_keyword serious[\W_]*+beauty[\W_]*+professionals(?!\.com). See the MS search here and the Stack Exchange search in text, in URLs, and in code.

serious[\W_]*+beauty[\W_]*+professionals(?!\.com) has been seen in 1 true positive, 0 false positives, and 0 NAAs.

Duplicate of #4639


Support for builder before/after hooks

🚀 Feature request
Command (mark with an x)

- [ ] new
- [ x] build
- [x ] serve
- [x ] test
- [ ] e2e
- [ ] generate
- [ ] add
- [ ] update
- [ ] lint
- [ ] xi18n
- [ x] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc

Description
Maybe somebody already asked this but are there any plans in terms of extensibility of CLI build tasks?

I understand right now the recomended way to extend cli is to write schematics to create some custom generate command. Or even override existing ones like some of the cli are doing it.
You are also able to use builder API to really change behavior or create new for the existing commands (build, serve, test,..)
if I want to extends existing build process, then I can extends browser build export default createBuilder where I can call existinb fn buildWebpackBrowser as executeBrowserBuilder, and then do some my own logic

But what I am strugling with or I dont see a solution, how do I easily extend and alter building process of existing application that might already be using some builder API.

Current solution does not scale, as you can extend builder API and replace application's configuration for your builder, but this would not work if they are already using some custom builder API. So replace is not really an option.
What you need some Injection points, to be able to register your tasks before, after each task. I know ngx-build-plus is trying to do something similar, but again if we use ngx-build-plus and project has already some builder it will not work.
Like Maven, Gradle,....
Any pointers ?
Describe the solution you'd like
 If you have a solution in mind, please describe it.
Describe alternatives you've considered
 Have you considered any alternative solutions or workarounds?

It's true that builders don't compose very well right now. We've talked in the past about having before/after hooks, and others of that kind. But it's not something that has gained much traction yet and we have no concrete plans for an implementation.

I am sure whoever works in enterprise have these needs and right now people have different workarounds  or use 3th-party projects like the one from the @manfredsteyer.
All comes down to extensibility. And I understand if there is no real demand, you have no urgency to take this to the next level. Can we keep this open until you guys decide, "No we dont want to support it. " ;-)

Sure, let me just change the title to mention the hooks.

This seems to be related to https://github.com/angular/angular-cli/issues/11787.
Let's continue tracking it over there.


error  while loading  shared libraries libaquamarine.so.2

after this update today when I launch. Hyprland on arch linux I get this error: error  while loading  shared libraries libaquamarine.so.2 : cannot open shared object file :No such file. or directory

recompile hyprland

ok problem solved thanks for your reactivity


How to include local images in my application

Hello, I'm unclear how I can add images to my application. Let's say my render.html looks like this:
<!DOCTYPE html>

What would PATH/TO/IMG be? Giving it an absolute path to an online image would of course work but what if I want to have my image included in the executable? Thanks.

You can now include local images in Neutron's new version. pip install Neutron-Web --upgrade
Example:

Note that it doesn't work with absolute paths

That was quick, thank you!

@jfgauron ... seems to be broken now, in 0.1.6 .. no ?!


AssetContainer is missing EffectLayers ( HighlightLayer )

Both addAllToScene() and removeAllFromScene() methods of AssetContainer
doesn't contain effectLayers, because of this the highlightLayer is not added back to the scene.
PG - https://www.babylonjs-playground.com/#5NFRVE#5
Not sure how the GlowLayer is working !
Is there any other way to load HighlightLayer ? If not I have a PR ready :)

Fixed in pr,
See updated pg: http://playground.babylonjs.com#5NFRVE#11, the reason glow was working was that it was not being added/removed from the scene, asset container already had some logic related to effect layer that seemed to be causing an issue when adding/removing the asset container.
Im not aware of another way to load highlight layer, but maybe @sebavan knows? Feel free to make a PR if you already have something so we can take a look.

@TrevorDev - thanks for resolving this.
I took a different approach as I didn't know they were part of components. What I did was to add the effectLayers as member of AbstractScene, and loading them like any other (meshes, light etc). But having them in components makes more sense !

Hi, Is it fixed and released?

Yes it is :-)


Emulate the width logic of a native select exactly

A native dropdown single select without specified width automatically assumes such width that the widest option's text can be displayed without truncation, and the widget's width doesn't change regardless of which option is currently selected. In particular, the widget sizes itself to be able to completely show the widest option even if that option is not initially selected.
For select2 to be a good, minimum-effort drop-in replacement for a native select, it should do exactly the same when instantiated without any width-related options on a dropdown single select without specified width.
Currently select2 just assumes the width of the currently selected option.

Closing this off due to a lack of activity.
If this is still an issue in the upcoming 4.0 release, feel free to reply back and we can determine if this needs to be reopened.


Drop assertion-time attestation

Fixes #496.

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

Comparison is base (0a9886d) 73.94% compared to head (ec5b7c5) 74.44%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #499      +/-   ##
==========================================
+ Coverage   73.94%   74.44%   +0.50%
==========================================
  Files          99       99
  Lines        2698     2677      -21
  Branches      461      455       -6
==========================================
- Hits         1995     1993       -2
+ Misses        598      580      -18
+ Partials      105      104       -1

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


Devicescript script name and version

Need those register to provide meaningful info on ui

Maybe à uri pointing back to more info on the source


The Ant dependency isn't optional as expected

Hi,
The <optional>true</optional> attribute of the ant dependency defined in the dependencyManagement section of the root pom isn't inherited by the cglib pom. The dependency isn't optional as expected. Here is a patch fixing this.

Hello guys,
any chances to merge that in? Ant make the 3.2.10 library not JDK11 compatible.

can you update the patch so there's no conflicts? thx.

@sameb done

Thx, merged.

I'll make a new release with this tomorrow

Thank you, guys, for taking care of this.

Thank you!


Update api-alerts-mark-read.md

portal.cloudappsecurity.com is the correct domain. Contoso.com is not, however it is mentioned in a few docs.

@batamig

Can you review this PR?
IMPORTANT: When this content is ready to merge, you must add #sign-off in a comment or the approval may get overlooked.

#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

Author confirmed via email.


Common config forces development mode to every build

In webpack.common.js:
const ENV = process.env.ENV = process.env.NODE_ENV = 'development';

Just added a PR that fixes this #478

should be fixed via https://github.com/AngularClass/angular2-webpack-starter/pull/478 if you still have the problem please reopen the issue


Support min/max values for metadata query

Support AnalysisType.MIN_MAX for metadata queries. Currently it's supported only for string dimension with bitmap index.

I'm also wondering why the hashCode() function for SegmentAnalysis changed, but :+1: otherwise

Test failed by regression of #2006

Rebased on master. Now incremental index also returns estimated size.

@navis any chance of finishing this up?

:+1: after commits squashed

:+1: after squash

Not yet decided if we remove size in the metadataquery but squashed anyway.

@navis we probably should wait until 0.10.0 to remove size, but I agree with Gian what it should actually return is the actual on disk size


Use of tags

For things I want to tag that there doesn't appear to be a standard for yet, do I just define whatever I want?
I am trying to specify some things for views (Within Rails) and want to log the path of the view being rendered for example.
There are other example, where it doesn't appear my data i want to tag on a span has a clear standard for.
Thanks

Standardization of tags is only useful for metadata that tracing backends might want to understand/interpret/aggregate. If you're only adding tags for information only then it doesn't really matter much if you call something ip or ip_address, a human can still get it. Since you're likely asking about tags that the tracing backend is not going to treat specially, you can name them however you like.

Well to be clear, I am writing my own backend that will be using some of these for special reason, but only within the context of my app and how it reports the information. I guess once those because standard, I can switch them.

yes, that's fair. If you feel strongly that the data points you plan to capture have general purpose usefulness, then it makes sense to open separate issues for each of them and provide arguments why you think they are widely applicable (across languages, etc.)

At this point I don't feel strongly, just trying to get some things down the make sense first. This has been helpful though. Thanks!


Issue with Active Directory authentication and server custom port

Hi !
I'm currently switching from Rancher 1.6 to 2.0 (great work by the way !!). When configuring back the AD authentication, I need to set port 3268 instead of the default 389. I can successfully test the connection using the Authenticate button but in the UI I'm still seeing the port 389 and if I click Save this is that port which override the custom one...
Set a custom port:

Authenticate, but still see something different:

When saving, authentication does not work...
Thanks !

Useful
Info

Versions
Rancher v2.0.0 UI: v2.0.41

Access
`` admin

Route
global-admin.security.authentication.activedirectory

Fixed, but this is just a display problem unless you toggled TLS or something similar after entering the port;  The "if you toggle TLS and the port was 389/636 you probably want the other one now" logic was just always setting it back to 389 if TLS is off, and that's firing for display but it would normally have already been saved correctly.  Before fixing I was still able to save a non-standard port (and then it displayed wrong).

Many thanks ! Sorry, my bad, seems there was a some troubles with DNS and AD at time of testing :-( I confirm this is a display problem. Things are working properly :-)

@bigbrozer - this has been fixed and will be in next release.  Let me know if you have other problems.


Error building zmq_exec.c

Trying to build zmq_exec.c on OS X, MATLAB R2015b and ZMQ 4.1.4, getting the following error.
Error using mex
/Users/abhijithc/.julia/v0.4/julia-matlab/mex/zmq_exec.c:55:32: error: too few arguments to function call, expected 4,
have 3
  rc = zmq_send(socket, &msg, 0);
       ~~~~~~~~                ^
/usr/local/Cellar/zeromq/4.1.4/include/zmq.h:353:1: note: 'zmq_send' declared here

Changing to rc = zmq_send(socket, &msg, sizeof(msg), 0); helped.


Update readme with latest dependabot steps

Reviewer checklist

[ ] Ensure relevant issues are linked (description should include text like "Fixes #")
[ ] Ensure any appropriate documentation has been added or amended

Coverage remained the same at 100.0% when pulling 7c9f6d1078d59fda5bc39d2c99907cbfe8df1b0d on dependabot into c9ff0f02de42117846140950443fce8da144102d on main.


Delete unused surveys when syncing

Task/Issue URL: https://app.asana.com/0/361428290920652/945831998597279
Description:
There are cases when we want to switch a survey off on the backend to make changes and then switch it back on again, however doing so sets the survey to a cancelled status so existing users will never see it (new users will).
When syncing, delete old surveys that the user has not interacted with. This data is irrelevant (we only care about surveys they have dismissed or submitted) and clearing it allows us to reschedule easily.
Steps to test this PR:
TEST 1: Undismissed survey appears again after a sync

Install a fresh version of the app
Using a tool such as Charles intercept the survey request to https://staticcdn.duckduckgo.com/survey/survey-mobile.json and replace with

{
  "id": "509c0d52-f4a8-4409-a9b1-d858af42fa01",
  "surveyOptions": [
    {
      "url": "https://www.surveymonkey.com/r/9JTMFGJ",
      "installationDay": 0,
      "ratioOfUsersToShow": 1
    }
  ]
}

Ensure that the survey CTA box appears
Now run the app again this time responding with an empty response

{}

Ensure the CTA is gone
Run it again with the original payload

{
  "id": "509c0d52-f4a8-4409-a9b1-d858af42fa01",
  "surveyOptions": [
    {
      "url": "https://www.surveymonkey.com/r/9JTMFGJ",
      "installationDay": 0,
      "ratioOfUsersToShow": 1
    }
  ]
}

The CTA should appear again

TEST 2: Dismissed survey does not appears again after a sync

Install a fresh version of the app
Intercept the survey request and replace with

{
  "id": "509c0d52-f4a8-4409-a9b1-d858af42fa01",
  "surveyOptions": [
    {
      "url": "https://www.surveymonkey.com/r/9JTMFGJ",
      "installationDay": 0,
      "ratioOfUsersToShow": 1
    }
  ]
}

Ensure that the survey CTA box appears
Dismiss the survey and note it is gone
Now run the app again this time responding with an empty response

{}

The CTA should still be gone
Run it again with the original payload

{
  "id": "509c0d52-f4a8-4409-a9b1-d858af42fa01",
  "surveyOptions": [
    {
      "url": "https://www.surveymonkey.com/r/9JTMFGJ",
      "installationDay": 0,
      "ratioOfUsersToShow": 1
    }
  ]
}

The CTA should still be gone (the user dismissed it, we don't want to bbombard them!)

Internal references:
Software Engineering Expectations
Technical Design Template

Thanks for the review @CDRussell!


styleImages should style all images.

Fix to make options.styleImages apply to all images, including thumbnails.
Corrected version mismatch between the header doc block and the $.embedly.version
Patch version increment.

thanks man!


com.rey.material.app.BottomSheetDialog cannot be resolved, 1.2.2-SNAPSHOT

BottomSheetDialog not found?
Everything works, except this.
Also tried by importing com.rey.material.*
repositories:
    repositories {
        maven {
            url "https://oss.sonatype.org/content/repositories/snapshots"
        }
    }

dependencies:
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.1.0'
        compile 'com.android.support:cardview-v7:23.1.0'
        compile 'com.github.rey5137:material:1.2.2-SNAPSHOT'
        compile 'com.cocosw:bottomsheet:0.+@aar'
    }

I use com.cocosw:bottomsheet because BottomSheetDialog doesn't exist in 1.2.2-SNAPSHOT!
Didn't try other versions.

I have released 1.2.2 version. Pls check it out.


API was updated to 1.7.0

Changes Unknown when pulling 99b8167422bf7765546ef3a29131c32ef7e2d32d on EugeneElkin:ClientsReportIssue into ** on Microsoft:master**.


[AVM Module Issue]: should migrationToken be secure?

Check for previous/existing GitHub issues

[X] I have checked for previous/existing GitHub issues

Issue Type?
Security Bug
Module Name
avm/res/cognitive-services/account
(Optional) Module Version
No response
Description
I've noticed that the cognitive services account AVM module has parameter migrationToken which is not marked as secure. https://github.com/Azure/bicep-registry-modules/blob/main/avm/res/cognitive-services/account/main.bicep#L105-L106 I can't find documentation anywhere on what this parameter is (other than "migration token") so I can't work out if this is supposed to be a secure value. There
(Optional) Correlation Id
No response

Good question. @jceval any thoughts?

Good question. @jceval any thoughts?

I tend to strongly agree 👀

I

Quote reply

Yes - I think it should be a secure value. Given that it may contain sensitive information required for migration processes, it should indeed be treated as a secure value. This ensures that the token is not exposed in plain text within your deployment scripts or logs.


Passowrd for login

Hi
Can you please tell the password for logging into the CMS.
Thanks

Hi @rahulkhatry4,
First you should create your own Firebase project where you can configure users and their passwords. Then configure the newly created project in the configuration files inside /src/environments/. Check Firebase docs for detailed information.


added pendulum Calculator

Fixes Issue🛠
Closes #1797
Description :-
The Pendulum Calculator is a web application that calculates various properties of a pendulum system based on the length of the pendulum (l), the gravitational acceleration (g), the amplitude (A), and the mass of the bob (m). The calculator computes the following properties:

Period of the Pendulum (T)
Frequency of the Pendulum (f)
Angular Frequency (ω)
Maximum Speed
Maximum Acceleration
Kinetic Energy at the Lowest Point
Potential Energy at the Highest Point

Type of Change📄

[✅ ] New feature (non-breaking change which adds functionality)
[✅] Style (non-breaking change which improves website style or formatting)
[✅] Documentation (non-breaking change which updates or adds documentation)

Checklist✅

[ ] I am an Open Source contributor
[ ] I have performed a self-review of my code
[ ] My code follows the style guidelines of this project
[ ] I have commented on my code, particularly in hard-to-understand areas

Screenshots/GIF📷

@Rakesh9100 sir, please don't merge this pr. Because this issue is raised by me. At the same time you have not assigned this issue to anyone yet. Same problem happen in the pr #1800

Do not create a PR until you have been assigned to an issue @BarryByte

@Rakesh9100 I will keep that in mind, sorry for the inconvenience.


Fix inherit fontFamily

fix ButtonStyleButton cannot resolve fontFamily
class APP extends StatelessWidget {
  const APP({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(fontFamily: 'MyFontFamily'),
      home: const HomePage(), //fontFamily cannot resolve fontFamily: 'MyFontFamily'
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return TextButton(
      onPressed: () {},
      style: TextButton.styleFrom(
        textStyle: const TextStyle(
          fontSize: 16,
        ),
      ),
      //display cannot resolve fontFamily: 'MyFontFamily'
      child: const Text("Button"),
    );
  }
}`

Hello @kecson. Thank you for filing this issue. Can you please provide the following information?

A complete and minimal, reproducible code sample. Ideally, a public Github repository that contains all the necessary files including font files
The output of flutter doctor -v
The output of flutter run -v

Please provide the information in the form of text. See how to make collapsible sections with Markdown here.

flutter doctor -v
➜  bin git:(stable) ✗ ./flutter doctor -v
[✓] Flutter (Channel stable, 3.3.10, on macOS 13.1 22C65 darwin-arm, locale zh-Hans-CN)
    • Flutter version 3.3.10 on channel stable at /Users/ks/fvm/versions/3.3.10
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 135454af32 (9 weeks ago), 2022-12-15 07:36:55 -0800
    • Engine revision 3316dd8728
    • Dart version 2.18.6
    • DevTools version 2.15.0
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
    • Android SDK at /Users/ks/android/android-sdk
    • Platform android-33, build-tools 33.0.1
    • ANDROID_HOME = /Users/ks/android/android-sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14B47b
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[!] Android Studio (version 2022.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    ✗ Unable to find bundled Java version.
    • Try updating or re-installing Android Studio.

[✓] IntelliJ IDEA Community Edition (version 2022.2.3)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 71.0.5
    • Dart plugin version 222.4345.14

[✓] VS Code (version 1.75.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.58.0

[✓] Connected device (4 available)
    • sdk gphone64 arm64 (mobile) • emulator-5554                        • android-arm64  • Android
      13 (API 33) (emulator)
    • iPhone 14 Pro (mobile)      • 97FA3E87-6ADD-4B85-86C2-3508C04ADFA9 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-16-1 (simulator)
    • macOS (desktop)             • macos                                • darwin-arm64   • macOS
      13.1 22C65 darwin-arm
    • Chrome (web)                • chrome                               • web-javascript • Google
      Chrome 110.0.5481.77

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 1 category.

Hey @kecson. Please do provide a complete and minimal, reproducible code sample. Thank you


[MRG] DOC: better error message

closes #303

@ntolley @rythorpe one of you should merge since @cjayb is busy for a few days


Improving EDF reading in line with specification

Describe the new feature or enhancement
In https://github.com/mne-tools/mne-python/pull/9694#issuecomment-908135503, I realized that the EDF specification can "encode" the channel type. One can have a label string in EDF be:
EEG Fz, implying that it is the Fz channel of eeg type. However, it's "optional".
For exporting EDF data, I would like to augment the export to encode the channel type, such that if you have channels:
EOG1, ECG1, A1, A2, A3, Fz, Cz, then they would be written to EDF like:
EOG EOG1
ECG ECG1
sEEG A1
sEEG A2
sEEG A3
EEG Fz
EEG Cz

Describe your proposed implementation
First, I would modify these lines: https://github.com/mne-tools/mne-python/blob/22cd7747529db7895345917c4d3884a482ed8ab3/mne/io/edf/edf.py#L387-L416
to allow for backwards-compatible behavior that also then sees if there is the "channel type" encoded in the label string.
Additional comments
This addition would not "hurt" our codebase, since it really just adds backwards-compatible behavior to allow for additional parsing of the channel type upon reading the EDF file. In addition, it would add more robust exporting. Overall, it is an improvement in our roundtrip of compliant EDF files.
That way I can modify the string of PRs:

https://github.com/mne-tools/mne-python/pull/9694
#9643

See:

https://edfplus.info/specs/edftexts.html#signals for description of string channel types in EDF
https://edfplus.info/specs/edftexts.html#label for the specification of the channel label in EDF

If core-devs agree this is desired behavior, then I can add a PR.

Has anyone ever encountered such files in the wild? If not, then I wouldn't add support for it until we hit a use case where it's actually needed

All my files actually have the EEG (i.e. channel type) prefix in the channel label. I can add a dummy file to misc/testing, but I think maybe one of the EDF files have it too. I can double check.

Okay sounds justified enough to me! Bonus points if some testing data are aleady formatted that way but even if not I'm happy with you having some files.
For my edification, what system/conversion routine produced those files with the channel type encoded?

I believe the recording system at this center used Nihon Kohden. However, it might've done the conversion through Persyst instead.
My suspicion is that not "all files" have this behavior as the "string channel label" in EDF is not strictly required to have the channel type. It's just a pattern in the string that is available if need be. I.e. I've seen some files from Nihon Kohden (or Natus) converted that don't have it. :(
Therefore, I don't think the change will be that bad since it's really just adding an if/else clause capturing the "space" in the string label if it detects there are.

Added PR to mne-testing-data: https://github.com/mne-tools/mne-testing-data/pull/88

+1 for adding a ch_type mapping for this during reading (and exporting) in MNE-Python from me then. Hopefully we support all channel types EDF does, but any that we don't we should probably map to EEG (?) and issue a warning.

Yeah it seems like they map to EEG by default currently, so I'm okay with just leaving that as is.
Do you think a warning is necessary if that's current behavior? I suppose for a newbie to MNE, having channel "DC01" map to EEG because it doesn't have a channel type wouldn't be expected.

Indeed I would make a list of all the channel names that had a type that we didn't know and say we mapped them to EEG at the end, something like:
bad_map = dict()
for ci in range(channels):
    if this_ch_type not in ch_type_dict:
        bad_map[ch_name] = this_ch_type
        this_ch_type = 'eeg'
if len(bad_map):
    bad_map = '\n'.join(f'{ch_name}: {ch_type}' for ch_name, ch_type in bad_map.items()'
    warn(f'Found the following unknown channel type mapping(s), setting the channel type to EEG:\n{bad_map})

I have never used EDF files with this naming convention. Can you check the names in https://physionet.org/content/eegmmidb/1.0.0/? I'm OK with deducing the channel type if the names follow this scheme, but I'm -1 on modifying existing labels on export.

Re reading it in: Not all files will have it. I showed a screenshot of a file that does. Many files though may just have the channel name. This is just a consequence of different manufacturing systems exporting EDF files differently.
Re exporting: The standard has this built in, so it wouldn't hurt to have it export if the channel type information is there. One would lose roundtrip ability with 'misc', and 'bio' channels perhaps, but everything else is preserved as intended i.e. the Voltage channels EEG, ECOG, SEEG, etc.

Re exporting: The standard has this built in, so it wouldn't hurt to have it export if the channel type information is there. One would lose roundtrip ability with 'misc', and 'bio' channels perhaps, but everything else is preserved as intended i.e. the Voltage channels EEG, ECOG, SEEG, etc.

Then at least let's have a parameter that controls this behavior.

So if you have the following channels:
{
   A1 = 'eeg',
   A2 = 'eeg',
   ECG1 = 'ecg',
   EOG1 = 'eog',
   LMT1 = 'seeg'
}

Then a parameter would either let their labels be written as the following in the EDF file?
A1, A2, ECG1, EOG1, LMT1

or
EEG A1, EEG A2, ECG ECG1, EOG EOG1, SEEG LMT1

Is there any reason to want the labels be the first way, rather than the second? Mistakes by user?

Well I suppose one would want to toggle it yes when exporting from a FIFF file where the original names are:
EEG A1, EEG A2, ECG ECG1, EOG EOG1, SEEG LMT1

One wouldn't want to accidentally add an extra channel type string in front of each of those.