macOS: client and/or server is hung

Describe the bug
Client was hung (thread dump attached), now server appear to be hung-ish -- on launch it is showing the spinner forever while trying to show all tables.
To Reproduce
I was playing "Big Game (Stern)" and quit to popper, then went to play "Star Gazer".  I noticed that the high score popup didn't show -- I thought maybe since I had started Star Gazer before it showed it held off (per discussion in #436).  After I quit Star Gazer I waited in Popper but I never saw the score card show up.  I went back to the client to look at the high scores event log and that is when the client hung (I grabbed a thread dump, attached below).
I killed off the client and reran it.  It came up to the point where it is showing the All Tables view, but it can't load the view.  It was able to get the log zip file.
threads.txt
vpin-studio-logs.zip
Expected behavior
No hang (or whatever it is doing)
Desktop (please complete the following information):

OS: macOS 15

Note: popper is still running at the point where I grabbed the logs but no VPX process.  The restart server button in the settings did work (the client was able to display the list of tables again).

I ran Big Game and exited it again and the server/client hung in exactly the same way.  Curiously the nvram does isn't even supported by pinemhi (biggame.nv)

"Unfortunately" the issue has nothing todo with the Studio, but was a crash of the Java Virtual Machine (JVM). I'm not sure how stable the JVM we are using is on macOS. If the issue happens more often, we could try to update it.
Of course the server should not be affected by this, but I see no way to reproduce this scenario.
I leave the ticket open if additional crashes happen and will also check how we could update client JVMs.

Do you think the client crashed because of the thread dump?  I actually triggered that with a ^\ (SIGQUIT).  It might look like a crash, but it was just me.
I think it was something on the server side because it persisted between launches of the client, but looking at the server logs I didn't see anything out of the ordinary.  That said, it looks like I can reproduce it on my cabinet -- is there a way to turn on more detailed logs?  Maybe I can try getting a thread dump from that.

Ah, I see. Then I misread the logs.
Was the event log filled for Star Gazer? It is indeed odd that nothing is logged after this table exit.
The thread dump was a good approach, but you catched the client, not the server process. Otherwise this may have indeed revealed something. So if you try that again, would be much apprechiated. It wasn't a pleasant suprise to get this report details in the first place :)

No, after I exited the Big Game table none of the high scores were scanned.  I will try this tonight and get a thread dump from the server side.

Dang, now it works fine -- I can't reproduce it any more.  Maybe close this as we don't have sufficient info.  If I encounter something like this again I will get a thread dump from the server side.
It looks like I need to get the Zulu JDK installed so I have jstack on that machine.

OK, I got a hang:

was playing World Poker Tour (Stern) (and maybe got a high score)
exited back to popper
exited popper -- I was planning to add a new table
in the client I clicked to install the new table (Hang Glider) and I am hung on this screen

here is the thread dump from the server:
threads.txt
and the log:
vpin-studio-server.log

hopefully this is the same issue that I originally saw -- the good news is it looks like a simple deadlock:
Found one Java-level deadlock:
=============================
"/api/v1/games/scores/384":
  waiting to lock monitor 0x00000269761e9a80 (object 0x0000000604d34138, a de.mephisto.vpin.server.games.GameService),
  which is held by "/api/v1/games/scores/561"
"/api/v1/games/scores/561":
  waiting to lock monitor 0x0000026972371f80 (object 0x0000000606221e20, a de.mephisto.vpin.server.highscores.HighscoreService),
  which is held by "Game Exit Thread [X-Men Magneto LE (Stern 2012) VPW 1.0]"
"Game Exit Thread [X-Men Magneto LE (Stern 2012) VPW 1.0]":
  waiting to lock monitor 0x00000269761e9a80 (object 0x0000000604d34138, a de.mephisto.vpin.server.games.GameService),
  which is held by "/api/v1/games/scores/561"

Ah, interesting -- I had played X-Men (one of the hung threads) before World Poker Tour.
From the backtraces it looks like it might just be a case of lock order inversion with HighscoreService -> (TournamentChangeListener) -> GameService and GameService -> HighScoreService.  I don't know how easy that is to reproduce, it might be a timing thing, but the cause doesn't look mysterious at least.

Thank you for the detailed analysis, couldn't wish for more.
I tried reproducing it via postman, but got no dead locks so far.
The main issue seems to be that the TournamentChangelistener itself again triggers a highscore change. I also identified some other flaws there, so hopefully the issue is fixed with the next patch.

Fixed with 3.5.1
Re-open this issue in case the fix did not work.


Creating new CLI for process_pr_entropy, referenced in GitHub action entropy-check.yml

Description
This PR introduces a new function, process_pr_entropy, in the file processing_repositories.py, which can be referenced via the CLI. This function generates a detailed and informative entropy report that will be utilized within our custom GitHub Action.
To test this you can run poetry run almanack process_pr_entropy --repo_path" " --pr_branch" " --main_branch " "
I'm struggling to create a test case for this implementation since now  the use case is more complex(i.e. branches) I can no longer use my test repositories.
I appreciate any comments or feedback!
Closes #92

What is the nature of your change?

[X] Content additions or updates (adds or updates content)
[ ] Bug fix (fixes an issue).
[ ] Enhancement (adds functionality).
[ ] Breaking change (these changes would cause existing functionality to not work as expected).

Checklist
Please ensure that all boxes are checked before indicating that this pull request is ready for review.

[X] I have read the CONTRIBUTING.md guidelines.
[X] My code follows the style guidelines of this project.
[X] I have performed a self-review of my own contributions.
[X] I have commented my content, particularly in hard-to-understand areas.
[X] I have made corresponding changes to related documentation (outside of book content).
[X] My changes generate no new warnings.
[X] New and existing tests pass locally with my changes.
[ ] I have added tests that prove my additions are effective or that my feature works.
[X] I have deleted all non-relevant text in this pull request template.

Thank you for the speedy review @falquaddoomi ! The compute file definitely needs some refactoring changes, which I plan to reference in a new issue, just stuck on a short time frame for my last week! Similarly I wanted to create a function that gives the option for different outputs(ex. json, md, etc.), however I did not get around to that, which then needed me to delete a test case. Sorry, I know this probably isn't the best way of doing this, but just crunched on time. Adding back the test cases and refactoring will be done in the next PR!


Variadic options

Would be incredibly convenient to have support for variadic options.
@click.command()
def command(**kwargs):
    click.echo(kwargs.keys())

Would like to be able to do
> binary command --newarg1=3 --newarg2=4
['newarg1','newarg2']

Can't figure out a way to do this yet.

Going to close this, you can use this in 4.0.


Restore autolink functionality

Close #430

Coverage remained the same at 83.805% when pulling 8580cddb1be6401be806a335d979a6d824e3ae8c on jw/restore-autolink-feature into ba50a85455ce7cadd9253052ac048b7298e00593 on master.


Generalize wave generators to handle custom bit-depth

ODHack

Go to the Nicera Labs OD Telegram
Present yourself and tell us which issue you want to pick
Explain shortly how you want to tackle the issue
Ask a question if you need some clarity
When you're selected you will be assigned to the issue

Description
Generalize all wave generators in utils.cairo with a custom bit_depth parameter so that they handle a custom bit-depth.
Must handle at least: 4-bit, 8-bit (current), 16-bit, 24-bit
Wiki Resource on bit-depth
Additional Information
[Medium Difficulty  - Cairo - Medium Priority]
Acceptance Criteria

[ ] Implement custom bit-depth
[ ] Write and pass unit tests
[ ] Generate example files

Hii @tekkac , I have went through the code and thought of handling this issue. If it's fine I would like to tackle this issue.


(BUG) Statistics: The data(amount of G$) is not displayed fully on the chart's tip

Steps to reproduce:

Open the  "Statistics" page
Hover the mouse over the last point of the chat (for example Total G$ supply)
Pay attention to the amount on the tip

Actual result: The data is not displayed fully on the chart's tip
Expected result: The tip should be displayed fully on the "Statistics" page
Checked on DEV V0.25.4-9
LG V30+ // Android 8.0 // Google Chrome 84.0.4147.111
Desktop: Windows 10 // Google Chrome  84.0.4147.105

we have a new dashboard


[CPM] Adds make targets and e2e test for migration of HA Shoots

How to categorize this PR?

/area control-plane-migration testing
/kind enhancement
What this PR does / why we need it:
This PR adds make targets for starting a second single zone HA seed cluster for the local setups (ref: development/getting_started_locally.md and deployment/getting_started_locally.md
The PR also adds an e2e test to migrate HA shoots with spec.controlPlane.highAvailability.failureTolerance.Type: node between single zone HA seeds.
The second commit fixes an issue with the tear-down-kind2-env target, which was caused because it tries to delete the seed-local secret which is still used by the local seed. Additionally, the register-kind2-env target was reapplying the seed-local secret. That secret should only be handled by the register-local-env target.
A similar handling of the seed secret is also done for the register-kind2-ha-single-zone-env and tear-down-kind2-ha-single-zone-env targets.
Which issue(s) this PR fixes:
Part of #6529
Special notes for your reviewer:
Release note:

The local deployment of Gardener is extended so that it is now possible to create a second single zone HA `Seed`. This `Seed` can be used to test the control plane migration scenario for HA `Shoot`s. Additionally, make targets were added to trigger the control plane migration integration test with HA `Shoot`s: `test-e2e-local-migration-ha-single-zone` to test the migration locally, and `ci-e2e-kind-migration-ha-single-zone` mainly intended to be used in Gardener prow jobs.

The `register-kind2-env` and `tear-down-kind2-env` will no longer try to deploy and delete the `seed-local` `Secret`. This fixes an issue where `tear-down-kind2-env` would hang as it deletes and then waits for the `seed-local` `Secret` to be deleted which can not happen as long as the `local` `Seed` which uses it still exists.

/retest

/assign


Warn if using software rasterizer (lavapipe or llvmpipe)

Closes https://github.com/rerun-io/rerun/issues/3089

Checklist

[x] I have read and agree to Contributor Guide and the Code of Conduct
[x] I've included a screenshot or gif (if applicable)
[x] I have tested demo.rerun.io (if applicable)

PR Build Summary
Docs preview
Examples preview
Recent benchmark results
Wasm size tracking

Can you please copy-paste that wgpu adapter name log row? 🙏

Can you please copy-paste that wgpu adapter name log row? 🙏

[2023-08-30T07:45:19Z WARN  re_viewer::native] Software rasterizer detected - expect poor performance and crashes. See: https://www.rerun.io/docs/getting-started/troubleshooting#graphics-issues
[2023-08-30T07:45:19Z INFO  re_viewer::native] wgpu adapter name: "llvmpipe (LLVM 16.0.6, 256 bits)", device_type: Cpu, backend: Vulkan, driver: "llvmpipe", driver_info: "Mesa 23.1.6-arch1.4 (LLVM 16.0.6)"


ci: check if external urls in markdown respond

Update
The original package needed pretty substantial changes.  I put together a dumb version of it from a fork, that seems to get the job done reasonably well.  I also found additional bad urls and fixed the remaining dead urls (2nd commit).
There is one substantial issue (which is the reason I originally went down this rabbit hole), the Integrating with Existing Apps guide references a 2048 project that no longer exists.  That'd require a substantial document update to fix.

Use this to audit whether urls in our documentation need to be updated. At this time there are some caveats:

This won't error, just provide a warning
Unless we fork a package, we can't validate android developer.android.com urls.

This would run as part of the regular CircleCI linting.
Output
❯ yarn run lint:markdown
yarn run v1.22.19
$ remark ../docs --quiet -r .remarkrc.js
../docs/_integration-with-existing-apps-objc.md
    100:12-100:73  warning  Link to https://github.com/JoelMarcey/iOS-2048 is dead               no-dead-urls  remark-lint

../docs/_integration-with-existing-apps-swift.md
      72:12-72:75  warning  Link to https://github.com/JoelMarcey/swift-2048 is dead             no-dead-urls  remark-lint

../docs/network.md
   317:69-317:123  warning  Link to https://hosting.review/web-hosting-glossary/#12 is dead      no-dead-urls  remark-lint

../docs/profiling.md
  138:103-138:178  warning  Link to http://www.androiddocs.com/tools/help/gltracer.html is dead  no-dead-urls  remark-lint

../docs/typescript.md
    42:172-42:243  warning  Link to https://react-native-community.github.io is dead             no-dead-urls  remark-lint

⚠ 5 warnings
✨  Done in 15.45s.

I'll fix the node esm issues causing CI to fail.


Make sure examples/ are all working

I believe that making sure examples/ are working is part of our release cycle for HARK, but it's not currently part of the automated test regimen.
At the time of this writing, it looks like not all of the examples/ are functioning.
It is especially important to have them all working for the 1.0 release.

reassigning to Mridul because you seem to be working on it with #944 ?

for reference, broken examples (mostly because of Now)

examples/ConsIndShockModel/IndShockConsumerType.py
examples/ConsIndShockModel/PerfForesightConsumerType.py
examples/ConsumptionSaving/example_ConsMedModel.py
examples/ConsumptionSaving/example_TractableBufferStockModel.py
examples/ConsumptionSaving/example_ConsPortfolioModel.py
examples/ConsumptionSaving/example_ConsMarkovModel.py
examples/ConsumptionSaving/example_ConsRepAgentModel.py
examples/ConsumptionSaving/example_ConsGenIncProcessModel.py
examples/ConsumptionSaving/example_ConsPrefShockModel.py
examples/FashionVictim/FashionVictimModel.py
examples/GenIncProcessModel/GenIncProcessModel.py
examples/HowWeSolveIndShockConsumerType/HowWeSolveIndShockConsumerType.py

I'm confused why we are support these .py examples. Most of our examples are notebooks. For some reason, these .py files are not Jupyter linked with the corresponding notebooks? Why are we maintaining them like this?


$modal.open fails when including angular-mocks

After including angular-mocks to my project I've noticed modals no longer animate open when calling $modal.open. The modal gets stuck and the classes never get removed causing the opacity to stay at zero.
http://plnkr.co/edit/pRhDuKBL6m9nZkhQkWc4

Modal animations are now using ngAnimate to drive animations, so I believe this is not an issue any more.


Removed unnecessary admin CSS.

The "object-tools" container is never rendered as a descendant of
.form-row.
The "golink" CSS class is unused.
A <label> element has not been included in the login .submit-row since
5869afe32b9c252cacd327f18c58e38c36d1f530.
The "help" CSS class from login.css has been unused since
0e5faf225c5cd1acf2ab653c74f5b161470403b9.
The  color in login.css is already inherited from the <body>
element and so does not need to be re-specified.
The #content-main container already has the property 'width: 100%' from
base.css and so does not need to be re-specified in login.css.
The <td> and <th> font-family property is inherited from the
element and so does not need to be re-specified.
The <html> element has the attribute dir which automatically sets
the text direction in the layout. Adding the direction CSS property was
necessary to support IE which does not support the dir attribute, but IE
is no longer supported, so drop the direction property.
The 'font-size: 1em' property re-specifies the same font size. It
creates no visual difference.
The 'font-size: 14px' property often re-specifies the inherited value.
Avoid re-specifying it.

I discovered these while working on #12847. I didn't use a specific tool, only by inspection. Basically, I audited the admin CSS and for anything that looked mildly suspicious, I grepped the code for usage and then inspected the elements in a browser as well as responsive mode to discover how it affected the visual layout. I also tried to discover what commit the usage stopped in for more confidence.

Okay cool, thank you for being so thorough.

Does the same apply to the input, textarea, select, .form-row p, form .button declaration lower down?

Unfortunately no. My testing with Firefox shows its default stylesheet overrides the font for input elements. Therefore, we need keep the override.

Super. Thanks for the confirmation @jdufresne

buildbo, test on selenium.

buildbot, test on selenium.

@carltongibson I added a selenium test that demonstrates the input font rules we discussed.

@carltongibson I guess this is ready to be merged?

Thanks @jdufresne.


Fix name of op for pref tab

Not sure if this changed with newer ttrss or it's because of some other factor, but the PluginHandler class name is case sensitive and needs to be corrected or you get E_UNKNOWN_METHOD when trying to do anything at all with the pref tab.
Please answer the following questions for yourself before submitting a pull request. YOU MAY DELETE UNUSED SECTIONS.
NOTICE!!!
All rule submissions should be done in the https://github.com/feediron/feediron-recipes repository.
Bugfix/Enhancement

[ ] Have you added an explanation of what your changes do and why you'd like us to include them?
[ ] Have you successfully ran tests with your changes locally?

Fixes #
Proposed Changes

Awesome! Thanks for you contribution


README: Make meetings monthly (were weekly)

On @caniszczyk's recommendation, make the meetings 5pm Pacific on the first Wednesday of each month.
I've also removed the requirement for posting minutes to the mailing list.  We have a good track record of pushing MeetBot minutes to the same place, so I don't think we add any usefulness by mailing that link to the list.  I'm happy to split that off into a separate PR if there's any pushback on it.

I've updated this to use 2pm with 913fee4 → 1077f05.

LGTM

LGTM

On Mon, Aug 21, 2017 at 02:30:54PM -0700, Tianon Gravi wrote:

LGTM

@tianon, can you LGTM again (and merge, if you feel like it)?  Your
earlier LGTM no longer applies after I dropped the change about minute
posting yesterday 1.

Can another maintainer besides @hqhq review, and possibly LGTM or merge, this before tomorrow's non-meeting?

LGTM

On Tue, Aug 22, 2017 at 12:45:44AM -0700, Qiang Huang wrote:

LGTM

Hmm, PullApprove seems to no longer count this 1.  Based on the
buttons (default:approved 2 vs. runtime-spec:approved 3), I
suspect #902 (which landed a few hours after @hqhq's LGTM 4) may
have invalidated any existing LGTMs.  So can a maintainer besides
@tianon take a(nother) look at this PR?

LGTM

Thanks, @tianon and @hqhq :).


Reconnect and shared connection

I have the following code example which I am trying to get to work.
The point is that I have two coroutines that I run on a startup event in fastapi, one should consume messages, and the other should produce.
It is not possible to use the latest version of fastapi with lifespan now (although how to ensure reconnect is still a question there). Also I need to provide
reconnect so that any crash does not stop the application.
I'm trying to run the following piece of code and it doesn't work.
import uvicorn
import asyncio

from fastapi import FastAPI
from aiomqtt import Client, MqttError

from app.config import settings

def create_app():
    app = FastAPI()
    client = Client(hostname=settings.mqtt_host, port=settings.mqtt_port)
    Test(client=client).init_app(app)
    return app

async def _handle_mqtt_msg(message):
    print(message)

async def consume_mqtt(client):
    reconnect_interval = 5
    while True:
        try:
            await client.__aenter__()
            async with client.messages() as messages:
                await client.subscribe('vehicles/v1/+/events/telemetry')
                async for message in messages:
                    await _handle_mqtt_msg(message=message)
        except MqttError as e:
            await client.__aexit__(None, None, None)
            await asyncio.sleep(reconnect_interval)

async def publish_some_messages(client):
    await client.publish(topic='test', payload='test')

class Test:
    def __init__(self, client):
        self.client = client
    def init_app(self, app):
        @app.on_event('startup')
        async def startup():
            loop = asyncio.get_running_loop()
            loop.create_task(consume_mqtt(self.client), name='blabla')
            loop.create_task(publish_some_messages(self.client))

if __name__ == '__main__':
    port = settings.port
    uvicorn.run(app=create_app(), port=port, access_log=False)

future: <Task finished name='Task-4' coro=<publish_some_messages() done, defined at /Users/yragantron/evo_projects/message-processor/./main.py:35> exception=MqttCodeError('Could not publish message')>
Traceback (most recent call last):
  File "/Users/yragantron/evo_projects/message-processor/./main.py", line 36, in publish_some_messages
    await client.publish(topic='test', payload='test')
  File "/Users/yragantron/Library/Caches/pypoetry/virtualenvs/message-proccesor-yNLPJJ9m-py3.10/lib/python3.10/site-packages/aiomqtt/client.py", line 117, in decorated
    return await method(self, *args, **kwargs)
  File "/Users/yragantron/Library/Caches/pypoetry/virtualenvs/message-proccesor-yNLPJJ9m-py3.10/lib/python3.10/site-packages/aiomqtt/client.py", line 514, in publish
    raise MqttCodeError(info.rc, "Could not publish message")
aiomqtt.error.MqttCodeError: [code:4] The client is not currently connected.

Surely this is some kind of common use case, but for some reason I don’t see a solution. Can you tell me how to run this code

Hi Arseny,
Thank you for the reproducible example 👍
The code does not correctly initialize the client object. Specifically, you need to call __aenter__ already inside the startup event. Tom has some good examples in issue #230 that are related.

how to ensure reconnect is still a question there

Very true; that's a nice opportunity for a self-contained first contribution to update the docs on that 😉

Hi, I ran and debugged the example, Client initialization is placed in the event, otherwise different event loop errors will be generated, sleep for 0.5s to switch to connect. This way is not recommended.
import uvicorn
import asyncio

from fastapi import FastAPI
from aiomqtt import Client, MqttError

def create_app():
    app = FastAPI()

    @app.on_event('startup')
    async def startup():
        loop = asyncio.get_running_loop()
+      client = Client(hostname="localhost")
        loop.create_task(consume_mqtt(client), name='blabla')
+      await asyncio.sleep(0.5)
        loop.create_task(publish_some_messages(client))
    return app

async def _handle_mqtt_msg(message):
    print(message.payload)

async def consume_mqtt(client):
    reconnect_interval = 5
    while True:
        try:
            await client.__aenter__()
            async with client.messages() as messages:
                await client.subscribe('test')
                await client.publish(topic='test', payload='test')
                async for message in messages:
                    await _handle_mqtt_msg(message=message)
        except MqttError as e:
            print(e)
            await client.__aexit__(None, None, None)
            await asyncio.sleep(reconnect_interval)

async def publish_some_messages(client):
    await client.publish(topic='test', payload='test')

if __name__ == '__main__':

    uvicorn.run(app=create_app(), access_log=False)

Seems like a worry-free solution, The disadvantage is if routing is not restricted, concurrency will lead to too many connections.
import uvicorn
import asyncio

from fastapi import FastAPI
from aiomqtt import Client, MqttError, ProtocolVersion

app = FastAPI()

@app.on_event('startup')
async def startup():
    asyncio.create_task(consume_mqtt())

@app.on_event("shutdown")
async def shutdown():
    ...

async def consume_mqtt():
    reconnect_interval = 5
    while True:
        try:
            async with Client(hostname="localhost") as client:
                await client.subscribe('vehicles/v1')
                await client.publish(topic='vehicles/v1', payload='test')
                async with client.messages() as messages:
                    async for message in messages:
                        await asyncio.sleep(0.1)
                        print(message.payload)
        except MqttError as e:
            print(e)
            await asyncio.sleep(reconnect_interval)

@app.get("/qwer")
async def q():
    async with Client(hostname="localhost") as client:
        await client.publish(topic='vehicles/v1', payload='test')

    return "success"

if __name__ == '__main__':
    uvicorn.run(app=app, access_log=False)

I also have this issue where I have a consumer and producer task and At first I got aiomqtt.error.MqttReentrantError: The client context manager is reusable, but not reentrant. and realized this was from me defining a second async with client within one of my tasks, but the producer and consumer both still worked fine.
However, in attempting to correct this error and removing the redundant async with client I get the same error as the author.
I am not (yet) using FastAPI with my service but the intention was to do so in future so I am trying to follow this pattern in anticipation.
Your proposed solution @vvanglro would not work for me as I am connecting to IoT Core which only allows a single connection per Client ID, so I wish to re-use the same Client and therefore client ID for both subscribe and publish operations.
I'm using aiomqtt for the first time today and am also fairly new to asyncio in general so I may be doing something wrong, but I will just have to use the redundant context manager for now until I can perhaps provide more detail/reproduction steps in addition to the author's.

Hi Dylan,
Maybe the documentation on sharing the connection might help you? From what you wrote I don't believe your problem has the same root cause as this issue. We also have some information specifically on aiomqtt with FastAPI in case you haven't seen that, yet. Let me know if that helps 😋

I was following your Sharing the connection doc already, but with the added complexity of a TaskGroup.
Attached is my reproduction of the issue, cut down as much as I could before losing all semblance of representing my actual code. The jist is that I have two classes, one for handling messages to and from an MQTT broker and another for to and from RabbitMQ. That is why I have a TaskGroup, to subscribe to both brokers and forward messages from one to the other. I've mocked out the MQ side in this base case.
Thankfully, I think I found the issue. (Or at least the most visible one. I know not what other sins I may be committing with your library. For one I should probably now move the retry loop to main() to go along with the context manager.)
Running the code as-is I get an error on publishing that the client isn't connected, however, simply switching the ordering of the context managers, the TaskGroup and mqtt_client in main(), that solves my issue! Not sure if this is expected or not.
My issue may now be unrelated to the original author's issue, but I along with them and perhaps others could probably benefit from some documentation on what is the best practice for this kind of two-way communications scenario, or any potential gotchas. The sharing the connection demo is just a simple fire and forget two publish calls, not a long-running example encompassing all your guides like for handling Reconnection or parallel processing. I guess I had issues merging them all together myself.
I thought my code was close enough to your Listening without blocking example, as my TaskGroup is on the outset as well, but perhaps this has some gotchas when trying to share the connection as well. Or just let me know this was some asyncio rookie mistake and I can go kick rocks. 😂
import asyncio
import logging
from asyncio import sleep as AsyncSleep
from functools import partial
from time import time
from typing import Any, Awaitable, Callable

import aiomqtt
from aiomqtt import Client as MQTTClient
from aiomqtt import MqttError
from aiomqtt.client import Message as MQTTMessage
from aiomqtt.types import PayloadType

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

class MqttDao:
    def __init__(self):
        self.client = aiomqtt.Client("test.mosquitto.org")

    async def start(self, client: aiomqtt.Client, callback: Callable[[MQTTMessage], Awaitable[Any]]):
        retry_delay = 0 - 5
        while True:
            try:
                # FIXME - This redundant context manager is illegal: https://sbtinstruments.github.io/aiomqtt/reconnection.html#reconnection
                # async with client:
                async with client.messages() as messages:
                    logger.info('[start] Subscribing to topics temperature/outside and humidity/inside...')

                    await client.subscribe('temperature/outside', qos=1)
                    await client.subscribe('humidity/inside', qos=1)

                    retry_delay = 0 - 5

                    async for message in messages:
                        logger.debug(f'[start] Invoking callback for message from topic {message.topic}')
                        await callback(message)
            except MqttError:
                logger.exception('[start] An MqttError occured...')
                if retry_delay <= 30:
                    retry_delay += 5
                logger.info(f"[start] Reconnecting to MQTT broker in {retry_delay} seconds ...")
                await AsyncSleep(retry_delay)
            except Exception as e:
                logger.exception('[start] An unknown exception occurred...')
                raise e

    # Publishes a given payload to our MQTT broker with the given topic and QoS level
    async def publish_message(self, client: MQTTClient, topic: str, payload: PayloadType, qos: int):
        logger.debug(f"[publish_message] Publishing MQTT message to topic '{topic}' with qos {qos}: {payload}")
        await client.publish(topic=topic, payload=payload, qos=qos)
        logger.debug(f"[publish_message] Successfully published MQTT message to topic '{topic}' with qos {qos}: {payload}")

class MqDao:
    def __init__(self):
        pass

    async def start(self, callback: Callable[[MqttDao, MQTTClient, dict], Awaitable[Any]], mqtt_dao: MqttDao, mqtt_client: MQTTClient):
        while True:
            logger.info('[start] Sleep for 2 seconds instead of waiting on a message from RabbitMQ...')
            await AsyncSleep(2)
            await callback(mqtt_dao, mqtt_client, {'body': 'Mock message from mock broker!', 'routing_key': 'humidity.inside'})

    async def publish_message(self, body: bytes, routing_key: str, timestamp: float = time()):
        logger.info('[publish_message] Sleep for 0.25 seconds instead of actually sending a message to RabbitMQ...')
        await AsyncSleep(0.25)

# Callback to be invoked by MQTT client responsible for converting MQTT messages into MQ Messages to be published
async def inbound_consumer(mq_dao: MqDao, mqtt_message: MQTTMessage):
    payload: bytes = mqtt_message.payload  # type: ignore - Our payloads are bytes not floats
    routing_key = mqtt_message.topic.value.replace('/', '.')  # Slash delimiters in MQTT are dots in AMQP
    await mq_dao.publish_message(body=payload, routing_key=routing_key)

# Callback to be invoked by AMQP client responsible for converting MQTT messages into MQ Messages to be published
async def outbound_consumer(mqtt_dao: MqttDao, mqtt_client: MQTTClient, amqp_message: dict):
    logger.debug(f"[outbound_consumer] Received MQ message with routing key '{amqp_message['routing_key']}': {amqp_message['body']}")
    topic = amqp_message['routing_key'].replace('.', '/')  # type: ignore - We will always have a routing key defined
    await mqtt_dao.publish_message(client=mqtt_client, topic=topic, payload=amqp_message['body'], qos=1)

def init():
    mqtt_dao = MqttDao()
    mq_dao = MqDao()

    return (mqtt_dao, mq_dao)

async def main():
    (mqtt_dao, mq_dao) = init()

    try:
        async with asyncio.TaskGroup() as tg:
            async with mqtt_dao.client as mqtt_client:
                inbound_producer_task = tg.create_task(mqtt_dao.start(mqtt_client, partial(inbound_consumer, mq_dao)))
                outbound_consumer_task = tg.create_task(mq_dao.start(outbound_consumer, mqtt_dao, mqtt_client))
        logger.info('[main] Producer and consumer tasks have now finished: '
                    + f'{inbound_producer_task.result()}, {outbound_consumer_task.result()}')
    except (asyncio.CancelledError, Exception) as e:
        logger.exception('[main] An error occured during the consumer TaskGroup.')
        raise e

asyncio.run(main())

That's a fun one 😄 I simlified your example down to this, which still gives the same error, and still let's us switch the TaskGroup line with the async with client line to fix it:
import asyncio
import aiomqtt

class ABC:
    async def start(self, client):
        await asyncio.sleep(1)
        await client.publish(topic='foo')

class XYZ:
    async def start(self, client):
        await asyncio.sleep(1)
        await client.publish(topic='bar')

async def main():
    client = aiomqtt.Client("test.mosquitto.org")
    async with asyncio.TaskGroup() as tg:
        async with client:
            task_1 = tg.create_task(ABC().start(client))
            task_2 = tg.create_task(XYZ().start(client))

asyncio.run(main())

The asyncio documentation describes a TaskGroup as "An asynchronous context manager holding a group of tasks. Tasks can be added to the group using create_task(). All tasks are awaited when the context manager exits." (emphasis mine)
The problem here is that both task_1 and task_2 are only started inside the Client context manager, but they're not awaited inside its context, they're awaited when the TaskGroup exits.
So what happens is something like:

Enter TaskGroup context
Enter Client context (connect to broker)
Start the two publish tasks
Exit Client context (disconnect from broker)
Exit TaskGroup context (await the two publish tasks, which now find themselves with a disconnected client)

Does that make sense? I hope that also explains why switching the two with statements fixes the error 😋

... could probably benefit from some documentation on what is the best practice for this kind of two-way communications scenario

This is out of scope for our docs in my opinion. We're explicitely focusing on small examples to keep them understandable and to cover the most amount of use cases.

Ahhhhh, I believe that makes sense to me! You're a legend for this response.
If I understand correctly from your explanation and some additional reading, what you're saying is that the client connects when entering its context, but since nothing is being awaited inside its context (because no awaits occur until reaching the end of the outer context, the TaskGroup), the code is able to progress to the end of the client's context manager, which triggers a disconnect.
Context managers are cool, but I've never coded one before myself. Looking at the aiomqtt source code for the magic aenter/aexit functions helped me understand further. It's nice to be back to Python development so I can learn how async is done here after only doing it myself with Typescript for several years.
I agree that this seems beyond the scope of the docs, and hope your excellent response may help another confused individual in future digging through Issues like me. 😄


Scales the horizontal velocity according to the wall slope in 2D

Fix: #55121
The horizontal motion_velocity is now scaled proportionally to the slope.
Before:

After:

To illustrate the issue that this PR addresses, I set up a character with a very slow acceleration to show clearly the issue.
Before: when you jump against a wall and pass it, your velocity continue to grow, the wall doesn't affect the horizontal velocity:

After: the velocity is scaled, so when you pass the wall, the acceleration restart here from 0:


GUAC-340: Provide credentials through configurations via TokenFilter. Refactor use of user IDs to new AuthenticatedUser as needed.


Using branch name as "ref" in compose.yaml throws an error

Steps

Create a compose.yaml file including a package repo

name: plasma
version: 1.0.0
dependencies:
- package: plasma-core
  source:
    type: git
    ref: master
    url: https://XXX.XXX.XXX/XXX/XXX.git

Current

./launchr compose throws error:

Error: couldn't find remote ref "refs/tags/master"

Interesting enough, removing ref: master from compose.yaml allows to fetch package from git master branch but that trick won't work for other branches

Expected

It should be possible to specify branch name as ref to fetch git package from

Todo

Implement branch ref support

Tested ok :ok_hand:


Strange behavior with enum in composite unique key in a table without primary key

I've a very strange table:
CREATE TABLE `accounts` (
  `user_id` int NOT NULL,
  `type` enum ('free', 'vip') NOT NULL DEFAULT 'free',
  `money` int(8) NOT NULL DEFAULT 0,
  UNIQUE KEY `user_id_type` (`user_id`, `type`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

Usually, the UNIQUE KEY is should be declared as primary key instead, but somehow it's declared as UNIQUE KEY only, and the table has no other keys.
And if I create this table in go-mysql-server v0.12.0, and run the following query
mysql> insert into `accounts` (user_id, `type`, money)values(1,"free",1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from `account`;
+---------+------+-------+
| user_id | type | money |
+---------+------+-------+
|       1 | free |     1 |
+---------+------+-------+
1 row in set (0.00 sec)

mysql> select * from `accounts` where user_id=1 and `type`="free";
Empty set (0.00 sec)

It failed to return result when type is in where condition.
I test the same table & query on on MySQL 5.7.35, although it works:
mysql> select * from `acc` where user_id=1 and `type`="free";
+---------+------+-------+
| user_id | type | money |
+---------+------+-------+
|       1 | free |     1 |
+---------+------+-------+
1 row in set (0.00 sec)

but it seems that MySQL 5.7.35 consider the unique key as primary key:
mysql> desc accounts;
+---------+--------------------+------+-----+---------+-------+
| Field   | Type               | Null | Key | Default | Extra |
+---------+--------------------+------+-----+---------+-------+
| user_id | int(11)            | NO   | PRI | NULL    |       |
| type    | enum('free','vip') | NO   | PRI | free    |       |
| money   | int(8)             | NO   |     | 0       |       |
+---------+--------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

It works if unique key is declared as primary in go-mysql-server v0.12.0, it also works if type is not enum but int.
I suppose this is a extreme corner case and may not worth fixing, but would like to report it here first in case it's related to some other hidden but related to enum support.

Great bug. We'll get on this today.

Hey @Wuvist, thanks for the bug! I'll reproduce this and get a fix out.
Just curious, what backend are you using for go-mysql-server? Dolt?

MySQL says:

If you do not have a PRIMARY KEY and an application asks for the PRIMARY KEY in your tables, MySQL returns the first UNIQUE index that has no NULL columns as the PRIMARY KEY.

From the above, the problem seems to be in the describe command. I will update the behavior to match MySQL.

I think this is also a bug @druvv:
mysql> select * from `accounts` where user_id=1 and `type`="free";
Empty set (0.00 sec)

We should return a row here.

Hey @Wuvist, I couldn't reproduce this issue using Dolt as a backend. Are you by chance running go-mysql-server with the memory engine?

Hey @Wuvist, I couldn't reproduce this issue using Dolt as a backend. Are you by chance running go-mysql-server with the memory engine?

Yup, I'm using go-mysql-server with the memory engine for unit testing in my go application and encounter this issue.
I didn't try Dolt.

Another related finding in go-mysql-server's current main branch ( commit `c5b2d44) .
Consider the following table
CREATE TABLE `users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `hobby` enum ('swimming', 'running', 'singing') NOT NULL DEFAULT 'swimming',
  `sports` SET('SWIM', 'TENNIS', 'BASKETBALL', 'FOOTBALL') NOT NULL DEFAULT ("SWIM, FOOTBALL") ,
  `sports2` SET('SWIM', 'TENNIS', 'BASKETBALL', 'FOOTBALL') NOT NULL DEFAULT "SWIM,FOOTBALL",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

The default value stored in information_schema is wrong:
select c.column_name, 	c.column_default from information_schema.columns as c where table_name = 'users'
returns:
id	NULL
hobby	1
sports	'SWIM, FOOTBALL'
sports2	9

whereas it returns
id	NULL
hobby	swimming
sports	"SWIM, FOOTBALL"
sports2	SWIM,FOOTBALL

in current v0.12.0 release.

Another finding maybe related related.
Consider the following table:
CREATE TABLE `users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `hobby` enum ('swimming', 'running', 'singing') NOT NULL DEFAULT 'swimming',
  `sports` SET('SWIM', 'TENNIS', 'BASKETBALL', 'FOOTBALL') NOT NULL DEFAULT ("SWIM, FOOTBALL") ,
  `sports2` SET('SWIM', 'TENNIS', 'BASKETBALL', 'FOOTBALL') NOT NULL DEFAULT "SWIM,FOOTBALL",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

In existing v0.12.0 release, querying information_schema
select c.column_name, c.column_default from information_schema.columns as c where table_name = 'users'
will return:
id	NULL
hobby	swimming
sports	"SWIM, FOOTBALL"
sports2	SWIM,FOOTBALL

which is correct.
But in current main branch ( commit `c5b2d44) .
it returns:
id	NULL
hobby	1
sports	'SWIM, FOOTBALL'
sports2	9

The default values stored in information_schema are wrong:

hobby: should be swimming
sports: should be double quoted "SWIM, FOOTBALL" , instead of single quoted
sports2: should be SWIM,FOOTBALL


Search results are dense block of text

As mentioned in #122 search results are presented as quite a dense block of text which isn't very eye friendly. It would be even less eye friendly if the LIMIT value for returned results was raised. Also the locations are presented at the end of the inscription text in () but some inscriptions also contain () so there is no clear separation of inscription text from location.
Current

Proposed alternative

The location is labelled as such to make it clear that this is a separate piece of information, but no label on the inscription because that's the thing people are expecting to get back from the search.

Looks good! Do it!


Update to new version of cairo-lang

Upgraded the cairo-lang version to 0.10.3 to match the sequencer address of the tests in the devnet.

Codecov Report

Merging #182 (f1e319a) into main (f806e0f) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #182   +/-   ##
=======================================
  Coverage   81.63%   81.63%
=======================================
  Files          13       13
  Lines         697      697
=======================================
  Hits          569      569
  Misses        128      128

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Fix the casing of activities in ConversationHistory

Fix the casing of activities in ConversationHistory

Pull Request Test Coverage Report for Build 379

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 50.861%

Totals

Change from base Build 371:
0.0%

Covered Lines:
3729

Relevant Lines:
6233

💛  - Coveralls


Fix 404 links to samples.

Description
Name of sample: HolographicFaceTracking

Sample links show as 404's in docs live. Changing to relative url link.

https://github.com/MicrosoftDocs/windows-uwp/issues/2682
Testing

Type of change

[ X] Bug fix
[ ] New feature
[ ] Porting to new language

Supported platforms
Minimum OS version: (example: 18362)

[ ] All UWP platforms
[ ] Desktop
[ ] Holographic
[ ] IoT
[ ] Xbox
[ ] 10X

Supported languages

[ ] C#
[ ] C++/WinRT

Additional remarks

#sign-off

The links are correct when viewed from the repo itself.


[nrf noup] boards: nordic: Turn off MRAM suspend for NRF54H20 DK

Turn off suspending MRAM for NRF54H20 DK
This change is required so sections of code
depending on critical timings will not have unacceptable latency.

I'm a little late for the review, but this change seems incorrect and I hope it will be reverted.
The time-critical code should use pm_policy_latency_request_add() and the implementation of this function on selected platforms can decide to disable some power saving features like MRAM sleep. We should not disable power savings by default :)

Adding C files to boards makes it virtually impossible to create custom boards based on this soc that work correctly. This change should be reverted and code moved elsewhere.


Converter inheritance

We had a few converter classes that performed similar logic so we refactored the code and put the logic in a generified base-class and then only a few lines-of-code in each concrete converter implementation (passing in lambda functions via constructor call).
However, this didnt work out as expected and we noticed class-cast exceptions. After running this through the debugger we could nail this down to this particular code:
https://github.com/neo4j/neo4j-ogm/blob/v3.2.16/core/src/main/java/org/neo4j/ogm/metadata/FieldInfo.java#L318
Since it uses Class#getDeclaredMethods it will exclude inherited methods from the parent class.
We are using OGM 3.2.11

Hi @3rrki Thanks for reporting this. I see the issue and I have an idea, at which later step might go wrong, but I cannot reproduce it. Can you might share your domain (excerpt) plus the converter? Thanks.

Hi @michael-simons ,
Here are the code that we used earlier. Tried to remove anything that were irrelevant for this issue.
In our entity class, we had someting like this
    @Property("abc")
    @Convert(ABCConverter.class)
    private List<ABC> abcs;

The converter class extends from the generic ListConverter
public class ABCConverter extends ListConverter<ABC> {

    public ABCConverter() {
        super(ABC::stringify, ABC::of);
    }
}

The generified list converter:
import org.neo4j.ogm.typeconversion.AttributeConverter;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

public abstract class ListConverter<T> implements AttributeConverter<List<T>, String> {

    public static final char COMMA = ',';

    private static final char ESCAPE_CHAR = '\\';

    private final Function<T, String> toString;

    private final Function<String, T> fromString;

    private final char delimiter;

    public ListConverter(Function<T, String> toString, Function<String, T> fromString) {
        this(toString, fromString, COMMA);
    }

    public ListConverter(Function<T, String> toString, Function<String, T> fromString, char delimiter) {
        this.toString = toString;
        this.fromString = fromString;
        this.delimiter = delimiter;
    }

    @Override
    public String toGraphProperty(List<T> value) {
        return stringify(value, this.toString, this.delimiter);
    }

    @Override
    public List<T> toEntityAttribute(String value) {
        return listify(value, ArrayList::new, this.fromString, this.delimiter, true);
    }

    public static <TYPE> String stringify(List<TYPE> list, Function<TYPE, String> converter, char delimiter) {
        if (list == null || list.isEmpty()) {
            return null;
        }
        StringBuilder s = new StringBuilder();
        for (Iterator<TYPE> itr = list.iterator(); itr.hasNext(); ) {
            TYPE curr = itr.next();
            char[] ch = converter.apply(curr).toCharArray();
            for (int index = 0; index < ch.length; index++) {
                if (ch[index] == ESCAPE_CHAR || ch[index] == delimiter) {
                    s.append(ESCAPE_CHAR);
                }
                s.append(ch[index]);
            }
            if (itr.hasNext()) {
                s.append(delimiter);
            }
        }
        return s.toString();
    }

    public static <TYPE> List<TYPE> listify(String value,
                                            Supplier<List<TYPE>> listSupplier,
                                            Function<String, TYPE> converter,
                                            char delimiter) {
        return listify(value, listSupplier, converter, delimiter, true);
    }

    public static <TYPE> List<TYPE> listify(String value,
                                            Supplier<List<TYPE>> listSupplier,
                                            Function<String, TYPE> converter,
                                            char delimiter,
                                            boolean omitNulls) {
        if (value == null) {
            return null;
        }
        final List<TYPE> ret = listSupplier.get();
        final char[] ch = value.toCharArray();
        final int sz = ch.length;
        boolean escape = false;
        StringBuilder buf = new StringBuilder();
        final Consumer<String> consumer = str -> {
            TYPE convertedValue = converter.apply(str);
            if (!omitNulls || convertedValue != null) {
                ret.add(convertedValue);
            }
        };
        for (int i = 0; i < sz; i++) {
            if (!escape && ch[i] == ESCAPE_CHAR) {
                escape = true;
                continue;
            }
            if (!escape && ch[i] == delimiter) {
                consumer.accept(buf.toString());
                buf.setLength(0);
            } else {
                buf.append(ch[i]);
            }
            escape = false;
        }
        if (buf.length() > 0) {
            consumer.accept(buf.toString());
        }
        return ret;
    }
}

Class ABC is just for this example
public class ABC {

    private String foo;

    private String bar;

    public ABC(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    public static ABC of(String str) {
        // parse str ...
        return str != null ? new ABC(str, "") : null;
    }

    public static String stringify(ABC abc) {
        return abc != null ? abc.foo : null;
    }
}

Thanks, I can work with that!

I see an exception while loading…
Caused by: java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap')
	at org.neo4j.ogm.domain.convertible.numbers.AbstractNumberListConverter.toEntityAttribute(AbstractNumberListConverter.java:10)
	at org.neo4j.ogm.metadata.FieldInfo.write(FieldInfo.java:379)
	at org.neo4j.ogm.context.GraphEntityMapper.writeProperty(GraphEntityMapper.java:305)
	at org.neo4j.ogm.context.GraphEntityMapper.setProperties(GraphEntityMapper.java:268)
	at org.neo4j.ogm.context.GraphEntityMapper.mapNodes(GraphEntityMapper.java:228)
	at org.neo4j.ogm.context.GraphEntityMapper.mapContentOf(GraphEntityMapper.java:154)
	... 35 more

Can you confirm this or is this another bug?

@michael-simons Yes that is the same exception I noticed as well.
The exception was difficult to understand at first, but all boils down to the line within the FieldInfo class

I have pushed a commit and opened a PR that should fix your scenario. Maybe you are able to test this with a snapshot?

Great! Fast responses! I will give the snapshot a try.

In case you cannot build this yourself, here are the changed jars.
neo4j-ogm-core-3.2.17-SNAPSHOT.zip

This will be part of the 3.2.17 release upcoming next week. Cheers and thanks again for contributing!


Avoid AV detection

System Details

OS: Win10 20H2
Thorium Version: 122 Revision 3, WIN32_SSE2 version

Problem
Win Defender detects it as a virus, WACATAC.H!ML for no reason. M122.0.6261.158 version does not detect.
Screenshots
Win Defender + Chrome

Old M122.0.6261.158 version

Additional Notes
Not a big issue, just please fix it...

You are currently using the win10 system, you may not need to use the version in this repo, the version in this repo is prepared for systems before win10.
You may want to follow and use the version in this repo
https://github.com/Alex313031/thorium-win
I'll report the false positive to Microsoft and let you know the results when they're available.

alr thx
On Mon, 29 Apr 2024 at 03:17, Ho Cheung @.***> wrote:

You are currently using the win10 system, you may not need to use the
version in this repo, the version in this repo is prepared for systems
before win10.
You may want to follow and use the version in this repo
https://github.com/Alex313031/thorium-win
I'll report the false positive to Microsoft and let you know the results
when they're available.
—
Reply to this email directly, view it on GitHub
https://github.com/Alex313031/thorium-legacy/issues/74#issuecomment-2081784669,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A47M6DKUAUSVZYJND3VZ6JDY7WUSZAVCNFSM6AAAAABGQJ5LXCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOBRG44DINRWHE
.
You are receiving this because you authored the thread.Message ID:
@.***>

--
The Okmeque1
Okmeque1 Corporation

Microsoft reply
`Analyst comments:
At this time, the submitted files do not meet our criteria for malware or potentially unwanted applications. The detection has been removed. Please follow the steps below to clear cached detections and obtain the latest malware definitions.

Open command prompt as administrator and change directory to c:\Program Files\Windows Defender
Run “MpCmdRun.exe -removedefinitions -dynamicsignatures”
Run "MpCmdRun.exe -SignatureUpdate"

Alternatively, the latest definition is available for download here: https://docs.microsoft.com/microsoft-365/security/defender-endpoint/manage-updates-baselines-microsoft-defender-antivirus`

Thank you.
On Tue, 30 Apr 2024 at 07:06, Ho Cheung @.***> wrote:

Microsoft reply
`Analyst comments:
At this time, the submitted files do not meet our criteria for malware or
potentially unwanted applications. The detection has been removed. Please
follow the steps below to clear cached detections and obtain the latest
malware definitions.

Open command prompt as administrator and change directory to
c:\Program Files\Windows Defender
Run “MpCmdRun.exe -removedefinitions -dynamicsignatures”
Run "MpCmdRun.exe -SignatureUpdate"

Alternatively, the latest definition is available for download here:
https://docs.microsoft.com/microsoft-365/security/defender-endpoint/manage-updates-baselines-microsoft-defender-antivirus`
—
Reply to this email directly, view it on GitHub
https://github.com/Alex313031/thorium-legacy/issues/74#issuecomment-2084447747,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A47M6DJF45TJYYPFFCQKG7DY74YEVAVCNFSM6AAAAABGQJ5LXCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOBUGQ2DONZUG4
.
You are receiving this because you authored the thread.Message ID:
@.***>

--
The Okmeque1
Okmeque1 Corporation


NoSuchMethod error on coursier.package$Resolution$.apply(...)

I've suddenly been bit by this on multiple projects over the past month. Any idea what the problem might be? Leftover binaries? Conflicting Coursier plugin versions (between project and global installations)?
[error] (scalaDebuggerDocs/*:coursierResolution) java.lang.NoSuchMethodError: coursier.package$Resolution$.apply(Lscala/collection/immutable/Set;Lscala/collection/immutable/Set;Lscala/collection/immutable/Map;Lscala/collection/immutable/Set;Lscala/collection/immutable/Map;Lscala/collection/immutable/Map;Lscala/collection/immutable/Map;Lscala/Option;Lscala/Option;)Lcoursier/core/Resolution;

I've been getting some of those when the sbt-coursier version was conflicting with the one from sbt-ensime... Ensuring everything pulls the same coursier version solved the issue.

Yep, that was it. My project had one version of Coursier while sbt-ensime was bringing in another.


Raw err print is hard to troubleshoot

This'll at least give us an idea where things are failing in some cases.
The error I was getting was "Validation Error" without this, and it took
me a moment to figure out where it was coming from.

I think we should just remove the auto update in favor of brew upgrade deploy https://github.com/remind101/deploy/issues/33

Other than that, :+1:

Yeah, that definitely sounds good to me.  Auto-update always feels sketchy to me :)


Dropped default outsideClickIgnoreClass, making this now opt-in

As discussed in other PR - this is unfortunately a breaking change.

Okay, so: why is this change necessary? Is there something broken that this PR fixes, or is it simply a convention change that has the same effect as before? (in which case I'd rather keep things as they were)

Nothing neccessary - just a short circuit for next check which is rather a more specialized case (ignoring certain elements by class name) than a general one.
Which would also out of the box prevent ppl from bumping into IE~ issue. I've proposed it here shortly after/before v6 release, wanted to make a quick PR out of it. Feel free to discard it if u feel its right thing to do.

Yeah I think I'll close this for now, maybe something to revisit for a future version.


Any way to extract the cause of a NetworkError when attempting to fetch a resource?

I have some code like:
isomorphicFetch(url, options)
    .then(
      (response) => {
        // ... check status, do something for ok, do something otherwise
      },
      (error) => {
       // ... some network issue with the call
      }
    );

I have an issue with the error handler, more exactly with the error parameter. It has no information whatsoever about what went wrong. All I can get from it is:

TypeError: NetworkError when attempting to fetch resource.

I have some code deployed in production who fails when calling a backend server with the above code and enters the error handler. The backend server actually responds correctly but then something happens to the response. The same applications deployed locally and in other environments have absolutely no issue, they work fine.
I cannot debug this because in lack of details of what went wrong. I can't even inspect network traffic since everything is over HTTPS. It's a complete dead end.
Is there a way to expose the cause of the error? Get some more details? Debug this somehow? Why isn't the error parameter exposing some cause?

I have the same problem. When error 401 occurs I get just:
TypeError: Failed to fetch(…) - in Chrome
TypeError: Network request failed - in IE11
etc.
And there is no way that I can figure out that an error was caused because user was not authenticated (session expired) so I can not redirect user to the login page when session expires.
Is there a way to figure out which error occurred (since it does not enter the (response) => {...} function)?

Why isn't the error parameter exposing some cause?

Allegedly for security reasons or spec adherence.


maint: modernize devDependencies

Switch to vitest
Switch to fetch-mock@11 from custom fork
Remove semantic-release from devDeps

Resolves #ISSUE_NUMBER

Before the change?

After the change?

Pull request checklist

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

Does this introduce a breaking change?

Please see our docs on breaking changes to help!

[ ] Yes
[ ] No

unfortunately i am not able to approve

Now that conflicts are resolved this is good to go


pull request for e2e test at 12/26/2016 13:45:16

:white_check_mark: Validation status: passed
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


fix: if offset is less than limit, set limit to offset

from_list has handled, but from_query not
https://github.com/absinthe-graphql/absinthe_relay/blob/c3c85ca88adb8e925e846a515f75d93224b1f17d/lib/absinthe/relay/connection.ex#L338-L342

@benwilson512 Could you have a look, I have no idea that the CI breaks. Tests all passed on my laptop.

@benwilson512 Could you have a look this PR?


Update setup.sh

Fixed 'upstream' bug.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


add toString() to Notification + fix setActor()

to help debug FINERACT-828 flaky test

StorageTest failure happened again in #881, so I've exceptionally self merged this trivial change.
@xurror FYI


Mvc Application throws on startup due to nr of inotify instances

UseMvc throws because the max nr of inotify instances has been reached (see stacktrace below).
Perhaps this can change to respect "DOTNET_USE_POLLING_FILE_WATCHER"?
And/Or, maybe the exception can be caught (with a warning) and the application can continue starting.
Related issue: https://github.com/aspnet/Extensions/issues/1731.
cc @natemcmaster
Application startup exception: System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
   at System.IO.FileSystemWatcher.StartRaisingEvents()
   at System.IO.FileSystemWatcher.StartRaisingEventsIfNotDisposed()
   at System.IO.FileSystemWatcher.set_EnableRaisingEvents(Boolean value)
   at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.TryEnableFileSystemWatcher()
   at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(String filter)
   at Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionDescriptorChangeProvider.GetChangeToken()
   at Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer, Action changeTokenConsumer)
   at Microsoft.AspNetCore.Mvc.Internal.ActionDescriptorCollectionProvider..ctor(IEnumerable`1 actionDescriptorProviders, IEnumerable`1 actionDescriptorChangeProviders)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient(TransientCallSite transientCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action`1 configureRoutes)
   at src.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) in /opt/app-root/src/Startup.cs:line 61
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
crit: Microsoft.AspNetCore.Hosting.Internal.WebHost[6]
      Application startup exception
System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
   at System.IO.FileSystemWatcher.StartRaisingEvents()
   at System.IO.FileSystemWatcher.StartRaisingEventsIfNotDisposed()
   at System.IO.FileSystemWatcher.set_EnableRaisingEvents(Boolean value)
   at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.TryEnableFileSystemWatcher()
   at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(String filter)
   at Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionDescriptorChangeProvider.GetChangeToken()
   at Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer, Action changeTokenConsumer)
   at Microsoft.AspNetCore.Mvc.Internal.ActionDescriptorCollectionProvider..ctor(IEnumerable`1 actionDescriptorProviders, IEnumerable`1 actionDescriptorChangeProviders)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient(TransientCallSite transientCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action`1 configureRoutes)
   at src.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) in /opt/app-root/src/Startup.cs:line 61
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)

In 2.2, applications that run with environment = Production shouldn't trigger the file watcher. Additionally, this code path doesn't appear by default in 3.0 - you have to add a package and opt in to runtime compilation. PhysicalFilesWatcher does have a odd behavior where turning on polling doesn't preclude it from using the FileSystemWatcher. I had a go at cleaning that up at some point, but seeing that it's not on by default it really wasn't pertinent to fix.

@pranavkm @mkArtakMSFT feel free to close if this won't be fixed for 2.1.


change transcript sequence length to protein sequence length for translation?

SPAC977.02-transcript-sequence length:448
MALLKKINTQVNRIMKNSSLVQNICFDRVPLFIPRLSLTVKYCLAVKLLIYLLYCWYIYS
EVPSASSKFRSFTFGCVVVYHNKFFPRFIRTHSINSIRTFSKFQVIILFSIEKVTRSESK
NHSYSKTDISDLHQGYNNPPSRFISR*

The length not including the stop codon I guess?

Yep, should be the already reported
Product size	104 aa,  (hmm maybe that should say protein length)

on the old site its

Product Size	297aa, 34.36 kDa
which makes sense as both are "sizes"

Product Size 297aa, 34.36 kDa

I copied that for v2.

change

SPBC11B10.09-transcript-sequence length:908
to say
SPBC11B10.09-protein-sequence length:908
for proteins

That's fixed now if you reload.


add scene query buffer size to sphere pointer inspector

Overview
There was no way to edit the scene query buffer size for grab pointer in editor. This adds that field to the inspector.

Changes

Fixes: #6878

Verification

This optional section is a place where you can detail the specific type of verification
you want from reviewers. For example, if you want reviewers to checkout the PR locally
and validate the functionality of specific scenarios, provide instructions
on the specific scenarios and what you want verified.
If there are specific areas of concern or question feel free to highlight them here so
that reviewers can watch out for those issues.
As a reviewer, it is possible to check out this change locally by using the following
commands (substituting {PR_ID} with the ID of this pull request):
git fetch origin pull/{PR_ID}/head:name_of_local_branch
git checkout name_of_local_branch

/azp run


Obj-c (or swift) cocoapod version?

Do you have any plan about making an obj-c or swift version of this library distributed via cocoapod?
Thank you

Not any time soon, I'm sorry. This is very far from being possible for us at the moment. It is already difficult for us to stay up to date with the repositories we have.
We might at some point provide links to other repositories containing Tink integrations, so if someone wants to provide this we would be interested in hearing about it.


[TREE] add interaction constraints

Add interaction constraints as mentioned in #3135 and as previously tried in #3448 before I stuffed up the commits while trying to rebase.  At the moment both interaction and monotonic constraints cannot be applied at the same time.  But will be able to add in this functionality once #3429 goes through.

@BlueTea88 Can you write some tests in R? See R-package/tests/testthat directory for examples. Let me know if you need help with this.

Here is a sample code for accepting [[1,2],[3,4,5]] as input:
#include <dmlc/json.h>
#include <string>
#include <vector>
#include <sstream>

int main(void) {
  std::vector<std::vector<int>> int_constraint;
  std::istringstream iss("[[1,2],[3,4,5]]");

  dmlc::JSONReader reader(&iss);
  reader.Read(&int_constraint);

  for (const auto& constraint : int_constraint) {
    std::cout << "Constraint group: ";
    for (int e : constraint) {
      std::cout << e << ",";
    }
    std::cout << std::endl;
  }
  return 0;
}

@hcho3 OK, will try to add the things you mentioned

Codecov Report

Merging #3466 into master will increase coverage by 4.4%.
The diff coverage is 22.47%.

@@             Coverage Diff             @@
##             master    #3466     +/-   ##
===========================================
+ Coverage     45.69%   50.09%   +4.4%
  Complexity      188      188
===========================================
  Files           166      172      +6
  Lines         13168    14015    +847
  Branches        445      457     +12
===========================================
+ Hits           6017     7021   +1004
+ Misses         6947     6769    -178
- Partials        204      225     +21

Impacted Files
Coverage Δ
Complexity Δ

include/xgboost/tree_model.h
33.66% <ø> (ø)
0 <0> (ø)
:arrow_down:

src/tree/param.h
72.86% <100%> (+1.09%)
0 <0> (ø)
:arrow_down:

src/tree/split_evaluator.cc
19.4% <15.85%> (-1.89%)
0 <0> (ø)

src/data/simple_csr_source.cc
85.91% <0%> (-12.68%)
0% <0%> (ø)

src/predictor/cpu_predictor.cc
64.93% <0%> (-3.56%)
0% <0%> (ø)

src/common/host_device_vector.cc
54.16% <0%> (-2.36%)
0% <0%> (ø)

python-package/xgboost/core.py
82.43% <0%> (-1.74%)
0% <0%> (ø)

tests/cpp/data/test_metainfo.cc
95.83% <0%> (-1.31%)
0% <0%> (ø)

src/learner.cc
29.04% <0%> (-0.52%)
0% <0%> (ø)

src/c_api/c_api.cc
23.63% <0%> (-0.33%)
0% <0%> (ø)

... and 55 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 a13e29e...1138c48. Read the comment docs.

@BlueTea88 I can help you out with C++ part. Let me review your R test and get back to you.

@BlueTea88 Can you enable "Allow edits by maintainers"? I have a new commit that adds dmlc::JSONReader to the pull request.

@hcho3 I have the "allow edits by maintainers" box checked.  So i'm not sure why its not working.  I've also sent you an invite to be a collaborator in case that can give you more access.

@BlueTea88 Thanks, I was able to push my commit to your repo. The commit adds dmlc::JSONParser to understand constraints in form of [[0,1], [2,3,4]].

OK Thanks.  I will make changes to the other parts.

@khotilov @hcho3 I have updated the R argument so interaction_constraints expects a list of feature IDs instead of column names (so now arguments are no longer dependent on column names being available).  Also updated the R example to be more in line with the R coding style.  Thanks @hcho3 for the changes to the C++ code.

@BlueTea88 @khotilov I think this PR is good to merge, once all lint errors are fixed

@BlueTea88 @khotilov I added a tutorial for feature interaction constraints. Let me know if the explanation makes sense.
Rendered doc: rendered_tutorial.zip

@hcho3 I think it makes sense.  I like the graphs as well.  Just the last line:
To use monotonic constraints, be sure to set the tree_method parameter to either exact or hist.
Is that supposed to be interaction constraints?

@BlueTea88 Yes, let me fix the typo

Looks good to go!
Thanks @BlueTea88 @hcho3


Listed Unsolved Contribution on your Contributions Section

In the Contributions section, you list unsolved issues as contributions. I think it would be better to include the links to these issues after they are solved.
Additionally, it's recommended to use the Markdown link syntax, such as [Contribution Link](http://...), instead of just displaying the URL of the link.

I am so sorry for replying late, I did not get notified by github of your issue. I will remove this one and edit the markdown style


Store fingerprint responses in memory instead of writing files

Proposed change

Fingerprints are by default stored in memory, as suggested in https://github.com/home-assistant/core/pull/74871#discussion_r979521676.
At maximum, 10 responses are stored to generate unlimited memory usage. When retrieving the responses, the current store is cleared.
Fingerprint functionality in CLI still works as before (although file names have been adjusted).
Type of change

[ ] Bugfix (non-breaking change which fixes an issue)
[ ] New feature (which adds functionality to this library)
[ ] Breaking change (fix/feature causing existing functionality to break)
[x] Code quality improvements to existing code or addition of tests

Additional information

This PR fixes or closes issue: fixes #
This PR is related to issue: https://github.com/home-assistant/core/pull/74871

Checklist

[x] The code change is tested and works locally.
[x] Tests have been added to verify that the new code works.

Codecov Report
Base: 100.00% // Head: 100.00% // No change to project coverage :thumbsup:

Coverage data is based on head (4f42b04) compared to base (ed289df).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@            Coverage Diff            @@
##            master      #489   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files           16        16
  Lines         1244      1236    -8
=========================================
- Hits          1244      1236    -8

Flag
Coverage Δ

3.10.x
100.00% <100.00%> (ø)

3.9
100.00% <100.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

bimmer_connected/account.py
100.00% <100.00%> (ø)

bimmer_connected/api/client.py
100.00% <100.00%> (ø)

bimmer_connected/api/utils.py
100.00% <100.00%> (ø)

bimmer_connected/models.py
100.00% <100.00%> (ø)

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

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


feat(headers): add ContentType::octet_stream() constructor

[X] The commit messages match the guidelines in https://github.com/hyperium/hyper/blob/master/CONTRIBUTING.md#git-commit-guidelines

This PR adds an utility function forContent-Type: application/octet-stream header.

Excellent, thank you!


Update to React 0.14

The biggest change is instead of using the portal to render, use renderIntoSubtree (and find out how to access that API too)

This was resolved in v1.0.0


Idea for additional Join methods to contribute

Overview
I am thinking that it would be helpful to have LeftJoin, RightJoin, InnerJoin, and FullOuterJoin methods in MoreLINQ. I know that there is already GroupJoin and FullGroupJoin (from MoreLINQ), but I know sometimes I would like a way to have more control over my joins and have them be flattened.
I am thinking these new methods could return an IEnumerable of an object such as this:
public class JoinResult<TLeft, TRight>
{
    public TLeft Left { get; set; }
    public TRight Right { get; set; }
}

Below is some sample data (to allow this to be a little more concrete) and examples of what I am thinking as far as calling these new methods and the results they would provide:
Sample Data
var people = new List<Person>
{
    new Person { PersonId = 1, Name = "Chris" },
    new Person { PersonId = 2, Name = "Joe" },
    new Person { PersonId = 3, Name = "Mike" }
};
var addresses = new List<Address>
{
    new Address { AddressId = 1, PersonId = 2, Street = "Main St" },
    new Address { AddressId = 2, PersonId = 3, Street = "2nd Ave" },
    new Address { AddressId = 3, PersonId = 4, Street = "Broad St" }
};

LeftJoin
Call
people.LeftJoin(
    addresses,
    p => p.PersonId,
    a => a.PersonId
);

Pseudo-Code Result
[
   {Left = Person1, Right = null},
   {Left = Person2, Right = Address1},
   {Left = Person3, Right = Address2}
]

RightJoin
Call
people.RightJoin(
    addresses,
    p => p.PersonId,
    a => a.PersonId
);

Pseudo-Code Result
[
   {Left = Person2, Right = Address1},
   {Left = Person3, Right = Address2},
   {Left = null, Right = Address3}
]

InnerJoin
Call
people.InnerJoin(
    addresses,
    p => p.PersonId,
    a => a.PersonId
);

Pseudo-Code Result
[
   {Left = Person2, Right = Address1},
   {Left = Person3, Right = Address2}
]

FullOuterJoin
Call
people.FullOuterJoin(
    addresses,
    p => p.PersonId,
    a => a.PersonId
);

Pseudo-Code Result
[
   {Left = Person1, Right = null},
   {Left = Person2, Right = Address1},
   {Left = Person3, Right = Address2},
   {Left = null, Right = Address3}
]

Question/Request
Would this be a welcome contribution to the project right now? I would be happy to work on this in a fork and submit a pull request, but I wanted to first see if you think this would be a positive contribution to the project. Please let me know if you would like to discuss this further. Thank you.

I would like a way to have more control over my joins

Could you expand on that? What kind of extra control would you be able to exercise?

What I mean is having options of what data I get back via the left/right/inner/fullouter, just like when thinking of these type of joins in SQL. The data you get back is flattened out, and determined by which type of join you do. E.g. the left join returns all the Person objects and only the Address objects that match, inner join returns only the Person and Address objects that match, etc. Hopefully I am explaining myself okay.

So the only thing that would be added is flattening?
Why InnerJoin? That one is trivial, built-into LINQ and the result is already flattened:
var people = new[]
{
    new { PersonId = 1, Name = "Chris" },
    new { PersonId = 2, Name = "Joe" },
    new { PersonId = 3, Name = "Mike" }
};

var addresses = new[]
{
    new { AddressId = 1, PersonId = 2, Street = "Main St" },
    new { AddressId = 2, PersonId = 3, Street = "2nd Ave" },
    new { AddressId = 3, PersonId = 4, Street = "Broad St" }
};

var query =
    from person in persons
    join address in addresses on person.PersonId equals address.PersonId
    select new { person.Name, address.Street };

foreach (var e in query)
    Console.WriteLine(e);

// Prints:
// { Name = Joe, Street = Main St }
// { Name = Mike, Street = 2nd Ave }

After looking at yout example, I agree with you that InnerJoin is not needed.
I think for the others (LeftJoin, RightJoin, and FullOuterJoin) flattening is one benefit, as well as having a simple way to say the type of join you want.

Great, so then we are just left with LeftJoin, RightJoin, and FullOuterJoin. Since LeftJoin and RightJoin can be implemented in terms of each other by more or less swapping sides, let's focus our attention on LeftJoin and FullOuterJoin with RightJoin being implemented in terms of LeftJoin.
My next question is, have you thought about how this will work with value types? For example, here's a left outer join of two number sequences using standard join from LINQ:
from x in Enumerable.Range(0, 10)
join y in Enumerable.Range(5, 10) on x equals y into ys
from y in ys.DefaultIfEmpty()
select new { x, y }

This will give the output:
{ x = 0, y = 0 }
{ x = 1, y = 0 }
{ x = 2, y = 0 }
{ x = 3, y = 0 }
{ x = 4, y = 0 }
{ x = 5, y = 5 }
{ x = 6, y = 6 }
{ x = 7, y = 7 }
{ x = 8, y = 8 }
{ x = 9, y = 9 }

What you can see is that the result is rather unsettling as where y was missing, there is now a 0 in the result. Assuming we are working with zero and positive integers only, we can use an overload of DefaultIfEmpty to have -1 mean missing:
from x in Enumerable.Range(0, 10)
join y in Enumerable.Range(5, 10) on x equals y into ys
from y in ys.DefaultIfEmpty(-1)
select new { x, y }

The output will be:
{ x = 0, y = -1 }
{ x = 1, y = -1 }
{ x = 2, y = -1 }
{ x = 3, y = -1 }
{ x = 4, y = -1 }
{ x = 5, y = 5 }
{ x = 6, y = 6 }
{ x = 7, y = 7 }
{ x = 8, y = 8 }
{ x = 9, y = 9 }

The reason I'm going over this is that I think the join methods are going to have signatures that are more complicated than those you initially illustrated (repeated below), in order to account for missing cases:
people.LeftJoin(
    addresses,
    p => p.PersonId,
    a => a.PersonId
);

It's less of an issue when you are working with references or nullable values where null is a natural choice, but less obvious otherwise. The join methods would therefore not only deal with flattening but also defaulting. Here's how LeftJoin could look like by the end:
var q = people.LeftJoin(
    addresses,
    p => p.PersonId,
    a => a.PersonId,
    p => new { p.Name, Street = (string) null }, // person with no address
    (p, a) => new { p.Name, a.Street } // person with address
);

Note that there are two functions to determine the projected results. This is better and more explicit than DefaultIfEmpty where you also have to deal with null for missing cases and chose some default for value types.
Also, I'm not in favor of introducing a type like JoinResult<,> for two reasons:

It won't be used except for the simplest queries
C# 7 tuples will be a better solution for this and if we do it using JoinResult<,> today then there'll be no chance to have a tuple-returning version since you can't overload on return types

Given this and defaults, your signatures will be a little more involved. I want to make sure that you're on the same page with that because it would be a shame if you make a lot of effort for a PR only to find the end result to be distasteful or not what you had in mind so good to discuss and set expectations upfront. For example, for FullOuterJoin, I imagine that the most complex overload will be identical to that of OrderedMerge, which after all is a full-outer-join for ordered sequences. Hope it makes sense?

Yes, what you are saying makes sense. I am thinking of a signature of something like this for LeftJoin:
public static IEnumerable<TResult> LeftJoin<TLeft, TRight, TKey, TResult>(
    this IEnumerable<TLeft> left,
    IEnumerable<TRight> right,
    Func<TLeft, TKey> leftKeySelector,
    Func<TRight, TKey> rightKeySelector,
    Func<TLeft, TRight, TResult> bothSelector,
    Func<TLeft, TResult> leftOnlySelector,
    IEqualityComparer<TKey> comparer = null
)

And FullOuterJoin could be similar with one minor change of adding a rightOnlySelector:
public static IEnumerable<TResult> FullOuterJoin<TLeft, TRight, TKey, TResult>(
    this IEnumerable<TLeft> left,
    IEnumerable<TRight> right,
    Func<TLeft, TKey> leftKeySelector,
    Func<TRight, TKey> rightKeySelector,
    Func<TLeft, TRight, TResult> bothSelector,
    Func<TLeft, TResult> leftOnlySelector,
    Func<TRight, TResult> rightOnlySelector,
    IEqualityComparer<TKey> comparer = null
)

This handles the cases you mentioned in your last comment, such as:

Handles returned object for matched (bothSelector) and un-matched (leftOnlySelector and rightOnlySelector) scenarios
Custom equality comparer for the key selector
No longer returns a JoinResult<,> object

What are your thoughts on this? Thanks.

Thanks for working through the questions and glad to see we are on the same page. 👍
I suggest you proceed with 2 PRs, one for LeftJoin and RightJoin (since the latter will build on the former) and another for FullOuterJoin.

In terms of consistency of names, we should decide if the outer qualification is necessary. It's not there in LeftJoin and RightJoin so I'd ask, why not rename FullOuterJoin to simply FullJoin?

Yeah, 2 separate PRs make sense to me. I agree than we should use FullJoin instead of FullOuterJoin. I will start with LeftJoin/RightJoin later this week.

I forked the project and made a separate branch. When I load the solution in Visual Studio 2015 it builds successfully, but the MoreLinq.Test project has some errors in it's references. Is there anything besides opening the solution in Visual Studio and building that I need to do? I am fairly new to the .NET Core world, so maybe I am missing something. I did a NuGet Package restore, but I still get these errors. Thoughts?:

I actually have the same problem (and in another project of mine too)…

However, my Error List pane is empty and the solution builds just fine. I'm guessing this issue has to do with the .xproj tooling being in preview status.
Do you have the .NET Core tools installed? Have you tried building from the command line by simply running build.cmd?

I got it working now. Tests run successfully as well. Thanks.


Custom reset route in ResetPassword-Notification

Similar to https://github.com/laravel/framework/pull/27488, this simplify changing the hardcoded-route:
    /**
     * @see CanResetPassword::sendPasswordResetNotification()
     *
     * @param  string  $token
     * @return void
     */
    public function sendPasswordResetNotification($token)
    {
        $notification = new ResetPassword($token);
        $notification->resetPasswordRoute = 'agencies.password.reset';
        $notification->resetPasswordLinkTtlConfigPath = 'auth.passwords.managers.expire';
        $this->notify($notification);
    }

Thanks for your pull request to Laravel!
Unfortunately, I'm going to delay merging this code for now. To preserve our ability to adequately maintain the framework, we need to be very careful regarding the amount of code we include.
If possible, please consider releasing your code as a package so that the community can still take advantage of your contributions!
If you feel absolutely certain that this code corrects a bug in the framework, please "@" mention me in a follow-up comment with further explanation so that GitHub will send me a notification of your response.


404 for working image

This image link from wayback machine works....
https://web.archive.org/web/20161028222242im_/http://safetyforall.com/wp-content/uploads/2016/08/img-people.jpg
But when encoding it...
https://images.weserv.nl/?url=ssl%3A%2F%2Fweb.archive.org%2Fweb%2F20161028222242im_%2Fhttp%3A%2F%2Fsafetyforall.com%2Fwp-content%2Fuploads%2F2016%2F08%2Fimg-people.jpg
...it returns some strange error.
Error 404: Server couldn't parse the ?url= that you were looking for, error it got: The requested URL returned error: 503 Service Unavailable

The 503 error has been fixed, it had to do with our Squid setup. Related commit https://github.com/andrieslouw/imagesweserv/commit/57c8b7095370dec34ee5623ec6aaa7eb71aaf513
In addition, web.archive.org was blocked by our filtering policy. I've adjusted the policy for web.archive.org. It will take a few hours for all changes to propagate around our network.

Your image works now: https://images.weserv.nl/?url=ssl:web.archive.org%2Fweb%2F20161028222242im_%2Fhttp%3A%2F%2Fsafetyforall.com%2Fwp-content%2Fuploads%2F2016%2F08%2Fimg-people.jpg


Way to not show an icon?

Is there a way to not show the weather icon?

in the bar or in the tooltip? for the bar you can use --custom-indicator. for the tooltip, no such way currently

in the bar or in the tooltip? for the bar you can use --custom-indicator. for the tooltip, no such way currently

i tried     // "exec": "wttrbar --date-format '%m/%d' --location Paris --hide-conditions --custom-indicator=\"{temp_C}({FeelslikeC})\"", --> still shows icons next to temp like <icon> 24*

Using exec": ""wttrbar --location  --custom-indicator {temp_C}" worked for me.

Using "exec": "wttrbar --location --custom-indicator {temp_C}" worked for me.

not work for me, there's still icon before temp: <sun_icon> 27*

it works fine here. what version are you running?

it works fine here. what version are you running?

how to check version? i probably using this version 0.6.0: https://search.nixos.org/packages?query=wttrbar

 --custom-indicator support was added at 0.7.0. I'm not maintaining the nix package so can't really help here.


Align code formatting

Formatting is inconsistent across files.

Add prettier with single quotes, 4 space, 120 width & apply it for HTML, CSS, JS and JSON files.
Add formatting on pre-commut git hook
Add CI prettier -c check.

Might be worth setting this up as an action too, I don't really like using Git hooks because I always forget about them 😶


added fonts and images

In this PR I did the following :

chooses the fonts
created images folder
added link for icons
used gitflow
no linter errors

Hello @tajulafreen

Good job selecting the assets, fonts, and icons for the project.
There are some issues that you still need to work on to proceed on the project but you are almost there!
Required Changes ♻

[ ] Check on inline comments for suggested changes

Cheers and happy coding!

Hello @tajulafreen
Project Complete

[ ] Correct gitflow used 👍🏾
[ ] Descriptive pull request 👍🏾

You can proceed and merge your changes.
Cheers and happy coding!


Invalid capability keys found: [networkAccess] in your extension toml

Please list the package(s) involved in the issue, and include the version you are using
checkout-ui-extensions
Describe the bug
Since yesterday it's not possible to deploy checkout extensions anymore with the "network_access" capability added to the toml file.
I didn't change anything to the file but am now getting the following error:
       - Validation errors found in your extension toml file         └ Invalid capability keys found: [networkAccess]. Only documented capabilities should be provided.
Steps to reproduce the behavior:

Make sure this is in the toml file: [capabilities] network_access = true
npm run deploy
you'll see the error.

Expected behavior
deployment without problems.

Hi @brooklynite77 can you confirm the formatting in your TOML file? It's working fine for me when I use the following format
[capabilities]
network_access = true

per our doc https://shopify.dev/api/checkout-extensions/checkout/configuration#anatomy-of-a-configuration-file


Scroll year chart in toolbar

This fixes #340. It is now open for code review.

It has been deployed on BA cluster for testing.
http://web.archive.bibalex.org/web/20020213015417/http://www.cnn.com/

With this change, when using the next/previous navigation in the toolbar to move between captures, after clicking an arrow to another capture, the next/prev capture navigation and day of month indicator as well as the new dotted scrollbar do not appear and the full length of the capture chart is visible until the content of the archived page finishes loading. This causes a somewhat awkward looking transition. Is it possible to make a smoother transition?
Before clicking blue navigation arrow:

While page is loading:

Thanks @ldko! It has been fixed. Can you check it now and let me know your findings?
If everything is going well, then I will update PR.

It looks smoother. Please update the PR and I will take a look and deploy locally. Thank you!

While I am testing it one more time after committing such change, it sounds like scroll-dragger is resetting after refreshing an archived webpage or going from one page to another.
To try this test case, just go to any webpage, scroll the scroll-dragger e.g. to be in the middle of year chart, and refresh the page.
Expected result is not changing its location, it should keep track of its last location before refreshing the page and update it every time user reloading it. But it resets!
I already fixed this issue, but it seems the last commit changed the normal behavior. Will fix it and update the PR.

It has been fixed now! Feel free to give it a try at BA's OWB or locally and let me know your findings.
I am sorry for any difficulty in accessing our resource store, we are losing many disks in last few months. We are recovering them as soon as we can.

Thanks for updating this, @MohammedElsayyed. It is working well for me now. Since this is a new feature, I would like to do a 2.3.2 tag/release before merging this and then put this on 2.4.0.