29 March 2023 - Emerging Technologies Initial Exploratory Meeting

Date
29 March 2023 - 10 am EST / 3 pm GMT
Untracked attendees

Fullname, Affiliation, (optional) GitHub username
...

Meeting notices

FINOS Project leads are responsible for observing the FINOS guidelines for running project meetings. Project maintainers can find additional resources in the FINOS Maintainers Cheatsheet.

All participants in FINOS project meetings are subject to the LF Antitrust Policy, the FINOS Community Code of Conduct and all other FINOS policies.

FINOS meetings involve participation by industry competitors, and it is the intention of FINOS and the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws. It is therefore extremely important that attendees adhere to meeting agendas, and be aware of, and not participate in, any activities that are prohibited under applicable US state, federal or foreign antitrust and competition laws. Please contact<EMAIL_ADDRESS>with any questions.

FINOS project meetings may be recorded for use solely by the FINOS team for administration purposes. In very limited instances, and with explicit approval, recordings may be made more widely available.

Agenda

[x] Convene & roll call (5mins)
[x] Display FINOS Antitrust Policy summary slide
[x] Review Meeting Notices (see above)
[x] Presenting SIG draft charta @tenatzen
[x] Acceptance / reviewing of charta
[x] AOB, Q&A & Adjourn (5mins)

Decisions Made
Action Items
Zoom Details
FINOS is inviting you to a scheduled Zoom meeting.
Topic: Emerging Technology SIG Proposal
Time: Mar 29, 2023 10:00 AM Eastern Time (US and Canada)
Join Zoom Meeting
https://zoom.us/j/99367109121?pwd=S0h3a3k1TjVGY1Z4cEYzamE2UWttUT09
Meeting ID: 993 6710 9121
Passcode: 357656
Dial by your location: https://zoom.us/u/azzcmrRQe

Maurizio Pillitu - FINOS 👋

Hello!

Mani Pillai - otcDigital

Patrick Downing / Morgan Stanley

Peter Smulovics / Morgan Stanley

Hello! :)

Jamil Mina / Red Hat

Ronald Ssebalamu / FINOS

Duncan Johnston-Watt | BTP

Adam Schwartz / Synechron Consulting

Alvin Shih / Morgan Stanley

Siddharth Mohanty - Credit Suisse

awaiken andrew aitken Wipro

Mike Wilson, Zngly

Hello !

Ben Crestel, Morgan Stanley

Layla White- TechPassport

Jason Engelbrecht, Citi

Rob Underwood / Independent.

Rajesh Kumar/Independent focused on readiness (and standards) aspect of Passporting. Thank you so much for this initiative.

Hey everyone,
Thank you for the 40 people who joined yesterday for the Emerging Technologies SIG (Zenith) Proposal Meeting! There were so many amazing people who joined and so many good questions being asked!
As FINOS policies does not allow sharing the recording of the meeting, we pre-recorded our presentation, that I am happy to share here:

https://www.youtube.com/watch?v=lO-TRAQA8GE
As we are preparing for the board meeting end of April where we would officially present it and ask for approval, the opportunity to show interest (based on watching the recording) is still wide open – by commenting on finos/community#226  , or letting us know in email, your interest.
Thank you everyone once again who joined and who expressed interest – (hopefully) see you after the board meeting :)
Thanks,
Zenith proposed SIG group co chairs ( @psmulovics  (Morgan Stanley), @tenatzen  (Feynic), @padraignix  (Morgan Stanley))

I am happy to announce that the SIG has been accepted and ratified by the FINOS board - https://github.com/finos/community/issues/226#issuecomment-1524240180 , we are working on creating our website, mailgroup and other administrative items now.

The SIG is now live - while we do prepare our website ( https://zenith.finos.org/ coming soon ), you can already start joining the mailing lists via dropping an empty email to<EMAIL_ADDRESS>!
@fxHouard, @mmani99, @vbandi, @gprs1809, @jamilmina1, @blazingpotsie, @ronaldssebalamu, @duncanjw, @the-schwartz, @alvin-c-shih, @csillazs, @sidmocodes, @awaiken, @ditomike, @sonkar18, @bcrestel, @laylawhite82, @jaycangel, @jstclair2019, @brooklynrob, @iamrkv

@psmulovics for some reason the subcribe email got kicked back (“does not exit”)

@psmulovics for some reason the subcribe email got kicked back (“does not exist”)

Fixed the typo 🤦

@psmulovics for some reason the subcribe email got kicked back (“does not exist”)

Fixed the typo 🤦

LFG!


JS API

Already on the roadmap, just to track progress.

Can you elaborate on what this is tracking?


Trainer "optimizers" attribute is None when saving checkpoint and callbacks list is not empty

🐛 Bug
I'm training a GAN and I'm running a few custom callbacks as well. When the model attempts to save at the end of the first epoch, it crashes. Here's the very strange thing: I have the exact same code in a Jupyter notebook and the error doesn't occur.
To Reproduce
Steps to reproduce the behavior:
The bug does not occur when the callbacks list passed into the trainer is empty. None of the callbacks I'm using have anything to do with saving checkpoints, they're all for logging certain things about the model. Enabling any one of them causes the error. Running the exact same code in Jupyter results in no crashes.
Stack trace:
Traceback (most recent call last):███████████████████████████████████-| 98.33% [590/600 00:05<00:00 loss: -0.558, v_num: 1, d_loss: -1.120, g_loss: -0.016]
  File "mnist-dense-gan-convergence.py", line 55, in <module>
    main(args)
  File "mnist-dense-gan-convergence.py", line 45, in main
    trainer.fit(gan)
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 1044, in fit
    results = self.run_pretrain_routine(model)
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 1213, in run_pretrain_routine
    self.train()
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/trainer/training_loop.py", line 370, in train
    self.run_training_epoch()
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/trainer/training_loop.py", line 502, in run_training_epoch
    self.check_checkpoint_callback(should_check_val)
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/trainer/training_loop.py", line 513, in check_checkpoint_callback
    [c.on_validation_end(self, self.get_model()) for c in checkpoint_callbacks]
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/trainer/training_loop.py", line 513, in <listcomp>
    [c.on_validation_end(self, self.get_model()) for c in checkpoint_callbacks]
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/utilities/distributed.py", line 12, in wrapped_fn
    return fn(*args, **kwargs)
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/callbacks/model_checkpoint.py", line 309, in on_validation_end
    self._do_check_save(filepath, current, epoch)
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/callbacks/model_checkpoint.py", line 346, in _do_check_save
    self._save_model(filepath)
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/callbacks/model_checkpoint.py", line 168, in _save_model
    self.save_function(filepath, self.save_weights_only)
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/trainer/training_io.py", line 268, in save_checkpoint
    checkpoint = self.dump_checkpoint(weights_only)
  File "/Users/robbie/.conda/envs/ganresearch/lib/python3.7/site-packages/pytorch_lightning/trainer/training_io.py", line 350, in dump_checkpoint
    for i, optimizer in enumerate(self.optimizers):
TypeError: 'NoneType' object is not iterable

Code sample
Here is the relevant part of my setup code:
inception_callback = GANInceptionScorer(classifier, logits=True, sample_size=1000, input_shape=(-1, 1, 28, 28))

log_dir = os.path.abspath('../logs/mnist-dense-gan-convergence')

params = ParameterMatrixCallback()

callbacks = [
    GANProgressBar(),
    GANTensorboardImageView(),
    params,
    inception_callback
]

trainer_args = {
        'max_epochs': 100,
        'default_root_dir': log_dir,
        'callbacks': callbacks,
        'progress_bar_refresh_rate': 0
    }

    print(log_dir)
    try:
        trainer = Trainer(gpus=1, **trainer_args)
    except MisconfigurationException:
        trainer = Trainer(**trainer_args)

    trainer.fit(gan)

Expected behavior

Environment
Please copy and paste the output from our
environment collection script
(or fill out the checklist below manually).
You can get the script and run it with:
wget https://raw.githubusercontent.com/PyTorchLightning/pytorch-lightning/master/tests/collect_env_details.py
# For security purposes, please check the contents of collect_env_details.py before running it.
python collect_env_details.py

and the same code in Jupyter:
inception_callback = GANInceptionScorer(classifier, logits=True, sample_size=1000, input_shape=(-1, 1, 28, 28))

log_dir = os.path.abspath('../logs/mnist-gan-dense')

params = ParameterMatrixCallback()

trainer_args = {
    'max_epochs': 200,
    'callbacks': [GANProgressBar(), GANTensorboardImageView(n=4), params, inception_callback],
    'progress_bar_refresh_rate': 0,
    'default_root_dir': log_dir
}

t = Trainer(**trainer_args)

PyTorch Version (e.g., 1.0): 1.3.1
OS (e.g., Linux): macOS
How you installed PyTorch (conda, pip, source): conda
Python version: 3.7
Any other relevant information: pytorch-lightning 0.8.5

Additional info, here are the relevant methods in my GAN class:
class GAN(LightningModule, ABC):
   ...

    @abstractmethod
    def g_optimizer(self) -> Optimizer:
        pass

    @abstractmethod
    def d_optimizer(self) -> Optimizer:
        pass

    def configure_optimizers(self):
        return self.g_optimizer(), self.d_optimizer()

class MnistGanDense(GAN):
    ...

    def g_optimizer(self) -> Optimizer:
        return optim.RMSprop(self.G.parameters(), self.hparams['learning_rate'])

    def d_optimizer(self) -> Optimizer:
        return optim.RMSprop(self.D.parameters(), self.hparams['learning_rate'])

could you try 0.9.0rc12?

Is there a way to do that with conda?

inside your Conda environment you could also install it with pip

Inside conda you can always install with pip:
pip install pytorch-lightning==0.9.0rc13

If this is still an issue, happy to reopen

This is still a problem for me. I updated to 0.9.1rc1 and still get this error. Here is my trace.
Traceback (most recent call last):
File "train_unet.py", line 270, in
trainer.save_checkpoint(args.save_checkpoint_path)
File "/opt/conda/lib/python3.6/site-packages/pytorch_lightning/trainer/training_io.py", line 275, in
save_checkpointe
checkpoint = self.dump_checkpoint(weights_only)
File "/opt/conda/lib/python3.6/site-packages/pytorch_lightning/trainer/training_io.py", line 360, in
dump_checkpoint
for i, optimizer in enumerate(self.optimizers):
TypeError: 'NoneType' object is not iterable

@williamFalcon could you open this again? I'm still getting the error as well

@rohitgr7 didn't we recently make optimizers init to an empty list instead of None? I think this should solve the problem. Could you check?

@awaelchli yes its an empty list now. But the code for lightning model defined above has optimizers defined, so am not sure yet what's the issue there.
@import-antigravity mind check this on master?

@deekshadangwal mind share full sample code so we can reproduce your issue?


Add bind_host to allow listening on other IPs

Bind to the original <IP_ADDRESS> by default but allow living on the
edge and binding to another host IP.

This is the first of a series of PRs from the changes I've made to use OpenStackClient with Dwarf.

Thanks!


"Munteni", "Frunzeasca", "Țigănești" and "Ungureni" are listed in the drop-down menu

Description:
"Munteni", "Frunzeasca", "Țigănești" and "Ungureni" are listed in the drop-down menu alongside its corresponding county and commune, according to the law
Precondition:
The website is up an running.

Step 1
Type "Munteni" in the search bar.

Expected results
The location is listed in the drop-down menu as "Sat Munteni, GALAȚI (Munteni)".

Step 2
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 3
Type "Frunzeasca" in the search bar.

Expected results
The location is listed in the drop-down menu as "Sat Frunzeasca, GALAȚI (Munteni)".

Step 4
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 5
Type "Țigănești" in the search bar.

Expected results
The location is listed in the drop-down menu as "Sat Țigănești, GALAȚI (Munteni)".

Step 6
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 7
Type "Ungureni" in the search bar.

Expected results
The location is listed in the drop-down menu as "Sat Ungureni, GALAȚI (Munteni)".


Flip AgentScheduler flag to omit it by default

Following up on the next step of the stage approach outlined here: https://github.com/microsoft/FluidFramework/pull/5716#issuecomment-816015051
This change flips the default behavior to not include the AgentScheduler, but retains the ability to enable it by explicitly opting-in.  After Bohemia picks up 0.38 I expect we'll start by explicitly opting them into the flag (to protect current behavior) so this change should not have any impact by the time they're ready to pick up 0.39.
Within our repo, we opt-out in all cases where we don't explicitly need the functionality (a few of the end-to-end tests explicitly testing AgentScheduler/leader functionality and snapshot back-compat).
Also a couple changes to avoid stamping the flag with undefined (rather than leaving it unset).

The change to explicitly opt Bohemia into the flag is now merged.


toogle button data.checked value is inversed

Fore some reason the toggle button returns true when the toggle button is inactive and when toggles to active state the
data.checked returns false.
I have to do the following   handleToogle = (event, data) => {   	console.log(!data.checked)   }
to correct this.
using "semantic-ui-react": "^0.71.4",

We don't support outdated versions, please update to<EMAIL_ADDRESS>If the issue still persists, please fill fully our issue template and make a pen on codesandbox.


[WIP] Add pytest-benchmark test example

Example of usage pytest-benchmark.
Do not merge: unnecessary CSV data file committed.

Hello @PokhodenkoSA! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file sdc/tests/pytest-bm/test_read_csv.py:

Line 31:1: E302 expected 2 blank lines, found 1
Line 38:1: E302 expected 2 blank lines, found 1


Removing localized: true breaks admin and client

Describe the Bug
When you remove a field that has previously had localized: true and a value in the database, the front-end breaks.
Link to the code that reproduces this issue
https://github.com/hdodov/test-payload/tree/localize-issues
Reproduction Steps

git clone git@github.com:hdodov/test-payload.git
pnpm docker to start the project
Open http://localhost:3000/admin/collections/pages
Create a page with the fields:

slug: foo
text: hello

You'll see this in the database:{
  "_id" : ObjectId("672efe5985ce4bd7437d6d7c"),
  "slug" : "foo",
  "text" : "hello",
  "createdAt" : ISODate("2024-11-09T06:16:57.505+0000"),
  "updatedAt" : ISODate("2024-11-09T06:16:57.505+0000"),
  "__v" : NumberInt(0)
}

Add LOCALIZED=true in .env
Restart the server
Change the text field to hello2
You'll get this in the database:{
  "_id" : ObjectId("672efe5985ce4bd7437d6d7c"),
  "slug" : "foo",
-  "text" : "hello",
+  "text" : {
+    "en" : "hello2"
+  },
  "createdAt" : ISODate("2024-11-09T06:16:57.505+0000"),
  "updatedAt" : ISODate("2024-11-09T06:36:22.517+0000"),
  "__v" : NumberInt(0)
}

The admin and the page still work as expected
Remove LOCALIZED=true from .env
Restart the server
Data remains the same in the database (expected)
Field value in the admin changes to [object Object] (not expected)

There's the following error on the front-end (not expected):Error: Objects are not valid as a React child (found: object with keys {en}). If you meant to render a collection of children, use an array instead.
  at throwOnInvalidObjectType (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:4419:13)
  at reconcileChildFibersImpl (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:5356:11)
  at eval (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:5398:33)
  at reconcileChildren (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:7721:13)
  at beginWork (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:9934:13)
  at runWithFiberInDEV (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:544:16)
  at performUnitOfWork (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:14997:22)
  at workLoopSync (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:14827:41)
  at renderRootSync (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:14807:11)
  at performWorkOnRoot (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:14342:44)
  at performWorkOnRootViaSchedulerTask (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js:15853:7)
  at MessagePort.performWorkUntilDeadline (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.0.0_react-dom@19.0.0-rc-65a56d0e-20241020_react@19.0.0-rc-65a56d0e-20241020__react@19_7kfqem4pd6aim6nxuy4v6dxrry/node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js:44:48)

Proposed Solution
Payload should check if fields are coming in the form of an object from the database. It already normalizes { en: "content" } to "content" when the field is marked as localized. It just has to do this when the field is not marked as localized too. In other words, it should function like this:

Field is localied
Database value
Requested locale
Returned value

Yes
"foo"
en
"foo"

Yes
"foo"
bg
"foo"

Yes
{ "en": "foo" }
en
"foo"

Yes
{ "en": "foo" }
bg
"foo"

No
"foo"
en
"foo"

No
"foo"
bg
"foo"

No
{ "en": "foo" }
en
"foo"

No
{ "en": "foo" }
bg
"foo"

No
{ "bg": "фуу" }
bg
""

…but the current behavior is this:

Field is localied
Database value
Requested locale
Returned value

Yes
"foo"
en
"foo"

Yes
"foo"
bg
"foo"

Yes
{ "en": "foo" }
en
"foo"

Yes
{ "en": "foo" }
bg
"foo"

No
"foo"
en
"foo"

No
"foo"
bg
"foo"

No
{ "en": "foo" }
en
{ "en": "foo" }

No
{ "en": "foo" }
bg
{ "en": "foo" }

No
{ "bg": "фуу" }
bg
{ "bg": "фуу" }

Which area(s) are affected? (Select all that apply)
area: core
Environment Info
Binaries:
  Node: 20.17.0
  npm: 10.8.2
  Yarn: N/A
  pnpm: 9.9.0
Relevant Packages:
  payload: 3.0.0-beta.126
  next: 15.0.0
  @payloadcms/db-mongodb: 3.0.0-beta.126
  @payloadcms/email-nodemailer: 3.0.0-beta.126
  @payloadcms/graphql: 3.0.0-beta.126
  @payloadcms/next/utilities: 3.0.0-beta.126
  @payloadcms/payload-cloud: 3.0.0-beta.126
  @payloadcms/richtext-lexical: 3.0.0-beta.126
  @payloadcms/translations: 3.0.0-beta.126
  @payloadcms/ui/shared: 3.0.0-beta.126
  react: 19.0.0-rc-65a56d0e-20241020
  react-dom: 19.0.0-rc-65a56d0e-20241020
Operating System:
  Platform: darwin
  Arch: x64
  Version: Darwin Kernel Version 23.6.0: Mon Jul 29 21:13:00 PDT 2024; root:xnu-10063.141.2~1/RELEASE_X86_64
  Available memory (MB): 32768
  Available CPU cores: 16

This leads to another error when trying to do a payload.update():
CastError: Cast to embedded failed for value "{...}" (type Object) at path "blocks" because of "CastError"
    at model.Query.exec (webpack-internal:///(rsc)/./node_modules/.pnpm/mongoose@6.12.3_@aws-sdk+client-sso-oidc@3.679.0_@aws-sdk+client-sts@3.679.0_/node_modules/mongoose/lib/query.js:4921:21)
    at Query.then (webpack-internal:///(rsc)/./node_modules/.pnpm/mongoose@6.12.3_@aws-sdk+client-sso-oidc@3.679.0_@aws-sdk+client-sts@3.679.0_/node_modules/mongoose/lib/query.js:5020:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

In the error message:

{...} is the entire content of the document — I've removed it for brevity
"blocks" is the name of a field of type blocks in the document

I think this cast error refers to the fact that Payload attempts to slide in the object { "en": "..." } into a field that expects a string:

When the field has localize: true, it's an object with each locale as the key
When localize: true is removed, it is now expected to be a string
The object still remains in the database
When performing an update, even on a completely unrelated field, Payload uses the current value (the object), when a string is expected


Error trying to get a datasource

Hi,
I am encountering an issue to authenticate with a mysql server with the following error: https://pastebin.com/cmFbG2gj
Code:
// The first line errors
DataSource dataSource = this.sqlService.getDataSource(String.format("jdbc:mysql://%s:%s/%s", this.host, this.port, this.databaseName));
// Code does not reach this line
Connection connection = dataSource.getConnection(this.user, this.password);

The issue to me seems that the authentication tries to happen before the user & password can be given.
I can get it to work with a mysql dependancy and using DriverManager.getConnection(url, user, password) but I would prefer to use the sponge solution if possible.
I am currently running spongeforge-1.12.2-2838-7.2.0

As stated in the javadocs:

A jdbc connection url is expected to be of the form: jdbc:<engine>://[<username>[:<password>]@]**<host>/<database> or an alias (available aliases are known only by the service provider)

Especially the <username>[:<password>]@ part.

Thanks for the help, that did solve the issue.
A question for my curiousity, is there a reason to call DataSource.getConnection(user, password);?

That's a plain java class/interface. I don't know the exact purpose of it (because I don't remember ever calling it), but it might be a helper method for creating a connection with a different user for a privileged call. E.g. the normal user only has read access, but for a special action the applications switches to a different user and executes it.

Alright, thank for the help :)

Use getConnectionUrlFromAlias, so admins could control URL instead of hardcoded in plugin


python3Packages.pysmartapp, python3Packages.pysmartthings, python3Packages.smhi, python3Packages.homeconnect

Motivation for this change
I needed a few packages for my home assistant setup.
Things done
Added homeconnect, pysmartapp, pysmartthings and smhi python packages
This is my first PR to nixpkgs, I don't know what's the best practice for adding multiple packages.
I'm not a Python developer and I'm not sure I have done all the best practice stuff.
Replaces #119555

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

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

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

Result of nixpkgs-review pr 119628 at 37a474c5 run on aarch64-linux 1

4 packages failed to build:

python38Packages.pysmartapp
python38Packages.pysmartthings
python39Packages.pysmartapp
python39Packages.pysmartthings

4 packages built successfully:

python38Packages.homeconnect
python38Packages.smhi
python39Packages.homeconnect
python39Packages.smhi

3 suggestions:

warning: unused-argument
Unused argument: six.
Near pkgs/development/python-modules/pysmartapp/default.nix:4:3:
  |
4 | , six
  |   ^

warning: no-python-tests
Test runner could not discover any test cases: ‘Ran 0 tests in 0.000s’
Near pkgs/development/python-modules/homeconnect/default.nix:25:0:
   |
25 |     description = "Simple Python client for the BSH Home Connect REST API implementing OAuth 2 authentication, REST calls, and SSE event stream parsing";
   | ^

warning: no-python-tests
Test runner could not discover any test cases: ‘Ran 0 tests in 0.000s’
Near pkgs/development/python-modules/smhi/default.nix:49:0:
   |
49 |     description = "Python library for accessing SMHI open forecast data";
   | ^

Note that build failures may predate this PR, and could be nondeterministic or hardware dependent.
Please exercise your independent judgement.

@fabaff I have now addressed all your comments, do I rebase/squash it back to 5 commits?

You have to split commit d745cea according to the package which is touched and then squash it. In the current situation it would not be possible to revert that commit without additional work if there is a issue with one packages.
The commits should be prefixed with python3Packages., e.g., python3Packages.homeconnect: init at 0.6.3.

This is my first PR to nixpkgs, I don't know what's the best practice for adding multiple packages.

Usually it's more efficient to stick to one topic/issue/package (incl. dependencies) in a PR but there is no hard requirement to do it that way. Smaller PR are easier to review and to update.
For Home Assistant dependencies it will be required to update the component-packages listing and if possible to enable the tests. This means that 8 more commits could be needed here. Sure, collecting multiple packages in one PR save some time when running nix-review but there could be a lot of rebasing and wasted time for debugging build failures.

I have now rebased and split the commit to the correct commits. Also fixed the names of the commits.
If anyone wants to take these over feel free to open new PRs and set yourself as a maintainer since I'm not a Python developer anyway.

You don't have to be a Python developer to maintain Python packages. I maintain some Rust packages but in my life I have probably written 2000 lines of Rust code, thus I'm not sure if that even puts me in the "beginner group".
We are almost there. The heavy lifting is done. What's left is partially the part for Home Assistant.
For Home Assistant dependencies it's a three steps process:

Add Python packages
Run ./pkgs/servers/home-assistant/parse-requirements.py to get the dependency tracking (component-packages) updated
Enable Home Assistant's tests for the integration if possible.

As step 2 and 3 are not related to the Python module itself we put them in separate commits. This gets us three commits to keep the changes small and the option to fast revert if we need to. E.g., Home Assistant dependencies may be removed but this doesn't mean that we want to remove the package itself. Or the tests start to fail.

Hello, I don't have any time to fix this properly in the near future it seems. What is the minimal thing I can do to get this merged? Just revert the home-assistant stuff?

Let me cherry-pick the commits and do the tasks needed for Home Assistant.
It's kind of my fault that we ended here. My mentoring was bad. Sorry.

I think it was a bad idea to do so many packages at once. It makes mentoring very hard, given there are so many things to critique for first time contributors.

homeconnect: https://github.com/NixOS/nixpkgs/pull/120532

@ulrikstrid, would you like to maintain the packages after they are included?

@ulrikstrid, would you like to maintain the packages after they are included?

I don't have strong feelings either way. I'll probably try to update them if my setup breaks. But anyone can feel free to take it over.
Thanks for taking over the PRs ❤

This was done. Thanks @ulrikstrid for your contributions.


feat: add /badge/request endpoint

Description
This pull request adds a new API endpoint that allows awarding a badge to a user through their NIP-05 identifier. The endpoint accepts two parameters:

badgeId: A 32-character hex string representing a badge definition event.
nip05: The NIP-05 identifier of the user receiving the badge.

How it works

The endpoint first retrieves the public key associated with the provided NIP-05.

It then checks if the badge definition (badgeId) is valid and was created by the authorized signer (configured via an environment variable).

The system also verifies that no badge has been awarded to this user for this badge definition before.

If everything is valid, the badge award event is created, signed, and published to the Nostr relays.

If any step fails, a meaningful error message is returned.

It's amazing @cuervoshi, ty 🐦


error:ValueError: output of generator should be a tuple (x, y, sample_weight) or (x, y). Found: None

Hi,
thanks for keras-fcn code.
after run train.py these error occur .
keras version is 2 and run code in widows with python 3.5. and pascal voc 2011 is in data folder
Using TensorFlow backend.
Epoch 1/100
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Program Files\python3.5\python-3.5.3.amd64\lib\threading.py", line 914, in _bootstrap_inner
self.run()
File "C:\Program Files\python3.5\python-3.5.3.amd64\lib\threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "C:\Program Files\python3.5\python-3.5.3.amd64\lib\site-packages\keras\engine\training.py", line 612, in data_generator_task
generator_output = next(self._generator)
File "C:\Program Files\python3.5\python-3.5.3.amd64\lib\site-packages\keras\preprocessing\image.py", line 732, in next
return self.next(*args, **kwargs)
File "C:\cnn\inceptionV4\keras-fcn\keras-fcn-master\voc2011\voc_generator.py", line 113, in next
x = self.image_set_loader.load_img(fn)
File "C:\cnn\inceptionV4\keras-fcn\keras-fcn-master\voc2011\voc_generator.py", line 203, in load_img
raise IOError('Image {} does not exist.'.format(img_path))
OSError: Image ../data/VOC2011/JPEGImages/b'2009_002423'.jpg does not exist.
Traceback (most recent call last):
File "C:\cnn\inceptionV4\keras-fcn\keras-fcn-master\voc2011\train.py", line 88, in
callbacks=[lr_reducer, early_stopper, csv_logger])
File "C:\Program Files\python3.5\python-3.5.3.amd64\lib\site-packages\keras\legacy\interfaces.py", line 88, in wrapper
return func(*args, **kwargs)
File "C:\Program Files\python3.5\python-3.5.3.amd64\lib\site-packages\keras\models.py", line 1124, in fit_generator
initial_epoch=initial_epoch)
File "C:\Program Files\python3.5\python-3.5.3.amd64\lib\site-packages\keras\legacy\interfaces.py", line 88, in wrapper
return func(*args, **kwargs)
File "C:\Program Files\python3.5\python-3.5.3.amd64\lib\site-packages\keras\engine\training.py", line 1877, in fit_generator
str(generator_output))
ValueError: output of generator should be a tuple (x, y, sample_weight) or (x, y). Found: None

@jeansely I noticed:
raise IOError('Image {} does not exist.'.format(img_path))
OSError: Image ../data/VOC2011/JPEGImages/b'2009_002423'.jpg does not exist.

The b in front of '2009_002423' indicates the img_path is of type bytes. That's one of the features of python3. I think you need to handle this specifically in the codes. Maybe this blog is helpful for that.

This issue is closed because /voc2011 is added just as an example application. It is not as under active maintenance as the fcn package.
Therefore, it is NOT guaranteed to work in any environments. It will be excluded from the package in the future.


--eoc flag to understand .eoc directory

@rultor release, tag is 0.0.4

@rultor release, tag is 0.0.4

@yegor256 OK, I will release it now. Please check the progress here

@rultor release, tag is 0.0.4

@yegor256 Done! FYI, the full log is here (took me 3min)


New Rule: Define allowed SG ports and alert on any others that are opened

Config rule that is executed on configuration changes that only alerts on ports not defined as approved.  Example port 21 and 443 are approved and a execution of a SG update/addition opens port 80.

Just pushed: https://github.com/awslabs/aws-config-rules/tree/master/python/VPC_SG_OPEN_ONLY_TO_AUTHORIZED_PORTS


Dynamically read the resources endpoints from the ResourceType objects

Currently the resources endpoints are guessed from their names, but that would be nice to read them from ResourceType objects when provided.
The workflow could be:

make a first request on /ResourceTypes to get all the ResourceType objects from the server
pass them to the client object
use the client as usual

This would require https://github.com/yaal-coop/scim2-models/issues/6 to be implemented first.

Implemented in be0c26a56afcb647ddecfaada969b24bdbcb5fb2


Deleting Sileo forces Cydia to download

Whenever I uninstall Sileo, it always force installs Cydia

I’m using an iPhone 7 Plus on iOS  13.7 odyssey downloaded thru jailbreaks.app


Comment behavior optimization

Currently all the get and set methods in arrays, vectors and other classes aren't indicating the user of any type of data about the datastructure the operation is being performed on.  There is no default comment for get method in arrays and vectors anyways, so that needs to be added along with the name of the variable the operation is being performed on.
eg:
This should be a comment that is to be added by default to all get and set methods for arrays
Get :
f"Reading index {i} from array : {name}"

Set:
f"Writing value {value} at index {i} in array : {name}"

Closing issue as repo is being archived.


ERROR: Unable to load 0000007E

I've recently been getting a lot of bug reports about this:
ERROR: Unable to load 0000007E
These problems persist even after installing VC++ redis 2012 (x86 and x64).
Is there another dependency that they're missing?

same problem here

Error 0000007E means missing depencies.

The same problem. The plugin only works on the PC where it is compiled. The other PC has all possible C ++ libraries installed, but that doesn't help ...


Reland automatic discovery of observatory port for iOS

Relands https://github.com/flutter/flutter/pull/26944 (was reverted in https://github.com/flutter/flutter/pull/27191)
Multicast_dns has landed internally, so this should no longer be an internal roll blocker.
/cc @zanderso who was cc'd on the revert for reasons I'm not fully aware of :)
fixes https://github.com/flutter/flutter/issues/23164

Generally LGTM - how do you feel about the refactor in https://github.com/flutter/flutter/pull/27455 ?  think the attach command is growing a bit long, and the is checks are a definite smell

Note: This commit is pinning json_schema to 1.0.10, since >=2.0.0 adds additional transitive dependencies we don't want in the tools. Opened https://github.com/flutter/flutter/issues/28021 to track.

I don't understand how, but this apparently raised our consumer facing dependency count by 4 to 35.
This seems problematic on two fronts. One, raising our dependency count by >10% is pretty serious. Two, why does the patch show no evidence of this?

I think we have a bug in our dependency pinning script, it is automatically including pinned packages in the transitive closure


New docs

Waiting for https://github.com/spring-cloud/spring-cloud-build/pull/59 to be merged

Codecov Report

Merging #392 into master will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #392   +/-   ##
=========================================
  Coverage     59.57%   59.57%
  Complexity     1640     1640
=========================================
  Files           220      220
  Lines          6845     6845
  Branches        904      904
=========================================
  Hits           4078     4078
  Misses         2257     2257
  Partials        510      510

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 8e850a9...aaef623. Read the comment docs.


Keep on losing integrations

Home Assistant release with the issue:
0.99
Last working Home Assistant release (if known):
0.98
Operating environment (Hass.io/Docker/Windows/etc.):
Hassio/hassos
Integration:
Phillips Hue and Deconz
Description of problem:
Every few days, both integrations disappear and all my devices too. I need to manually add the integrations again. When it happens it happens simultaneously for both. This happens since I am on the latest release.
Adding them again leads to duplicate integrations with the same name. Strangely both have the same device list, but only one shows the symbols. I also don't have to add the rooms again. Upon skipping the room selection, they automatically get the old zones back.
I'm not sure what triggers it, but it already happened 3 times in the last two weeks.
Additional information:

Do they completely disappear from the GUI?
If you look inside of your home assistant folder .storage/core.config_entries are they still mentioned there?
What does the logs say?

Yes they disappear from the gui and I get a notification that new integrations are found. If I go to the integration page, I indeed see the two new integrations listed and the old ones are gone. As soon as I add the new ones, the old ones pop up again.
There was nothing that I found in the logs (but wasn't really sure what I was looking for).
At the moment I've added them again. I still have both integrations defined so I can check things regarding that. However, I'll have to wait until it happens again to check if the devices will still be there. I assume so as there is not really another reason why HA still knows the zones.

This is probably some core thing or an os thing if the integration disappears

Alright, any advise on how to tackle this?

Does it happen when hass upgrades to a newer version or is it just that it disappears during runtime?
But I can't really say why. Debug logs would be useful but not sure they would she'd light on this issue

How you had any change in behavior?

@Kane610, yes, I've just upgraded to 100.2 (from 99. something) and now I have a newly discovered integration for Deconz (while I already have two with the same ID defined). It's not exactly the same issue as before and in the last week I haven't seen any new duplicates (since reporting the issue).

I just lost my Phillips hue integration again. It is still there but without any connected devices. It clearly happened after the latest upgrade.

Actually this time round I still have my header in the integrations for Phillips, but no devices. It is also still in core.config_entries. At the same time I also have a new proposition to configure Phillips Hue.

Can you share logs and your config_entries file?

This is not really related to deconz, but rather something with the system since the entries disappear. Together with no feedback I'll close this issue.


Invalid data in manifest file for module nn.THNN (invalid data for nn scm-1)

Hi,
When I execute
$ th neural_style.lua -style_image smt0.jpg -content_image smt1.jpg -gpu 0 -init image -optimizer adam -save_iter 100 -backend cudnn
I get
/home/a/torch/install/bin/luajit: /home/a/torch/install/share/lua/5.1/trepl/init.lua:383: /home/a/torch/install/share/lua/5.1/trepl/init.lua:383: /home/a/torch/install/share/lua/5.1/trepl/init.lua:383: /home/a/torch/install/share/lua/5.1/luarocks/loader.lua:154: Invalid data in manifest file for module nn.THNN (invalid data for nn scm-1)
stack traceback:
[C]: in function 'error'
/home/a/torch/install/share/lua/5.1/trepl/init.lua:383: in function 'require'
neural_style.lua:52: in function 'main'
neural_style.lua:499: in main chunk
[C]: in function 'dofile'
/home/a/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
[C]: at 0x00406670
What is the problem and how can it be fixed?
Thank you for your time.

I am facing the same issue as well after a fresh install of torch.

Have you been able to fix this issue? We are facing it, too.

Thanks MichaelHirn :)  It solve for me after installing nn package.

@MichaelHirn, I run git clone https://github.com/torch/nn && ( cd nn && git checkout getParamsByDevice && luarocks make rocks/nn-scm-1.rockspec ). But i am still facing the same issue. thanks.

@hitxin Try :
luarocks remove nn --force
luarocks install nn


Advance numpy to 1.16.0

The py36-min environment pins numpy at 1.12.0. #717 (bifacial.infinite_shdes) uses numpy.linspace with non-scalar start and stop values, a capability introduced with numpy 1.16.
Describe the solution you'd like
Advance numpy to 1.16 in py36-min
Describe alternatives you've considered

awkward code in #717 that checks numpy version and executes a loop if numpy < 1.16
deploying a function that fails tests in py36-min
requiring numpy >= 1.16 for the bifacial.infinite_sheds functions

Additional context
If we decide to advance numpy, is a deprecation period needed?

Yes, definitely fine to advance to 1.16. If we aggressively followed NEP-29, we would be at python 3.8+ and numpy 1.19+.
No deprecation needed.
https://numpy.org/neps/nep-0029-deprecation_policy.html


Love current track requires scrobbling the track

Love current track does not work, at least not with last.fm.
Steps to reproduce.
1 play a track with dsub
2 press sls notification
3 press love current track at last.fm. notice a message "song ready"
4 open track page on last.fm, the track is not loved.
I have enabled the option scrobble when press scrobble now.
Samsung s6 with android 6.0.1, DSub https://github.com/daneren2005/Subsonic

The current system requires you to listen to/scrobble the song to love the track.
A new database will be added in future so that love track does not require scrobbling.

You may want to try enabling "OnGoing" (and phone notifications)

The database has been added.
Thanks very much for the idea.
@Row


Loss components as train metric to be displayed in Tensorboard

Hi! Let's say that we can decompose the training loss in four components: xy_loss, wh_loss, confidence_loss and class_loss.
Is there any way to calculate these metrics to be plotted in Tensorboard?
The motivation of this idea is that this loss implementation doesn't include parameters to weight each one of these loss components. So, by visualizing their values we can check if those weights should be worthy to implement. And they would also be useful to compare how proficient are different models in each of the Yolo tasks.
The problem is that a Keras metric function only can accept y_true and y_pred as parameters but the metrics I propose also needs to take the anchors and num_classes as parameters.

Finally, I've managed to add the loss components as metrics during training. To do that, I had to modify the yolo_loss function to return the loss along with each one of its components:
def yolo_loss(args, anchors, num_classes, ignore_thresh=.5):
	'''Return yolo_loss tensor composed by the loss and all its components

	Parameters
	----------
	yolo_outputs: list of tensor, the output of yolo_body or tiny_yolo_body
	y_true: list of array, the output of preprocess_true_boxes
	anchors: array, shape=(N, 2), wh
	num_classes: integer
	ignore_thresh: float, the iou threshold whether to ignore object confidence loss

	Returns
	-------
	loss: tensor, shape=(1,)

	'''
	num_layers = len(anchors)//3 # default setting
	yolo_outputs = args[:num_layers]
	y_true = args[num_layers:]
	anchor_mask = [[6,7,8], [3,4,5], [0,1,2]] if num_layers==3 else [[3,4,5], [1,2,3]]
	input_shape = K.cast(K.shape(yolo_outputs[0])[1:3] * 32, K.dtype(y_true[0]))
	grid_shapes = [K.cast(K.shape(yolo_outputs[l])[1:3], K.dtype(y_true[0])) for l in range(num_layers)]
	loss = 0
	total_xy_loss, total_wh_loss, total_confidence_loss_obj, total_confidence_loss_noobj, total_class_loss = 0, 0, 0, 0, 0
	m = K.shape(yolo_outputs[0])[0] # batch size, tensor
	mf = K.cast(m, K.dtype(yolo_outputs[0]))

	for l in range(num_layers):
		object_mask = y_true[l][..., 4:5]
		true_class_probs = y_true[l][..., 5:]

		grid, raw_pred, pred_xy, pred_wh = yolo_head(yolo_outputs[l],
			 anchors[anchor_mask[l]], num_classes, input_shape, calc_loss=True)
		pred_box = K.concatenate([pred_xy, pred_wh])

		# Darknet raw box to calculate loss.
		raw_true_xy = y_true[l][..., :2]*grid_shapes[l][::-1] - grid
		raw_true_wh = K.log(y_true[l][..., 2:4] / anchors[anchor_mask[l]] * input_shape[::-1])
		raw_true_wh = K.switch(object_mask, raw_true_wh, K.zeros_like(raw_true_wh)) # avoid log(0)=-inf
		box_loss_scale = 2 - y_true[l][...,2:3]*y_true[l][...,3:4]

		# Find ignore mask, iterate over each of batch.
		ignore_mask = tf.TensorArray(K.dtype(y_true[0]), size=1, dynamic_size=True)
		object_mask_bool = K.cast(object_mask, 'bool')
		def loop_body(b, ignore_mask):
			true_box = tf.boolean_mask(y_true[l][b,...,0:4], object_mask_bool[b,...,0])
			iou = box_iou(pred_box[b], true_box)
			best_iou = K.max(iou, axis=-1)
			ignore_mask = ignore_mask.write(b, K.cast(best_iou<ignore_thresh, K.dtype(true_box)))
			return b+1, ignore_mask
		_, ignore_mask = K.control_flow_ops.while_loop(lambda b,*args: b<m, loop_body, [0, ignore_mask])
		ignore_mask = ignore_mask.stack()
		ignore_mask = K.expand_dims(ignore_mask, -1)

		# K.binary_crossentropy is helpful to avoid exp overflow.
		xy_loss = object_mask * box_loss_scale * K.binary_crossentropy(raw_true_xy, raw_pred[...,0:2], from_logits=True)
		wh_loss = object_mask * box_loss_scale * 0.5 * K.square(raw_true_wh-raw_pred[...,2:4])
		confidence_loss_obj = object_mask * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True)
		confidence_loss_noobj = (1-object_mask) * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True) * ignore_mask
#		confidence_loss = object_mask * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True)+ \
#			(1-object_mask) * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True) * ignore_mask
		class_loss = object_mask * K.binary_crossentropy(true_class_probs, raw_pred[...,5:], from_logits=True)

		xy_loss = K.sum(xy_loss) / mf
		wh_loss = K.sum(wh_loss) / mf
		confidence_loss_obj = K.sum(confidence_loss_obj) / mf
		confidence_loss_noobj = K.sum(confidence_loss_noobj) / mf
#		confidence_loss = K.sum(confidence_loss) / mf
		class_loss = K.sum(class_loss) / mf

		total_xy_loss += xy_loss
		total_wh_loss += wh_loss
#		total_confidence_loss += confidence_loss
		total_confidence_loss_obj += confidence_loss_obj
		total_confidence_loss_noobj += confidence_loss_noobj
		total_class_loss += class_loss

	loss += total_xy_loss + total_wh_loss + total_confidence_loss_obj + total_confidence_loss_noobj + total_class_loss
#	if print_loss:
#		loss = tf.Print(loss, [loss, xy_loss, wh_loss, confidence_loss, class_loss, K.sum(ignore_mask)], message='loss: ')
#	return loss
	return tf.convert_to_tensor([loss,
							  total_xy_loss, total_wh_loss,
							  total_confidence_loss_obj + total_confidence_loss_noobj,
							  total_confidence_loss_obj, total_confidence_loss_noobj,
							  total_class_loss], dtype=tf.float32)

And define the functions to extract each value:
def loss(y_true, y_pred): return y_pred[0]
def xy_loss(y_true, y_pred): return y_pred[1]
def wh_loss(y_true, y_pred): return y_pred[2]
def confidence_loss(y_true, y_pred): return y_pred[3]
def confidence_loss_obj(y_true, y_pred): return y_pred[4]
def confidence_loss_noobj(y_true, y_pred): return y_pred[5]
def class_loss(y_true, y_pred): return y_pred[6]

Finally, you have to add these functions to the model compilation:
model.compile(optimizer = optimizer,
			  loss = {'yolo_loss': loss},		# use custom yolo_loss Lambda layer.
			  metrics = [
						 xy_loss, wh_loss, confidence_loss,
						 confidence_loss_obj, confidence_loss_noobj, class_loss,
						 train_utils.get_lr_metric(optimizer),
						 ]
			  )

请问train_utils.get_lr_metric(optimizer)在哪儿调用呀?


png alpha channel loss

Hi,
I found a bug where the alpha channel is lost.
Using waifu2x-ncnn-vulkan-20210210-windows on an RTX 2070.
The command-line switch is just "-n -1" or "-n 0".
Before:
After:

The bit value of the image is strange. (It is marked as 8bit in Windows properties. It must be marked in 32bit.)
Use'-pix_fmt rgba' in ffmpeg or save it through a separate image editing program.

@Kafu-Yukimura  is right.
I have a similar image where it showed that it is 8bit if viewed through Windows Properties(Right Click-> Properties), and it also losses its transparency when using waifu2x-vulkan.

I saved the image as bear.png and run it through ffmpeg with the suggested command:
.\ffmpeg.exe -i .\bear.png -pix_fmt rgba bear_ff.png
And it ran without losing its transparency (-s 2 -n 2):

An altenative I found is with python and the Pillow library:
from PIL import Image
img = Image.open("bear.png")

#Checks if img is 8bit
if img.mode == "L" or img.mode == "P":
    #Converts to 32 bit and overwrites the original image.
    #Use a different filename from the original if you want to preserve the original image.
    img.convert("RGBA").save("bear.png")

fixed in https://github.com/nihui/waifu2x-ncnn-vulkan/commit/7ab564a955c23bcfbdabfe093a1791f5a761cb32


Fix go routine release bug

Codecov Report

Merging #23 (608c898) into main (49bc5cf) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main      #23   +/-   ##
=======================================
  Coverage   61.98%   61.98%
=======================================
  Files           4        4
  Lines         121      121
=======================================
  Hits           75       75
  Misses         36       36
  Partials       10       10

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 49bc5cf...608c898. Read the comment docs.


非常欣赏你的努力

@onevcat
I feel like you probably don't get this enough, but on the behalf of everyone who relies on your framework, I just want to say thank you.

Thanks for your kind word and it's my honor.


git fetch -q --tags did not run successfully (related to add_ignore_timestamps_errors_to_interface)

I got an error while trying @weiglszonja's steps in https://github.com/catalystneuro/tye-lab-to-nwb/pull/34#issuecomment-1740606634 to create a new fresh environment:
conda create --name tyenwb39 python=3.9
conda activate tyenwb39
pip install -r src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_requirements.txt

gave this error:
(tyenwb39) lkeyes@node32:/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb$ pip install -r src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_requirements.txt
Obtaining neuroconv from git+https://github.com/catalystneuro/neuroconv@add_ignore_timestamps_errors_to_interface#egg=neuroconv (from -r src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_requirements.txt (line 1))
  Updating ./src/neuroconv clone (to revision add_ignore_timestamps_errors_to_interface)
  Running command git fetch -q --tags
  fatal: pack has 5 unresolved deltas
  fatal: index-pack failed
  error: subprocess-exited-with-error

  × git fetch -q --tags did not run successfully.
  │ exit code: 128
  ╰─> See above for output.

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× git fetch -q --tags did not run successfully.
│ exit code: 128
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

I attempted to pip uninstall neuroconv but it is not installed in this environment.
This is what is in my current neurotensin_valence_requirements.txt:
-e git+https://github.com/catalystneuro/neuroconv@add_ignore_timestamps_errors_to_interface#egg=neuroconv
neuroconv[openephys,plexon,video]
git+https://github.com/neuralensemble/python-neo@master
ndx_pose>=0.1.1
oiffile==2022.9.29
easydict>=1.10
openpyxl>=3.1.2

@laurelrr I haven't seen this error before, looks like it installed neuroconv inside the project folder and now it's having troubles updating it. I you have a neuroconv folder at /snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb/src/neuroconv can you try deleting it first?
And then can you try to remove the -e flag in neurotensin_valence_requirements.txt, so the file should look like this:
git+https://github.com/catalystneuro/neuroconv@add_ignore_timestamps_errors_to_interface#egg=neuroconv
neuroconv[openephys,plexon,video]
git+https://github.com/neuralensemble/python-neo@master
ndx_pose>=0.1.1
oiffile==2022.9.29
easydict>=1.10
openpyxl>=3.1.2

and repeat
conda create --name tyenwbenv39 python=3.9
conda activate tyenwbenv39
pip install -r src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_requirements.txt
pip install -e .
python src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_convert_session.py

Thank you, I actually seemed to have two neuroconv folders installed for some reason.  Anyway, I uninstalled both and applied your suggestions.  It installed properly and I updated the neurotensin_valence_convert_session.py file to point to my example and ran python src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_convert_session.py
I received an error:
(tyenwbenv39) lkeyes@node32:/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb$ python src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_convert_session.py
Source data is valid!
Metadata is valid!
conversion_options is valid!
/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/pynwb/file.py:471: UserWarning: Date is missing timezone information. Updating to local timezone.
  args_to_set['session_start_time'] = _add_missing_timezone(session_start_time)
/nadata/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb/src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_convert_session.py:203: UserWarning: There was an error during the conversion of /nadata/snlkt/data/hao/Neurotensin/NWB/nwbfiles/H41_Disc5_manual.nwb. The full traceback: The video file is not open!
  warn(f"There was an error during the conversion of {nwbfile_path}. The full traceback: {e}")

This is the error log text:
(tyenwbenv39) lkeyes@node32:/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb$ cat /snlkt/data/hao/Neurotensin/NWB/nwbfiles/H41_Disc5_manual_error_log.txt
Traceback (most recent call last):
  File "/nadata/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb/src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_convert_session.py", line 186, in session_to_nwb
    converter.run_conversion(
  File "/nadata/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb/src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valencenwbconverter.py", line 56, in run_conversion
    super().run_conversion(
  File "/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/neuroconv/nwbconverter.py", line 160, in run_conversion
    self.add_to_nwbfile(nwbfile_out, metadata, conversion_options)
  File "/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/neuroconv/nwbconverter.py", line 114, in add_to_nwbfile
    data_interface.add_to_nwbfile(
  File "/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/neuroconv/datainterfaces/behavior/video/videodatainterface.py", line 337, in add_to_nwbfile
    rate = video.get_video_fps()
  File "/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/neuroconv/datainterfaces/behavior/video/video_utils.py", line 61, in get_video_fps
    assert self.isOpened(), self._video_open_msg
AssertionError: The video file is not open!

I do have a whitespace character in the movie filename  original_video_file_path = "/nadata/snlkt/data/hao/Neurotensin/ephys/recordings/PVT-BLA_NT_KO_CeMproj batch3/videos/H41Disc5.mkv".  Would this cause this issue?

It could be the whitespace, can you try this in the single session conversion script? (easier to modify there) If it doesn't work, can you share this video with us and I'm going to take a closer look.

Here is the single session conversion script:
"""Primary script to run to convert an entire session for of data using the NWBConverter."""
import traceback
from importlib.metadata import version
from pathlib import Path
from typing import Optional, Dict
from warnings import warn

from dateutil import parser

from neuroconv.utils import (
    load_dict_from_file,
    dict_deep_update,
    FilePathType,
    FolderPathType,
)
from nwbinspector import inspect_nwbfile
from nwbinspector.inspector_tools import save_report, format_messages
from packaging.version import Version

from tye_lab_to_nwb.neurotensin_valence import NeurotensinValenceNWBConverter

def session_to_nwb(
    nwbfile_path: FilePathType,
    ecephys_recording_folder_path: Optional[FolderPathType] = None,
    subject_metadata: Optional[Dict[str, str]] = None,
    plexon_file_path: Optional[FilePathType] = None,
    events_file_path: Optional[FilePathType] = None,
    pose_estimation_file_path: Optional[FilePathType] = None,
    pose_estimation_config_file_path: Optional[FilePathType] = None,
    pose_estimation_sampling_rate: Optional[float] = None,
    session_start_time: Optional[str] = None,
    original_video_file_path: Optional[FilePathType] = None,
    labeled_video_file_path: Optional[FilePathType] = None,
    confocal_images_oif_file_path: Optional[FilePathType] = None,
    confocal_images_composite_tif_file_path: Optional[FilePathType] = None,
    stub_test: bool = False,
):
    """
    Converts a single session to NWB.

    Parameters
    ----------
    nwbfile_path : FilePathType
        The file path to the NWB file that will be created.
    ecephys_recording_folder_path: FolderPathType
         The path that points to the folder where the OpenEphys (.continuous) files are located.
    subject_metadata: dict, optional
        The optional metadata for the experimental subject.
    plexon_file_path: FilePathType, optional
        The path that points to the Plexon (.plx) file that contains the spike times.
    events_file_path: FilePathType, optional
        The path that points to the .mat file that contains the event onset and offset times.
    pose_estimation_file_path: FilePathType, optional
        The path that points to the .csv file that contains the DLC output.
    pose_estimation_config_file_path: FilePathType, optional
        The path that points to the .pickle file that contains the DLC configuration settings.
    original_video_file_path: FilePathType, optional
        The path that points to the original behavior movie that was used for pose estimation.
    labeled_video_file_path: FilePathType, optional
        The path that points to the labeled behavior movie.
    confocal_images_oif_file_path: FilePathType, optional
        The path that points to the Olympus Image File (.oif).
    confocal_images_composite_tif_file_path: FilePathType, optional
        The path that points to the TIF image that contains the confocal images aggregated over depth.
    stub_test: bool, optional
        For testing purposes, when stub_test=True only writes a subset of ecephys and plexon data.
        Default is to write the whole ecephys recording and plexon data to the file.
    """

    source_data = dict()
    conversion_options = dict()

    # Add Recording
    if ecephys_recording_folder_path:
        recording_source_data = dict(folder_path=str(ecephys_recording_folder_path), stream_name="Signals CH")
        if Version(version("neo")) > Version("0.12.0"):
            recording_source_data.update(ignore_timestamps_errors=True)

        source_data.update(dict(Recording=recording_source_data))
        conversion_options.update(dict(Recording=dict(stub_test=stub_test)))

    # Add Sorting (optional)
    if plexon_file_path:
        source_data.update(dict(Sorting=dict(file_path=str(plexon_file_path))))
        conversion_options.update(dict(Sorting=dict(stub_test=stub_test)))

    # Add Behavior (optional)
    # Add events
    if events_file_path:
        event_names_mapping = {
            0: "reward_stimulus_presentation",
            1: "phototagging",
            2: "shock_stimulus_presentation",
            3: "reward_delivery",
            4: "shock_relay",
            5: "port_entry",
            6: "neutral_stimulus_presentation",
        }
        read_kwargs = dict(event_names_mapping=event_names_mapping)
        events_source_data = dict(file_path=str(events_file_path), read_kwargs=read_kwargs)
        source_data.update(dict(Events=events_source_data))

        events_column_mappings = dict(onset="start_time", offset="stop_time")
        events_conversion_options = dict(column_name_mapping=events_column_mappings)
        conversion_options.update(
            dict(
                Events=events_conversion_options,
            )
        )

    # Add pose estimation (optional)
    pose_estimation_source_data = dict()
    pose_estimation_conversion_options = dict()
    if pose_estimation_file_path:
        pose_estimation_source_data.update(file_path=str(pose_estimation_file_path))
        if pose_estimation_config_file_path:
            pose_estimation_source_data.update(config_file_path=str(pose_estimation_config_file_path))
        elif pose_estimation_sampling_rate is not None:
            pose_estimation_conversion_options.update(rate=float(pose_estimation_sampling_rate))

        source_data.update(dict(PoseEstimation=pose_estimation_source_data))

    if original_video_file_path:
        pose_estimation_conversion_options.update(original_video_file_path=original_video_file_path)
        source_data.update(
            dict(
                OriginalVideo=dict(file_paths=[str(original_video_file_path)]),
            )
        )
    if labeled_video_file_path:
        pose_estimation_conversion_options.update(labeled_video_file_path=labeled_video_file_path)

    if pose_estimation_source_data:
        # The edges between the nodes (e.g. labeled body parts) defined as array of pairs of indices.
        edges = [(0, 1), (0, 2), (2, 3), (1, 3), (5, 6), (5, 7), (5, 8), (5, 9)]
        pose_estimation_conversion_options.update(edges=edges)
        conversion_options.update(dict(PoseEstimation=pose_estimation_conversion_options))

    # Add confocal images
    images_source_data = dict()
    if confocal_images_oif_file_path:
        images_source_data.update(file_path=str(confocal_images_oif_file_path))
        if confocal_images_composite_tif_file_path:
            images_source_data.update(composite_tif_file_path=str(confocal_images_composite_tif_file_path))

        source_data.update(dict(Images=images_source_data))

    converter = NeurotensinValenceNWBConverter(source_data=source_data)

    # Add datetime to conversion
    metadata = converter.get_metadata()

    # Update default metadata with the editable in the corresponding yaml file
    editable_metadata_path = Path(__file__).parent / "metadata" / "general_metadata.yaml"
    editable_metadata = load_dict_from_file(editable_metadata_path)
    metadata = dict_deep_update(metadata, editable_metadata)

    if subject_metadata:
        metadata = dict_deep_update(metadata, dict(Subject=subject_metadata))

    if "session_id" not in metadata["NWBFile"]:
        if ecephys_recording_folder_path:
            ecephys_recording_folder_path = Path(ecephys_recording_folder_path)
            ecephys_folder_name = ecephys_recording_folder_path.name
            session_id = ecephys_folder_name.replace(" ", "").replace("_", "-")
        elif pose_estimation_file_path:
            session_id = Path(pose_estimation_file_path).name.replace(" ", "").replace("_", "-")
        else:
            session_id = Path(nwbfile_path).stem.replace(" ", "").replace("_", "-")

        metadata["NWBFile"].update(session_id=session_id)

    if "session_start_time" not in metadata["NWBFile"]:
        if session_start_time is None:
            raise ValueError(
                "When ecephys recording is not specified the start time of the session must be provided."
                "Specify session_start_time in YYYY-MM-DDTHH:MM:SS format (e.g. 2023-08-21T15:30:00)."
            )
        session_start_time_dt = parser.parse(session_start_time)
        metadata["NWBFile"].update(session_start_time=session_start_time_dt)

    nwbfile_path = Path(nwbfile_path)
    try:
        # Run conversion
        converter.run_conversion(
            nwbfile_path=str(nwbfile_path), metadata=metadata, conversion_options=conversion_options
        )

        # Run inspection for nwbfile
        results = list(inspect_nwbfile(nwbfile_path=nwbfile_path))
        report_path = nwbfile_path.parent / f"{nwbfile_path.stem}_inspector_result.txt"
        save_report(
            report_file_path=report_path,
            formatted_messages=format_messages(
                results,
                levels=["importance", "file_path"],
            ),
        )
    except Exception as e:
        with open(f"{nwbfile_path.parent}/{nwbfile_path.stem}_error_log.txt", "w") as f:
            f.write(traceback.format_exc())
        warn(f"There was an error during the conversion of {nwbfile_path}. The full traceback: {e}")

if __name__ == "__main__":
    # Parameters for conversion
    # The path that points to the folder where the OpenEphys (.continuous) files are located.
    ecephys_folder_path = Path("/nadata/snlkt/data/hao/Neurotensin/ephys/recordings/forLaurel/H41_2020-04-29_16-55-26_Disc5_9")

    # The path that points to the Plexon file (optional)
    # plexon_file_path = None
    plexon_file_path = Path("/nadata/snlkt/data/hao/Neurotensin/ephys/recordings/forLaurel/H41_2020-04-29_16-55-26_Disc5_9/0041_20200430_9.plx")

    # Parameters for events data (optional)
    # The file path that points to the events.mat file
    # events_mat_file_path = None
    events_mat_file_path = Path(
        "/nadata/snlkt/data/hao/Neurotensin/ephys/recordings/forLaurel/H41_2020-04-29_16-55-26_Disc5_9/0041_20200430_9_events.mat"
    )

    # Parameters for pose estimation data (optional)
    # The file path that points to the DLC output (.CSV file)
    # pose_estimation_file_path = None
    pose_estimation_file_path = (
        "/nadata/snlkt/data/hao/Neurotensin/DLC/DLCresults/41_Disc5DLC_resnet50_Hao_MedPC_ephysFeb9shuffle1_800000.csv"
    )
    # The file path that points to the DLC configuration file (.pickle file), optional
    # pose_estimation_config_file_path = None
    pose_estimation_config_file_path = (
        "/nadata/snlkt/data/hao/Neurotensin/DLC/DLCresults/H41Disc5DLC_resnet50_Hao_MedPC_ephysFeb9shuffle1_800000includingmetadata.pickle"
    )
    # If the pickle file is not available the sampling rate in units of Hz for the behavior data must be provided.
    pose_estimation_sampling_rate = None

    # For sessions where only the pose estimation data is available the start time of the session must be provided.
    # The session_start_time in YYYY-MM-DDTHH:MM:SS format (e.g. 2023-08-21T15:30:00).
    session_start_time = None

    # The file path that points to the behavior movie file, optional
    # original_video_file_path = None
    original_video_file_path = r"/nadata/snlkt/data/hao/Neurotensin/ephys/recordings/PVT-BLA_NT_KO_CeMproj batch3/videos/H41Disc5.mkv"
    # The file path that points to the labeled behavior movie file, optional
    # labeled_video_file_path = None
    labeled_video_file_path = "/nadata/snlkt/data/hao/Neurotensin/DLC/DLCresults/H41Disc5DLC_resnet50_Hao_MedPC_ephysFeb9shuffle1_800000_labeled.mp4"

    # Parameters for histology images (optional)
    # The file path to the Olympus Image File (.oif)
    confocal_images_oif_file_path = "/nadata/snlkt/data/hao/Neurotensin/Imaging/H21-H42/H41PVT_40x.oif"
    # The file path to the aggregated confocal images in TIF format.
    # confocal_images_composite_tif_file_path = None
    confocal_images_composite_tif_file_path = r"/snlkt/data/hao/Neurotensin/CellProfiler/NT CRISPR/channel merged/H41_MAX_Composite.tif"

    # The file path where the NWB file will be created.
    nwbfile_path = Path("/nadata/snlkt/data/hao/Neurotensin/NWB/nwbfiles/H41_Disc5_manual.nwb")

    # For faster conversion, stub_test=True would only write a subset of ecephys and plexon data.
    # When running a full conversion, use stub_test=False.
    stub_test = False

    # subject metadata (optional)
    subject_metadata = dict(sex="M",age="P60D",genotype="Wild type",strain="C57BL/6J")

    session_to_nwb(
        nwbfile_path=nwbfile_path,
        ecephys_recording_folder_path=ecephys_folder_path,
        subject_metadata=subject_metadata,
        plexon_file_path=plexon_file_path,
        events_file_path=events_mat_file_path,
        pose_estimation_file_path=pose_estimation_file_path,
        pose_estimation_config_file_path=pose_estimation_config_file_path,
        pose_estimation_sampling_rate=pose_estimation_sampling_rate,
        session_start_time=session_start_time,
        original_video_file_path=original_video_file_path,
        labeled_video_file_path=labeled_video_file_path,
        confocal_images_oif_file_path=confocal_images_oif_file_path,
        confocal_images_composite_tif_file_path=confocal_images_composite_tif_file_path,
        stub_test=stub_test,
    )

I have the same error:
(tyenwbenv39) lkeyes@node32:~/Projects/GIT/tye-lab-to-nwb$ python src/tye_lab_to_nwb/neurotensin_valence/neurote                                                                                nsin_valence_convert_session.py
Source data is valid!
Metadata is valid!
conversion_options is valid!
/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/pynwb/file.py:471: UserWarning: Date is missing timezone information. Updating to local timezone.
  args_to_set['session_start_time'] = _add_missing_timezone(session_start_time)
/nadata/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb/src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_convert_session.py:203: UserWarning: There was an error during the conversion of /nadata/snlkt/data/hao/Neurotensin/NWB/nwbfiles/H41_Disc5_manual.nwb. The full traceback: The video file is not open!
  warn(f"There was an error during the conversion of {nwbfile_path}. The full traceback: {e}")

I will upload the video via Globus shortly.

Also, this is the log output:
(tyenwbenv39) lkeyes@node32:~/Projects/GIT/tye-lab-to-nwb$ cat /snlkt/data/hao/Neurotensin/NWB/nwbfiles/H41_Disc5_manual_error_log.txt
Traceback (most recent call last):
  File "/nadata/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb/src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valence_convert_session.py", line 186, in session_to_nwb
    converter.run_conversion(
  File "/nadata/snlkt/home/lkeyes/Projects/GIT/tye-lab-to-nwb/src/tye_lab_to_nwb/neurotensin_valence/neurotensin_valencenwbconverter.py", line 56, in run_conversion
    super().run_conversion(
  File "/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/neuroconv/nwbconverter.py", line 160, in run_conversion
    self.add_to_nwbfile(nwbfile_out, metadata, conversion_options)
  File "/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/neuroconv/nwbconverter.py", line 114, in add_to_nwbfile
    data_interface.add_to_nwbfile(
  File "/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/neuroconv/datainterfaces/behavior/video/videodatainterface.py", line 337, in add_to_nwbfile
    rate = video.get_video_fps()
  File "/home/lkeyes/anaconda3/envs/tyenwbenv39/lib/python3.9/site-packages/neuroconv/datainterfaces/behavior/video/video_utils.py", line 61, in get_video_fps
    assert self.isOpened(), self._video_open_msg
AssertionError: The video file is not open!

Ah! This was my mistake.  I had the wrong file extension listed. (We have a mixture of .mkv and .asf videos across subjects.)
It is running now.


[Bug]: lot of "Error when using sourcemap for reporting an error: Can't resolve original location of error." when building using Vite

Tremor Version
v3.18.0
Link to minimal reproduction
n/d
Steps to reproduce

run "vite build" (using vite v5.4.2)
the build process will show lot of "Error when using sourcemap for reporting an error: Can't resolve original location of error."

What is expected?
have no errors on the build process
What is actually happening?
I get this errors:
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
What browsers are you seeing the problem on?
No response
Any additional comments?
No response

Hi! Did you follow the vite installation on our website? https://npm.tremor.so/docs/getting-started/installation

yes, the only thing I noticed is that i'm using Headless UI v2.1.2. It's compatible?

Hmm, not all componets from the error are using Headless UI. I will try installing it today again and report back.

Hi! Did the installation but I couldn't replicate your issue.

Can you share a replication of the error? Maybe a repository?

Hello @severinlandolt !
This is the full output of npm run build:
><EMAIL_ADDRESS>build
> tsc && vite build --base=/portal-tenant/

vite v5.4.2 building for production...
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
<EMAIL_ADDRESS>(1:0): Error when using sourcemap for reporting an error: Can't resolve original location of error.
✓ 3176 modules transformed.
computing gzip size (2)...copied:
  ../public/portal-tenant/manifest.webmanifest → ../public/manifest.webmanifest
computing gzip size (3)...  ../public/portal-tenant/.vite/manifest.json → ../public/portal-tenant/manifest.json
../public/portal-tenant/manifest.webmanifest                            0.59 kB
../public/portal-tenant/.vite/manifest.json                             1.34 kB │ gzip:   0.38 kB
../public/portal-tenant/assets/flags-Cx4r8tdH.webp                     28.17 kB
<EMAIL_ADDRESS>                66.55 kB
../public/portal-tenant/assets/utils-kFyEPpp2.js                      264.62 kB
../public/portal-tenant/assets/index-DAK-MTQn.css                     518.76 kB │ gzip:  60.13 kB
../public/portal-tenant/assets/workbox-window.prod.es5-CIVDLvzL.js      5.77 kB │ gzip:   2.35 kB │ map:     14.50 kB
../public/portal-tenant/assets/tremor-CWDoRbCk.js                     950.74 kB │ gzip: 253.27 kB │ map:  3,730.38 kB
../public/portal-tenant/assets/index-_lTX1IM9.js                    2,415.90 kB │ gzip: 483.99 kB │ map: 16,054.48 kB

(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
✓ built in 11.69s

PWA v0.17.5
mode      generateSW
precache  51 entries (5772.84 KiB)
files generated
  ../public/sw.js.map
  ../public/sw.js
  ../public/workbox-dded88f3.js.map
  ../public/workbox-dded88f3.js

and this is the package.json file:
{
  "name": "portal-tenant",
  "version": "2.0.4",
  "private": true,
  "type": "module",
  "dependencies": {
    "@babel/plugin-transform-private-property-in-object": "^7.22.11",
    "@dnd-kit/core": "^6.1.0",
    "@dnd-kit/modifiers": "^7.0.0",
    "@ebay/nice-modal-react": "^1.2.13",
    "@fortawesome/fontawesome-svg-core": "^6.4.2",
    "@fortawesome/free-brands-svg-icons": "^6.4.2",
    "@fortawesome/pro-light-svg-icons": "^6.4.2",
    "@fortawesome/pro-regular-svg-icons": "^6.4.2",
    "@fortawesome/pro-solid-svg-icons": "^6.4.2",
    "@fortawesome/react-fontawesome": "^0.2.0",
    "@headlessui/react": "^2.1.3",
    "@headlessui/tailwindcss": "^0.2.1",
    "@hookform/resolvers": "^3.1.1",
    "@remixicon/react": "^4.2.0",
    "@sentry/browser": "^8.26.0",
    "@sentry/react": "^8.26.0",
    "@tailwindcss/container-queries": "^0.1.1",
    "@tanstack/react-virtual": "^3.1.3",
    "@tremor/react": "^3.18.0",
    "@types/node": "^20.6.3",
    "@types/react": "^18.2.8",
    "@types/react-dom": "^18.2.4",
    "@types/react-modal": "^3.16.3",
    "@uidotdev/usehooks": "^2.1.1",
    "@vitejs/plugin-basic-ssl": "^1.0.1",
    "classnames": "^2.3.2",
    "date-fns": "^3.6.0",
    "date-fns-timezone": "^0.1.4",
    "date-fns-tz": "^3.1.3",
    "filepond": "^4.30.6",
    "filepond-plugin-file-encode": "^2.1.14",
    "filepond-plugin-file-validate-size": "^2.2.8",
    "filepond-plugin-file-validate-type": "^1.2.8",
    "i18next": "^23.2.11",
    "i18next-http-backend": "^2.2.1",
    "intl-tel-input": "^24.0.1",
    "libphonenumber-js": "^1.10.48",
    "pusher-js": "^8.3.0",
    "react": "^18.2.0",
    "react-day-picker": "^9.0.8",
    "react-dom": "^18.2.0",
    "react-filepond": "^7.1.2",
    "react-hook-form": "^7.45.1",
    "react-hot-toast": "^2.4.1",
    "react-i18next": "^15.0.1",
    "react-idle-timer": "^5.7.2",
    "react-modal": "^3.16.1",
    "react-select": "^5.7.4",
    "react-textarea-autosize": "^8.5.3",
    "react-use-draggable-scroll": "^0.4.7",
    "swr": "^2.2.0",
    "typescript": "^4.9.5",
    "uuid": "^10.0.0",
    "wouter": "^2.11.0",
    "zod": "^3.21.4",
    "zustand": "^4.3.8"
  },
  "scripts": {
    "start": "vite --host",
    "build": "tsc && vite build --base=/portal-tenant/",
    "serve": "vite serve",
    "test": "vitest"
  },
  "eslintConfig": {
    "extends": [
      "react-app"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@tailwindcss/forms": "^0.5.8",
    "@types/uuid": "^10.0.0",
    "@vitejs/plugin-react": "^4.0.3",
    "autoprefixer": "^10.4.20",
    "lightningcss": "^1.22.1",
    "postcss": "^8.4.42",
    "prettier": "^3.0.1",
    "prettier-plugin-tailwindcss": "^0.6.6",
    "prop-types": "^15.8.1",
    "rollup-plugin-copy": "^3.5.0",
    "tailwindcss": "^3.4.10",
    "terser": "^5.26.0",
    "vite": "^5.4.2",
    "vite-plugin-pwa": "^0.17.4",
    "vite-plugin-svgr": "^4.0.0",
    "vite-tsconfig-paths": "^4.2.0",
    "vitest": "^2.0.5"
  }
}

Thank you for your help! :)

Hi @ibarral, the only thing that comes to my mind would be pinning the headless ui version to npm i<EMAIL_ADDRESS>

hello @severinlandolt I just did the test, and I can confirm that the problem started when I migrated from Vite 4 to 5.
Maybe is some misconfiguration on my config files?
vite.config.ts file
import basicSsl from "@vitejs/plugin-basic-ssl";
import react from "@vitejs/plugin-react";
import copy from "rollup-plugin-copy";
import { defineConfig } from "vite";
import { VitePWA, VitePWAOptions } from "vite-plugin-pwa";
import svgrPlugin from "vite-plugin-svgr";
import viteTsconfigPaths from "vite-tsconfig-paths";

const pwaOptions: Partial<VitePWAOptions> = {
  registerType: "prompt",
  outDir: "../public",
  base: "/",
  manifest: {
    name: "Restoo",
    short_name: "Restoo",
    scope: "/",
    start_url: "/myrestoo/bookings",
    icons: [
      {
        src: "/portal-tenant/favicon-192.png",
        type: "image/png",
        sizes: "192x192",
        purpose: "any",
      },
      {
        src: "/portal-tenant/favicon-192.png",
        type: "image/png",
        sizes: "192x192",
        purpose: "maskable",
      },
      {
        src: "/portal-tenant/favicon-512.png",
        type: "image/png",
        sizes: "512x512",
        purpose: "any",
      },
      {
        src: "/portal-tenant/favicon-512.png",
        type: "image/png",
        sizes: "512x512",
        purpose: "maskable",
      },
    ],
    display: "standalone",
    theme_color: "#0f172a",
    background_color: "#0f172a",
    orientation: "any",
  },
  workbox: {
    cleanupOutdatedCaches: true,
    globPatterns: [
      "admin/assets/fonts/*.{woff2,eot,svg,ttf,woff}",
      "portal-tenant/**/*.{js,css,html,svg,png,ico}",
      "portal-tenant/locales/**/*.json",
    ],
    maximumFileSizeToCacheInBytes: 4194304,
    navigateFallback: null,
    runtimeCaching: [
      {
        urlPattern: ({ url }) => {
          return url.pathname.startsWith("/api/tenant");
        },
        handler: "NetworkFirst",
        options: {
          cacheName: "restoo-tenant-api",
          cacheableResponse: { statuses: [0, 200] },
        },
      },
      {
        urlPattern: ({ url }) => {
          return url.pathname.startsWith("/myrestoo/beta/");
        },
        handler: "NetworkFirst",
        options: {
          cacheName: "restoo-tenant-portal",
          cacheableResponse: { statuses: [0, 200] },
        },
      },
    ],
  },
};

export default defineConfig({
  plugins: [react(), viteTsconfigPaths(), svgrPlugin(), basicSsl(), VitePWA(pwaOptions)],
  server: {
    port: 3000,
  },
  build: {
    sourcemap: true,
    outDir: "../public/portal-tenant",
    emptyOutDir: true,
    manifest: true,
    minify: "terser",
    cssMinify: "lightningcss",
    rollupOptions: {
      input: ["./src/index.tsx"],
      output: {
        manualChunks: {
          tremor: ["@tremor/react"],
        },
      },
      plugins: [
        copy({
          verbose: true,
          hook: "writeBundle",
          targets: [
            { src: "../public/portal-tenant/manifest.webmanifest", dest: "../public/" },
            { src: "../public/portal-tenant/.vite/manifest.json", dest: "../public/portal-tenant/" },
          ],
        }),
      ],
    },
  },
  define: {
    __APP_NAME__: JSON.stringify(process.env.npm_package_name),
    __APP_VERSION__: JSON.stringify(process.env.npm_package_version),
  },
});

tsconfig.json file
{
  "compilerOptions": {
    "target": "ESNext",
    "lib": ["dom", "dom.iterable", "esnext"],
    "types": ["vite/client", "vite-plugin-svgr/client", "vite-plugin-pwa/react", "./vite-env"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "baseUrl": ".",
    "paths": {
      "@components/*": ["./src/components/*"],
      "@stores/*": ["./src/stores/*"],
      "@hooks/*": ["./src/hooks/*"],
      "@utils/*": ["./src/utils/*"],
      "@typesDef/*": ["./src/types/*"],
      "@helpers/*": ["./src/helpers/*"],
      "@schemaValidators/*": ["./src/schemaValidators/*"],
      "test-utils": ["./utils/test-utils"]
    }
  },
  "include": ["src"]
}

Hi! I am no expert in Vite. Maybe add this to your define config: defineConfig
 optimizeDeps: {     exclude: ['@tremor/react']   },

Did this help? Going to close this until further notice :)


Zulip error

I've install and setup zulip for my testing purposes, i've used gmail for outgoing SMTP.
I was was to get realm for my Organization setup. However, after i click the CREATE ORGANIZATION. i am getting the following error:
ZULIP
Log in Register
Internal server error.
Well oops. This one's probably our fault. Sorry about that!
If you'd like, you can drop us a line to let us know what happened.
Your help is highly appreciated

@phfta check /var/log/zulip/errors.log; you probably have a configuration issue.

I tested my email outgoing and it works fine.
however i am getting this error message:
root@zulip:~/zulip/scripts/setup# tail -f /var/log/zulip/errors.log
return mail.send() > 0
File "/home/zulip/deployments/2017-08-01-12-39-20/zulip-venv/lib/python2.7/site-packages/django/core/mail/message.py", line 342, in send
return self.get_connection(fail_silently).send_messages([self])
File "/home/zulip/deployments/2017-08-01-12-39-20/zulip-venv/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 100, in send_messages
new_conn_created = self.open()
File "/home/zulip/deployments/2017-08-01-12-39-20/zulip-venv/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 67, in open
self.connection.login(self.username, self.password)
File "/usr/lib/python2.7/smtplib.py", line 622, in login
raise SMTPAuthenticationError(code, resp)
SMTPAuthenticationError: (535, '5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials m6sm58764747pgn.86 - gsmtp')
Not sure if i still need to re-initialized the database

@phfta if manage.py send_test_email works, then I bet you forgot restart the server after testing email sending, so the server is still running with your previous not-yet-working SMTP configuration.  Can you try restarting?

Thanks it works now. by the way Tim, do you have skype?

Closing issue since initial question has been resolved


[QT-Wallet] Same error message displayed twice, when bad seed phrase is used in recovery

Description:
Same error message displayed twice, when bad seed phrase is used in recovery.
Error Message
BIP39 Mnemonic (word list) Error, Unable to convert mnemonic passphrase into seed, bip39 checksum 0x1c does not match expected 0xee
BIP39 Mnemonic (word list) Error, Unable to convert mnemonic passphrase into seed, bip39 checksum 0x1c does not match expected 0xee

Try to recover with a phrase
taxi volcano position attend call glory
taxi volcano position attend call glory
taxi volcano position attend call glory
taxi volcano position attend call glory
Environment:

QT Wallet on Windows

With current release there is 1 message. Probably issue was fixed.
But there is another issue with qt elements drawing. Will use this ticket for that

Verified with the latest build and observed the same message twice.
Hence re-opening this ticket.

Able to reproduce it under the Windows (MacOs is fine).

Testing:  Please use  Windows to verify

Verified on Windows, hence closing this ticket.


Updating user list to 0.5. Grey on hover. Adding i18n text on the delete link.

Changing delete -> remove
Adding text for screen readers on the Delete link.
Adding hover on  to help select the right row.
Changing the STAFF grey to blue, to fit with the new hover.
https://trello.com/c/99Nq5uDP/208-account-management-content-changes

I updated the invitation table and fixed the missing {} around {email}.


#1436 test db setup

Description
These changes refactor the test setup to run with one database for all threads instead of a database for each thread.  This requires significant refactoring of fixtures and tests, including proper teardown.  All fixtures should handle their own teardown.  Tests that create new rows directly must delete them, and tests that include session-scoped fixtures should not alter those fixtures.
I initially tried to restore use of the addon pytest-flask-sqlalchemy, which we used before the Flask upgrade in April 2023.  However, that addon isn't being maintained and isn't compatible with flask-sqlalchemy >= 3.0.
issue #1436
Type of change
Please check the relevant option(s).

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

How Has This Been Tested?

How has this been tested? (e.g. Unit tests, Tested locally, Tested as a GitHub action, Depoyed to dev, etc)
Please provide relevant information and / or links to demonstrate the functionality or fix. (e.g. screenshots, link to deployment, regression test results, etc)
Checklist

[ ] I have assigned myself to this PR
[ ] PR has an appropriate title: #9999 - What the thing does
[ ] PR has a detailed description, including links to specific documentation
[ ] I have added the appropriate labels to the PR.
[ ] I did not remove any parts of the template, such as checkboxes even if they are not used
[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to any documentation
[ ] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have ensured the latest master is merged into my branch and all checks are green prior to review
[ ] New and existing unit tests pass locally with my changes
[ ] Any dependent changes have been merged and published in downstream modules
[ ] The ticket is now moved into the DEV test column

superceded by a more recent PR. Closing.


Fix border radius shader

The border radius shader has broken types. I wonder how it compiled before.

Looks great @msvbg - thanks for fixing this!

I wonder how it compiled before.

Seems like some systems / drivers are more 'forgiving'... we should have a CI test that exercises this though (perhaps a software implementation like Mesa could be set up to run in a strict mode). We're missing that validation at the moment.


[Meta Data] Platform type logging into report

Post this https://github.com/openbmc/openbmc-test-automation/issues/332   , this code need to go it which is needed for CT metrix. one of the filters needed in the database.
This also need to change the tools to read from the XML for this specific information and populate the CSV file.
Depending on the code changes required.. the estimation may differ here.

This code has as well have a dependency on https://github.com/openbmc/openbmc-test-automation/issues/217  which is under review

Code under review https://gerrit.openbmc-project.xyz/#/c/2353/
Reducing the estimate as it is a simple change.


Scroll does not work on android

Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.

Device: [e.g. iPhone6]
OS: [e.g. iOS8.1]
Version of the library being used [e.g. 1.2.17]

Additional context
Add any other context about the problem here.

i am facing issue while scrolling on chart its work on ios but not on android is there any possible solutions

I am facing the same issue, for tooltip added on line chart, is there any solution to make the scroll on android smooth

Hi @poonamdhomane @AkramSyed002
Can you please try the latest version of the library- 1.3.7
Please comment here if the issue still persists.


Version 0.5.0 requires very broad permissions

The "Read and change all your data on all websites" looks kinda invasive :-)
Though I see that other wallets (like the Cardano's Yoroi) have a similar "feature"
https://github.com/Emurgo/yoroi-frontend/issues/2655

This isn't a new permission required by ArConnect, I suspect it's something by chrome. The only new permission required by the new update is "notifications". I'll look into this, but I'm afraid this is out of our control.

We have added more permissions in the past to ArConnect, but these were all "optional" permissions, while "notifications" is not an optional one.
Any time an extension adds new permissions that would result in additional permission warnings, it is disabled on the user's machine, and the user is asked to re-enable it with the new permissions.
Adding optional permissions will not disable the extension, since those are not automatically approve, rather the user has to grant them when they're being used.

Hmm, I see, that is a simply a screenshot from Chrome's extension's view - I've noticed that ArConnect stopped working few days ago in my browser, so I've checked the chrome://extensions/ - and that is what I saw.
I cannot enable ArConnect without granting this permission.
It also shows when I'm trying to install the ArConnect from scratch:

But..maybe that is caused by some update in the Chromium itself and maybe all extensions right now require such permission (in order to work at all).
It would be probably good to test it with some older ArConnect version.

I'm pretty sure it's not gonna happen with older versions. I suspect Google has some kind of script that checks for "dangerous" permissions, and somehow it prompts this "Read and change all your data on all websites" with the "Display notifications" permission as well.

Our q-rate (which is using some ooold ArConnect version underneath) also needs this permission now:

So I believe this a new Chrome "feature" - maybe to warn the users that using any kind of browser extensions might not be very safe.
This would probably require to track whether sth in https://chromium.googlesource.com/chromium/src/+/refs/heads/main/chrome/browser/extensions/permission_message_combinations_unittest.cc#1214 have changed recently

Hmm okay thanks for researching that, this explains a lot... This is quite annoying, but it seems like this is triggered by a permission, that was used previously, just the new chrome version flags it for "verification by the user".
As a sidenote, you can see the permissions we have added over ArConnect's development here (the latest only adds notifications, so the prompt is clearly misleading on chrome's end)

0.5.0: https://github.com/th8ta/ArConnect/pull/81/files#diff-639916bc14c3f311c31f629a2ec116292a4b2f64d06b3607b9ddd2e495703895R7-R15
0.4.4: https://github.com/th8ta/ArConnect/pull/79/files#diff-639916bc14c3f311c31f629a2ec116292a4b2f64d06b3607b9ddd2e495703895R6-R14
Before that: https://github.com/th8ta/ArConnect/blame/d1aec80ac9e06a69ac7e4498583b6c30761b2585/public/manifest.json#L7

Yup, it's the <all_urls> that seems to trigger this notification now.
Not sure if anything can be done here, from my perspective the case is closed :-)

Thanks for investigating, will keep this issue pinned and try to let people now this is the case


Make joining groups default to accepted

I've put in a Group#public? method on the grounds that eventually we'll want an actual enum behind it and allow for non-public groups (I guess probably private and invite-only)

:+1: :shipit: