Make API filtering on a charfield be case insensitive

Reopening #5003 without all those merge develop commits
Relates to https://openscience.atlassian.net/browse/OSF-5029
Purpose
Filtering by filename in the API fails if you don't use the correct case.
As described on Jira by @brianjgeiger:
https://staging-api.osf.io/v2/nodes/ck8hm/files/s3/?filter[name]=Renamed will always fail, even if there's a file named Renamed, but https://staging-api.osf.io/v2/nodes/ck8hm/files/s3/?filter[name]=renamed will succeed.
Changes

When parsing the filter on a CharField, the API will make the query term lowercase
Add test to make sure that a search of the incorrect case returns the desired results

SideEffects
If any API filtering was relying on exact case of search terms for a charField, this will break.

Looks good. The build failure is unrelated to the changes in this PR.


[ENH] Methodology for Inputting Desired Data Base Structure

Is there an existing issue for this?

[X] I have searched the existing issues

New feature
Taking inspiration from file-tree, I think we should adopt their methodology for templating data structure. The current methodology requires less quantity of input from user, but I think it's more confusing and potentially more prone to mistakes that would be hard to notice.
Example of Current Specification
[Categorization]
regular expression for file identifier = _.*$
regular expression for directory identifier = ^.*-

Then the rest of the handling of distinct file names is handled by the program and basically creates a new category for any file/directory name that is unique after trimming using the specified regular expression. This makes it very adaptable to whatever structure of database you input, but requires more interpretation by the user to find errors.
Example of file-tree templating
paper_name = my-first-project, a-better-project, best-work-ever
version = first, final, real-final, after-feedback, final-final, last

papers
    {paper_name}
        version-{version}
            manuscript.md
            references.bib
            {paper_name}.pdf (output)

This method requires the user to explicitly write out the file structure using indentations to indicate parent/child relationships and bracketed key-words to indicates areas of variability. i.e. Subject number. I think using a templating file like this will help inform the program to give more specific feedback. It does require a little bit more effort from the user, but example templates can be provided and comments can be included in the template file using "#" to denote a commented line.
I will attach a bids example at the bottom.
Possible extension using file-tree
It is possible create these template files using file-tree, with some more advanced functionality, which could be used to limit the amount of manual writing of template files by user. However, some work would have to be done in order to improve usability.
BIDS Raw example
ext=.nii.gz

dataset_description.json
participants.tsv
README (readme)
CHANGES (changes)
LICENSE (license)
genetic_info.json
sub-{participant}
    [ses-{session}]
        sub-{participant}_sessions.tsv (sessions_tsv)
        anat (anat_dir)
            sub-{participant}[_ses-{session}][_acq-{acq}][_ce-{ce}][_rec-{rec}][_run-{run_index}]_{modality}{ext} (anat_image)
            sub-{participant}[_ses-{session}][_acq-{acq}][_ce-{ce}][_rec-{rec}][_run-{run_index}][_mod-{modality}]_defacemask{ext} (anat_deface)
        func (func_dir)
            sub-{participant}[_ses-{session}]_task-{task}[_acq-{acq}][_ce-{ce}][_dir-{dir}][_rec-{rec}][_run-{run_index}][_echo-{echo}]_bold{ext}  (task_image)
            sub-{participant}[_ses-{session}]_task-{task}[_acq-{acq}][_ce-{ce}][_dir-{dir}][_rec-{rec}][_run-{run_index}][_echo-{echo}]_sbref{ext} (task_sbref)
            sub-{participant}[_ses-{session}]_task-{task}[_acq-{acq}][_ce-{ce}][_dir-{dir}][_rec-{rec}][_run-{run_index}][_echo-{echo}]_events.tsv  (task_events)
            sub-{participant}[_ses-{session}]_task-{task}[_acq-{acq}][_ce-{ce}][_dir-{dir}][_rec-{rec}][_run-{run_index}][_echo-{echo}][_recording-{recording}]_physio.tsv.gz (task_physio)
            sub-{participant}[_ses-{session}]_task-{task}[_acq-{acq}][_ce-{ce}][_dir-{dir}][_rec-{rec}][_run-{run_index}][_echo-{echo}][_recording-{recording}]_stim.tsv.gz (task_stim)
        dwi (dwi_dir)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_dwi{ext} (dwi_image)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_dwi.bval (bval)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_dwi.bvec (bvec)
        fmap (fmap_dir)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_phasediff{ext} (fmap_phasediff)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_magnitude{ext} (fmap_mag)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_magnitude1{ext} (fmap_mag1)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_magnitude2{ext} (fmap_mag2)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_phase1{ext} (fmap_phase1)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_phase2{ext} (fmap_phase2)
            sub-{participant}[_ses-{session}][_acq-{acq}][_run-{run_index}]_fieldmap{ext} (fmap)
            sub-{participant}[_ses-{session}][_acq-{acq}]_dir-{dir}[_run-{run_index}]_epi{ext} (fmap_epi)
        meg (meg_dir)
            sub-{participant}[_ses-{session}]_task-{task}[_run-{run}][_proc-{proc}]_meg.{meg_ext} (meg)
        eeg (eeg_dir)
            sub-{participant}[_ses-{session}]_task-{task}[_run-{run}][_proc-{proc}]_eeg.{eeg_ext} (eeg)
        ieeg (ieeg_dir)
            sub-{participant}[_ses-{session}]_task-{task}[_run-{run}][_proc-{proc}]_ieeg.{ieeg_ext} (ieeg)
        beh (behavioral_dir)
            sub-{participant}[_ses-{session}]_task-{task}_events.tsv (behavioural_events)
            sub-{participant}[_ses-{session}]_task-{task}_beh.tsv (behavioural)
            sub-{participant}[_ses-{session}]_task-{task}_physio.tsv.gz (behavioural_physio)
            sub-{participant}[_ses-{session}]_task-{task}_stim.tsv.gz (behavioral_stim)

This does look like a lot and would take some time to write, but if example templates are provided this would mitigate amount of work needed to be done.
Unclear documentation
No response

It also allows some flexibility in what is considered an error. For example if one subject only did one session so it might not have "session" folders, while another might. This can be handled gracefully because variable written within [] square brackets are optional.

Also I am pretty sure that the bids RAW template can be generated from the BIDS schema so we do not have to write it by hand.
Those that would be nice to have that are BIDS related are the ones for the output of fmriprep.
Here is a an example of what this looks like:
https://github.com/nipreps/fmriprep/blob/master/.circleci/ds005_bids_outputs.txt

Is that an exhaustive list of ouputs by fmri prep, or is it possible there are more?

I am pretty sure there can be "more" but they should at least follow a general pattern a bit like this:
sub-{sub}
    [ses-{ses}]
        func
            sub-{sub}[_ses-{ses}]_task-{task}[_acq-{acq}][_ce-{ce}][_dir-{dir}][_rec-{rec}][_run-{run_index}][_space-{space}][_res-{res}][_den-{label}][_desc-{desc}]_bold.nii.gz

meaning that you could have filenames with "chunks" that do not appear in this linked example of an output (like acq or rec) but that are valid
Does that make sense? Does that help?

Yes that does, that looks pretty much the same as bids. I'm working on creating a file-tree template tree file for fMRI prep. I'm gonna do some more digging on my own, but I may have some more questions for you later.
Do you know where I can find some more example outputs of fmri prep? Perhaps on the BIC server?

look in this github orga: https://github.com/OpenNeuroDerivatives
every repo is a "pointer" to a dataset many of them are fmriprep outputs

but you may need to install datalad on your machine if you want to be able to clone them without blowing your hard drives
https://handbook.datalad.org/en/latest/intro/installation.html


onReceiveToken not working

The onReceiveToken is not invoke. I even try using ref and button to reload the token but it doesn't work.
here's my code
<ReCaptchaV3               captchaDomain={'http://mysite.com'}               siteKey={'token'}               onReceiveToken={token => alert(token)}               ref={ref => this.captcha = ref}             /> <Button onPress={() => this.captcha.refreshToken()}><Text>Press</Text></Button>
I'm using react native v0.61.1 and react v.16.9.0

Thanks for that.
I found the issue I'll be releasing a new version in a few minutes.
Sorry for the delay.


I think self.optimizer_G.zero_grad() needs to be located before self.forward_both()

Hi. As I'm reading your awesome project code, I got wondering part.
I think gradient deleting code needs to be located before forward()
But now, gradient deleting code is being located after forward()
In other words, calculated gradients are being deleted every time
I think this part
https://github.com/lixx2938/CGIntrinsics/blob/master/models/intrinsic_model.py#L99
needs to be fixed like:
self.optimizer_G.zero_grad()
self.forward_both()

Please let me hear your opinion whether my fixing is correct or not.

I think it's ok.
In pytorch, the gradient is accumulated after loss.backward(). We need to do optimizer.zero_grad() before .backward(). if we only need the gradient of this minibatch.
I think .forward() and .zero_grad() don't have any effect on each other. Therefore, the order between .zero_grad() and .forward() doesn't matter.
I find the same question on pytorch forum. It can help you:
https://discuss.pytorch.org/t/should-we-perform-optimizer-zero-grad-before-we-do-forward-pass-or-after-that/14254


feat(message): support update message card

Codecov Report

Merging #31 (868bba1) into main (73a7fa8) will increase coverage by 0.12%.
The diff coverage is 85.71%.

@@            Coverage Diff             @@
##             main      #31      +/-   ##
==========================================
+ Coverage   83.46%   83.58%   +0.12%
==========================================
  Files          21       21
  Lines         738      780      +42
==========================================
+ Hits          616      652      +36
- Misses         81       84       +3
- Partials       41       44       +3

Impacted Files
Coverage Δ

api_message.go
84.40% <55.55%> (-2.60%)
:arrow_down:

api_chat.go
95.65% <93.75%> (-4.35%)
:arrow_down:

http.go
51.78% <100.00%> (+0.87%)
:arrow_up:

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 e3199ea...868bba1. Read the comment docs.


feat: add katari and bhojpur municipalities official websites

What kind of change does this PR introduce?

[ ] Bug Fix
[ ] Documentation change
[x] Added a new website
[ ] Other(s)

Why was this change needed?

Other information

All the previous commits are in the branch you made PR from as well. Please sync your fork and create a PR again. Closing this!


init()  got an unexpected keyword argument "backend_args"

hello,!
while running the test.py, I always get this error : init()  got an unexpected keyword argument "backend_args"

What are the datasets and scripts you ran?

I have the same problem, did you solve it?

I fixed this problem by removing backend_args=backend_args in val_dataloader and val_evaluator.


Page not redirect in href link

I have used the latest framework7 version 1.6.4
When i click the href link to not redirect the page and i also tried in onclick event, but  not working.
This is my code:

Document Upload

Note: i have used in  tag also not working page navigation.
How to fix the solution give any example code.

I'm having the same problem, the links are not redirecting the pages in v2.
I already reported #1814

How to fix the problem?
The html a href link not working

I encountered the same problem. Ajax link does not work with redirection response.

I am upgrading framework7 to version 2.0.2 and get same problem (cannot navigate to other page). You can try in this repo.

Issue is closed because of outdated, irrelevant or not actual
If this issue is still actual and reproducible for latest version of Framework7, please create new issue and fill the issue template correctly:

Clearly describe the issue including steps to reproduce when it is a bug.
Make sure you fill in the earliest version that you know has the issue.
Provide live link or JSFiddle/Codepen or website with issue

I've also faced the same problem alternate solution is call the function while clicking and use this
window.location.href = 'http://www.example.com/';

Hello,
I was stuck with the same (false) issue but find the solution, if it could help someone else.
Just add class = "link external" to your
Open Google
It is named bypass links handler, you can find it under links framework7 documentation
Hope this will help.
Br


code completion TODO

[ ] fix offline usage - we are currently fetching pyodide from the pyodide cdn. webpack has issues with the current pyodide package. these need to get sorted.
[ ] install a specific version of pybricks-jedi package - this is needed if we make breaking changes to the Python package during development so we don't break regular users
[ ] sort order - it would be nice to have at least some basic sorting, like list items from __main__ first then items from pybricks modules, then everything else
[ ] fix active signature/prameter - should not be hard-coded to 0 - https://github.com/pybricks/pybricks-api/blob/a758eaa1db5969a0c64232ecad2c5523acb1acd7/jedi/src/pybricks_jedi/init.py#L320-L321
[ ] parameter docs - the editor can show per-parameter docs but jedi doesn't know how to parse these - we would have to make our own parser
[ ] additional features? - monaco and jedi have many features we aren't using - we can probably live without most of them - showing docs on hover might be a nice addition though
[ ] update to Pyodide 0.21 - this includes a fix to avoid spamming the browser console with warning messages when python code is interrupted

fix active signature/prameter

parameter docs -

Is that related to the following, or are these separate issues?

It looks like there is a raw=True option we need to enable. https://jedi.readthedocs.io/en/latest/docs/api-classes.html#jedi.api.classes.BaseName.docstring

Nice, seems like that would take care of the first one.
And we can strip off any leading lines that start with the function/method/class name of the signature we're dealing with. That should take care of the second one or more if there are overloads.

Instead of reflowing body text, we could make the text box match the 79(?) character width. Then arguments will look correct too. And there will be less folding of the technical signature at the top.

The unfinished items here are nice to have but not essential. So closing this issue as done and we can open new issues for individual features if we still think they are needed.


Segmentation violation when attempting to load intermediate CA

When issuing an intermediate CA, the RSA key as well as the CSR are placed in the "ca" directory for the intermediate's common name, however the .crt file containing the signed certificate is placed under the root CA's "certs" directory (e.g. /mypki/myRoot/certs/myIntermediate.crt). Later, when attempting to goca.Load() the intermediate CA, goca expects the .crt file to be under /mypki/myIntermediate/ca/myIntermediate.crt. Because of this, in loadCa() the caData.Certificate field ends up being empty and later on this causes a segmentation fault.
A temporary work around is to symlink to the .crt so later calls to Load() find the .crt where it is expected.
A design decision will need to be made in order to create a fix. Either CA.SignCSR() will need to be smart enough to realize it is signing an intermediate CA and handle the location of the resulting .crt specially; some variation of goca.New() special handling for intermediate CAs / a new function call for issuing intermediate CAs; or goca.Load() needs to be smart enough to realize it is handling an intermediate CA and lookup the .crt in the signer's certs dir (seems hacky and gross IMO).
There is probably an opportunity for stronger "file exists" style validation in CA.loadCa() too since it relies on the existence of a directory matching the specified common name and assumes the child files of that directory exist.
See the following snippet for a demonstration of the issue.
package main

import (
    "os"
    "log"
    "fmt"

    "github.com/kairoaraujo/goca"
)

func main() {
    os.Setenv("CAPATH", "./crypt/mypki")

    // make sure root CA and intermediate CA generation
    // happen separately so when we go to sign a server
    // cert with the intermediate we have to Load()
    // the intermediate from disk.
    One()
    Two()
}

func Two() {
    // NOTE: crashes at the Load call below.
    interCA, err := goca.Load("myIntermediate")
    if err != nil {
        fmt.Println("loading inter")
        log.Fatal(err)
    }

    srvID := goca.Identity{
        Organization: "Something",
        OrganizationalUnit: "Something",
        Country: "US",
        Locality: "Somewhere",
        Province: "Some State",
        Intermediate: false,
    }

    _, err = interCA.IssueCertificate("yolo", srvID)
    if err != nil {
        fmt.Println("signing srv w/ inter")
        log.Fatal(err)
    }
}

func One() {
    rootCAID := goca.Identity{
        Organization: "Some Org.",
        OrganizationalUnit: "Certificate Authority",
        Country:    "US",
        Locality:   "Somewhere",
        Province:   "Some State",
        Intermediate:   false,
        KeyBitSize: 4096,
        // although regular certs have a max validity of 825 days, there does not
        // appear to be a max imposed by goca for root CAs.
        Valid:      3650,
    }

    rootCA, err := goca.New("myRoot", rootCAID)

    if err != nil {
        fmt.Println("create root CA")
        log.Fatal(err)
    }

    interID := goca.Identity{
        Organization: "Some Org.",
        OrganizationalUnit: "Intermediate",
        Country: "US",
        Locality: "Somewhere",
        Province: "Some State",
        Intermediate: true,
        KeyBitSize: 4096,
        // with goca, intermediates are also limited to 825 days, probably for the best
        Valid: 825,
    }

    interCA, err := goca.New("myIntermediate", interID)
    if err != nil {
        fmt.Println("create inter CA")
        log.Fatal(err)
    }

    if !interCA.IsIntermediate() {
        fmt.Println("inter is not inter...")
    }

    // When Intermediate == true, goca only generates a CSR from New()
    // and the root CA needs to sign it to seal the deal and make it a
    // proper intermediate CA.
    _, err = rootCA.SignCSR(*interCA.GoCSR(), 825)
    if err != nil {
        fmt.Println("sign inter with root")
        log.Fatal(err)
    }
}

@kairoaraujo Wanted to get your thoughts on the viability of my proposed solution before trying to implement it:
I think the best way to handle this is in CA.SignCSR(), if we set up the paths/storage type right here it seems like the rest of the code should "just work" as intended.
The SignCSR method can take a third boolean indicating if we are signing a regular certificate or another CA.
With overloading we can preserve the existing two-argument signature and it will just default to signing regular certificates by calling the new three-argument form with the appropriate boolean to indicate a regular cert.
On the REST API side, similarly add an optional boolean field in the JSON, if it is there call the three-argument SignCSR passing in the provided setting. Otherwise just call the two-argument SignCSR that defaults to signing regular certs.


Add a -delete command line option?

Maybe this is useful to others, too? It's the complement to -load. It deletes the records that -load inserted.
Also, you can use it to remove the records inserted by workload D. It was a little tedious to fully reset and reload the database after each run of workload D.
It works completely analogously to -load and thus honors the insertstart and insertcount properties.
To remove the records inserted by workload D, just set insertstart to the recordcount and insertcount to something pretty high. If you work with 10,000,000 records, for example, you'd use
... -p insertstart=10000000 -p insertcount=1000000
to delete the records newly inserted by workload D. The -delete command doesn't abort on error, so it's safe to try to delete non-existent records. Hence we don't need to know the exact insertcount, just a safe upper bound.

It is not obvious to me that records that are inserted as part of the workload are also deleted.  Have you tested that?

I think what you are are after is really a drop command. Would that be a more descriptive name of the intended use?
Would it be better to add an optional drop(String table) method to the DB interface. Many data stores have an efficient mechanism to delete all of the data that will perform faster than deleting record by record. We can have the databases that don't implement the method then fall back to a record by record approach using scan() and delete().
@brianfrankcooper @busbey @cmatser @cmccoy @gkamat  - Thoughts?

hurm. I remember another issue having a discussion about adding the equivalent of drop(trable). I'm of two minds. I agree that it would be super useful when automating going through multiple workloads and it's probably a better idea than row by row deletes (though in general a workload component of "delete" would be nice, see #222).
On the other hand, we don't do any of the other table maintenance work right now. We presume that will be handled out of band as a matter of simplifying the binding implementations.
On the gripping hand, it's also inconvenient that we force all of that stuff out of band. If we're going to do table meta operations, I'd rather see an go at an API before we look at implementations. I don't think that general solution is what this request is after.
If we're going to add a "delete some" to what workloads can do, I'd rather see it done as "delete proportion" within the CoreWorkload that can run along side inserts and updates without impacting the Client code.

Closing this. I agree that it doesn't make sense to have an isolated solution just for this very specific table maintenance use case.


Remove VeriCite

This came up when searching for log4j-1.2 dependencies! @baholladay is this okay?

@ottenhoff need a JIRA for this.

Go for it!


Sleep to wait for database servers on Mac - refs #2861

Hopefully these tweaks will stabilize things without investing in moving to an entirely different system.

@wetneb Do you want me to explicitly request your review on PRs? I tend not to request specific reviewers, but I'm happy to do that if it helps your workflow.


Add missing Debian build dependencies for Python 3 dependencies

Python dependencies failed to build/install as part of the Docker image build until I added these Debian dependencies to the Dockerfile.
Was able to reproduce the issue before this change on a 2021 M1 MacBook Pro running macOS Ventura 13.0.1 and Docker Desktop 4.14.1 (91661) / Engine 20.10.21.

Ah, fascinating, this must be an architecture difference where there's x64 wheels for some packages and not ARM ones. I do want to run takahe.social on ARM processors soonish so this is handy!


Bump versions to 0.5.0

In preparation for releasing all three crates bump the version, add a changlog entry, and update the lock files.

Will wait for ack on this from @apoelstra (in case you want to look at my sexy new verify tool).

Not sure right now why submit_package has stopped working. Will debug another time.

CI was failing with an I/O error when trying to read the cookie file, no clue why that would happen so I just force pushed with a new commit hash to trigger CI to run again.

Improved changelog for corepc-client. I'll wait for you to run this through your local CI @apoelstra because of the failing test from before. Thanks

Cannot run local CI because of breakage from #22.

Will fix, thanks man.

Tagged and published!


Error occurred loading flow for integration hon

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

Go to 'Devices and Services'
Click on 'add integration'
Scroll down to 'Haier Hon'
See error

Expected behavior
I expect to see the Integration load to be able to configure it.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment (please complete the following information):

Home Assistant Version: [e.g. 2024.10.4]
hOn Integration Version [e.g. 0.14.0, can be found in HACS or device log]
pyhOn Version [e.g. 0.17.5, can be found in device log]

Additional context
new to this integration, searched for same error in issue log, couldn't find it.
Home Assistant Logs
Check System -> Logs if you can find any logs related to this integration and post it here.
Logger: homeassistant.config_entries
Bron: config_entries.py:2945
Eerst voorgekomen: 15:49:22 (1 gebeurtenissen)
Laatst gelogd: 15:49:22
Error occurred loading flow for integration hon: Error loading shared library /usr/local/lib/python3.12/site-packages/_awscrt.abi3.so: Exec format error
Checked, File is present.
Logger: homeassistant.helpers.typing
Bron: helpers/deprecation.py:197
Eerst voorgekomen: 15:49:21 (2 gebeurtenissen)
Laatst gelogd: 15:49:22
HomeAssistantType was used from hon, this is a deprecated alias which will be removed in HA Core 2025.5. Use homeassistant.core.HomeAssistant instead, please report it to the author of the 'hon' custom integration
HomeAssistantType was used from hon, this is a deprecated alias which will be removed in HA Core 2025.5. Use homeassistant.core.HomeAssistant instead, please create a bug report at https://github.com/Andre0512/hon/issues

Logger: homeassistant.util.loop
Bron: util/loop.py:136
Eerst voorgekomen: 15:49:22 (1 gebeurtenissen)
Laatst gelogd: 15:49:22
Detected blocking call to import_module with args ('custom_components.hon.config_flow',) inside the event loop by integration 'config' at homeassistant/components/config/config_entries.py, line 179: return await super()._post_impl(request, data) (offender: /usr/src/homeassistant/homeassistant/loader.py, line 1296: return importlib.import_module(f"{self.pkg_path}.{platform_name}")), please create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A"integration%3A+config" For developers, please see https://developers.home-assistant.io/docs/asyncio_blocking_operations/#import_module Traceback (most recent call last): File "", line 198, in _run_module_as_main File "", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/main.py", line 223, in  sys.exit(main()) File "/usr/src/homeassistant/homeassistant/main.py", line 209, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 189, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.12/asyncio/base_events.py", line 674, in run_until_complete self.run_forever() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 641, in run_forever self._run_once() File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1990, in _run_once handle._run() File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/local/lib/python3.12/site-packages/aiohttp/web_protocol.py", line 477, in _handle_request resp = await request_handler(request) File "/usr/local/lib/python3.12/site-packages/aiohttp/web_app.py", line 559, in _handle return await handler(request) File "/usr/local/lib/python3.12/site-packages/aiohttp/web_middlewares.py", line 117, in impl return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 92, in security_filter_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 83, in forwarded_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 26, in request_context_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 85, in ban_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 242, in auth_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 32, in headers_middleware response = await handler(request) File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 73, in handle result = await handler(request, **request.match_info) File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 81, in with_admin return await func(self, request, *args, **kwargs) File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 74, in wrapper return await method(view, request, data, *args, **kwargs) File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 172, in post return await self._post_impl(request, data) File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 179, in _post_impl return await super()._post_impl(request, data)
Device Log
Post your device info here (if available)
Rpi4, running on SSD, HA in Docker, docker is up to date
Data Archive
For further analysis, please add your appliance data archive here (if available)
Navigate to Settings -> Device & Services -> Haier hOn -> your device and press the Create Data Archive button.
Then open notifications to download the data zip archive.
To attach the file:

GitHub Web: Use the "Attach files by dragging & dropping, selecting or pasting them." function
GitHub Mobile: Upload the zip archive as image

pip install --force-reinstall python solved the issue.
Please consider it done and close it.


Shift+Delete default shortcut keeps working after being removed

Issue Type: Bug
I removed the Shift+Delete (default action: Cut) shortcut using the editor and it keeps working. In other words, after deleting the shortcut, pressing it cuts text instead of doing nothing, which is the behaviour I expect. This is what my keybindings.json files says:
// Place your key bindings in this file to override the defaults
[
    {
        "key": "shift+delete",
        "command": "-editor.action.clipboardCutAction",
        "when": "textInputFocus && !editorReadonly"
    }
]

VS Code version: Code 1.33.0 (0dd516dd412d42323fc3464531b1c715d51c4c1a, 2019-04-04T15:14:28.026Z)
OS version: Windows_NT x64 10.0.17763
Extensions (3)

Extension
Author (truncated)
Version

language-gettext
mro
0.1.1

python
ms-
2019.3.6558

Go
ms-
0.9.2

@wodim
Perhaps shift+delete is mapped to cut by Windows itself... Even without us binding it to cut...
Can you please try:
// Place your key bindings in this file to override the defaults
[
    {
        "key": "shift+delete",
        "when": "textInputFocus && !editorReadonly"
    }
]

This will mean shift+delete is bound to a no-op command. The other form means to remove the built-in keybinding, which would let shift+delete fall through and be interpreted by the OS itself...

That doesn't work. Anyway it looks like I've found a workaround. It deletes as if the shift key was not pressed but it doesn't work properly (keeps cutting) when there is no text selected.
// Place your key bindings in this file to override the defaults
[
    {
        "key": "shift+delete",
        "when": "textInputFocus && !editorReadonly && editorHasSelection",
        "command": "deleteAllLeft",
    }
]


Add optional deadline feature

Hi @vaishnav-sh, I think some to-do tasks might need to have a deadline date, by that date the task must be completed. Therefore the app should allow users to optionally set up a deadline date.  if users provide a deadline date for a task, the app should provide users with a countdown timer so that they can keep track of the time. I want to apply this feature, please assign it to me.

Sure, and can you please label this issue as Hacktoberfest? Thank you!


How to implement non-COM interfaces

Hello, the last couple of days I tried to migrate my XAudio2 project from C++ to Rust and was simply unable to implement the IXAudio2VoiceCallback interface.
I am quite new to the rust language and even after hours of research do not understand why the implement macro doesn't work in my case. I don't think this is a general rust question because the macro is a specific functionality of the windows crate.

I want to call the function CreateSourceVoice on an XAudio2 instance:
audio.CreateSourceVoice(&mut p_source_voice, &format, 0, 2.0, &audio_callback.into(), Some(&music_voice_sends), None)

To create an implementation for the IXAudio2VoiceCallback interface I use the implement macro:
#[implement(IXAudio2VoiceCallback)]
struct MyCallbacks {}

#[allow(non_snake_case)]
impl IXAudio2VoiceCallback_Impl for MyCallbacks {
    fn OnVoiceProcessingPassStart(&self, bytesrequired:u32) {}
    fn OnVoiceProcessingPassEnd(&self) {}
    fn OnStreamEnd(&self) {}
    fn OnBufferStart(&self, pbuffercontext: *mut core::ffi::c_void) {}
    fn OnBufferEnd(&self, pbuffercontext: *mut core::ffi::c_void) {}
    fn OnLoopEnd(&self, pbuffercontext: *mut core::ffi::c_void) {}
    fn OnVoiceError(&self, pbuffercontext: *mut core::ffi::c_void, error: windows::core::HRESULT) {}
}

The compiler error for the implement macro is:
this associated function takes 1 generic argument but 3 generic arguments were supplied
expected 1 generic argumentrustc[E0107](https://doc.rust-lang.org/error-index.html#E0107)
impl.rs(646, 18): associated function defined here, with 1 generic parameter: `Impl`
main.rs(14, 1): remove these generic arguments
the trait bound `IXAudio2VoiceCallback: RuntimeName` is not satisfied
the following other types implement trait `RuntimeName`:
  IActivateAudioInterfaceAsyncOperation
  IActivateAudioInterfaceCompletionHandler
  IAudioAmbisonicsControl
  IAudioAutoGainControl
  IAudioBass
  IAudioCaptureClient
  IAudioChannelConfig
  IAudioClient
and 77 othersrustc[E0277](https://doc.rust-lang.org/error-index.html#E0277)
inspectable.rs(134, 52): required by a bound in `IInspectable_Vtbl::new`
no function or associated item named `matches` found for struct `IXAudio2VoiceCallback_Vtbl` in the current scope
function or associated item not found in `IXAudio2VoiceCallback_Vtbl`rustc[E0599](https://doc.rust-lang.org/error-index.html#E0599)

The issue "How to get COM object as "base" Interface without move" shows a similar situation with the IAudioEndpointVolumeCallback interface but in their case it just works. It would be awesome if someone with more windows crate knowledge or more rust experience in generell could help me.

No, since the IXAudio2VoiceCallback interface is defined by the windows crate, you need not use the interface macro to define it again. That macro exists only for those interfaces that aren't already defined by the windows crate.
So I don't know anything about the XAudio2 API but something like this should get you started:
[dependencies.windows]
version = "0.42"
features = [
    "implement",
    "Win32_Foundation",
    "Win32_Media_Audio_XAudio2",
    "Win32_System_Com",
    "Win32_System_SystemInformation",
]

use windows::{
    core::*, Win32::Media::Audio::XAudio2::*, Win32::System::Com::*,
    Win32::System::SystemInformation::*,
};

struct Callback;

impl IXAudio2VoiceCallback_Impl for Callback {
    fn OnVoiceProcessingPassStart(&self, _: u32) {
        todo!()
    }
    fn OnVoiceProcessingPassEnd(&self) {
        todo!()
    }
    fn OnStreamEnd(&self) {
        println!("callback");
    }
    fn OnBufferStart(&self, _: *mut std::ffi::c_void) {
        todo!()
    }
    fn OnBufferEnd(&self, _: *mut std::ffi::c_void) {
        todo!()
    }
    fn OnLoopEnd(&self, _: *mut std::ffi::c_void) {
        todo!()
    }
    fn OnVoiceError(&self, _: *mut std::ffi::c_void, _: HRESULT) {
        todo!()
    }
}

fn main() -> Result<()> {
    unsafe {
        CoInitializeEx(None, COINIT_MULTITHREADED)?;

        let mut audio = None;
        XAudio2CreateWithVersionInfo(&mut audio, 0, XAUDIO2_DEFAULT_PROCESSOR, NTDDI_VERSION)?;

        if let Some(audio) = audio {
            // Call the callback interface directly...
            let callback = IXAudio2VoiceCallback::new(&Callback);
            callback.OnStreamEnd();

           // Pass the callback to another API...
            let mut source = None;
            audio.CreateSourceVoice(
                &mut source,
                std::ptr::null(),
                0,
                0.0,
                &*callback,
                None,
                None,
            )?;
        }

        Ok(())
    }
}

Notice the weird &* that is required for complicated reasons. I hope to get rid of that soon.
Anyway, I hope that helps.

Ohhhh wow the &* does the trick. Would never have guessed that. Thanks!

Great, I'll keep this open to remind me to get rid of the need for that trick.


Add unit/integration tests

Add tests to check all properties are populated correctly on Request/Response
Add tests to check that the body is added with the correct overrides (FormUrl, then String, then serialized object)

Add tests to verify sending with body succeeds
Add test to verify that StringBody is populated on the request after sending


When the service is just deployed, see that the deployment details log is empty

Is your enhancement related to a problem? Please describe.
When the service is just deployed, see that the deployment details log is empty:

Describe the solution you'd like
Smoother transition between viewing logs from deployer pod and from database.

Environment

Walrus version: main 73e6ce88f4205e030d30ff4276e82d687c0ccdd0
UI version: dev-a942812

Test Result: It can reproduce in the latest version.
https://github.com/seal-io/walrus/assets/26084756/2474c667-5f67-407e-bd1a-4e2fc5c00885

Environment

Walrus version: main 0b2678c0df661cd20cafbdb716a641717f158e7f
UI version: v0.5.0-rc2

Test Result: pass


fix(consumer): Allow editable spin buttons

On Windows, spin buttons are usually editable, and JAWS assumes that they are. So this PR adds spin buttons to the set of roles that can support text ranges.

No, I don't believe there was a bug before. But I know it's correct now, so I'll go ahead and merge.


fix: fix broken links in api.md

So the problem with this change is that we need
---
title: API Reference
weight: 1
---

In top of the page for hugo to be able to find it.
I guess that we could do some custom markdown template of our own and add the needed config on top of the page.
I know it's possible using https://github.com/fybrik/crdoc I just haven't had time to look in to it.
If you can take a stab at it, it would be great.
At the same time, we could also do the same changes done in https://github.com/fybrik/crdoc/pull/239 while waiting for the PR to get merged.

Closing in favor of https://github.com/grafana-operator/grafana-operator/pull/1103


fix mix archive.install link

Thanks for catching that! I had missed updating that link. There's a new and improved way of installing the archive now: mix archive.install hex nerves_bootstrap. If you'd like to have the honors, feel free to update this PR. If not, I'll update it later today. Thanks again for catching it.

Thank you for all your work on nerves. It is a really cool project.

Merged! Thanks for the update.


Typo in the proof for lemma 1

In the proof for lemma 1 there was a repetition in the inequality for delta.

Thanks for this! Can you also update the file src/notes/I.1.RectangularRule.jmd? (That's the original source, the tex file is generated from that)

Yes Ill do that now


feat(sdk): improved acknowledgment api.

Codecov Report
Attention: 17 lines in your changes are missing coverage. Please review.

Comparison is base (340cd28) 89.09% compared to head (9c192d9) 89.07%.

Files
Patch %
Lines

pkg/openid4ci/acknowledgment.go
63.63%
6 Missing and 6 partials :warning:

...k-gomobile/openid4ci/issuerinitiatedinteraction.go
71.42%
1 Missing and 1 partial :warning:

...-sdk-gomobile/openid4ci/requestedacknowledgment.go
86.66%
1 Missing and 1 partial :warning:

pkg/openid4ci/issuerinitiatedinteraction.go
92.85%
1 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #694      +/-   ##
==========================================
- Coverage   89.09%   89.07%   -0.02%
==========================================
  Files         103      105       +2
  Lines        4266     4304      +38
==========================================
+ Hits         3801     3834      +33
- Misses        313      316       +3
- Partials      152      154       +2

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


Remove jBrowserDriver (JBD) support

The browser is no longer being maintained (last commit was 3 years ago).

Better now.


How's it going?

I see the readme has this notice:

DEPRECATED. This repository is no longer maintained. Please fork and work away.

Can I ask what led to its deprecation? Have you found a better solution?

Depreciation notice mostly due to lack of time. Haven't really looked for something on point and better.

I take it you're back to using Word? :-)

Oh God no! I'm doing pure legal tech now :)
https://erisindustries.com


Plain Text reporting functionality could be improved

First, thanks a lot for creating a fantastic tool! I started using LUnit a few weeks ago and like it very much.
The issue: Plain Text reporting does not seem to work properly for me. XML reporting works correctly.
I set up the Tools >> Reporting... settings as seen below:

Report path = C:\Users\petru.tarabuta\Work Folders\Desktop\LUnit Reports\LUnit Report - Hello World.txt
After I click on "Commit", I can see "Report generation disabled" in the bottom-left corner of the LUnit UI, as seen below.

Based on the contents of the first screenshot, shouldn't the UI display "Report generation enabled"?
The file at "C:\Users\petru.tarabuta\Work Folders\Desktop\LUnit Reports\LUnit Report - Hello World.txt" exists and is empty.
After running a group of three unit tests that are part of the same Unit Test class, on disk I can see that a new file named "LUnit Report - Hello World (1).txt" was created.
This file only contains the following line of text: "Fails: 0 Errors: 0 Skipped: 0".
It would be useful if:

The file would contain more detailed information. For example, the file could contain a line for each Unit Test VI that executed. The text file contents could perhaps look similar to:
"

ABC.vi Passed 0.123 s
DEF.vi Passed 0.051 s
GHI.vi Failed 0.082 s
JKL.vi Passed 0.56 s
"

LUnit could replace (overwrite) an existing file, rather than create a new file every time.
The window where reporting options are configured would be much wider.

LUnit version: <IP_ADDRESS>.
LabVIEW version: 2024 Q3 64-bit.
OS: Windows 11 64-bit

P.S. It may be more better if the buttons of the reporting configuration window were named "Save" and "Cancel" instead of "Commit" and "Stop".

Hey Petru,
Thanks for the feedback and happy to hear you like to tool.
When looking into this, I first thought the text reporting was broken. But then realized that the native text format only shows failed tests. My assumption being that passed tests are kind of un-interesting if you read a report file. Especially when you start having hundreds of tests.
Having said that, the reporting was designed to allow for extension through simple plugins. If you want to have a specific report format you'd want to implement, you just need to implement the Report Interface.lvclass:

To further integrate it into LUnit, I'd need to make some small changes, but the support for plugins is there. Let me know if you are actually interested in this and I will write the required documentation for how to do it.
Honestly, I have not seen anyone use the reporting features through the UI before. I only use it for CI, and then with the xml-format.  I'd be interested in understanding your workflow and what you use the text reports for? This is more out of curiosity and maybe we could figure out how to make this feature useful.
As you say, the configuration utility is not a great UI. I made a quick stab at improving these. If you want to make it even nicer, I'm happy to accept a pull request. It would also need to be updated to handle plugins, if someone feels like creating such. But until that day, I think it works well enough as it is.
Thanks again for the feedback!
/Anton

Hi Anton,
Thanks for the very quick and detailed reply.
It's great to hear that LUnit supports plugins - that's a very good design. Yes, I would be interested in creating a class that implements the Report Interface.lvclass.
I have not used LUnit through the CLI yet. I would like to try it in the near future.
My workflow consisted of using the LUnit UI to run a LUnit Test Class that contained three test VIs. Together with a colleague I started playing around with the reporting options, as we were considering making running unit tests a pre-requisite before code reviews. But we would be happy to do this through the CLI rather than the UI if it offers more comprehensive reporting.
I would be happy to make a few changes to the configuration utility UI. I am quite busy with work and life at the moment, but I aim to look into it.
Kind regards,
Petru

I have created a fork of the repository and have had a quick look at the source code. It's impressive.
Can I ask a silly question: What is the name of the VI that represents the reporting configuration UI?

Alright, I will have a look at it when I find some time.
The dialog is located here:
astemes-lunit\source\User Interface\Execution UI\Private\Configure Reporting Dialog.vi
Please note that I will likely need to change this VI to enable loading of 3rd party plugins. Currently the xml and txt plugins are hardcoded. So if you want to work on the UI, don't let your fork live long before making a pull request or we will have conflicts. Alternatively, wait for me to get around implementing loading of reporting plugins.
Regarding the workflow, I think that using the UI gives the most detailed and easiest way to navigate the reports. You could run it through the cli (Sam has a GCli implementation on VIPM also if you prefer this), but I do not think it is better than the UI in any way (for humans).
/Anton

Turns out it was very little needed to enable loading of custom reporting plugins. Just had to replace the hardcoded report names with dynamic enumeration.
When you want to start writing your own plugins, just get the latest version of LUnit from here and follow these instructions.
Let me know if you have any issues.

Closing this issue for now, let me know if you run into any issues creating your custom reports.

Hi Anton,
Thanks for the update, and sorry for the delayed reply. Also sorry that I haven't made any changes to my LUnit fork yet - I have been busy at work and at home.
I am looking forward to meeting you at GDevCon tomorrow!
Kind regards,
Petru

No worries. Looking forward to catching up with you here in Stuttgart!


Refactor 08-wasm with improvements after 02-client refactor

Description
closes: https://github.com/cosmos/ibc-go/issues/5833
closes: https://github.com/cosmos/ibc-go/issues/5834

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

[ ] Targeted PR against the correct branch (see CONTRIBUTING.md).
[ ] Linked to GitHub issue with discussion and accepted design, OR link to spec that describes this work.
[ ] Code follows the module structure standards and Go style guide.
[ ] Wrote unit and integration tests.
[ ] Updated relevant documentation (docs/).
[ ] Added relevant godoc comments.
[ ] Provide a conventional commit message to follow the repository standards.
[ ] Include a descriptive changelog entry when appropriate. This may be left to the discretion of the PR reviewers. (e.g. chores should be omitted from changelog)
[ ] Re-reviewed Files changed in the GitHub PR explorer.
[ ] Review SonarCloud Report in the comment section below once CI passes.

Summary by CodeRabbit

Refactor

Updated method implementations and imports in keeper.go for improved performance and code organization.
Enhanced code structure and error handling in keeper_vm.go for better reliability and maintainability.
Introduced a new gas registration variable in gas_register.go to optimize gas-related functionalities.

New Features

Added new methods and functionalities related to context, collections, and checksums in keeper.go.
Implemented panic checks and schema initialization in keeper_vm.go to enhance functionality.
Introduced a new gas registration variable VMGasRegister in gas_register.go for improved gas handling.

Bug Fixes

Adjusted method implementations in keeper.go for better error handling and code consistency.
Fixed issues related to query router and collections initialization in keeper_vm.go for enhanced stability.
Resolved gas registration inconsistencies in gas_register.go for improved performance.

Documentation

Updated documentation to reflect the changes in keeper.go, keeper_vm.go, and gas_register.go for better clarity and understanding.

Linter complaining about import ordering I think 👀


My Led Strip will not lightning up

My led Strip will not lightning up.
Thx for help

wow!
a bit more information would be helpful?


Use LLM APIs to generate a challenge (WIP)

When creating a project, you can tick a checkbox to generate your challenge from the Title and Summary. I'm trying to support open source LLMs as well as playing with Cloudflare AI workers.

This is very much a fun/exploration branch for now. I'm not sure how much sense this makes, or if the LLM functionality is even in the right place. And it needs a background worker to do properly (Which would also be useful on the global Sync btw)

Closing for now ..

Tested in sandbox


Tunnel Endpoint Manual Setting by CIDR

Proposal / RFE
Now the Cilium just simply chooses the Kubernetes NodeIP as the default tunnel endpoint of overlay routing solution, e.g., VXLAN, which is not enough if another data channel (interface) would be desired for higher performance instead of the management interface.
The selection of the desired interface can be done by providing a disired CIDR in the configuration (yaml) file, like:
tunnel-endpoint-ipv4-cidr: "<IP_ADDRESS>/24"
which would match/select the interface with the IP address 172.168.50.xx configured, and set them as the target tunnel endpoint.
Other CNIs, like Calico, had provided the function.
This function is also needed when doing the performance testing for overlay based pod2pod communication.

I don't know if there is an existed solution for the requirement, so I implemented it in my local environment since we need it to the performance benchmarking.
The case below shows the result we achieved by our implmentation:
The node IP of my K8s cluster:
.
Here I used a secondary IP 172.168.50.xx as the desired interface(IP):

Then I provided a desired CIDR in the quick-install.yaml:
.
Now the tunnel endpoint IP is changed from original k8s nodeIP to the desired interface IP from the Cilium bpf tunnel information:

It works with a simple cross-host pod2pod sample test.

I don't know if there is an existed solution for the requirement, so I implemented it in my local environment since we need it to the performance benchmarking.
The case below shows the result we achieved by our implmentation:
The node IP of my K8s cluster:
.
Here I used a secondary IP 172.168.50.xx as the desired interface(IP):

Then I provided a desired CIDR in the quick-install.yaml:
.
Now the tunnel endpoint IP is changed from original k8s nodeIP to the desired interface IP from the Cilium bpf tunnel information:

It works with a simple cross-host pod2pod sample test.

@TrevorTaoARM I've one question, is it guaranteed the IPs set with tunnel-endpoint-ipv4-cidr, can reach each other?

@TrevorTaoARM I've one question, is it guaranteed the IPs set with tunnel-endpoint-ipv4-cidr, can reach each other?

@TrevorTaoARM I've one question, is it guaranteed the IPs set with tunnel-endpoint-ipv4-cidr, can reach each other?

Yes, the IPs set with tunnel-endpoint-ipv4-cidr is choosed by the k8s cluster admin/user, which can be thought as the 'data interface' of the whole cluster and all cluster nodes are connected with each other via the data interface besides the original 'mgmt interface' which are used by k8s nodes for management use.
Calico also supports this interface selection method for data traffic between pods (cross-host).

@TrevorTaoARM I've one question, is it guaranteed the IPs set with tunnel-endpoint-ipv4-cidr, can reach each other?

Yes, the IPs set with tunnel-endpoint-ipv4-cidr is choosed by the k8s cluster admin/user, which can be thought as the 'data interface' of the whole cluster and all cluster nodes are connected with each other via the data interface besides the original 'mgmt interface' which are used by k8s nodes for management use.
Calico also supports this interface selection method for data traffic between pods (cross-host).

A picture to illustrate how it works(maybe not so precise:-)):

A picture to illustrate how it works(maybe not so precise:-)):

Interesting proposal! I have noticed a recent increase in users with multi-device hosts with dedicated management and data networks, and this seems like it should provide a clear mechanism for such users to define how the traffic is forwarded between nodes.
Based on your diagram, it looks like this information would be forwarded between nodes using the existing addresses field in the CiliumNode CRD. That seems reasonable, I don't know if we need a new dedicated type  for it or whether the node could just report the IP in this subnet as the InternalIP?
I also wonder whether we could define this in a more generic way, ie instead of tunnel-endpoint-ipv4-cidr, something like data-network-cidr. Initially we could have checks in the daemon to enforce that the CIDR is IPv4 and that tunnel mode is enabled to satisfy your use case. In future we could relax those constraints so that for instance --auto-direct-node-routes uses this logic to populate routes in the node routing tables (assuming that the data network is one flat L2).
We should also decide what the behaviour is if the user specifies a CIDR which matches IPs on multiple interfaces. This should either fail out with a warning/error to the user to say that multiple IPs matched and it doesn't know which one to use, or alternatively, select an IP in a reproducible way (ie do not just pick the "first" IP we see, as that may have random selection logic depending on how kernel resources are iterated; we'd probably need some kind of sorting logic).
There is also a potential interaction here for how --devices selects the devices to install eBPF programs. Does the user need to specify --devices to include the data network devices, or does this configuration option interact with that somehow? Probably the simplest approach is if this new option only controls the IPs used for forwarding traffic between nodes, and then the device management is handled separately. However, then we might still need to enhance the --devices logic to ensure that the eBPF programs are configured properly for the management and data network devices, depending on the use case.

Interesting proposal! I have noticed a recent increase in users with multi-device hosts with dedicated management and data networks, and this seems like it should provide a clear mechanism for such users to define how the traffic is forwarded between nodes.
Based on your diagram, it looks like this information would be forwarded between nodes using the existing addresses field in the CiliumNode CRD. That seems reasonable, I don't know if we need a new dedicated type  for it or whether the node could just report the IP in this subnet as the InternalIP?
I also wonder whether we could define this in a more generic way, ie instead of tunnel-endpoint-ipv4-cidr, something like data-network-cidr. Initially we could have checks in the daemon to enforce that the CIDR is IPv4 and that tunnel mode is enabled to satisfy your use case. In future we could relax those constraints so that for instance --auto-direct-node-routes uses this logic to populate routes in the node routing tables (assuming that the data network is one flat L2).
We should also decide what the behaviour is if the user specifies a CIDR which matches IPs on multiple interfaces. This should either fail out with a warning/error to the user to say that multiple IPs matched and it doesn't know which one to use, or alternatively, select an IP in a reproducible way (ie do not just pick the "first" IP we see, as that may have random selection logic depending on how kernel resources are iterated; we'd probably need some kind of sorting logic).
There is also a potential interaction here for how --devices selects the devices to install eBPF programs. Does the user need to specify --devices to include the data network devices, or does this configuration option interact with that somehow? Probably the simplest approach is if this new option only controls the IPs used for forwarding traffic between nodes, and then the device management is handled separately. However, then we might still need to enhance the --devices logic to ensure that the eBPF programs are configured properly for the management and data network devices, depending on the use case.

Interesting proposal! I have noticed a recent increase in users with multi-device hosts with dedicated management and data networks, and this seems like it should provide a clear mechanism for such users to define how the traffic is forwarded between nodes.
Trevor>>Yes, I think a clear mechanism for users to define the traffic forwarding way is actually needed. The 'tunnel-endpoint-ipv4-cidr' could be a certain case when tunnel mode(Vxlan for me) is used and a certain IP(interface) is preferred.
Based on your diagram, it looks like this information would be forwarded between nodes using the existing addresses field in the CiliumNode CRD. That seems reasonable, I don't know if we need a new dedicated type for it or whether the node could just report the IP in this subnet as the InternalIP?
Trevor>>Yes, in my implementation I added a new address type:
NodeTunnelEndpointIP AddressType = "TunnelEndpointIP"
for the 'addresses' field in the 'CiliiumNode' CRD.

I also wonder whether we could define this in a more generic way, ie instead of tunnel-endpoint-ipv4-cidr, something like data-network-cidr. Initially we could have checks in the daemon to enforce that the CIDR is IPv4 and that tunnel mode is enabled to satisfy your use case. In future we could relax those constraints so that for instance --auto-direct-node-routes uses this logic to populate routes in the node routing tables for direct routing mode (assuming that the data network is one flat L2).

Trevor>>I think for the idea of 'data-network-cidr' should be ok for a more generic solution in the future, but with more details provided for all routing modes.
I am not so clear about the concept of --auto-direct-node-routes, I think it's about direct routing mode and for tunnel mode the routing may still relies on Linux kernel since the tunnel endpoint IP is still one of the interface IPs.

We should also decide what the behaviour is if the user specifies a CIDR which matches IPs on multiple interfaces. This should either fail out with a warning/error to the user to say that multiple IPs matched and it doesn't know which one to use, or alternatively, select an IP in a reproducible way (ie do not just pick the "first" IP we see, as that may have random selection logic depending on how kernel resources are iterated; we'd probably need some kind of sorting logic).

_Trevor>> Yes, I think so. The following cases should be considered:

No interface IP matched by the provided CIDR; (still uses the k8s nodeIP interface?)
Multiple IPs matched
2.1 random selection
2.2 'First' IP
2.3 Other sorting logic (kernel resource, user prefer,...)
Now I just fall back to the k8s nodeIP if nothing matched.( I may still need to check my code for this case)_

There is also a potential interaction here for how --devices selects the devices to install eBPF programs. Does the user need to specify --devices to include the data network devices, or does this configuration option interact with that somehow? Probably the simplest approach is if this new option only controls the IPs used for forwarding traffic between nodes, and then the device management is handled separately. However, then we might still need to enhance the --devices logic to ensure that the eBPF programs are configured properly for the management and data network devices, depending on the use case.

Trevor>> Good question. I neglect this issue for my original implementation. Actually for my case(tunnel mode with manually selected tunnel endpoint), the eBPF program of 'to-netdev' should be imposed on the newly selected interface(bpf_netdev_xxx) instead of the original one which should be the interface that k8s nodeIP located on(from the function of detectNodeDevice() in kube_proxy_replacement.go) with my initial investigation here. I would like to refine my code to reflect that in the following days.
For other eBPF programs, they may not be affected in the tunnel mode since they are imposed on 'cilium_vxlan' link(interface).
In the future, if a generic 'data network devices' are provided, we would further consider adding the eBPF programs on the those devices(interfaces), I think.
Siince I am not so familiar with the various eBPF related things here, if I missed something please add then.
@joestringer Thank you, your comments are instructive to my idea in this issue and they are actually more than I
thought originally. Originally I just want to enable the users to select the desired (data) interface  from which to send data by providing certain CIDR when using overlay encap (vxlan) mode, but obviously it's more than that since Cilium utilizes eBPF to achieve better performance and supports data encryption on the interface.
So I did some more investigation from your comments then and get some initial thinking. Please see my comments inline.
Further discussions may still be needed.

Interesting proposal! I have noticed a recent increase in users with multi-device hosts with dedicated management and data networks, and this seems like it should provide a clear mechanism for such users to define how the traffic is forwarded between nodes.
Trevor>>Yes, I think a clear mechanism for users to define the traffic forwarding way is actually needed. The 'tunnel-endpoint-ipv4-cidr' could be a certain case when tunnel mode(Vxlan for me) is used and a certain IP(interface) is preferred.
Based on your diagram, it looks like this information would be forwarded between nodes using the existing addresses field in the CiliumNode CRD. That seems reasonable, I don't know if we need a new dedicated type for it or whether the node could just report the IP in this subnet as the InternalIP?
Trevor>>Yes, in my implementation I added a new address type:
NodeTunnelEndpointIP AddressType = "TunnelEndpointIP"
for the 'addresses' field in the 'CiliiumNode' CRD.

I also wonder whether we could define this in a more generic way, ie instead of tunnel-endpoint-ipv4-cidr, something like data-network-cidr. Initially we could have checks in the daemon to enforce that the CIDR is IPv4 and that tunnel mode is enabled to satisfy your use case. In future we could relax those constraints so that for instance --auto-direct-node-routes uses this logic to populate routes in the node routing tables for direct routing mode (assuming that the data network is one flat L2).

Trevor>>I think for the idea of 'data-network-cidr' should be ok for a more generic solution in the future, but with more details provided for all routing modes.
I am not so clear about the concept of --auto-direct-node-routes, I think it's about direct routing mode and for tunnel mode the routing may still relies on Linux kernel since the tunnel endpoint IP is still one of the interface IPs.

We should also decide what the behaviour is if the user specifies a CIDR which matches IPs on multiple interfaces. This should either fail out with a warning/error to the user to say that multiple IPs matched and it doesn't know which one to use, or alternatively, select an IP in a reproducible way (ie do not just pick the "first" IP we see, as that may have random selection logic depending on how kernel resources are iterated; we'd probably need some kind of sorting logic).

_Trevor>> Yes, I think so. The following cases should be considered:

No interface IP matched by the provided CIDR; (still uses the k8s nodeIP interface?)
Multiple IPs matched
2.1 random selection
2.2 'First' IP
2.3 Other sorting logic (kernel resource, user prefer,...)
Now I just fall back to the k8s nodeIP if nothing matched.( I may still need to check my code for this case)_

There is also a potential interaction here for how --devices selects the devices to install eBPF programs. Does the user need to specify --devices to include the data network devices, or does this configuration option interact with that somehow? Probably the simplest approach is if this new option only controls the IPs used for forwarding traffic between nodes, and then the device management is handled separately. However, then we might still need to enhance the --devices logic to ensure that the eBPF programs are configured properly for the management and data network devices, depending on the use case.

Trevor>> Good question. I neglect this issue for my original implementation. Actually for my case(tunnel mode with manually selected tunnel endpoint), the eBPF program of 'to-netdev' should be imposed on the newly selected interface(bpf_netdev_xxx) instead of the original one which should be the interface that k8s nodeIP located on(from the function of detectNodeDevice() in kube_proxy_replacement.go) with my initial investigation here. I would like to refine my code to reflect that in the following days.
For other eBPF programs, they may not be affected in the tunnel mode since they are imposed on 'cilium_vxlan' link(interface).
In the future, if a generic 'data network devices' are provided, we would further consider adding the eBPF programs on the those devices(interfaces), I think.
Siince I am not so familiar with the various eBPF related things here, if I missed something please add then.
@joestringer Thank you, your comments are instructive to my idea in this issue and they are actually more than I
thought originally. Originally I just want to enable the users to select the desired (data) interface  from which to send data by providing certain CIDR when using overlay encap (vxlan) mode, but obviously it's more than that since Cilium utilizes eBPF to achieve better performance and supports data encryption on the interface.
So I did some more investigation from your comments then and get some initial thinking. Please see my comments inline.
Further discussions may still be needed.

Trevor>>Yes, in my implementation I added a new address type:
NodeTunnelEndpointIP AddressType = "TunnelEndpointIP"
for the 'addresses' field in the 'CiliiumNode' CRD.

Is there a specific reason to do use a new type? I think it's probably good for understanding how it was generated by looking at CiliumNode resources. At the same time I'm not exactly sure which pieces of code in Cilium rely on the type of the IPs associated with the node, worth double-checking the type handling since there may be code that makes assumptions about the types without knowing about this new type.

Trevor>>Yes, in my implementation I added a new address type:
NodeTunnelEndpointIP AddressType = "TunnelEndpointIP"
for the 'addresses' field in the 'CiliiumNode' CRD.

Is there a specific reason to do use a new type? I think it's probably good for understanding how it was generated by looking at CiliumNode resources. At the same time I'm not exactly sure which pieces of code in Cilium rely on the type of the IPs associated with the node, worth double-checking the type handling since there may be code that makes assumptions about the types without knowing about this new type.

@joestringer Good question. I doulbe-checked and thought about the issue you mentioned here.
Firstly, every node need to know other nodes' tunnel endpoint IP address information, which can only be reported by each node itself with their local matching/finding and fetched(by watcher) by other nodes.  And currently, all other address types(NodeHostName, NodeExternalIP,
NodeInternalIP, NodeExternalDNS, NodeInternalDNS, NodeCiliumInternalIP) have their own meaning and uses. So they can't be used in carrying that info again and we need an explicit new address type here to represent this type of address.
Secondly, I checked the side-effect of adding this new address type in the case there may be code that makes assumptions about the types without knowing about this new type. My finding here for this case is only for the function:
GetNodeIP() in pkg/node/types/node.go which calls getNodeIP(), for getNodeIP(), if the new
NodeTunnelEndpointIP type is added, in a very rare case( that no NodeInteralIP and no NodeExternalIP, which is almost impossible since every node should have either internalIP or externalIP from k8s ) it would return the address of type 'NodeTunnelEndpointIP', but it's still correct here as the tunnel IP here is really the nodeIP.
On the other hand, the real problem here should be for the IPSec case. Originally, the remoteIPv4 address for the IPSec endpoint( look for encryptNode() in pkg/datapath/linux) is simply got by calling newNode.GetNodeIP() which now just aligns with the tunnel IP if no manual tunnel endpoint setting, so if manual tunnel endpoint setting is used, the remoteIPv4 should be changed to the manually setted one.
So I would further refine my code to reflect that and try to cover all possible cases here.
Anyway, I would further check the possible side effects when tunnel endpoint IP is manually selected, but I think it should not be an unresolvable issue.

Trevor>>Yes, in my implementation I added a new address type:
NodeTunnelEndpointIP AddressType = "TunnelEndpointIP"
for the 'addresses' field in the 'CiliiumNode' CRD.

Is there a specific reason to do use a new type? I think it's probably good for understanding how it was generated by looking at CiliumNode resources. At the same time I'm not exactly sure which pieces of code in Cilium rely on the type of the IPs associated with the node, worth double-checking the type handling since there may be code that makes assumptions about the types without knowing about this new type.

@joestringer Good question. I doulbe-checked and thought about the issue you mentioned here.
Firstly, every node need to know other nodes' tunnel endpoint IP address information, which can only be reported by each node itself with their local matching/finding and fetched(by watcher) by other nodes.  And currently, all other address types(NodeHostName, NodeExternalIP,
NodeInternalIP, NodeExternalDNS, NodeInternalDNS, NodeCiliumInternalIP) have their own meaning and uses. So they can't be used in carrying that info again and we need an explicit new address type here to represent this type of address.
Secondly, I checked the side-effect of adding this new address type in the case there may be code that makes assumptions about the types without knowing about this new type. My finding here for this case is only for the function:
GetNodeIP() in pkg/node/types/node.go which calls getNodeIP(), for getNodeIP(), if the new
NodeTunnelEndpointIP type is added, in a very rare case( that no NodeInteralIP and no NodeExternalIP, which is almost impossible since every node should have either internalIP or externalIP from k8s ) it would return the address of type 'NodeTunnelEndpointIP', but it's still correct here as the tunnel IP here is really the nodeIP.
On the other hand, the real problem here should be for the IPSec case. Originally, the remoteIPv4 address for the IPSec endpoint( look for encryptNode() in pkg/datapath/linux) is simply got by calling newNode.GetNodeIP() which now just aligns with the tunnel IP if no manual tunnel endpoint setting, so if manual tunnel endpoint setting is used, the remoteIPv4 should be changed to the manually setted one.
So I would further refine my code to reflect that and try to cover all possible cases here.
Anyway, I would further check the possible side effects when tunnel endpoint IP is manually selected, but I think it should not be an unresolvable issue.


multi: Forward Blinded Payments

Change Description
This PR adds forwarding of payments in blinded paths to LND, and depends on #7267, #7297.
Opening early for general approach feedback 🙏 and to provide an idea of the scope of the change (many rpc changes are inflating the change delta - it looks worse than it is, promise 😅 ).
There are a few notably missing elements:

Forwarding works without #7297 with a very small workaround, but we'll probably want to store that data properly
As noted in #7267, we'll need to migrate one of our on-chain resolvers and thread the blinding_point through to it (tbd separately)
Error handling for blinded payments is not included (this will be done in a followup PR to split things up a little)
There can always be more unit tests

Steps to Test
Since LND doesn't produce blinded routes, you'll need the following setup:
Alice (LND) --- Bob(LND) --- Carol (LND) --privatechan-- Dave(CL)
Since we need to retrieve a raw CL invoice, you need another CL node connected to Dave to fetch the invoice from an offer:

dave offer 1000 test -> lno... is your offer
cl fetchinvoice lno... -> lni.... is your invoice
cl decode lni... -> This will give blinded hops/data etc.

You can then pay the blinded invoice from LND:
lncli queryroutes --introduction_point={cleartext_introduction_node_id} --blinding_point={blinding_point} --blinded_hops={blinded_introduction_node}:{introduction_node_data} --blinded_cltv={blinded_route_total_cltv} --amt={invoice_amount} | lncli sendtoroute --payment_hash={payment_hash} -

It's also covered in an itest, which may make life a little easier :')

Alice (CL) --> Bob(LND) --> Carol (LND)  --> Dave(CL) forwarding interop achieved (though acquired with a pretty ungodly setup)!

Run CL with --experimental-offers --dev-fast-gossip + DEVELOPER=1 in configure
Run LND at 918ac69a4
Open public channels Alice - Bob, Bob-Carol
Open private chanel Carol-Dave (required to force a blinded path for the offer)
Alice / Bob / Carol / Dave lncli updatechanpolicy 1000 1 18 (run into blinded path timelock limit issues with CL otherwise)
P2P Connect Alice to Dave (required to use onion messaging to fetch an bolt 12 invoice)
Dave lightning-cli offer 1000 test -> lno...
Alice: lightning-cli fetchinvoice lno... -> lni...
Alice: lightning-cli pay lni... -> Success!

Going to further split up this PR to ease reivew:

Preparatory PR adding structs, serialization
Forwarding PR with blinded payment logic

Also going to decouple this from #7267 (that will make the itests a little longer because we need to do things manually, but I think it's going to result in a more reviewable PR chain).

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

Needs rebase on #7710 - hold off on review for now!

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@carlakc, remember to re-request review from reviewers when ready

@yyforyongyu: review reminder
@carlakc, remember to re-request review from reviewers when ready

can be rebased!

@yyforyongyu: review reminder
@carlakc, remember to re-request review from reviewers when ready

⚠ Don't review, going to split out a prep PR with refactoring / basic plumbing.

@yyforyongyu: review reminder
@carlakc, remember to re-request review from reviewers when ready

@yyforyongyu: review reminder
@carlakc, remember to re-request review from reviewers when ready

@yyforyongyu: review reminder
@carlakc, remember to re-request review from reviewers when ready

@yyforyongyu: review reminder
@carlakc, remember to re-request review from reviewers when ready

Broke this up into 2 PRs (with a small, third PR for error handling to come).
Replaced by #8159, #8160


57 clean modules

Fixes #57
Due to the very good preliminary work, there was less to do here than expected.
Changes
In this Issue we should remove all unused code and methods that we included/imported. We should also clean up our package.json (2x) files and the README.
Checklist before merge
Developer's responsibilities

[ ] Approved by at least one developer
[ ] Pull request build has passed

Product Owner's responsibilities

[ ] No issues have been found on staging environment
[ ] Product Owner has approved the release

I do get the following error in the clients console when running. Everything in the Browser still does work as expected, but could you please look into it of you also come across that problem?

Hi @kej-jay ,
unfortunately I could not reproduce the error on my machine. It simply does not occur on my system. It may be that you are experiencing it because of an import of an image that no longer exists. I have adjusted it accordingly. Can you please test it again?
Otherwise, I found this article - but with a lot of different approaches to this problem.

I do get the following error in the clients console when running. Everything in the Browser still does work as expected, but could you please look into it of you also come across that problem?

Hi @kej-jay ,
unfortunately I could not reproduce the error on my machine. It simply does not occur on my system. It may be that you are experiencing it because of an import of an image that no longer exists. I have adjusted it accordingly. Can you please test it again?
Otherwise, I found this article - but with a lot of different approaches to this problem.

I do get the following error in the clients console when running. Everything in the Browser still does work as expected, but could you please look into it of you also come across that problem?

Hi @kej-jay ,
unfortunately I could not reproduce the error on my machine. It simply does not occur on my system. It may be that you are experiencing it because of an import of an image that no longer exists. I have adjusted it accordingly. Can you please test it again?
Otherwise, I found this article - but with a lot of different approaches to this problem.

It works for me now. Thanks

I do get the following error in the clients console when running. Everything in the Browser still does work as expected, but could you please look into it of you also come across that problem?

Hi @kej-jay ,
unfortunately I could not reproduce the error on my machine. It simply does not occur on my system. It may be that you are experiencing it because of an import of an image that no longer exists. I have adjusted it accordingly. Can you please test it again?
Otherwise, I found this article - but with a lot of different approaches to this problem.

It works for me now. Thanks


Add id prefix to wandb .csv files

Currently validation .csvs save to wandb under the same name for all uns. We should add prefixes of id the same way it's dine for other artifacts.

did this get sorted? @AUdaltsova

no they still save the same name. It's not a pressing problem I don't think as wandb does versioning and attributing to correct runs so you can see what is where, but should be done at some point as it's cumbersome right now


Textfield's Autofocus doesn't let keyboard to be dismissed by Navigator

Description
When I use autofocus: true in my Textfield with a combination of Navigator.push(context, SlideDownRoute(topPage: this.widget, bottomPage: Page2())); where the animations are in stack: the keyboard is not being dismissed on a new page.
Not even hiding the keyboard by using FocusScope.of(context).unfocus(); before Navigation comes in helps. Once navigation starts it will show up the keyboard again.
Steps to Reproduce

Minimal sample code to reproduce the issue
main.dart:
import 'package:experiment18/page2.dart';
import 'package:flutter/material.dart';
import 'slide_down_route.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: FirstPage(),
    );
  }
}

class FirstPage extends StatefulWidget {
  @override
  _FirstPageState createState() => _FirstPageState();
}

class _FirstPageState extends State<FirstPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Page'),
      ),
      body: Center(
          child: TextField(
        autofocus: true,
        onChanged: (_) {
          Navigator.push(context, SlideDownRoute(topPage: this.widget, bottomPage: Page2()));
          //Navigator.push(context, MaterialPageRoute(builder: (context) => Page2()));
        },
      )),
    );
  }
}

class Page2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
    );
  }
}

slide_down_route.dart:
import 'package:flutter/material.dart';

class SlideDownRoute extends PageRouteBuilder {
  final Widget topPage;
  final Widget bottomPage;
  SlideDownRoute({this.bottomPage, this.topPage})
      : super(
          pageBuilder: (
            BuildContext context,
            Animation<double> animation,
            Animation<double> secondaryAnimation,
          ) =>
              topPage,
          transitionsBuilder: (
            BuildContext context,
            Animation<double> animation,
            Animation<double> secondaryAnimation,
            Widget child,
          ) =>
              Stack(
            children: <Widget>[
              SlideTransition(
                position: new Tween<Offset>(
                  begin: const Offset(0.0, 0.0),
                  end: const Offset(0.0, 0.0),
                ).animate(animation),
                child: bottomPage,
              ),
              SlideTransition(
                position: new Tween<Offset>(
                  begin: const Offset(0.0, 0.0),
                  end: const Offset(0.0, 1.0),
                ).animate(CurvedAnimation(parent: animation, curve: Curves.easeInQuint)),
                child: topPage,
              ),
            ],
          ),
        );
}

Run flutter sample code from above

Expected results:
Expected the keyboard to be dismissed.
Actual results:

When does the keyboard gets dismissed?

When I don't use autofocus

When I use only a simple one animation

e.g. default Navigator.push(context, MaterialPageRoute(builder:(context) => Page2())); instead

or when I remove/comment out these lines from slide_down_route.dart:

SlideTransition(
                position: new Tween<Offset>(
                  begin: const Offset(0.0, 0.0),
                  end: const Offset(0.0, 1.0),
                ).animate(CurvedAnimation(parent: animation, curve: Curves.easeInQuint)),
                child: topPage,
              ),

Logs

[✓] Flutter (Channel master, 1.19.0-2.0.pre.209, on Mac OS X 10.15.4 19E287, locale es-ES)
    • Flutter version 1.19.0-2.0.pre.209 at /Users/tomas/Development/flutter
    • Framework revision 54524a7f95 (22 hours ago), 2020-05-29 23:43:01 -0400
    • Engine revision 685699b351
    • Dart version 2.9.0 (build 2.9.0-11.0.dev 6489a0c68d)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at /Users/tomas/Library/Android/sdk
    • Platform android-29, build-tools 29.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.5)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.5, Build version 11E608c
    • CocoaPods version 1.9.1

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

[✓] Android Studio (version 3.6)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 44.0.2
    • Dart plugin version 192.7761
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211)

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

[✓] Connected device (4 available)
    • iPhone     • 00008020-000415840E50003A            • ios            • iOS 13.5
    • iPhone 11  • 04298E38-2633-4586-B868-1FBD5C708AF7 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-13-5 (simulator)
    • Web Server • web-server                           • web-javascript • Flutter Tools
    • Chrome     • chrome                               • web-javascript • Google Chrome 83.0.4103.61

• No issues found!

May be related to https://github.com/flutter/flutter/issues/48158

This is expected, when you push the slide down route, you create another textfield because you pass this.widget into the slide down route. That textfield is persist in the new route and is acquiring the focus due to autofocus.
If you want to make the first page slide down when pushing a new page, you should build you own PageRouteBuilder and build the slide down animation based on secondaryAnimation of the route. The secondaryAnimation is animating when a route is exiting the screen.

@chunhtai  Why am I passing this.widget into the slide down route? I was aware of that but couldn't find anywhere in the code that I'd pass it. How can I prevent that?
But if I call FocusScope.of(context).unfocus();  before the navigation happens, why does it pass the autofocus:true then?

I meant this line.
Navigator.push(context, SlideDownRoute(topPage: this.widget, bottomPage: Page2()));

According to the code, it seems like you want to use the topPage to build exiting animation. If that is the case, you can instead use a PageRouteBuilder for the First page that animate the sliding based on secondaryAnimation.
We use widget to create elements and states. Even though you use the same widget, the textfield in the first route and the second route has different states and elements, and they are independent to each other. If you unfocus the textfield in the first route, it will not affect the textfield in the second route

Aaa, I got you @chunhtai Thanks a lot, now I know how to fix it: by passing autofocus: false in here:
SlideDownRoute(topPage: PasscodeScreen(defaultAutofocus: false),bottomPage: MenuScreen()));
I just initialized it in FirstPage() like this:
class FirstPage extends StatefulWidget {
  final bool defaultAutofocus;
  PasscodeScreen({this.defaultAutofocus = true});

And then in my wished TextField use defaultAutofocus
And now it works as I expected it to.


Data set caching does not seem to be implemented correctly.

Please check that this issue hasn't been reported before.

[X] I searched previous Bug Reports didn't find any similar reports.

Expected Behavior
The data set caching does not seem to be implemented correctly. I have set the dataset_prepared_path. First I trained with a tiny-llama model. And had a loss of about 4. Then with a Mistral model on the same dataset. The loss was super high (about 10). After I deleted the files in the dataset_prepared_path, the loss was back in the normal range (about 4).
Current behaviour
Dataset cached from one model (tokenizer) seems to be loased for other tokenizer. Manual cache cleaning is needed.
Steps to reproduce
see above
Config yaml
No response
Possible solution
No response
Which Operating Systems are you using?

[X] Linux
[ ] macOS
[ ] Windows

Python Version
3.10
axolotl branch-commit
main
Acknowledgements

[X] My issue title is concise, descriptive, and in title casing.
[X] I have searched the existing issues to make sure this bug has not been reported yet.
[X] I am using the latest version of axolotl.
[X] I have provided enough information for the maintainers to reproduce and diagnose the issue.

Hey! I think we're aware of this issue. It may be because of using tokenizer class name instead of the tokenizer
https://github.com/OpenAccess-AI-Collective/axolotl/blob/5a5d47458d9aaf7ead798d15291ba3d9bef785c5/src/axolotl/utils/data.py#L137-L158
I've made a PR #1298 which fixes this


Service connection (with service principle)

It would be nice if a "verify" button is available on the service connection creation pane, like with the Azure Resource Manager service connection to verify the configured service principle.
Screenshot from Azure Resource Manager service connection creation pane:

I do not see any options at this moment to add this functionality. When it is possible in the feature I will try to add it


Use graph client with docker network based graph node

We are using a graph node as part of a fully-local setup:
https://github.com/connext/nxtp/blob/a0eb052ac0abb8b83821005f1c44dd8d2448a1fb/docker-compose.chains.yaml#L21
I want to be able to generate a graph client that can be used on resources within this docker network that talk to the graph node. The config for this would look like this:
https://github.com/connext/nxtp/blob/e0519f79172025770047e3aed5c7fa5796f6d56c/packages/adapters/subgraph/.graphclientrc.yml#L140
However I am not able to easily generate the client for this. When I try, it fails because the host cannot access this endpoint. If I use localhost, the container cannot access the graph node because it's not on localhost from the container's point of view. The workaround I used is to spin up a temporary container within the network that can do this. However this is not a feasible option for our devs to use.
Is there another way to generate the schema from a different URL but have the client use the provided URL for the queries?

You can use string interpolation to give different values for endpoint;
endpoint: "{env.MY_ENDPOINT}"

So you will give different env var during the build, and use a different one in the docker container.

@ardatan this is perfect, thank you for this!

You can use string interpolation to give different values for endpoint;
endpoint: "{env.MY_ENDPOINT}"

So you will give different env var during the build, and use a different one in the docker container.

Tried this as mentioned and seemed to work fine for the generation step however at runtime we get this error,
💥 🕸  Mesh TypeError: Only absolute URLs are supported     at getNodeRequestOptions (/home/node/node_modules/node-fetch/lib/index.js:1327:9)    .... is there another option or parameter we need to enable to get this to work @ardatan

What do you provide in your env variable?

perfect, both options work for me and could be a valuable addition to the docs.
related question: in .graphclientrc.yml, i want to create 1-n sources entries programmatically, also using env vars. is there a syntactic construct which allows that? if not, i would simply create the entire file .graphclientrc.yml programmatically.
thanks so much for the quick answer, i highly appreciated it 💯


Feature Request: add LLava as image recognizer on web pages

It would be nice to add LLava to recognize images in web pages so that it works together with RAG models..  LLava is however a textual AI model so it can be used as the main model to describe pages, this is to avoid overloading loading times. you just need to be able to "see" the various images.
On hugging face there are also models like mistral7B mixed with llava....

LLAVA   already works if you copy and paste the image link into the web page ,,,,

Yes, both the web UI and the side panel support uploading images.

There are a few more side panel supports for:

Chat with YouTube video (with transcript)
Chat with a PDF opened on a website

Nice!  I assume that it will therefore be much less complicated to make the RAG AI model interact with the LLAVA description of the images to create a single summary analysis.  I hope this is the case, it will be a wonderful feature.

I think that the work you will have to do is even less complicated, already now, if I open an image from the web as a page LLAVA can see it and describe it.. At this point the only thing you will have to do is indicate the links to LLAVA of the relevant images in the page and mix them with the text that the RAG provides to the AI.. :) it seems easy, but obviously I don't know anything about it, it's just a guess.

More fun! In reality the AI with the RAG it is already capable of extracting the link of the images! They just need to be sent to LLAVA to write the description of the image.

Yes, it's possible, I guess. I will add a setting to configure the model with vision for the image URL in the upcoming release :)

bingo mate!, now is your turn to do the magic here...
LLAVA  whit the RAG is already capable to extract the link of the images and describing it ....
(all you have to do is invoke LLAVA like you did for the RAG and mix everything..)

Thank you for the suggestions. We will improve on them in the upcoming version. By the way, Page Assist has a ChatGPT-like web UI. Have you tried it? If not, click on the Page Assist icon.
The web UI supports internet search and many more features. :)

yes I tried it a little, but at the moment I'm excited by the concept of the private co-pilot next to the web pages


[Testerina] Test Object Mocking and Function Mocking for Dependently Typed Functions

Description:
Dependently typed functions need to be tested for mocking capability with Object Mocking and Function mocking.
Describe your task(s)
Object Mocking

[x] thenReturn
[ ] withArguments
[x] Test copy

Function Mocking

[x] call
[x] thenReturn
[x] withArguments

Related Issues (optional):

Suggested Labels (optional):

Suggested Assignees (optional):

Function Mocking fails at the Desugar level to generate te functoin and throwsn an exception : error: jVM generation is not supported for type td.
public function getValue(typedesc<int|float|decimal|string|boolean> td) returns td  = @java:Method {
    name: "getValue",
    'class: "org.ballerinalang.testerina.natives.VariableReturnType"
} external;

Object Mocking works when making use of thenReturn function in all cases.
However, withArguments fails as it doesnt work for the typedesc parameter.
Object Mocking test double also works but only in certain cases


Implement filtering in reference implementation

i think a go-restful based framework should be imported, https://github.com/hpejustin/depark this can be a good example.

i think, we can add Label or Annotation properties to Note and Occurrence, in that case we can use filter to list them.

The intention here is to allow filtering on fields that already exist as a part of the occurrence or note. I don't see a case for additional labels or annotations.
The implementation will to parse a query string, reading key,values where keys are the fields of our resources.

We'll use one of the following filtering specs:

https://github.com/google/cel-spec
https://cloud.google.com/logging/docs/view/advanced_filters

Both of them require an accessible parser - I'm following up on that.

One aspect of this could be to go for a format that can be transformed into a database query, or will that be too restrictive?

We need a few things:

A parser that will parse and validate a filter expression from query string
A mapping of Keys to database fields (which I think is what you're referring to, @furuholm

I'm working with the cel team to create part one of this, but once we have that part 2 can follow quickly.
We also need a real database, but that's a separate issue.

Added #84 to address the database

Hey there, I've implemented the filter parsing using the syntax of advanced filters with the backing representation as cel. Any preference on which directory the parser should go into?

@TristonianJones Awesome! Lets put it in grafeas/server-go/filtering.

Just curious, but any thoughts on whether this is something that you'd like to continue using? If so, the github.com/google/cel-go library can be used to evaluate ASTs generated by the filtering parser.

Yes we are still planning on using what you impl'd for our filtering. Also thanks for the code pointer. @aysylu FYI this might be something you will take on.