New Video Tutorial | Entitas ECS Unity Tutorial - Git & Unit Tests

Hi everyone,
I uploaded part 2 of the "Let's build a game" series.
These are the topics in this Video:

Set up Version Control with Git
Set up a unit test project with nspec
Implement features with TDD

You can get Entitas on the Unity Asset Store here
Entitas ECS Unity Tutorial - Git & Unit Tests
https://www.youtube.com/watch?v=DZpvUnj2dGI

Recommendation
If you want to learn more about Unit Testing I strongly recommend
Clean Code - Advanced TDD
It starts from the very basics and goes deep into the matter.
It shows you why and how you should test, how it affects design and apis, and why tests can be considered more important then the actual production code.
TDD is still a controversial topic for some. You can do if very strictly or without much discipline (but then you can just skip it altogether). If you just get started I suggest being very strict as it will train your mind to eventually produce better code down the line even if you decide to stop writing tests years later. Being disciplined and trying TDD the strict way personally made me a better dev.

Simon (@sschmid),
Thank you for taking the time to create such comprehensive videos. While I am familiar enough to create games/applications in C#, I am still early on my path to understanding design patterns, and only just beginning to understand design methodologies. A few times, I've researched Test Driven Design, but always failed to wrap my mind around how to use it with Unity. This video helped me with that immensely.
Of course, these videos also serve as great views into Entitas best-practices.
Again, thank you greatly for creating these videos.
I await the next video with great excitement!
- S.

Thanks for another great video!
Do you still plan to remake the shmup demo in this tutorial series? Honestly, I think even if you expand upon the original, it's not really the best type of example. I'm now thinking an RTS would be more ideal. Since that seems like a very popular genre here and it would better demonstrate more complex game systems. It's also much more scalable, so you could use it to also demonstrate the speed of Entitas with hundreds of units at once. Like Unity did with their Job system RTS demo.
I also don't want to sound ungrateful or impatient, but how often do you plan to release new tutorials?  I know they probably take a huge amount of work.
Maybe to save time you could do some informal quick game jam like tutorials. Where you create a complete simple game in one session, like breakout or space invaders. Where you just take the viewer through the process of making it without explaining everything in great detail. So they can just get a holistic view for how best to approach building a game in Entitas.
A nice side benefit of doing a video tutorial where you recreate a classic video game would be an bump in the number of hits you get on YouTube. This is because a title like "Space Invaders in Unity with Entitas" will attract people not just looking for Entitas explicitly.  So it's a great way to promote the framework even further.

Very helpful video! But I have a small suggestion: talk one topic per video. Git and Unit Test are pretty irrelevant ideas, and just like the principle of Unit Test, it's better to do one thing at a time. (And it's good for SEO too)

@raincole Think you meant to say "unrelated" instead of "irrelevant", but in any case I think they're both very relevant and related to the topic of the video. He also spends only a minute on git, so a separate video for that would make little sense to me. I'd also rather watch one video that covers all this than a bunch of tiny clips, but that's just my personal preference.

@IsaiahKelly Thanks for your feedback. You have some very good points. After the basics are established, it sounds like a good idea to build such games as you suggested in one run, without going too much into the details.
Regarding the interval of recording videos: I don't really know, I do them whenever I find some time.

@IsaiahKelly Yeah sorry I meant unrelated. I guess it's fine for us who follow Entitas news constantly, but if someone searches "how to do unit test with entitas" etc I doubt they would like to see a Git tutorial first. Again it's just a suggestion.

Hi, I really like the idea but don't know how to implement TDD with a code generator.
In unit test, we write logic first and then write some tests for it. But in TDD, it requires us to write tests first and then write logic to pass them. However, it's hard to do these in Entitas if no proper component has been generated first since the IntelliSense cannot predict it.
Write & generate component first seems working, but it's breaking TDD somewhat, any good suggestion?

@zhuchun same could go for regular classes, until you implement a class there is nothing to test and there might be compile errors.
NSpec has pending tests feature it[""]=todo; xit[""]= ()=>{}; for this situation

Thank you @c0ffeeartc
I also notice if we implement architecture like How I build games with Entitas (FNGGames) did, it would be harder to be tested. Because system now relies on Services while some of them may need UnityEngine runtime.

@zhuchun the services are all interfaces though so you can mock them up very easily (e.g. TestViewService : IViewService).

@FNGgames Thank you, I really like your post! It clarifies a few pain points in my past works and helps me get out of there ;)

Hi, I am getting error "ECall methods must be packaged into a system module." when instantiating GameObject in Test method or trying to Execute system with Debug.Log in it.
How to deal with it?

Hi, I am getting error "ECall methods must be packaged into a system module." when instantiating GameObject in Test method or trying to Execute system with Debug.Log in it.
How to deal with it?

Hi, you'd better start a new topic so the community could help you better


Make deploy failed for config-policy-controller

Related Repo
https://github.com/open-cluster-management-io/config-policy-controller
What happened
First issue
I run make deploy and get an error:
make: `deploy' is up to date.

this should be fixed by adding .PHONY: deploy before:
deploy:
	kubectl apply -f deploy/ -n $(CONTROLLER_NAMESPACE)
	kubectl apply -f deploy/crds/ -n $(CONTROLLER_NAMESPACE)
	kubectl set env deployment/$(IMG) -n $(CONTROLLER_NAMESPACE) WATCH_NAMESPACE=$(WATCH_NAMESPACE)

Second issue
After adding .PHONY, it still not work and get an error:
error: unable to recognize "deploy/crds/policy.open-cluster-management.io_v1alpha1_configurationpolicy_cr.yaml": no matches for kind "ConfigurationPolicy" in version "policy.open-cluster-management.io/v1"

/kind bug

I have a PR up for this at:
https://github.com/open-cluster-management-io/community/issues/61
I don't have access to assign issue this to myself.


Error: Unknown command: cask at Get list of apps installed with cask

I was getting a failure when the cask list was being retrieved. It appears to be a conflict between what brew assumes is set up and the environment ssh sets up when running commands.
I have fixed it by changing the command from brew cask to brew-cask:
# Cask.
- name: Get list of apps installed with cask.
  command: "{{ homebrew_brew_bin_path }}/brew-cask list"
  register: homebrew_cask_list
  always_run: yes
  changed_when: false

Log before fix:
TASK: [geerlingguy.homebrew | Ensure configured taps are tapped.] *************
ok: [post1] => (item=caskroom/cask)

TASK: [geerlingguy.homebrew | Ensure configured homebrew packages are installed.] ***
ok: [post1] => (item=coreutils)
ok: [post1] => (item=git)
ok: [post1] => (item=parallel)
ok: [post1] => (item=dcraw)
ok: [post1] => (item=jpeg)
ok: [post1] => (item=graphicsmagick)
ok: [post1] => (item=the_silver_searcher)
ok: [post1] => (item=brew-cask)

TASK: [geerlingguy.homebrew | Upgrade all homebrew packages (if configured).] ***
skipping: [post1]

TASK: [geerlingguy.homebrew | Get list of apps installed with cask.] **********
failed: [post1] => {"changed": false, "cmd": ["/usr/local/bin/brew", "cask", "list"], "delta": "0:00:00.232802", "end": "2015-08-10 20:53:43.307777", "rc": 1, "start": "2015-08-10 20:53:43.074975", "stdout_lines": [], "warnings": []}
stderr: Error: Unknown command: cask

FATAL: all hosts have already failed -- aborting

I noted that sshing to the host then running the command works, but calling the command directly via ssh does not work:
$ ssh post1 "/usr/local/bin/brew cask list"
Error: Unknown command: cask
$ ssh post1
Last login: Mon Aug 10 20:58:26 2015 from <IP_ADDRESS>
Post1:~ post1$ /usr/local/bin/brew cask list
Warning: nothing to list
Post1:~ post1$

When I expanded this to run on other systems, I ended up having to run the list command manually to set permissions as ' Get list of apps installed with cask' froze. I am guessing it needs to run as sudo?
$ ssh post-mini
Last login: Mon Aug 10 21:22:43 2015 from <IP_ADDRESS>
$ brew-cask list
==> We need to make Caskroom for the first time at /opt/homebrew-cask/Caskroom
==> We'll set permissions properly so we won't need sudo in the future
Password:
Warning: nothing to list
$

the site.yml file includes:
- hosts: osx
  gather_facts: False
  sudo: false
  vars:
    homebrew_upgrade_all_packages: no
    homebrew_taps:
      - caskroom/cask
    homebrew_installed_packages:
      - coreutils
      - git
      - parallel
      - dcraw
      - jpeg
      - graphicsmagick
      - the_silver_searcher
      - brew-cask
    homebrew_cask_apps: [ ]
  roles:
  #- { role: after_effects, tags: [ 'after_effects' ] }
  - { role: geerlingguy.homebrew, tags: [ 'homebrew' ] }

I can confirm this as an issue.
I've tried a few things, and I've not been able to resolve it...

Just as an FYI, the main place I use this playbook is: https://github.com/geerlingguy/mac-dev-playbook — I don't run as sudo in there, just as my normal user account...

This command works when run with localhost as the target, but not when run over SSH.  At least in Ansible 1.9.2.  The following command appears to work in both places
- name: Get list of apps installed with cask.
  command: >
    bash -l -c '{{ homebrew_brew_bin_path }}/brew cask list'
  register: homebrew_cask_list
  always_run: yes
  changed_when: false


Any reason for pinning the old version of Meow? Vulnerabilities

Okta auth is using your lib and the old dependency subtree is throwing a lot of vulnerability warnings:
├─┬<EMAIL_ADDRESS>│ └─┬<EMAIL_ADDRESS>│   └─┬<EMAIL_ADDRESS>│     └─┬<EMAIL_ADDRESS>│       └──<EMAIL_ADDRESS>

This is actually quite strange, I don't get any vulnerability warnings from npm when installing tsd.


can't upsert into postgres table with legacy json columns

you will get a
db error: ERROR: unsupported jsonb version number 123

The problem is here:
    // Connect to PostgreSQL and prepare our destination table.
    let mut client = connect(ctx.clone(), url.clone()).await?;
    prepare_table(&ctx, &mut client, dest_table.clone(), &if_exists).await?;

    // Look up our actual destination table, which has either existed all along,
    // or which we just created.
    let mut real_dest_table =
        PgCreateTable::from_pg_catalog(dest.url(), dest.table_name())?;
    real_dest_table = real_dest_table.aligned_with(&dest_table)?;

We can correctly handle legacy json columns if we're not using upsert, because we fetch real_dest_table out of the database and use that, which allows us to distinguish between json and jsonb.
But upserts are configured inside prepare_table, which can't assume that we actually have a database table yet, and so they use dest_table instead of real_dest_table to create the temporary table.
There's a relatively small fix for this, but it requires a bunch of gross special-casing.
The underlying issue is that dbcrossbar refuses to think in terms of weird database-specific column types, and it would really prefer for you to use portable, sensible types like jsonb. Certain drivers, like the postgres driver, know how to handle existing columns with certain non-portable types, but they don't know how to create those columns. And this breaks those use cases which require temporary tables.
Ick.


Support of loom files

Hi, I use the H5Web VScode extension, witch is very similar to this one. With the VScode extension, I am able to open loom files directly (a HDF5 file format for genetic data, see https://loompy.org/ ), would it be possible to add .loom to the supported file format ?
Thanks !
Link to the VScode extension : https://marketplace.visualstudio.com/items?itemName=h5web.vscode-h5web

Sure ! Just out of curiosity, could you provide an example .loom file ?
Thanks

Thanks a lot !
Here is the classical exemple of a loom test file, freely available on the 10x genomics website : https://support.10xgenomics.com/single-cell-gene-expression/datasets/3.0.0/pbmc_10k_v3
Along with specifications and specs for the format of loom files :
https://linnarssonlab.org/loompy/format/index.html


Custom Complex architecture

@waleedka @ss18 @philferriere  great work on this tool which i was exactly looking for , but had few queries

Can i use the hl for object detection , semantic seg architectures
can i use hl to view the intermediate results of the activation maps
thanks in advance

@abhigoku10 I did only minor PR, @waleedka & @philferriere did all work

@waleedka @philferriere  any updates on this issue


cEOS64-lab-4.28.0F not available, cEOS not available to guests, only vEOS

This training environment setup is minimally written about setting up with Arista. Not only can you not download any of the cEOS packages as a guest,  the image required doesnt exists.

Hi @jnaky4,
It's out of our control what images Arista continues to host on their website. If you follow the instructions on cEOS image, you'll find cEOS-4.28.7M to download.

After you extract/upload the image, import it with this command: docker import cEOS64-lab-4.28.7M.tar ceos:4.28. The last part is key (ceos:4.28), is the tag we reference in the topology files:
https://github.com/PacktPublishing/Network-Automation-with-Go/blob/main/topo-base/topo.yml -> image: ceos:4.28
name: netgo

topology:
  nodes:
    srl:
      kind: srl
      image: ghcr.io/nokia/srlinux:21.6.4
    ceos:
      kind: ceos
      image: ceos:4.28
      startup-config: ceos-startup
      binds:
      - secure/ssl:/persist/secure/ssl
    cvx:
      kind: cvx
      image: networkop/cx:5.0.0
      runtime: docker

  links:
    - endpoints: ["srl:e1-1", "ceos:eth1"]
    - endpoints: ["cvx:swp1", "ceos:eth2"]

Let me know if this doesn't work for you.


pauseTopics in HighLevelConsumer

I was wondering why pauseTopics is not available in HighLevelConsumer. Is this not possible?

HighLevelConsumer.prototype.pause = function () {
this.paused = true;
};

@kibs I guess it's just not implemented. :wink: But let's see what @haio will say.

paused is used
https://github.com/SOHU-Co/kafka-node/blob/master/lib/highLevelConsumer.js#L502

pause() just sets a flag to deactivate the fetch loop.


Added Toggle Tree View button

Added the shortcut to open/close Tree View menu.

Thanks for this PR. However, I recommend using Flex Tool Bar for defining your own buttons.


can we create new tag please?

if we compare the latest tag and master branch .. from output of latest tag (v0.1.1) ..I see the below error
ERR  - failed to unmarshal extension properties: invalid character ':' after top-level value (404: Not Found)

In master branch I don't see this.

This is obsolete, isn't it? There were new releases since Nov 2022...


May 31st translations

Based on English provided in #22969

Backported to radjabov in commit eb8f66226e45358bb9642903039ddaa229741c20.
commit eb8f66226e45358bb9642903039ddaa229741c20
Author: Jason Frey<EMAIL_ADDRESS>Date:   Wed Jun 5 09:10:09 2024 -0400

    Merge pull request #23057 from jrafanie/may31_translations

    May 31st translations

    (cherry picked from commit 0ce1337d887023b15d5885c438373349171fea67)


Watchog is triggered too soon (IDFGH-6596)

Environment

Development Kit:      none
Module or chip used:  ESP32-WROOM-32D
IDF version (run git describe --tags to find it):
// v3.2-dev-1148-g96cd3b75c
Build System:         idf.py
Compiler version (run xtensa-esp32-elf-gcc --version to find it): v4.3.2
Operating System:     macOS
Using an IDE?: No
Power Supply:         external 3.3V

Problem Description
If init watchdog to be triggered in 43200 seconds, than it is triggering already after 251 seconds.
Expected Behavior
The esp should be triggered after 43200 seconds
Actual Behavior
it is triggering already after 251 seconds.
Steps to reproduce
void testa_task(uint16_t cron_data) {
    int ret;
    esp_err_t err;
    err = esp_task_wdt_add(NULL);
    ESP_LOGD(TAG, "err when adding wdt %d", err);
    int counter = 0;
    while(1){
        counter++;
        ESP_LOGD(TAG, "counter %d", counter);
        vTaskDelay(1000 / portTICK_PERIOD_MS);

    }
}

void testa_init() {
    xTaskCreate(testa_task, "testa_task", 1024 * 8, NULL, 5, NULL);
    while (1){
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

void app_main(void) {
    esp_err_t err;
    err = esp_task_wdt_init(43200, true);
    eepromInit();
    testa_init();
}

Hi,
This is probably due to an overflow during the timeout calculation. It was fixed on master (see https://github.com/espressif/esp-idf/issues/6648 for context) but seems like we missed the backport.
If you want to test the fix/solve it immediately you could apply the minor changes from b23de0f
Thanks for letting us know about this issue, I've created a backport to 4.3 for this.

If I pull latest 4.3 branch, that should be enough right?

If I pull latest 4.3 branch, that should be enough right?

Unfortunately not. The MR for v4.3 is made, but still needs to be merged. And after merging release/v4.3 still needs to go through automated testing before it gets synced to github. This issue should be automatically updated as soon as the fix is on github though.

If I pull latest 4.3 branch, that should be enough right?

After pulling 4.3 branch, you can checkout to a new test branch.
In your test branch, run "git cherry pick b23de0f" and verify the result.

If I pull latest 4.3 branch, that should be enough right?

It's merged to v4.3 branch. so pull latest 4.3 branch should work now.

@Arthedian Thanks for reporting, fix on release/4.3 is available https://github.com/espressif/esp-idf/commit/0786d1a337ae3b190497347bab87b509297dcc0f, feel free to reopen if the issue still happens.


AutoPause Fix

Hey,
AutoPause is currently broken due to a bug on line 2813 in bot.py
if len(player.voice_client.channel.members) == 0:
should be
if len(player.voice_client.channel.members) == 1:
since the bot itself counts as a member too.

There's a PR for a fix for this which hasn't been merged yet, thank you for the feedback
-sent from my Android


StreamManager drops "streamListen" response on the floor resulting in lost events

StreamManager drops "streamListen" response on the floor. This creates a race between any action resulting in an event and the enabling of the stream. If the action completes before the stream is enabled, the event is not reported on the stream.
This affects FlutterDriver, which resumes the isolate and waits for an onExtensionAdded event. The act of subscribing to the onExtensionAdded stream kicks off an invisible background "streamListen" call, which races isolate.resume(). When resume wins the race onExtensionAdded is notified, otherwise we're never notified and time out.
This is not urgent as we have a workaround, which is to send "streamListen" on a separate channel prior to the resume/waitForExtension handshake.

I'm not sure how to address this. The Stream API doesn't really provide any way of dealing with a possible delay between the call to Stream.listen() and the actual production of events. I suppose we could block all other requests when a streamListen is in flight...
@turnidge Is there some way we can make the protocol itself resilient to this issue? For example, streamListen could have an optional startTime parameter, which would cause the service to replay and events that happened after that time.

Provided there is no delay between the call to Stream.listen() and the call to onListen, one possible solution is to provide an alternative set of getters that return Future<Stream<Map>> instead of Stream<Map>. The Future wrapper would only resolve once the call to streamListen is finished and therefore it is safe to call Stream.listen() and trigger the event production immediately after.

I don't think Future<Stream> works—if we send streamListen before Stream.listen() is called, we put ourselves at high risk of leaking listens since we don't have a clear signal of when to cancel the listen.

What about providing explicit methods for enabling/disabling streams? In a sense registering a listener for receiving events is orthogonal to emitting the events. I may want to keep a subscription alive, while starting and stopping event stream multiple times during the lifecycle of the subscription.

That goes against the broader semantics of the Stream class... listen()/cancel() are explicitly designated as the signals for allocating and releasing the resources necessary for emitting events on the stream.
Another way to express this would be to add Future get StreamSuscription.ready, which would signal when a subscription is actively emitting events. @lrhn what do you think?

I'm not sure I understand this particular problem (since I don't know StreamManager or what it's trying to do), but in general ...
A stream has a very simple state - it's either unstarted, active, paused or cancelled, with clear transitions between them:

listen: goes from unstarted to active
pause: goes from active to paused
resume: goes from paused to active
cancel: goes from active or paused to cancelled.

The corresponding controller callback methods report when such a change has happened, right after it has happened. The callbacks are called immediately after changing the state, so the onListen callback is called synchronously by the listen call after changing the stream's internal state from unstarted to active, there is no delay between them.
Obscure detail: If you change the stream's state during a state callback, you will get another callback immediately after the first one. If you change the state more than once, you only get a callback if the state actually changed - so if you do pause followed by resume inside the onListen callback, you won't get another callback, because the state is still the same (active) afterwards. In general, just don't do that.
Also, a stream should be completely inactive until it receives a listen call, and a sync stream shouldn't send events immediately in a state change callback, because that can be in the middle of any other code, and most likely is in the middle of code that actually cares about the stream.
It sounds like one of the problems is that you have a complex state that is updated asynchronously. That means that nobody actually knows the current state. That's why you get a race condition when two different parts of the program both try to make an update, based on the same state, because neither of them has seen the other.
I don't think allowing them to inspect each other as well as the remaining state is a good solution in the long run. It doesn't scale. I'd prefer to make a single synchronous state management that everybody has to go through, so state-check and state-update always happen on the same state. Having an async delay between check and update will never work.
As for the ready getter, I'm not sure what it's supposed to do.
A stream is actively emitting events when it emits events.
Should it report that the stream is no longer paused? Then making it async seems like a very unsafe approach that would definitely cause race conditions. Remember that an async event can be delivered after an arbitrary amount of computation because the microtask queue is a queue. (I still think it should have been a stack, but that's another story 😄)
We already have an isPaused getter that tells you whether the subscription is currently paused.  It changes immediately when the stream is paused (if you read it inside onPause it's always true, and it's always false inside onResume").
In general, we assume that whoever has a reference to a StreamSubscription is in control of it.
They should know whether they have called pause or cancel on the subscription.
If you want to share the same stream subscription between different parts of your code, and want them to communicate about their shared use, then I'd wrap the subscription in a helper object and share that.
We could add an isCancelled getter and perhaps even an isDone getter on the StreamSubscription, but they would be synchronous. We definitely won't add an onCancel or onPause callback to the stream subscription in general - that would just be overhead on all the stream subscriptions that don't need them. That's an easy job for helper class that contains the subscription and shares its state in some way, not something every stream subscription needs
(I put a stream of stream state changes in your stream because I heard you like streams, so now you can listen while you listen!)

The issue we have here is that the transition between unstarted and active takes time. The stream is being fed by an RPC protocol, so there's inherently a delay between when the client says "I want to receive these events" (by calling listen()) and when the server will actually send events to the client. If an event happens during that delay, it doesn't reach the client, even though it technically happened after the client called listen().
The ready getter would help address this by indicating when the stream is ready to fire events. Specifically:

The stream would not emit any events before ready fires, and
ready fires as soon as it's the case that if an event is available, the stream will fire it.

I don't think this is something unique to this use-case. I suspect a similar race condition exists in any stream where work outside the Dart Isolate needs to be done to start it—such as FileSystemEntity.watch().

A stream is actively emitting events when it emits events.

This isn't what Yegor needs to know, though. He needs to know when a change in the underlying state will cause the stream to emit the corresponding event.

From the stream's perspective, there is no time between unstarted and active. The state, and the behavioral promises, of a stream is all about that stream and the events that it emits. There is no problem, for the stream, in that it takes time between you calling listen and the first event arriving. There is no stream state to differentiate between "listened but not ready to send events" and "listened and ready to send events", because there is no distinguishable behavior - it just doesn't send events until it sends events.
The problem, if I understand it correctly, is that you have an asynchronous (remote) system feeding the stream with events. You need to send a remote request for events, and that request takes time. Likewise, a pause and resume cannot immediately affect the event source because it requires asynchronous communication to forward the pause/resume requests.
It sound to me like what you want is for listen, pause and resume  to be able to be asynchronous.
And that you want to recognize the transition states between the call and its completion.
The suggested ready getter is really reporting that an asynchronous listen operation (via the onListen callback) has completed, and it would be more consistent (with cancel) if the listen call just returned the future directly - for pause and resume that would just work, but listen already returns a value, so it would change to FutureOr<StreamSubscription>, which would be massively disruptive to current users.
Doing that would mean that state transitions would take time. There would be states "unstarted", "starting", "active", "pausing", "paused", "resuming", "cancelling" and "cancelled". There would need to be rules for what happens if you call pause while "starting" or while "resuming". Would events get emitted during "pausing"? During "cancelling"? It would really complicate the stream model.
It's not really a surprising development that someone wants a function parameter (here the onListen) to be able to be asynchronous. Asynchrony is contagious, and sooner or later, every function parameter will need to be asynchronous for someone. However, allowing it everywhere will make everything possible, and nothing easy, so it's not good for usability. We have to make sure it's needed often enough that it's worth the overhead that it introduces when it's not needed. The future returned by cancel is worth it, IMO, because it has no alternative, and because you can ignore it because it all happens in the "cancelled" state where no further state changes can happen anyway.
Now, for listen and resume, there is an obvious solution: Report their completion as a stream event.
There is no need to introduce further futures in order to deliver an asynchronous event when you are already a stream. When the stream is listened to, its first event is an "I'm ready" event. When it's paused and then resumed, the first event after the resume is an "I'm ready" event.
The only problem is the typing. If the report can be introduced into the event type of the stream, then it should be good. If not, then perhaps you can use null events as markers.
If you really want a ready getter, you can wrap this stream in one that captures the "ready"-events and reflects them into a future.
I don't think it's something that every stream would want to support. The overhead, including the mental overhead for the user, is just too great.

You're making this out to be a much further-reaching change than it needs to be. No one's calling for pause() and resume() to be asynchronous. No one wants the stream to behave in any way differently in the "starting" state than it does in the "active" state. I just want onListen to be able to return a Future that's exposed to the user somehow—the rest of the Stream API can totally ignore that Future for all I care.

We have to make sure it's needed often enough that it's worth the overhead that it introduces when it's not needed.

We already have two examples of APIs used by key customers that inherently involve race conditions without this—FileSystemEntity.watch() and vm_service_client. I expect Isolate.errors does as well. Any stream that represents events (as opposed to data) over an asynchronous medium will likely have the same issue. Is your position that a naive stream implementation is incorrect for those use-cases? If so, how did naive stream implementations end up in the core libraries?

Now, for listen and resume, there is an obvious solution: Report their completion as a stream event.

This is a seriously backwards-incompatible change. All code that interacts with the existing streams will have to be rewritten. If in the future stream authors fail to notice the possibility of this race condition—which seems likely given that you yourself wrote Isolate.errors without having it emit null—they will also have to make a backwards-incompatible change.
 Every single user has to handle null in every single listener they write, whether or not they actually need to wait on it to modify the underlying state. And if they do need to wait, the code necessary to handle the first event on a stream different from all the others is gnarly and error-prone.
We have a clear customer need for an improvement in the platform, one that will make it safer to use a number of existing APIs. We should add Stream.ready.

I'm perhaps making it further reaching than this particular case needs, but that's because I try to ensure that the APIs solve problems in a way that generalizes. A finely tuned solution for a particular problem is likely to be unusable for other problems. A kludge on the side of a class might solve the current problem, but it won't necessarily solve all problems, and we'll have to keep paying for it forever.
In this case, it is indeed a case of onListen being asynchronous, so what is the most general, and most consistent, solution for allowing that? And is it something that happens often enough that all streams must support it?
I can see the problem - if you ask for a file-watcher, you might want to wait until it's ready before you begin doing stuff. You can't see that until you get an event, and you won't get an event until you do stuff.
That sounds very much like an API that should return a Future, perhaps with a "file watcher" object that contains a live broadcast stream, not one where the return value is a plain Stream. We can't fix that API (well, not right now), but that doesn't mean that we should make all streams pay for a bad design in one place.
Putting a field on StreamSubscription for onListen is different from what we do for onCancel, and it doesn't generalize to pause/resume.
That said, pause/resume are simple because their signatures could be changed to return a future (the only problem will then be for people who get lint warnings about unhandled futures), the listen call already returns a StreamSubscription.
I don't like the ready field. It's distinct from the listen call, so discoverability is low. It's very easy to miss it. On the other hand, it's also very easy to think you should care about it, even if 98% of all streams won't use it. It's not a good general API to have on StreamSubscription, and I don't think we should add it.
I think the most consistent and general change would be to change listen to return a FutureOr<StreamSubscription>, but it's also a horrible API that I wouldn't subject anyone to (using FutureOr in a covariant position in a user-facing API is bad, it means the user needs to check it every time). So, that's a no-go, even if all existing code would keep working, because nobody actually returns a future yet.
Maybe we could add a callback to listen: stream.listen(..., onReady: () { print("READY!"); }).
It's a callback, not a future, which is annoying - futures are superior to callbacks in most ways, except for the fact that you have to return them somehow, and we only have single-value returns.
Then we could add an Future<StreamSubscription> asyncListen(...normal listen params ...) alternative to listen, but why would you know to use it for those particular streams where it makes sense, and not for any other stream. That actually goes for every solution mentioned so far - most streams won't need them, so how do you, as a user, figure out when you should use them?
That leaves ... no good general solution. Which might be the correct answer - it is not a general problem, so maybe the solution shouldn't apply to all streams.
We could create an AsyncInitStreamSubscription that has the ready future, and make those particular streams return one. We could even make an AsyncInitStream interface where listen returns AsyncStreamSubscription, and watch could return an AsyncInitStream, not a plain Stream.
And there would be an AsyncInitStreamController which allows onListen to return a future.
 It also avoids overhead for all the other streams
I don't particularly like adding subclasses of Stream, because users need to worry about them and understand the differences, but this is a pretty innocuous difference.
One question to answer is whether an error in the onListen future should be reflected as a stream error or an error in the ready future. The most consistent will likely be to put it into the ready future, but that will make it an uncaught error if that future is ignored (unless we make it not-uncaught, which we can if we want to). We also have to figure out whether the stream should close itself again (a done event) after an error in the onListen future, whether the error is reported in the future or the stream.
@floitschG Ideas?


Add TEFN model

fixing #506;

[√] I have commented my code, particularly in hard-to-understand areas.
[√] I have written necessary tests and already run them locally.

Comments:
I have implemented the TEFN model code on the imputation task in the PyPOTS code repository and completed testing.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>2
Details

129 of 132 (97.73%)  changed or added relevant lines in 8 files are covered.
2 unchanged lines in 2 files lost coverage.
Overall coverage increased (+0.1%) to 83.251%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

pypots/imputation/tefn/model.py
61
64
95.31%

Files with Coverage Reduction
New Missed Lines
%

pypots/classification/base.py
1
74.77%

pypots/clustering/vader/model.py
1
85.43%

Totals

Change from base Build<PHONE_NUMBER>5:
0.1%

Covered Lines:
11258

Relevant Lines:
13523

💛  - Coveralls


Auto start Always active ft. lethal config... issue(?)

The name says it all. Auto start even when set to false is always active, to clarify i mean that the ship will always travel to the planet upon exploring even with AutoStart set to false in configs.
i know this isn't a mod conflict, by that I'm using this with literally only the dependencies.
Oh and another being that the mod does not work without lethal config enabled so i would like to ask you to put it in dependencies if this is intended.

The lethal config thing is indeed a blunder from my part, I'l fix it
For the auto start, Are you host when the bug happens ?

Are you host when the bug happens ?

Yes i am indeed hosting when the bug happens.

Are you host when the bug happens ?

I was indeed hosting, but it seems you guys have it under control


Provide robust Gunicorn config in multiprocess docs

We need to use the recently added Gunicorn child_exited callback in order to
correctly clean up after a segfaulted or OOM-killed worker (for details, see
https://github.com/benoitc/gunicorn/pull/1394 and #115).
The try catch is necessary to guard against unexpected race conditions and
errors in the cleanup logic. I have seen this twice, crippling the master
process in a cascading failure scenario.

I have pushed a squashed commit with the extracted import. I also dropped the try catch. The previous errors I was seeing happened during import, as this is now done up-front I don't see any significant error potential.

Thanks!


Update plugin to be compatible with Runelite 1.8.30

Minimal changes to build successfully on the latest RuneLite version

Thanks for the contribution


Allow type index declarations

Fixes https://github.com/Microsoft/pxt-microbit/issues/1848

Tested in simulator and on hardware (micro:bit)

Yep


Adds more detailed documentation for adding new images to the gallery

It was pointed out by @ljc-dev on twitter today that its a bit unclear on what sizes and formats the images need to be in before adding them to _data/gallery.json as an object.
In total: 4 pictures

Original picture (intrinsic size - probably bigger than 1024px)
Large .webp source (1024px)
Medium .webp source (640px)
Small .webp source (320px)
Large .jpg source (1024px) or just use the original picture

Note:

For ease of use, the fallback img src can be whatever size as the browser will most likely be able to support the .webp sources. But use the 1024px large source for best results.

I recommend including a image-name-large.jpg format as the src for the fallback <img> in case the .webp sources cannot be used.
Removes the following srcSet from the fallback <img> inside <picture>. Applying this update to feature.njk and base.njk.
Clear things up about usage:

Get an image from somewhere (your file system, a stock photo website, etc)
Add the original image to the /images/ folder.
Go into .eleventy.js and utilize sharpImages("/images/image-name.jpg")

This creates three resized images from the original, which outputs to the /images/ folder:

image-name-large.webp (1024px, 768px)
image-name-med.webp (640px, 480px)
image-name-small.webp (320px, 240px)

I have the image formats for this function set to .webp but the sharp package has many options (I think .avif is supported)

If you don't use the above method, just head over to squoosh.app and create the three resized versions from your original (1024px, 640px, 320px) and the height will be calculated based on the original image aspect ratio.

Go into _data/gallery.json and create a new object with the image metadata (This is the last step)

Filename: _data/gallery.json
{
        "title": "Terrace with green plants on night street",
        "date": "October 20, 2020",
        "credit": "Photo by Aldiyar Seitkassymov",
        "linkToAuthor": "https://www.pexels.com/photo/terrace-with-green-plants-on-night-street-3100835/",
        "imageData": {
            "alt": "Terrace outside shop window with green plants and pink tree on night street",
            "large": {
                "webp": "/images/shop-plants-large.webp",
                "jpg": "/images/shop-plants-large.jpg",
                "width": "1024w"
            },
            "medium": {
                "webp": "/images/shop-plants-med.webp",
                "width": "640w"
            },
            "small": {
                "webp": "/images/shop-plants-small.webp",
                "width": "320w"
            }
        }
    }

The image is now added to the site and you can view it by running npm run build and npm run serve

I've updated the README.md and CONTRIBUTING.md file to include better documentation on adding new images to the gallery. Let me know if it's still unclear and if not I will close this issue.

I believe JPEG is still mandatory as 15% of Web users still don't have WebP support: https://caniuse.com/webp

@nhoizey Thanks for the info. I still have the fallback <img> using a JPEG as its src so that should be sufficient right?
I removed the srcSet and sizes attributes for the <picture>'s fallback <img> if the .webp sources aren't supported by that users browser.
<picture>
    <source type="image/webp" ...>
    <img
        src="{{ image.imageData.large.jpg }}"
        alt="{{ image.imageData.alt }}"
</picture>

Using a <source> tag to include the large, medium and small .webp images and using a JPEG as the last resort inside the fallback <img> src.
If the browser can't support .webp, the photo-name-large.jpg would be image on the page which doesn't perform with the same responsiveness (as it doesn't use a srcSet or sizes). This might need to be tested or revisited to update the fallback image's responsiveness if indeed the webp <source>isn't supported.
If I include a srcSet for the fallback image then the person using the template will have to create 3 resized JPEG and 3 resized webp formats (where currently it's just 4 images so a little less work converting).

I think 15 % is still a population large enough to justify srcset with multiple JPEG widths.
At least, if you don't have this srcset, you should use a smaller JPEG fallback, IMHO.
All of this would be easier if people didn't have to generate the multiple formats and widths themselves, of course. There are multiple solutions to automate this.
I made eleventy-plugin-images-responsiver to generate the HTML code, but it doesn't automate image resizing and format transformation. I use it with Cloudinary, others use it with Netlify Large Media, and I plan to try (and document) at least Imgix, Image Engine and TwicPics. But it can also be used with local transformations, with sharp for example.

I think 15 % is still a population large enough to justify srcset with multiple JPEG widths.

Yes, I agree. I'm going to revert back the documentation and global data to include large/med/sm .jpg formats to use <img srcSet=""> and support that 15% percent that might not be able to view the .webp images.
I would like to use sharp for local transformations of image format and resizing to get rid of making users generate multiple formats and widths themselves. The current setup of forcing users to generate multiple formats and widths needs to be automated.
I will have a look at eleventy-plugin-images-responsiver and research a bit more local transformations with sharp. Thanks for the feedback!

I believe JPEG is still mandatory as 15% of Web users still don't have WebP support: https://caniuse.com/webp

I've added srcSet with JPEG image formats back to the fallback <img> if WebP isn't supported. This will provide that 15% of users without access to .webp a much better viewing experience with appropriately sized .jpg images.
FIX: commit 8b4fd35


[Question] How to correctly links test with complex configurations ?

I have a need to run tests not only on different browsers, but also on different operating systems. Hence I made a configuration in Azure DevOps for each relevant combo.
So my question is : has anyone found a clean way to correctly link bi-dimentional configurations using testPointMapper ?
For example : Windows + Firefox / Windows + Chrome / Android + Chrome / Mac + Safari / Mac + Firefox / Linux + Firefox / Linux + Chrome

how about to use environment variables?


clean assigned workers before instantiating.

The fragment may have been instantiated in a previous iteration with relations having different partitioning schemata that the current iteration caused by overwritting. Not cleaning up the assigned worker set gives us false conflicts.

Fixes https://rest.myria.cs.washington.edu:1776/query/query-78340. @shbae FYI :)

LGTM


Support typed throws

We've started adopting typed throws in a couple of areas and I noticed that my Result extension to handle async closures was clashing with the one in this package. The difference is subtle but I think this is a more general way to do this extension.
As the test shows, this allows you to convert an async throws(SomeError) into a Result<T, SomeError>. Without this change, the resulting type is Result<T, any Error> instead.

Want to #if compiler(>6) this branch and then fall back to the old logic otherwise?

Will do!


Proxy protocol support fo outgoing connections

As I understand, fabio supports incoming proxy protocol connections.
What about outgoing connections?
CLIENT (ip <IP_ADDRESS>) ---> Fabio (ip <IP_ADDRESS>) ---> webserver (ip <IP_ADDRESS>)
For now, webserver sees requests originating from ip <IP_ADDRESS> not from client ip <IP_ADDRESS>.
I know, there are x-forwarded-for headers...
Since nginx supports incoming proxy protocol connections, would be nice if fabio could provide that  output with http and tcp.

It doesn't support the PROXY protocol for outgoing connections but that sounds like a good idea. I'll add it to the list.

I've refactored the listeners and servers in the release-branch-1.4 to prepare for this. I want to finish the generic TCP proxying support first but aim for including this in the 1.4 release or shortly thereafter.

I also would like to see this feature.
I'm currently using haproxy in front of a few nginx boxes using proxy protocol and I'd like to switch to fabio for a more dynamic setup.
For now I've tried to implement this myself but since I didn't know a nice way to get to route tags / options inside of the SNI Proxy I wasn't able to make the PROXY header optional... Since I also have software running that doesn't understand the proxy protocol I need to have both options and I'd like to run both on the same port, works perfectly with haproxy.
I am hoping that your version will have an option to set the header on an as-needed basis so a single port can be shared between tcp+sni and (what i call it) tcp+sni+proxy.
My very crude implementation can be found here: https://github.com/lukas2511/fabio/commit/deaa518b1991c2fec11def21b808aaa64311372b
It's not 100% correctly implemented (e.g. fixed TCP4 for now), but it worked for me while playing around with the software.

Hmm, that looks simple enough to be added as a listener option like read/write timeout. No need to duplicate the entire proxy for that. Let me see whether I can cook something up tomorrow or so.

I'm wondering whether this is something that needs to be configurable per upstream server, e.g. some upstream servers want PROXY protocol and others don't? @lukas2511 @tkald what's your take on that?
The reason I'm asking is that there is currently no support for upstream servers announcing their capabilities. This isn't difficult to add but more work than a global switch.

@magiconair I would like to have this on a per-route basis, upstream server shouldn't be involved in making this decision, just the consul services.

@lukas2511 since the route is announced by the upstream server through consul it needs to advertise this somehow. How do you envision this to work?

@magiconair the project readme has a few examples for other tags:
# HTTP/S examples
[...]
urlprefix-/foo/bar strip=/foo    # route with path stripping (forward only '/bar' to upstream)
# TCP examples
urlprefix-:3306 proto=tcp        # route external port 3306

Maybe something like
urlprefix-example.com/ proxy

Or is this not possible?

Sorry i think I just misunderstood what you meant with "upstream server", for me that was the upstream webserver, but now I notice that you mean the whole system, so yea, this should come from the upstream server, sorry for the confusion.

Thank you for 1.5.11 release. It helped me to understand that I actually have a problem described in this issue. I thought Fabio can talk Proxy protocol in any direction. Hope this will be fixed.

@pashinin Right now I have almost no time to work on this project other than urgent bug fixes and merging contributions. If you need this feature then the best chance is to submit a PR.

I'd be happy to review/comment on the PR.

@leprechau FYI: Proxy protocol for outgoing connections implemented on PR #598

Tested Fabio with mentioned PR. Works with 2 Exim servers configured for Proxy protocol.

Then let’s merge


[BUG] BlobInputStream exceptions violate JDK interface

BlobInputStream and BlobOutputStream only ever throw RuntimeExceptions, even in cases where the JDK javadocs specify they should be throwing IOExceptions. This causes consuming code to handle IOExceptions to satisfy the compiler and RuntimeExceptions to handle actual errors. This type should be fixed to behave in accordance with the JDK contract.
This will require either a suppression of throwing errors that aren't a direct return value of a logger method or better ClientLogger support from core.

Closed on account of breaking changes

That's my bad, I didnt press close with comment.


webview_flutter  problem

I found that the Flutter plugin does not run smoothly on Android and iOS devices, and sometimes even stops responding. What is the reason?  Compared with another popular plugin, flutter_webview is too stuttering.

Hi @oliverchu,
Can you please provide your flutter doctor -v, your flutter run --verbose and a minimal complete reproducible code sample.
Thank you.

@oliverchu
Closing as additional information isn't provided.
Could everyone who still has this problem please file a new issue with filling out template


New chat page list refactor 2

Details

This PR refactors the NewChatPage to use new component.
A new param has been added to to allow it to display a component on the right hand side of each list item. This param allows to pass a react node or a function that will render a component.
Fixed Issues

$ https://github.com/Expensify/App/issues/20354
PROPOSAL: no proposal
Tests

[ ] same as QA
[ ] Verify that no errors appear in the JS console

Offline tests

same as QA
QA Steps

[ ]  tap FAB on main screen and choose "Start Chat"
[ ] tap on a contact to start a chat
[ ] OR tap split on couple of contacts and start a chat
[ ] OR search for contacts and tap on contact to start a chat
[ ] OR search for contacts and tap split on couple of contact to start a chat
[ ]  observe if page behaves exactly the same as on staging
[ ] Verify that no errors appear in the JS console

PR Author Checklist

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Screenshots/Videos

Android: Native
https://github.com/Expensify/App/assets/134388952/422a83cf-1f74-4898-81ad-bfc65984e020

Android: mWeb Chrome
https://github.com/Expensify/App/assets/134388952/3a46d724-8c42-4abb-aab3-cf04200766ed

iOS: Native
https://github.com/Expensify/App/assets/134388952/eee5212c-bb7d-4459-939a-224e1aeee15b

iOS: mWeb Safari
https://github.com/Expensify/App/assets/134388952/fd6173d9-34da-4fcc-963e-736b02672aca

MacOS: Chrome / Safari
https://github.com/Expensify/App/assets/134388952/2831c6c5-bc28-4a6f-bf3e-9c7362ffc581

MacOS: Desktop
https://github.com/Expensify/App/assets/134388952/f7d4cab9-07dc-438c-8967-874e357a763f

Reviewer Checklist

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Looks like 537 files changed?

Expected: last contact is selected

Just to clarify, when you say "last contact" do you mean the list loops around to the bottom of the list or that it stops at the top of the list. Cause I think the latter should happen. Perhaps @Expensify/design has any thoughts though.

mean the list loops around to the bottom of the list

yes i mean that it should loop around and the last contact should be highlighted.
this is how it works on staging so i doubt we should change that here

Just to clarify, when you say "last contact" do you mean the list loops around to the bottom of the list or that it stops at the top of the list. Cause I think the latter should happen. Perhaps @Expensify/design has any thoughts though.

yes i mean that it should loop around and the last contact should be highlighted.
this is how it works on staging so i doubt we should change that here

Dang it's about to get spicy up in here because I also think it should just stop at the top of the list. 🌶 😅 I really don't see the benefit in looping to the bottom of the list. (But maybe I'm missing something!)
Basically is this error happening because we only load 500 items at a time? Like if you had 1,000 contacts, we'd load 500 and then once you scrolled to the bottom we'd load 500 more, right? So if you try to loop around to the "last" contact, we haven't actually loaded it yet which is causing this error?

I really don't see the benefit in looping to the bottom of the list. (But maybe I'm missing something!)

Agree with you. Think it should just stop at the top

@rushatgabhane sorry closed the PR, 'cause dealing with all the conflicts was just to much. I've reset the branch and cherry picked the changes from a backup

@rushatgabhane can you review this quickly please. I would like to close this PR ASAP.

I had approved this earlier, @cristipaval all yours

DANG! conflicts, could you please resolve them, @lukemorawski

@cristipaval fixed them conflicts!

🚀 Deployed to staging by https://github.com/cristipaval in version: 1.4.63-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/mountiny in version: 1.4.63-21 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


how to use this library?

Could you supply some help document

I would recommend you to use THIS one... almost 7 months ago I was also trying to implement this library... I can't even remember what was the problem)

Thanks


Allow JsonSerializable in addition to array for $contents?

Love this helper!
Currently this is how I am responding with a JsonResource:
$this->respondWithSuccess(TagResource::collection($tags)->jsonSerialize());

It would be cool to be able to also do this!
$this->respondWithSuccess(TagResource::collection($tags));

Is that something you would be open to?

Great suggestion, I'm :100:  percent open that that. Will take a proper look at your PR later.
Thanks for contribution!


tab unloading no longer works

recent reviews on Chrome Web Store confirm

https://github.com/rNeomy/auto-tab-discard works


Heretic from Steam Store, on the Steam Deck, with GZDoom Engine

Game
Heretic: Shadow of the Serpent Riders
Engine
GZDoom
Linux Distribution
SteamOS
Luxtorpeda Version
v68.2.0
Bug description
While trying to play Heretic: Shadow of the Serpent Riders with the following setup:

Device: Steam Deck
OS: SteamOS
Session: Gaming Mode
Engine: GZDoom

The game completely shuts down and won't open.
Steps To Reproduce

Install Luxtorpeda compatibility tool on Steam via ProtonUp-Qt
Install Steam's Heretic: Shadow of the Serpent Riders game
Under the game's properties > compatibility: choose Luxtorpeda
Under the "Pick an engine" window, choose GZDoom

Expected Behavior
The game to launch after choosing GZDoom under "Pick an engine", either on Gaming Mode or on Desktop Mode.
Additional Context
Here is my troubleshooting log: heretic-luxtorpeda.log
Log generated via Konsole terminal on Desktop Mode.
Relevant log output
No response

Thanks for the report! I've fixed this by downgrading gzdoom, as it looks like it has the memory leak problem still on the steam deck. Could be worth re-visiting when the steam deck updates with a newer mesa.


Participant addresses in claimReward

Currently, MonitoringService.claimReward takes participant addresses in addition to the channel_identifier. The addresses get passed on to TokenNetwork.getChannelInfo to check if the channel has been settled.
This function signature allows sending inconsistent information (participant addresses which are not the participants of the given channel) and does not check consistency. This seems problematic to me. Is this an oversight, or is there a reason for this?
I've noticed that some functions in TokenNetwork also take both participants and the channel_id as parameters and then do
require(channel_identifier == getChannelIdentifier(participant, partner));

If I pay the gas cost for getChannelIdentifier anyway, why do I still require channel_identifier as a parameter?

At least a simpler signature unlock(address participant, address partner) would not work.  Between the same two addresses (say Alice and Bob), multiple channel_identifier can be assigned over time within the same TokenNetwork.  Also, these multiple channel_identifier can be relevant at the same time.

a channel opens for Alice and Bob (gets channel_id == 7)
Alice and Bob close and settle the channel (id 7) but forget to unlock() some pending transfers.
a new channel opens for Alice and Bob (get channel_id == 12)
Alice and Bob close and settle the channel (id 12) but fortget to unlock() some pending transfers.
unlock(7, Alice, Bob) and unlock(12, Alice, Bob) do different tings.

For the same reason getChannelInfo(address participant, address partner) would not work because this function looks at the pending transfers that can be unlocked now.
Does this answer the question?

If I pay the gas cost for getChannelIdentifier anyway, why do I still require channel_identifier as a parameter?

This is a prevention against Alice talking to an old channel (channel_id == 7) with Bob when she should be talking to a newer channel with Bob (channel_id == 12).

@karlb do these make sense?

Yes, that makes sense. But I'm still skeptical that our current claimReward implementation is safe. By providing random addresses for closing_participant and non_closing_participant, I could trick claimReward into believing that the channel is settled even when it is not. Or do I miss anything that prevents such an attack?

I see.  We have to note that getChannelInfo()s return values can be gamed. An attacker can control Settled vs. Removed.  Even when there are pending locked transfer that can be unlocked, an honest caller of getChannelInfo gets Settled but an attacker can tweak addresses to get Removed.
Now the question is if claimReward should care about the distinction between Settled and Removed.  Either case, some monitoring service did the job.

Now the question is if claimReward should care about the distinction between Settled and Removed.

I don't think it should. As long as the distinction between closed and settled/remove works reliable, this is OK. From reading the code, this is the case.


dev guide - python requirement

There is no mention of the python requirement for the batch file that prepares scintilla and removes the unused lexers from the make file. It was the only hiccup I ran into while building but I just edited the files manually because I already have previous experience with it.

Oh, forgot about that, thanks!

Fixed: https://github.com/TheQwertiest/foo_spider_monkey_panel/wiki/Building-component

Btw, do you mind if I rip pages from your wiki?

Well there's barely anything there but help yourself.


Add a validation check on service/container to prevent attempts to mount a local file as as a volume

Rancher Version: v1.0.0
Docker Version: 1.10.3
OS: Ubuntu 14.04
Steps to Reproduce: volumes: "./volumes/proxy/certs:/etc/nginx/certs"
Results:   Bad response statusCode [422]. Status [422 status code 422]. Body: [code=InvalidReference, fieldName=LaunchConfigName] from [http://localhost:9000/v1/services]
Expected: create a file

This works find for me:
foo:
  image: ubuntu:14.04.4
  volumes:
  - /tmp/foobar:/myfoobar
  tty: true
  stdin_open: true

It worked both when /tmp/foobar pre-existed and when it didnt (and was created). Can you provide your full config so that we can troubleshoot better?

Hi, the command creates a folder instead of file. I tried the command with a period "." as suggested for docker-compose but that gives me the above error

@mymanga  Oh, I understand what you are trying to accomplish now. Can you point me to the reference where you got the suggestion to start a volume definition with a period to force docker to create a file instead of a directory? I've never seen that and I honestly don't think it works that way.
I think it works like this: if docker finds an existing directory or file, it will use that, otherwise, it will always create a directory.
Out of curiosity: what are you trying to accomplish by having docker create an empty certs file? That doesn't seem very useful, so I just want to make sure I understand your use case.

Here is the docker-compose.yml I am trying to "translate" to rancher
parse-server:
#build: .
image: yongjhih/parse-server:2.2.6
ports:
- "1337:1337"
- "2022:22"
environment:
ALLOW_CLIENT_CLASS_CREATION: true
APP_ID: 11111
APP_NAME: 11111
CLIENT_KEY: 11111
DATABASE_URI: mongodb://mongo-cluster.databases:27017/app
DOTNET_KEY: 11111
FILE_KEY: 11111
JAVASCRIPT_KEY: 11111
MASTER_KEY: 11111
MAX_UPLOAD_SIZE: 200mb
PARSE_MOUNT: /1
REST_API_KEY: 11111
VERIFY_USER_EMAILS: false
image: mymanga/parse-server:latest
volumes_from:
- parse-cloud-code
parse-cloud-code:
#build: cloud/.
image: yongjhih/parse-cloud-code
volumes:
- /opt/rancher/Parse-Server/cloud:/parse/cloud:rw
command: "ls /parse/cloud"
parse-dashboard:
image: yongjhih/parse-dashboard
links:
- parse-server
environment:
APP_ID: 11111
APP_NAME: MobileAppV1
MASTER_KEY: 11111
PARSE_DASHBOARD_ALLOW_INSECURE_HTTP: 1
SERVER_URL: http://live.mymangamedia.com:1337/1
USER1: admin
USER1_PASSWORD: L1nk1np@rK0803
USER2: capitalfm
USER2_PASSWORD: q1w2e3q1w2e3
VIRTUAL_HOST: $VIRTUAL_HOST
LETSENCRYPT_HOST: live.mymangamedia.com
LETSENCRYPT_EMAIL<EMAIL_ADDRESS>ports:
- "4040:4040"
volumes:
- "./opt/rancher/Parse-Dashboard/parse-dashboard-config.json:/src/Parse-Dashboard/parse-dashboard-config.json:ro"
nginx:
image: nginx
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- "/etc/nginx/conf.d"
- "/etc/nginx/vhost.d"
- "/usr/share/nginx/html"
- "./volumes/proxy/certs:/etc/nginx/certs:ro"
nginx-gen:
image: jwilder/docker-gen
container_name: nginx-gen
volumes:
- "/var/run/docker.sock:/tmp/docker.sock:ro"
- "./volumes/proxy/templates/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro"
volumes_from:
- nginx
entrypoint: /usr/local/bin/docker-gen -notify-sighup nginx -watch -only-exposed -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt-nginx-proxy-companion
volumes_from:
- nginx
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./volumes/proxy/certs:/etc/nginx/certs:rw"
environment:
- NGINX_DOCKER_GEN_CONTAINER=nginx-gen
vim:set et ts=2 sw=2:

bump

@mymanga I think I see the confusion, when you run with docker-compose, you are referencing files that already exist in the docker-parser-server repository on your local machine.
With rancher-compose, we don't support relative paths because we have to be able to execute this config on any server in your cluster at any time. When you define host-bind-mount volumes with rancher-compose, we use the filesystem of the host where the service gets deployed.

@cjellick Can we add a validation check on service/container ([secondary]launchConfig?) to prevent this from creating rather than making it all the way down to creating containers and then failing?

makes sense @vincent99

With the release of Rancher 2.0, development on v1.6 is only limited to critical bug fixes and security patches.


Project status

is it being maintained? if not, what equivalent library are you using?

It is

awesome! Just wondering since saw a few of old opened issues.


Swift 5 Upgrade + Fixed Demo Project

Swift 5 Upgrade
Fixed Demo Project to use Cocoapods

hey, thanks for the effort, but I did it myself now!


objects/user: make $include be a list of strings

Related Issue:
#791 Rationalize $include to always be a list of strings
Description of changes:
Updated the one use of $include, in objects/user.json, that was string-valued to be a list instead.

Looks good. Thank you for updating user.json along with it. One comment - it may be healthy for us to to put the word out to ensure any extension owners update extensions to follow this convention.

Thanks for pointing this out; I didn't realize there were metaschema consumers outside of this repository :grimacing:
What is the channel for us to communicate/share/collaborate on changes like this?  The metaschema work is going to be a more powerful hook to get consistency across the extension community, too.

Looks good. Thank you for updating user.json along with it. One comment - it may be healthy for us to to put the word out to ensure any extension owners update extensions to follow this convention.

Thanks for pointing this out; I didn't realize there were metaschema consumers outside of this repository 😬
What is the channel for us to communicate/share/collaborate on changes like this? The metaschema work is going to be a more powerful hook to get consistency across the extension community, too.

There is an #extensions channel, that would be a good candidate. And we can also relay in the weekly consortium sync.


Feature/cu k1c35z ranged enemy fsm

Testing scene is PlayerNavigationTestRanged3.scene

Ranged AI will approach player if he's further than attackRange but closer than searchRadius
Ranged AI has its animations playing whenever necesary and without known issues (besides flying backpack on death, Nil knows)
Ranged AI will shoot a projectile at the player's character whenever it's in range and the AI itself isn't dead (Current attackspeed 0.5 seconds)
There is a manual delay to make the shoot animation and the projectile generation match
Specifically made projectile prefab is found and referenced in prefab, it has a lower speed and a collider/script looking for player to damage him (Without player collider no damage will be made)
Ranged AI has the noises provided set to play whenever necesary.
Ranged AI falls like melee grunts, there appears to be some issue with this regarding the final position (y axis, to be discusssed)
Ranged AI will die after getting show twice, whenever hurt a red material will trigger, this material MUST be inside the scene on a gameobject (can be a disabled meshrenderer with only the material reference), said gameobject must be referenced inside RangedAI script
Necesary changes on PlayerController to hit and damage RangedEnemy wre made. (Raycasting)
Ranged AI will flee from player if he gets closer than fleeingRange, necesary modifications were made on AIMovement script
Melee range inside Enemy script has been renamed to attackRange, made more sense.
Ranged AI has layer Enemy on the meshRenderer gameObject
Ranged AI has three separate references for GameOjects that can be used to make sure the enemy is inside the frustum completely before shooting, referencing the main meshRendererObj on all three of these will result in normal behavior.

Resolve the conflicts


bug: MetaMask not detected

Is there an existing issue for this?

[X] I have searched the existing issues

Package Version
1.4.1
Current Behavior
When entering my site with Metamask locked, and then unlocking metamask, the account value from useAccount does not change.
If I enter the site and Metamask was unlocked, then it is picked up. I can lock it and re-unlock it. The changes will be picked up.
Note: The wallet is authorised on the site. I also only have 1 wallet in my browser.
Expected Behavior
Metamask changes should always be detected, whatever the initial state of metamask was on navigating to the site (locked / unlocked).
I should not need to manually call connectAsync for the wallet to come through via useAccount, if the wallet is already authorised on this site.
Steps To Reproduce
Get account from useAccount hook.
Enter website with metamask wallet locked.
Unlock the wallet manually.
Change is not detected.
Link to Minimal Reproducible Example (StackBlitz, CodeSandbox, GitHub repo etc.)
No response
Anything else?
Attached the fix I used. Here, I hook directly into window.ethereum, and trigger connectAsync to reactivate Metamask within Wagmi.
https://github.com/charmverse/app.charmverse.io/pull/2872/files#diff-904ced01550bfc35f0ac424af15ddff4366afdffabc45c87e87c23366801cb5cR269-R291

This is fixed in Wagmi v2 (see #3068).


TLS support docs inconsistencies

What happened:
In the api-overview docs section (https://gateway-api.sigs.k8s.io/concepts/api-overview/#route-summary-table), a compatibility matrix about the TLS support lists the TLS types supported by each Route; apparently, all the routes but the UDPRoute support TLS (either in terminated or in passthrough mode, or in both modes).
In the TLS guide docs section (https://gateway-api.sigs.k8s.io/guides/tls/#clientserver-and-tls), another TLS support matrix contains data that are inconsistent with the above table. Specifically:

TLSRoute seems to support only Passthrough, instead of both modes
TCPRoute seems to support only Terminate, instead of both modes
GRPCRoute is not listed

What you expected to happen:
The two tables should be consistent. Furthermore, adding this kind of information in the godoc section of the listener would be useful, as it is quite important for those who are implementing the API.
How to reproduce it (as minimally and precisely as possible):
Anything else we need to know?:

/assign

GRPCRoute, TCPRoute and TLSRoute can not graduate to GA until this is sorted out, but we don't need to hold up v1.0.0 for this (HTTPRoute).

The API godoc explains that a Listener TLSMode can only be passthrough for TLSRoute.  I reckon if the matrix doesn't include the Listener TLSMode then it's incomplete.
https://github.com/kubernetes-sigs/gateway-api/blob/9e30ff9fe0f46697720f87aad48a03b0da2e7da0/apis/v1/gateway_types.go#L501-L502


MCAS with MSFT Defender ATP - information is not clear.

In the first paragraph is states, “Microsoft Cloud App Security integrates with Microsoft Defender Advanced Threat Protection (ATP) natively. The integration simplifies roll out of Cloud Discovery, extends Cloud Discovery capabilities beyond your corporate network, and enables machine-based investigation.”
But then the 2nd paragraph says, “Cloud App Security uses the traffic information collected by Microsoft Defender ATP about the cloud apps and services being accessed from IT-managed Windows 10 machines. The native integration enables you to run Cloud Discovery on any machine in the corporate network, using public Wi-Fi, while roaming, and over remote access. It also enables machine-based investigation.”
In on instance it speaks of integration beyond the corporate network, in the second instance it speaks of integration with machines in the corporate network.  Which is it? If the text, as written, is correct, then please explain or clarify the distinction – as a learner, it is not clear to me.
Thanks,
Cecilia

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

ID: a2b2133d-85b3-8e2c-c89a-7d83f48e5dd0
Version Independent ID: 84598ed0-a8ea-5504-2b87-b20df2347e53
Content: Integrate Microsoft Defender ATP with Cloud App Security
Content Source: CloudAppSecurityDocs/wdatp-integration.md
Service: cloud-app-security
Product: ****
Technology: ****
GitHub Login: @shsagir
Microsoft Alias: shsagir

@ceperezb Thanks for contacting Microsoft with feedback about our product documentation. Depending on the complexity, it could take from a few business days to a few weeks to look further into your question, issue, or suggestion. We'll contact you if we need further information, and you'll receive an email message each time we "@mention" you in a comment.
Thanks again for submitting your feedback. Your suggestions help improve our documentation.

@ceperezb Thanks again for your feedback. After investigating, we've discovered both are correct. The 2nd paragraph lists all the options, of which in the corporate network is one option. The list also includes public Wi-Fi and roaming that are beyond the corp network. We hope that clarifies the issue for you.


MAISTRA-2624 Improve operator startup by reducing number of API discovery calls

For the stuff from k8sutil, would it make sense to just move this into the operator.  For the other changes, is the resource list dynamic?  I ask because the first time the operator starts, there won't be any istio.io resources installed on the cluster and I assume those won't be in the initial list used to initialize the client.

The resource list is only used at startup, when some metrics stuff gets initialized. Basically, my changes was just the following:
From:
foreach cr in operatorCRs {
  resourceList := getResourceList()
  doSomethingWith(resourceList, cr)
}

to:
{code}
resourceList := getResourceList()
foreach cr in operatorCRs {
  doSomethingWith(resourceList, cr)
}

{code}
That's one of the changes. The other is in isNamespaced(), which previously performed a partial API Discovery (it only looked up a single api group, not all of them) and now simply uses the data in the existing resourceList.
In all cases, resourceList is then discarded. If it's later needed again, it is loaded from the API server again (for example, when you create the client).

Thanks @luksa. So this means that we were only ever reporting metrics for CRs whose definitions were installed as part of the operator, which means this change doesn't affect existing metrics.  And, even if it did register metrics for istio types, the operator still would have required a restart, as the metrics were only initialized at operator startup.  Do I have this right?

We specify the list of CRs (see #1), so restarting won't have any effect. We only register the maistra CRs. And I've just noticed that we register maistra/v1 twice instead of registering v2.
#1 https://github.com/Maistra/istio-operator/blob/maistra-2.1/cmd/manager/main.go#L234-L242


react 18, storybook 6.5 issue

Describe the bug
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving<EMAIL_ADDRESS>npm ERR! Found<EMAIL_ADDRESS>npm ERR! node_modules/react
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!   peerOptional<EMAIL_ADDRESS>|| ^17.0.0 || ^18.0.0" from<EMAIL_ADDRESS>npm ERR!   node_modules/@storybook/addon-actions
npm ERR!     dev<EMAIL_ADDRESS>from the root project
npm ERR!     peer<EMAIL_ADDRESS>from<EMAIL_ADDRESS>npm ERR!     node_modules/storybook-addon-next
npm ERR!       dev<EMAIL_ADDRESS>from the root project
npm ERR!   2 more (react-dom, next)
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer<EMAIL_ADDRESS>|| ^17.0.0" from<EMAIL_ADDRESS>npm ERR! node_modules/storybook-addon-next
npm ERR!   dev<EMAIL_ADDRESS>from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See C:\Users\shala\AppData\Local\npm-cache\eresolve-report.txt for a full report.

npm ERR!      C:\Users\shala\AppData\Local\npm-cache\_logs\2022-05-20T07_58_57_872Z-debug-0.log

Your minimal, reproducible example
just use the storybook 6.5.3
Steps to reproduce
react 18,
storybook 6.5.3
Expected behavior
i expect it to install :)
How often does this bug happen?
No response
Screenshots or Videos
No response
Platform
windows
storybook-addon-next version
1.6.2
Additional context
No response

This should be fixed as of 1.6.3. Let me know if that doesn't work for you


fix: Boost url dependency

Address https://github.com/dogecoin/dogecoin/issues/2229 https://github.com/dogecoin/dogecoin/discussions/2256

Thanks!


Updated device categories and added Line Display

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


If the Heroku slug compilation fails, the error is not propagated and the build succeed

To reproduce:
Create an error so that the heroku slud buid fails. I.e. error in package.json, error on grunt file if you run grunt in a post-install script (as we do). The goal is to make the git push command issued by this plugin to fail.
If the slug compilation fails, the grunt build till records a success:
remote:  !     Push rejected, failed to compile Node.js app
remote:
remote: Verifying deploy....
remote:
remote: !	Push rejected to guestful-web-staging.
remote:
To git@heroku.com:guestful-web-staging.git
 ! [remote rejected] stable -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:guestful-web-staging.git'
>> Error
>>

Done, without errors.

@mathieucarbou Please provide more information, including reproduction steps if possible.

sorry. it's done. and not complicated to reproduce ;-)

UPDATE:
http://gruntjs.com/frequently-asked-questions#why-doesn-t-my-asynchronous-task-complete
"Note that passing false to the done() function tells Grunt that the task has failed.".


Add functionality for specifying a web cache expiration

It should be possible to use the cache-control header's no-cache directive to force web caches to revalidate cached results before providing them. Unfortunately, some proxy caches do not appear to respect no-cache, and will continue to provide results from cache until they have expired.
This commit allows the Redis and web cache expirations to be set independently, so that items can be cached to Redis with long expirations, but provided to the web with shorter expirations, forcing web caches to revalidate.

This looks really nice. It is just sad that this project has been discontinued.


feat(ado/infra): Fix ReamMe format

Details
The leading spaces in the ReadMe file made everything look like a plain text file, this pr fixes that so links, header, etc.. should be displayed correctly.
Motivation

Context

Pull request checklist

[ ] Addresses an existing issue: Fixes #0000
[x] Added relevant unit test for your changes. (yarn test)
[x] Verified code coverage for the changes made. Check coverage report at: <rootDir>/test-results/unit/coverage
[x] Ran precheckin (yarn precheckin)
[x] (after PR created) The Accessibility Checks (pull_request) check should fail. All other checks should pass.

Codecov Report

Merging #801 (5b32592) into main (bcfd988) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #801   +/-   ##
=======================================
  Coverage   86.50%   86.50%
=======================================
  Files          34       34
  Lines         630      630
  Branches       57       57
=======================================
  Hits          545      545
  Misses         85       85

Continue to review full report at Codecov.

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


Open on right

I love how simple this component is. The only feature I would like is to have the menu optionally open from the right.

@wolfadex Great idea! Just released new version with this feature. Now you can use 'openFromRight' props to do that.
check it out: https://gauravchl.github.io/react-simple-sidenav/demo/

cheers!


Allow storing of config in dropbox by default, fail back to home folder ...

This pull request allows storing of config in dropbox by default, fail back to home folder if dropbox folder is not available (if dropbox is not installed).

@PhilETaylor Thank you for your contribution. I'm going to close this pull request. See the conversations in https://github.com/fitztrev/shuttle/issues/110 and https://github.com/fitztrev/shuttle/pull/111 adding the ability to set a path for shuttle.json regardless of the Cloud service, dropbox, onedrive, etc is in progress. Thanks!

No worries at all - It works for me and I love it - my Macbook Air and iMac are in sync with my change and its cool - thanks.


Limit the ByteArray wrapper logic inside segment creator

Limit the ByteArray wrapper logic in segment creator only. Use byte[] in all other places.
With this change, ByteArray become transparent outside of segment creation.
Unify the behavior of dictionary:

Use byte[] for value insertion, value fetch
Use ByteArray for min-value, max-value, sorted-values

Codecov Report

Merging #3439 into master will increase coverage by 0.02%.
The diff coverage is 75.51%.

@@             Coverage Diff             @@
##             master   #3439      +/-   ##
===========================================
+ Coverage     70.57%   70.6%   +0.02%
  Complexity        4       4
===========================================
  Files           997     997
  Lines         45611   45571      -40
  Branches       6108    6099       -9
===========================================
- Hits          32189   32174      -15
+ Misses        11311   11281      -30
- Partials       2111    2116       +5

Impacted Files
Coverage Δ
Complexity Δ

...re/data/recordtransformer/DataTypeTransformer.java
85.71% <ø> (-0.26%)
0 <0> (ø)

.../data/recordtransformer/SanitationTransformer.java
91.3% <ø> (-2.25%)
0 <0> (ø)

...or/impl/fwd/SingleValueVarByteRawIndexCreator.java
70.58% <ø> (+7.43%)
0 <0> (ø)
:arrow_down:

...n/java/com/linkedin/pinot/core/util/AvroUtils.java
52.89% <ø> (ø)
0 <0> (ø)
:arrow_down:

...ot/core/segment/index/readers/BytesDictionary.java
100% <100%> (+9.09%)
0 <0> (ø)
:arrow_down:

...ent/index/column/PhysicalColumnIndexContainer.java
90.74% <100%> (-0.17%)
0 <0> (ø)

...segment/creator/impl/SegmentDictionaryCreator.java
87.14% <100%> (-0.36%)
0 <0> (ø)

.../impl/dictionary/BytesOnHeapMutableDictionary.java
79.31% <55.55%> (+9.61%)
0 <0> (ø)
:arrow_down:

...impl/dictionary/BytesOffHeapMutableDictionary.java
80.95% <71.42%> (+17.49%)
0 <0> (ø)
:arrow_down:

...impl/stats/BytesColumnPredIndexStatsCollector.java
56.6% <80.95%> (+4.22%)
0 <0> (ø)
:arrow_down:

... and 22 more

Continue to review full report at Codecov.

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


Mock command functionality

Checks if its in DMs
Checks every message for if the author is in the mockTargets[] array
Deletes the targets messages and replaces it in the SpongeBob text format

Did not mean to add the Cat command to this PR but feel free to take a look at both in this one I guess lol. I'll add the Cat command issue to this one, but please lmk if I should do this differently. Thanks!

Same thing for Global Rate Limit, but this time I added it on purpose.

5 second cooldown on any command (on a per-user and per-command basis)
applied to every command, but let me know if you want it to JUST be on mock and cat
Everything ive done other than the actual command info and executions is in my index.ts file, but im assuming it would be better to make new files/folders and put certain things in there (ie: a message handler file, instance handler file, etc)

All 3 things I added seem to work, but if there is a lot that needs to be changed then im assuming we might need to vc xD
Thanks Console! and no rush on reviewing if you are busy at all!

Will be separating these into multiple PRs/Repos later today (if I have time). If I haven't done it yet by the time you get on to review, feel free to either just review the Mock command, or wait till I split them up and review another day when you have time.