Batch record retrieval

This issue relates to downloading large batches of records, such as fetching an entire dataset.
There are two main hurdles I've run into with the batch download:
1- Efficiency of the process
2- Loss of connection to the database during retrieval
Note, this issue relates to issues #740 and #741.
Here, I'm will outline some benchmarks and my attempted solutions.
Serial retrieval of records benchmarks
Currently if I want to fetch records I would do something similar to:
from qcportal import PortalClient
import time

client = PortalClient()
ds = client.get_dataset(dataset_type='singlepoint', dataset_name='QM9')

#grab the entry names
entry_names = ds.entry_names

# a barebones function to fetch relevant info from the database
def get_records(start, end):

    local_records = {}

    for record_name in entry_names[start:end]:
        temp = ds.get_entry(record_name).dict()
        temp2 = ds.get_record(record_name, specification_name='spec_2').dict()
        local_records[record_name] = [temp, temp2]

    return local_records

The performance for fetching a small number of records is good:
%time temp_records = get_records(start = 0, end = 10)
> CPU times: user 130 ms, sys: 32.5 ms, total: 163 ms
> Wall time: 3.66 s

Since this is a serial process, as might be expected, timing scales with the number of records

10 records: 3.66 s
100 records: 35.4 s
1000 records: 362s

Based on this scaling, fetching the whole QM9 dataset (with ~133K records) would take about 13 hours (in practice this is about right).
Multithreaded retrieval bencharmks
I used concurrent.futures to wrap the get_records function above, to allow for concurrent multithreading.  I'll note I chose concurrent.futures because it works in  jupyter notebooks without needing to do any sort of "tricks".   The code below is a pretty bare bones implementation of multithreaded retrieval.  I'll note, this code will chunk together 25 records per thread (i.e., chunk_size) and allow for 48 concurrent threads (i.e., n_threads);  these values seems to be pretty reasonable  on  my 8 core MacBook.
from concurrent.futures import ThreadPoolExecutor, as_completed

def run_threaded(max_records):
    range_list = []

    chunk_size = 25
    n_threads = 48 # this seemed to be about the sweet spot on my machine

    for i in range(int(max_records/chunk_size)+1):
        start = i*chunk_size
        if start >= max_records:
            break
        end = (i+1)*chunk_size
        if end > max_records:
            end = max_records

        range_list.append([start, end])

    threads= []
    overall_records = {}
    with ThreadPoolExecutor(max_workers=n_threads) as executor:
        for min_max in range_list:
            threads.append(executor.submit(get_records, min_max[0], min_max[1]))

        for task in as_completed(threads):
            overall_records = {**overall_records, **task.result()}
    return overall_records

Benchmarks for fetching records:

1000 records, 4.53 s
6000 records,  32 seconds

Extrapolating to the whole qm9 dataset, it would take about <15 minutes to fetch the 133K records, which seems quite reasonable as compared to 13 hours.
Loss of database connectivity
If I were to up the number of records to, say 10000,  at some point during the process I will get the following error:
PortalRequestError: Request failed: Bad Gateway (HTTP status 502)

Note, if I just turn off my wifi (to simulate an internet hiccup), I get the following error:
Could not connect to server https://api.qcarchive.molssi.org/, please check the address and try again.

I modifying the code above (shown below), to simply put the record retrieval in a try/except structure (inside a while loop that will retry a max of 1000 times).  I'll note,  in the code below, instead of recording the actual data fetched, i just keep track of the number of "failures" to connect to the server.
I had this code fetch 10000 records 3 times; the timing was very consistent at about 100 s.
Interestingly, the number of failures to connect didn't change much between the 3 runs: 405, 407, and 408.   If it were just my internet being a bit flaky, I would have expected those to be less consistent.  Since data is being broken up into 25 record chunks, that means 400 total threads, so the ~400 failures seems a little suspect .  Digging a little into these numbers, each thread on the first call to the portal,ends up in the except statement. This confuses me because, if every single thread needs to reconnect initially, how does the first implementation of the threading, without the try/except of this would even work?  (There must be something odd about the try/exception statement that is eluding me).  Regardless, this means that 400 of those "failures" aren't real, so we are really dealing with 5, 7, and 8, i.e., <1 failure to connect for every 1000 record calls.
Issue #741 suggests using retry behind the scenes which seems to be a more user friendly approach and would allow for a bit smarter approach in terms of connection retries.
Creating multithreaded get_records() and 'get_entries()' functions in the qcportal would be quite beneficial.
def get_records_try(start, end):

    local_records = {}
    failures = 0
    for i, record_name in enumerate(entry_names[start:end]):
        fetch_record = True
        attempt = 0
        max_iterations = 1000
        while fetch_record == True and attempt < max_iterations:
            try:
                temp = ds.get_entry(record_name).dict()
                temp2 = ds.get_record(record_name, specification_name='spec_2').dict()

                local_records[record_name] = [temp, temp2]
            except:
                time.sleep(float(attempt/max_iterations))
                client = PortalClient()
                ds = client.get_dataset(dataset_type='singlepoint', dataset_name='QM9')
                failures += 1
            else:
                fetch_record = False

            attempt += 1

    return failures

def run_threaded_safe(max_records):
    range_list = []

    chunk_size = 25
    n_threads = 48 # this seemed to be about the sweet spot on my machine

    for i in range(int(max_records/chunk_size)+1):
        start = i*chunk_size
        if start >= max_records:
            break
        end = (i+1)*chunk_size
        if end > max_records:
            end = max_records

        range_list.append([start, end])

    threads= []
    failures = []
    with ThreadPoolExecutor(max_workers=n_threads) as executor:
        for min_max in range_list:
            threads.append(executor.submit(get_records_try, min_max[0], min_max[1]))

        for task in as_completed(threads):
            failures.append(task.result())
    print(len(range_list))
    print(len(threads))
    return failures

Multithreading breakdown performance
I ran a few benchmarks with different chunk sizes and threads on my 8 core and 32 core machines, mostly because I was curious how much these impacted the results I showed above.    In terms of the number of records to fetch per thread, the sweet spot seems to be 5-10 records.   In terms of the number of concurrent threads, 8-10 threads per core.
Fetching 1000 records on 8 core machine
chunk_size 	n_threads 	time	(s)
1		48		31.9
2		48		26.2
5		48		13.3
10		48		13.7
25		48		16.2
50		48		27.6
chunk_size 	n_threads 	time	(s)
10		24		25.2
10		48		13.7
10		64		10.9
10		96		11.9
Fetch 2000 records on 8 core machine
chunk_size 	n_threads 	time	 (s)
10		24		43.7
10		48		23.6
10		64		18.4
10		96		16.9
10		128		21.2
Fetch 2000 records on 32 core machine
chunk_size 	n_threads 	time	 (s)
10		24		35.4
10		48		21.1
10		64		20.9
10		96		19.8
10		128		14.5
10		196		11
10		200		9.81
fetch 3000 records on 32 core machine
chunk_size 	n_threads 	time	 (s)
5		24		57.5
5		48		31.2
5		64		27
5		96		26.1
5		128		21.6
5		196		17.7
5		256		15.5
5		288		15.2
5		320		15.4
5		384		11.2
5		416		10.9
5		512		11.5
fetch 3000 records on 32 core machine
chunk_size 	n_threads 	time	 (s)
10		24		52.4
10		48		30.6
10		64		25.7
10		96		24
10		128		19.2
10		196		14.4
10		256		14.1
10		288		15.1
10		300		15

A few notes:
Getting records one-by-one will always be very slow because of various overheads. Datasets have an iterate_records function which will download records in batches behind the scenes. There is still an opportunity to optimize that further with something like a thread pool, but it is still much faster than getting records one-by-one.
The records obtained from iterate_records are stored/cached internally to the class as well.
The Bad gateway error is a little concerning. I will try to reproduce that. That points to an issue with handling the requests on my end, which shouldn't happen. Is that happening only when you use lots of threads?
Possibly related, but I did some investigation yesterday. We are indeed having some networking hardware issues that we are trying to pinpoint. So that might be adding some slowdown and variability to your requests as well.

iterate_records and iterate_entries is definitely a substantial improvement over just using the get_record and get_entry.  Fetching the 133K records took just over 9 minutes (for completeness, the  code snippet is below), so faster than the multithreaded calls to get_records/entries (which was ~15 minutes).
I'll note the bad gateway error would occur regardless of whether I used a threaded or non-threaded implementation. Even when using the iterate records, I am still getting a Bad gateway error roughly 1 out of ever 3 times I try to fetch the dataset.
local_records = {}

def iterate_records():

    for entry, record in zip(ds.iterate_entries(force_refetch=True), ds.iterate_records(specification_names=['spec_2'], force_refetch=True)):
        temp = entry.dict()
        temp2 = record
        local_entries[temp['name']] = temp
        local_records[temp2[0]] = temp2[2].dict()
        return local_records

FYI, the networking issues here at VT seem to have been resolved. So hopefully things are generally faster. I will look more deeply into the Bad Gateway errors, but at least at the moment I couldn't reproduce.

I just ran a bunch of "tests" (essentially just running a few loops of grabbing the same dataset above) with no gateway errors.

Ok that's funny, because now I am able to reproduce the Bad Gateway (from a Jupyter notebook running on a VM on the server, no less). So I will investigate that

I think this has been resolved, but if you run into problems again let me know!

I'm running into this same problem.  I've been trying all day to download data with the script at https://github.com/openmm/spice-dataset/tree/main/downloader.  It invariably fails with the exception
  File "/home/peastman/workspace/spice-dataset/downloader/downloader.py", line 111, in <module>
    recs = list(dataset.iterate_records(specification_names=specifications))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/peastman/miniconda3/envs/qcportal/lib/python3.11/site-packages/qcportal/dataset_models.py", line 972, in iterate_records
    self._internal_fetch_records(batch_tofetch, [spec_name], status, include)
  File "/home/peastman/miniconda3/envs/qcportal/lib/python3.11/site-packages/qcportal/dataset_models.py", line 716, in _internal_fetch_records
    record_info = self._client.make_request(
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/peastman/miniconda3/envs/qcportal/lib/python3.11/site-packages/qcportal/client_base.py", line 408, in make_request
    r = self._request(
        ^^^^^^^^^^^^^^
  File "/home/peastman/miniconda3/envs/qcportal/lib/python3.11/site-packages/qcportal/client_base.py", line 373, in _request
    raise PortalRequestError(f"Request failed: {details['msg']}", r.status_code, details)
qcportal.client_base.PortalRequestError: Request failed: Bad Gateway (HTTP status 502)

though only after working for anywhere from 20 minutes to 2.5 hours.  I've tried from two different computers.  One is at my home with a not great internet connection.  The other is in a data center at Stanford with a very high speed connection.  Both of them fail.

The downloads also are going ridiculously slowly, sometimes taking over an hour for a single dataset.  Almost all the time is spent in just two lines:
    recs = list(dataset.iterate_records(specification_names=specifications))

and
    all_molecules = client.get_molecules([r.molecule_id for e, s, r in recs])

The 502 errors are hard to debug, and something I've occasionally seen before. I see them in the logs but I don't see much more detail than that. I think it's related to some interaction between Traefik and gunicorn (where no workers are available), but I need to dig deeper. Unfortunately it is hard to reproduce.
I'm running the downloader script now and it seems to be chugging along. It could just be the amount of data being downloaded and being limited by cross-country bandwidth.
If you run the following (which just fetches all the records of the first dataset) how long does it take for you? For me it takes about 2 minutes.
time python3 -c "import qcportal as ptl;c=ptl.PortalClient('https://ml.qcarchive.molssi.org');ds=c.get_dataset_by_id(343);print(ds.name);recs=list(ds.iterate_records())"
The good-ish news is that I have been working on the local caching stuff, and that is almost ready. So this kind of stuff might become much easier in the future.
I do see that when getting records, there is a needlessly complicated query happening, although I doubt it affects it too much.

$ time python3 -c "import qcportal as ptl;c=ptl.PortalClient('https://ml.qcarchive.molssi.org');ds=c.get_dataset_by_id(343);print(ds.name);recs=list(ds.iterate_records())"
SPICE Solvated Amino Acids Single Points Dataset v1.1

real	4m3.647s
user	0m20.943s
sys	0m5.486s

If I also retrieve the molecules it takes much longer.
$ time python3 -c "import qcportal as ptl;c=ptl.PortalClient('https://ml.qcarchive.molssi.org');ds=c.get_dataset_by_id(343);print(ds.name);recs=list(ds.iterate_records());mols=c.get_molecules([r.molecule_id for e, s, r, in recs])"
SPICE Solvated Amino Acids Single Points Dataset v1.1

real	52m5.113s
user	44m5.881s
sys	4m7.884s

Oh my, this is not what I expected. I added some print statements for each part of fetching molecules, and the requests are being handled just fine (100-200 ms). But parsing the JSON into the molecule objects that is taking far too long. I need to look at this ASAP.
Getting 250 molecules
    Request time: 0.18s Return size: 1595493
    Deserialization time: 0.02s
    Model parse time: 113.40s

Almost 2 minutes to convert JSON to 250 molecules is definitely not right.

Ok I have a PR (#798) for the server that should fix this, but I need to test a bit to make sure it actually fixes the issue

Thanks for the quick fix!  Let me know when it's ready to test.

$ time python3 -c "import qcportal as ptl;c=ptl.PortalClient('https://ml.qcarchive.molssi.org');ds=c.get_dataset_by_id(343);print(ds.name);recs=list(ds.iterate_records());mols=c.get_molecules([r.molecule_id for e, s, r, in recs])"
SPICE Solvated Amino Acids Single Points Dataset v1.1

real	2m58.800s
user	0m23.878s
sys	0m4.934s

Much better!

I'm still getting this error.  I've been trying all day to download dataset 348.  It invariably fails after anything from a few minutes to a couple of hours.  Usually with the Bad Gateway error, occasionally with a read timeout.

Looking through the logs I do see a hint where the instance is running out of memory. I've increased the memory allocated to it through docker, and also reconfigured the number of processes/threads handling requests for each container. Let's see if that helps.
Ok let me see if I can reproduce this tomorrow on a different instance, but I think it is something subtle like this.
This is annoying but thanks for being patient!

Thanks!  I'm trying again.

Success, thanks!

Yes I haven't seen any additional errors. But the increasing memory usage is unsettling.
Something is happening in SQLAlchemy that is causing increasing memory as time goes on. I can reproduce it with QCFractal, even outside of flask. And I can see what data structures are being held on too long, but it's hard to reproduce it will a small self-contained script.


Add voxel manipulation

Allow the player to place and break blocks. Since this will turn a previously-static world into a dynamic one, several elements have to be introduced for this feature to be ready.

Rendering code needs to be able to handle regenerating the surfaces of existing chunks while holding on to the old data until the new data is ready to draw.
Solid chunks need to be able to turn into dense chunks when a block in (or neighboring) that chunk changes. A decision needs to be made on whether a solid chunk is a chunk with no air (even in its margins) or a chunk where every voxel is the same. The former is more efficient and likely better, but it will require a small refactor to make that point clear, and world generation will need to rerun for that chunk when it becomes dense.
"Prediction" code (prediction.rs) will need to also contain chunk data to ensure that the player can manipulate the world without delay longer than a step (essential for tasks like jumping and placing a block under yourself).
Communication between the server and the clients on world changes
Single-voxel collision checking to ensure that placed voxels do not intersect a character.
Ray-tracing to allow the player to aim where they're placing blocks.
A crosshair overlay so that the player knows where they're aiming.

An optional but likely helpful quality-of-life feature would be to push the player up to a certain distance away from a block being placed. This is a bit tricky to implement but not intractable. There are two problems that this can help resolve:

If a player pushes up against a wall, breaks it, and tries to replace it, they should ideally succeed, but it is tricky to guarantee this without the player potentially clipping through the placed block.
If the player walks past a ledge with the goal of placing a block horizontally to extend the ledge, the spherical collision region of the player will have them move downward, causing them to be in the way of the block that would be placed.

However, this quality-of-life feature is likely out of scope for this particular issue, as it has some challenges:

We need to decide which direction to push the character. It is likely the answer is "whichever direction yields the shortest distance", but some unanticipated artifacts could appear from that decision. Another option is "always up", although this would only solve the bridging problem.
To work in corners, multiple iterations of collision resolution may be needed. After redirecting the movement direction, the character still needs to move far enough to stop intersecting the voxel being placed.
If the player is on the ground, this feature might make them leave the ground when placing a block, which could be jarring, so some prevention may be needed for that.
This feature would cause discontinuities in the player's position that would require some kind of interpolation to correct.

While the server has one view of the world, the client seems to have three:

Last updated world-state given by the server
Predicted world-state, updated per step
Extrapolated world-state, updated per frame

Currently, all ECS components use the first view (last updated world-state given by the server), as prediction.rs stores everything about the second view (predicted world-state, updated per step), and client's sim.rs computes the third view (extrapolated world-state, updated per frame) on the fly.
If we don't want this long-term, I believe this feature (block placing/breaking) is a good time to revisit this, since we'll need the world's voxels to have prediction data (I don't think per-frame extrapolation data is needed, fortunately). This could just live in prediction.rs, since voxels aren't an entity anyway, but only if we're happy with organizing the code that way.


H2 WIP

Use the -ifNotExists option with tests that may have 'remote' callers initialize the H2 db
H2 2.1.210 defaults to a random management password so set a real one
Work around the fact that H2 2.x no longer treats BINARY cols as VARBINARY and defaults to size of 1.
TableResourceDefinition's ColumnAttribute.DATA defaults to BINARY, which will result in a col wherein H2 will only allow a single byte. I suspect the design assumed a more varbinary semantic.

See https://github.com/h2database/h2database/pull/2427

Perhaps the default value of TableResourceDefinition.ColumnAttribute.DATA should be reconsidered.

An alternative fix would be to configure a 'table=string' resource and specify VARBINARY as the col type for 'data'.

https://issues.redhat.com/browse/WFLY-16737
H2 offers different 'compatibility modes' (see http://www.h2database.com/html/features.html#compatibility). For a while this branch was using MODE=LEGACY but that no longer seems to be necessary to pass the testsuite, so my preference is to default to the H2 default of REGULAR.  But I added an expression to the DS URL to make it easy to override, e.g. to LEGACY.

@bstansberry You have to set the major version 2 and minor version 1 for H2:

https://github.com/wildfly/wildfly/blob/main/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/jca/metrics/data-sources/complex-driver.xml#L4
https://github.com/wildfly/wildfly/blob/main/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/jca/metrics/data-sources/wrong-empty-name-driver.xml#L4
https://github.com/wildfly/wildfly/blob/main/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/jca/metrics/data-sources/wrong-wo-name-driver.xml#L4

(wondering why these are not below ...src/test/resources/....)
Reference is here:

major: https://github.com/h2database/h2database/blob/master/h2/src/main/org/h2/engine/Constants.java#L86
minor: https://github.com/h2database/h2database/blob/master/h2/src/main/org/h2/engine/Constants.java#L91

Thanks, @boris-unckel. That will fix a few.

Sorry for the wrong minor, you fixed it already. 2.0.206 is still at minor 0.

@beikov Is it correct that we have no chance to use H2 2.0.206 due to this https://github.com/h2database/h2database/issues/3340#issuecomment-1006711337 (fix not released yet) using Hibernate 5.3.x?

@bstansberry I have found a solution (hm, workaround). H2 1.x treats NULL as DEFAULT (which is a sequence here) Enable the 1.x compatibility mode with MODE=LEGACY https://www.h2database.com/html/features.html#compatibility Identity columns have implicit DEFAULT ON NULL clause. It means a NULL value may be specified for this column in INSERT command and it will be treated as DEFAULT.
diff --git a/ee-feature-pack/galleon-common/src/main/resources/feature_groups/h2-datasource.xml b/ee-feature-pack/galleon-common/src/main/resources/feature_groups/h2-datasource.xml
index 54745faf9f..7cda7ad76f 100644
--- a/ee-feature-pack/galleon-common/src/main/resources/feature_groups/h2-datasource.xml
+++ b/ee-feature-pack/galleon-common/src/main/resources/feature_groups/h2-datasource.xml
@@ -7,7 +7,7 @@
             <param name="use-java-context" value="true"/>
             <param name="jndi-name" value="java:jboss/datasources/ExampleDS"/>
             <param name="data-source" value="ExampleDS"/>
-            <param name="connection-url" value=""jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE""/>
+            <param name="connection-url" value=""jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=LEGACY""/>
             <param name="driver-name" value="h2"/>
             <param name="user-name" value="sa"/>
             <param name="password" value="sa"/>

Thanks @boris-unckel I went ahead and merged that into my branch to see what effect it has.
Note that this is an experimental branch so we wouldn't bump H2 like this until folks like @scottmarlow (JPA/Hibernate) have had a chance to evaluate. I don't think I'd want to move on to a version that doesn't pass Hibernate testing.

Hibernate has a PR to support H2 version 2.x https://github.com/hibernate/hibernate-orm/pull/4588 It's a Hibernate 6.0 PR with jakarta.* package names.

Note that this is an experimental branch so we wouldn't bump H2 like this until folks like @scottmarlow (JPA/Hibernate) have had a chance to evaluate. I don't think I'd want to move on to a version that doesn't pass Hibernate testing.

+1, once https://github.com/hibernate/hibernate-orm/pull/4588 is merged, I think that should allow hibernate master branch to be used for testing with H2 but I don't think that https://github.com/hibernate/hibernate-orm/pull/4588 is actually testing against H2 from what I can tell by looking at https://github.com/hibernate/hibernate-orm/blob/main/gradle/libraries.gradle#L16:
 h2Version = '1.4.197'

Hi all. I think that with H2 2.1.210, which was released a few hours ago, the Hibernate tests work after my PR https://github.com/hibernate/hibernate-orm/pull/4588. So to get the testsuite with 5.3 working I will need to backport some fixes like ignoring time zone related test failures, which according to the H2 team are expected somehow, and also some "bad" column names which are now keywords that need to be renamed.
We can't bump the version to 2.1.210 yet though because we also use h2gis for testing spatial functionality and that library hasn't provided a version yet which is compatible with the new H2 version. Here is the issue for tracking this: https://github.com/orbisgis/h2gis/issues/1235
As soon as H2GIS 2.0 is out, we can start to evaluate bumping the H2 version on main/6.0 as well, but from what I tested locally, H2 2.1.210 works with Hibernate 6.0-SNAPSHOT and should also work with Hibernate 5.3 after my backports. Is it really necessary for 5.3 to support H2 2.0+ or can we make that a 6.0 only thing?

Is it really necessary for 5.3 to support H2 2.0+ or can we make that a 6.0 only thing?
IMO, supporting H2 on Hibernate ORM 6 sounds like a good step forward.

@darranl let's keep it for now.

This is now ready to go. @boris-unckel fyi re the last commit.


added precision parameter to to_s() and pretty(), fixes #21

Please report back what you like?
I have borrow from the ActionView::NumberHelper.number_with_precision()  from the Rails project.

@dominikh Do you accept this change or do you have other comments?

@dominikh A little reminder for review of the new patch


Code cleanup and improvements

Not sure if you would like help with this but I saw some things that could be improved in the code and also structure it so it is easier to maintain and get into.
Creating this issue first before I do anything that you might not want any way.
Suggestions:

[ ] Add an .editorconfig file to enforce code standards in the solution

[ ] Run dotnet format after this and submit a PR with all fixes this produces

[ ] Since only Net 8 is targeted go over and use collection initializers where possible
[ ] Use char methods where possible, like in CommonUtil.cs since this has better performance
[ ] Use StringBuilder where possible for better performance and less allocations
[ ] Order methods by their access level, so like public, internal, protected, private
[ ] internal classes can be sealed, small performance boost
[ ] Group overload methods together
[ ] Remove code that is commented out
[ ] In LinqExtensions instead of dictionary sqlExpressionTypes, a switch expression will be faster

[ ] Look for similar improvements

[ ] See if Spans can be used instead of other collections/strings

There is more but starts with this to see if you want help with this and if so how you would like to proceed since it might create lots of conflicts for some of the changes.

SpaceOrge,
These are all great suggestions, and I would definitely accept any help to improve this library so feel free to contribute whatever you like. I don't see any issue with all the points that you mentioned so far. I would ask that any pull requests you do go to the development branch.
In regards to .editorconfig file, I am not very familiar it, since I have never used it before, but I think it is a great idea and I am going to look into it tonight. Do you have a basic starter file that I could review?

I have used the .editorconfig that the dotnet team uses as a starter before and are happy with that:
https://github.com/dotnet/runtime/blob/main/.editorconfig

I research it yesterday and I agree we should adopt it into this project. The file you suggested looks good. I would say lets start with that one and change it as needed.

I am closing this ticket, we can re-open if there is any progress.


Performance On Example Images

It takes about 20-24 seconds: (Using the Cnn model Hog is near instant)
Using images from:
https://github.com/takuya-takeuchi/FaceRecognitionDotNet/tree/master/test/FaceRecognitionDotNet.Tests/TestImages
And the following code:
_FaceRecognition = FaceRecognition.Create(@"C:\Path\To\Models\models");
var model = FaceRecognitionDotNet.Model.Cnn;
var imageToCheck = @"C:\Path\To\Image\obama2.jpg";

for(var i = 0; i < 10; i++)
{
    using (var unknownImage = FaceRecognition.LoadImageFile(imageToCheck))
    {
        var stopwatch = new System.Diagnostics.Stopwatch();
        stopwatch.Start();
        var faceLocations = _FaceRecognition.FaceLocations(unknownImage, 0, model).ToArray();
        stopwatch.Stop();
        var elapsed = (int)stopwatch.Elapsed.TotalSeconds;

        foreach (var faceLocation in faceLocations)
            PrintResult(imageToCheck, faceLocation);

    }
}

What package did you try?
I tried the FRDN.CUDA100 and original python face_recognition for same obama2.jpg.
Your performance is a bit slow.
python
import timeit

# Note: This example is only tested with Python 3 (not Python 2)

# This is a very simple benchmark to give you an idea of how fast each step of face recognition will run on your system.
# Notice that face detection gets very slow at large image sizes. So you might consider running face detection on a
# scaled down version of your image and then running face encodings on the the full size image.

TEST_IMAGES = [
    "obama2.jpg"
]

def run_test(setup, test, iterations_per_test=5, tests_to_run=10):
    fastest_execution = min(timeit.Timer(test, setup=setup).repeat(tests_to_run, iterations_per_test))
    execution_time = fastest_execution / iterations_per_test
    fps = 1.0 / execution_time
    return execution_time, fps

setup_locate_faces = """
import face_recognition

image = face_recognition.load_image_file("{}")
"""

test_locate_faces = """
face_locations = face_recognition.face_locations(image, 0, "cnn")
"""

setup_end_to_end = """
import face_recognition

image = face_recognition.load_image_file("{}")
"""

test_end_to_end = """
encoding = face_recognition.face_encodings(image)[0]
"""

print("Benchmarks (Note: All benchmarks are only using a single CPU core)")
print()

for image in TEST_IMAGES:
    print(" - Face locations: {:.4f}s ({:.2f} fps)".format(*run_test(setup_locate_faces.format(image), test_locate_faces)))
    print()

dotnet
/*
 * This sample program is ported by C# from https://github.com/ageitgey/face_recognition/blob/master/examples/benchmark.py.
*/

using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using FaceRecognitionDotNet;
using Microsoft.Extensions.CommandLineUtils;

namespace Benchmark
{

    internal class Program
    {

        #region Fields

        private static FaceRecognition FaceRecognition;

        #endregion

        #region Methods

        private static void Main(string[] args)
        {
            var app = new CommandLineApplication(false);
            app.Name = nameof(Benchmark);
            app.Description = "The program for measure face encoding performance";
            app.HelpOption("-h|--help");

            var modelsOption = app.Option("-m|--model", "model files directory path", CommandOptionType.SingleValue);

            app.OnExecute(() =>
            {
                if (!modelsOption.HasValue())
                {
                    app.ShowHelp();
                    return -1;
                }

                var directory = modelsOption.Value();
                if (!Directory.Exists(directory))
                {
                    app.ShowHelp();
                    return -1;
                }

                FaceRecognition = FaceRecognition.Create(directory);

                var testImages = new[]
                {
                    "obama2.jpg",
                };

                Console.WriteLine("Benchmarks");
                Console.WriteLine();

                foreach (var image in testImages)
                {
                    var faceLocations = RunTest(image, SetupLocateFaces, TestLocateFaces);
                    Console.WriteLine($" - Face locations: {faceLocations.Item1:F4}s ({faceLocations.Item2:F2} fps)");
                }

                return 0;
            });

            app.Execute(args);
        }

        #region Helpers

        private static Tuple<double, double> RunTest<T>(string path, Func<string, T> setup, Action<T> test, int iterationsPerTest = 5, int testsToRun = 10)
        {
            var image = setup(path);

            var iteration = new Func<double>(() =>
            {
                var sw = new Stopwatch();
                sw.Start();
                for (var count = 0; count < iterationsPerTest; count++)
                    test(image);
                sw.Stop();

                return sw.ElapsedMilliseconds;
            });

            var fastestExecution = Enumerable.Repeat(0, testsToRun).Select(i => iteration()).Min();
            var executionTime = fastestExecution / 1000 / iterationsPerTest;
            var fps = 1.0 / executionTime;

            (image as IDisposable)?.Dispose();

            return new Tuple<double, double>(executionTime, fps);
        }

        private static Image SetupEndToEnd(string path)
        {
            return FaceRecognition.LoadImageFile(path);
        }

        private static Image SetupLocateFaces(string path)
        {
            return FaceRecognition.LoadImageFile(path);
        }

        private static void TestEndToEnd(Image image)
        {
            var encoding = FaceRecognition.FaceEncodings(image).First();
        }

        private static void TestLocateFaces(Image image)
        {
            var faceLocations = FaceRecognition.FaceLocations(image, 0, FaceRecognitionDotNet.Model.Cnn).ToArray();
        }

        #endregion

        #endregion

    }

}

The above benchmark
python
Benchmarks (Note: All benchmarks are only using a single CPU core)

 - Face locations: 0.0467s (21.43 fps)

Benchmarks (Note: All benchmarks are only using a single CPU core)

 - Face locations: 0.0468s (21.38 fps)

Benchmarks (Note: All benchmarks are only using a single CPU core)

 - Face locations: 0.0467s (21.43 fps)

dotnet
Benchmarks

 - Face locations: 0.0490s (20.41 fps)
Benchmarks

 - Face locations: 0.0492s (20.33 fps)
Benchmarks

 - Face locations: 0.0492s (20.33 fps)

Ah.. I was just using FaceRecognitionDotNet not any of the CUDA libs. That might account for it.

It seemks that the reporter resolve issue.


Does not seem to work with EditorImportPlugins

Refreshing an EditorImportPlugin does not seem to work as expected.
Tested plugins:

https://github.com/Rubonnek/godot-libgdx-texture-packer-atlas-importer
https://github.com/vnen/godot-tiled-importer

Turns out ResourceLoader was caching the resource so setting no_cache to true on ResourceLoader.load helps when using this plugin.
This is just how the engine works, so I don't think this issue should remain open.


Cancel a download

Provide a button to cancel a download rightaway

By cancel do you mean to it should delete all the downloaded files? Because there is already a pause button which pauses download and keeps the downloaded files.

yes, it should delete all the files if i press cancel the download

It would be nice to have a button to cancel and delete all files from a download

Any updates on this?


Private  constructor in DefaultMediaNotificationProvider makes overriding impossible

Media3 Version
1.0.0-beta03
Reproduction steps
In getMediaButtons the comment reads:

Override this method to customize the buttons on the notification. Commands of the buttons returned by this method must be contained in MediaController.getAvailableCommands().

Unfortunately it seems to be impossible to extend DefaultMediaNotificationProvider in beta-3, because Java will require a call to the constructor() of the inherited function, but it is private in DefaultMediaNotificationProvider.
Maybe there is some advanced trick to get it working, but it shouldn't not be that complicated, or at least documented how one can do it.
Full code:
@UnstableApi public class CustomProvider extends DefaultMediaNotificationProvider {
    public CustomProvider(Context ctx) {
        super(new Builder(ctx));
    }

    @Override
    protected List<CommandButton> getMediaButtons(Player.Commands playerCommands, List<CommandButton> customLayout, boolean showPauseButton) {
        return super.getMediaButtons(playerCommands, customLayout, showPauseButton);
    }
}

Thank you for reporting this. It is a miss on our end and we will soon push a fix in the main branch.

A fix for this has been released to the main branch.


Various Win32 fixes.

-) Adding property sheets for NuGet's OpenSSL and zlib.
-) Fixing the C++ code generation for Windows / Visual Studio.
-) Windows tcp server and client should no longer starve waiting for orphans.
-) Proper server shutdown sequence to avoid use-after-frees.

@boolking, @jtattermusch: could you check if this is solving your issues ?

I haven't checked if it resolves the issues yet, but this PR has made my day anyway. Thanks!


Feature request - Native size mode

would it be possible to have a widescreen mode, which takes 400x240 images by binning pixels instead of downsampling the whole sensor image?

It is possible, but there isn't enough RAM in the Teensy to handle VGA
resolution (before binning), so you'd need to solder PSRAM chips to it. It
might also be possible to optimize the OV7670 library for this use case, in
order to save memory - something I haven't explored at all.
Alternatively the M5Stack CoreS3 version of the project should be able to
allow it without hardware modification :
https://github.com/abenokobo/pd-camera-m5
Cheers,
Le sam. 7 oct. 2023, 02:19, pootinanny @.***> a écrit :

would it be possible to have a widescreen mode, which takes 400x240 images
by binning pixels instead of downsampling the whole sensor image?
—
Reply to this email directly, view it on GitHub
https://github.com/t0mg/pd-camera-app/issues/1, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAOQX3OGPNW3CYPLIB3FHTLX6CNYTAVCNFSM6AAAAAA5WPZBRGVHI2DSMVQWIX3LMV43ASLTON2WKOZRHEZTCMBWHEYDAMA
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>


com.google.code.gson:gson - J2ObjC continuous build

https://github.com/j2objc-contrib/j2objc-gradle/blob/master/systemTests/externalLibrary1/third_party_gson/build.gradle
Should convert the system tests in j2objc-gradle to an independent continuous build here.

cc @swankjesse @inder123 - this is an FYI that we've setup a continuous build to translate the Gson library to objective-C to allow it's use on iOS. This uses Google J2ObjC project to greatly extend the sharing of code on the two platforms.
Example build:
https://travis-ci.org/j2objc-contrib/j2objc-common-libs-e2e-test/jobs/82360553
An article about J2ObjC's use for Google's Inbox:
http://arstechnica.com/information-technology/2014/11/how-google-inbox-shares-70-of-its-code-across-android-ios-and-the-web/

Wow! Awesome. Can you provide a link to where users can download this
library for use in their iOS projects? I would like to put a link on Gson
project page, and direct people to it on mailing lists.
On Mon, Sep 28, 2015 at 8:04 AM, Bruno Bowden<EMAIL_ADDRESS>wrote:

cc @swankjesse https://github.com/swankjesse @inder123
https://github.com/inder123 - this is an FYI that we've setup a
continuous build to translate the Gson library to objective-C to allow it's
use on iOS. This uses Google J2ObjC project to greatly extend the sharing
of code on the two platforms.
Example build:
https://travis-ci.org/j2objc-contrib/j2objc-common-libs-e2e-test/jobs/82360553
An article about J2ObjC's use for Google's Inbox:
http://arstechnica.com/information-technology/2014/11/how-google-inbox-shares-70-of-its-code-across-android-ios-and-the-web/
—
Reply to this email directly or view it on GitHub
https://github.com/j2objc-contrib/j2objc-common-libs-e2e-test/issues/19#issuecomment-143768790
.

--
http://www.singhinderjeet.com/

@inder123 - we don't have any plans to publish pre-compiled libraries. In order to use this, someone will need to do their Android build in Gradle then correctly configure a further gradle for the Gson build. Here's an example for how this project would be done:
https://github.com/j2objc-contrib/j2objc-common-libs-e2e-test/blob/master/libraryBuilds/com.google.code.gson-gson/build.gradle
My suggestion is to first try this yourself, so you understand how it works. Likely this process will improve a great deal over the next few releases.


Extend number of faker items

I love this project!!!
Faker has many more types that can be faked.  (for example, Lorem has lots of subtypes like 'slug".) Would be nice to access them with an extensions file.
Looks like there is a config file that can be extended.  Going to try that on a fork.  Might get to a pull request...

Going to try that on a fork. Might get to a pull request...

@tdsfugal Would be great 👍 You can add new types here:
https://github.com/APIs-guru/graphql-faker/blob/master/src/fake.ts#L51
And also list the new types here:
https://github.com/APIs-guru/graphql-faker/blob/master/src/fake_definition.graphql#L41
Looking forward to your PR! Feel free to ask questions.
If you don't have time for PR just list suggested items and I will try to add them in future.


fix: uptake litter-api v2

uses the v2 release of litter-api
BREAKING CHANGE: Removed several CLI flags that became irrelevant for litter-api v2
Fix #26

:tada: This PR is included in version 3.0.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Pin hashes for GitHub actions in workflow ci file

Pin hashes for GitHub actions in workflow yml files.
I checked the latest stable versions for each of our action dependencies and got the commit hashes.
I have done a check for security advisories for each of the actions, but haven't found any.
The versions I have used for each of the actions are as follows:

actions/checkout v3.1.0
actions/setup-python v4.3.0
codecov/codecov-action v3.1.1

Signed-off-by: Martin Vrachev<EMAIL_ADDRESS>

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

Coverage data is based on head (4fb7c50) compared to base (83ff724).
Patch has no changes to coverable lines.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #106   +/-   ##
=======================================
  Coverage   83.70%   83.70%
=======================================
  Files           9        9
  Lines         540      540
=======================================
  Hits          452      452
  Misses         88       88

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

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

Rebased on top of latest dependabot changes.

Thanks. Can you update the cd.yml file too?


Added nginx template

Describe your changes
This PR implements a template for an Nginx configuration that works with Netbird.
Issue ticket number and link
Checklist

[ ] Is it a bug fix
[ ] Is a typo/documentation fix
[X ] Is a feature enhancement
[ ] It is a refactor
[ ] Created tests that fail without the change (if possible)
[ ] Extended the README / documentation, if necessary

I have also added appropriate documentation to explain how to use this template with Netbird: link

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


FortiEDR breaks UDP upload

When FortiEDR filter driver FortiEDRIotDriver_<IP_ADDRESS>2.sys is installed, UDP upload over VPN when using DCO driver is essentially broken.

The problem is specific to DCO driver and UDP upload. Download speed is fine, also the speed over TCP is fine. Tap-windows6 driver is not affected.
Uninstallation of FortiEDR fixes the problem.

Hi,
On Thu, Aug 17, 2023 at 02:58:38AM -0700, Lev Stipakov wrote:

When FortiEDR filter driver FortiEDRIotDriver_<IP_ADDRESS>2.sys is installed, UDP upload over VPN when using DCO driver is essentially broken.

Sounds like some sort of anti-ddos protection shenanigan... ("no sane
client will produce so much UDP"), though I wonder why tap6 is not
affected...
Of course fortinet's own SSL VPN only does TCP, so they would never
notice.

The problem has gone away after upgrading FortiEDR to <IP_ADDRESS>4. I will close the ticket and if we get details what has been fixed in their driver I'll post it here.


Remove the setting applicationId code

Description

applicationId is set since cordova-android 5.1.0, so this code is not needed
Related Issue

Motivation and Context

How Has This Been Tested?

Screenshots (if appropriate):
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

[x] My code follows the code style of this project.
[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[x] I have read the CONTRIBUTING document.
[ ] I have added tests to cover my changes.
[x] All new and existing tests passed.

@jcesarmobile push.gradle is getting pretty small now 😄

what is the multiDexEnabled for? maybe you can also remove it

It fixes a problem when the app includes more than 64k methods.

then maybe we should move that to cordova-android? or let the user handle it?
why should the plugin worry about that?

You know what, I should make it a plugin of it's own for now.

A plugin for 5 lines of code: npm, what have you done to mankind?

I think it's a good idea

@jcesarmobile did it!

I really just meant it to be an independent plugin, but not a dependency of push plugin. Or do the FCM libs always cause the app to have more than 64k methods?


ImageSlideshow/Kingfisher in 2.3

hello
i use 2.3 branch for a project
i want to install ImageSlideshow/Kingfisher
and when i pod install i have this error
i use :   pod 'ImageSlideshow/Kingfisher'

[!] There are only pre-release versions available satisfying the following requirements:
'ImageSlideshow/Kingfisher', '>= 0'
You should explicitly specify the version in order to install a pre-release version

any idea to solve this ?

Just do what CocoaPods say – explicitly specify the version you want to use. In your case it's version 0.6, or you can directly specify the swift-2.3 branch instead.


Allow MCP "consumers" to add extra text to MCP comment

This would allow e.g. T-compiler to ping compiler contributors on GitHub whenever an MCP is created, as discussed in rust-lang/compiler-team#369.
@Mark-Simulacrum @varkor does this seem like a viable approach?

Option<String> is already used directly, e.g. in https://github.com/rust-lang/triagebot/blob/e56c12fa8e31f3b0197755a0d91663bde186bb80/src/config.rs#L67
I remember problems with Option and serde but IIRC it was only for serialization, not deserialization.

@Mark-Simulacrum Do you want me to add #[serde(default)] on the Option?

No, sorry, just didn't see this PR. I need to figure out a query that'll give me PRs here too... I guess maybe I can add to the triagebot query stuff :)


Hotfix ElasticSearch for Log4Shell

https://github.com/ubuntu/microk8s/pull/2802

Merging based on approval for https://github.com/ubuntu/microk8s/pull/2803, https://github.com/ubuntu/microk8s/pull/2804 and https://github.com/ubuntu/microk8s/pull/2802


Component initial denisty

Description
Solves Issue #819

Checklist

[x] This PR has only one purpose or idea.
[x] Tests have been added/updated to verify that the new/changed code works.

[x] The code style follows good practices.
[x] The commit message(s) follow good practices.

[x] The release notes are up-to-date with any bug fixes or new features.
[x] The documentation is still up-to-date in the doc folder.
[x] The dependencies are still up-to-date in setup.py.

this will resolve #819

The test is meant to be a tutorial for how to expand something. it will be a lot of duplicated code to show each step individually and be much less clear to read. The idea is that it describes a tutorial how to do this type of thing in a script and what you can expect to be conserved.
As a result of your comment, i did split it into its own test class, and 1 test for height taken as hot, and 1 for height taken as cold. I hope that helps with addressing your concerns. Let me know if its more clear. Its quite a bit fewer lines than the original testing.


Prepare EIP-712 metamask signing demo on development env

Fund address from metamask
Modify Eip-712 PoC add form that accepts 1 input & 2 outputs
Prepare tx spending deposit and sign it with MM
Standard exit from tx (^3)
Prepare tx that spends one of prev tx (^3) outputs and sign it with MM
Challenge exit with tx (^5)

Refer to this test for steps.

Note to self: GDrive/Docs: DEMO: EIP-712 Signatures with Metamask


Update EFI folder

Hello,
I would like to try to update your EFI folder to OpenCore 0.7.6 and every kext, ACPI, Drivers etc...
I thought to use this software to update everything https://github.com/ic005k/QtOpenCoreConfig but I'm aware to lose some customizations/corrections you did to "stock" files.
Have you already used that software? Otherwise, what do you use to update everything without losing your customizations?
Or if you think it is better to do it in manual way, can you list the differences from the stock files?
Thanks for your help.
Regards

OCAT is safe to use, but I prefer to update manually.


Upgrade com.newrelic.agent.java:newrelic-api 8.0.0 -> 8.0.1

This PR contains the following updates:

Package
Type
Update
Change

com.newrelic.agent.java:newrelic-api
compile
patch
8.0.0 -> 8.0.1

Release Notes

newrelic/newrelic-java-agent
v8.0.1
Compare Source
Fixes

Various fixes to the HttpUrlConnection instrumentation. See the README for full details https://github.com/newrelic/newrelic-java-agent/pull/1145
Ensure that TokenAndRefCount.token is never null https://github.com/newrelic/newrelic-java-agent/pull/1148
Correct a possible NullPointerException being thrown when calling addCustomAttributes https://github.com/newrelic/newrelic-java-agent/pull/1141
Fix ClassCircularityError when agent attaches https://github.com/newrelic/newrelic-java-agent/pull/1139

Full Changelog: https://github.com/newrelic/newrelic-java-agent/compare/v8.0.0...v8.0.1

[ ] If you want to rebase/retry this PR, check this box

Suggested commit message:
Upgrade New Relic Java Agent 8.0.0 -> 8.0.1

See:
- https://github.com/newrelic/newrelic-java-agent/releases/tag/v8.0.1
- https://github.com/newrelic/newrelic-java-agent/compare/v8.0.0...v8.0.1


Developer Utility, DomEvent handler, UI/UX improvements

Update o11y and o11y_schema to latest version
Add new Utility tab that allows base64-encoded protobuf binaries to be sent directly to local (sample API) endpoint
Upgrade Node to v18

New button to demonstrate optional mouse event data capturing:

New section "Utility" to help with debugging


Configure ODL startup params

When OpenDaylight is started, various params are passed to the process (-XX:MaxPermSize=512m...). Need to be able to configure these, via params to the ODL class. This seems fairly difficult, as systemd is what's actually kicking off that process. Not really sure where the config should go.

This feature request was from an early user who's attempting to get ODL+OpenStack playing well together. I think he may have been looking at some old docs, now that I have a moment to actually think. As far as I know, we stopped passing params to ODL at start for config in Hydrogen (when we moved to Karaf).
So, need to validate that this is actually necessary. If it is, it's likely that it's not done through a startup command anymore, so shouldn't be as complex as I initially thought.

I'm pretty sure this is not even a thing since Helium.


Linear_wind_LUT.nc created every time

I've tried assigning the absolute and relative path for LUT_filename in the namelist file, but when read_LUT = True and write_LUT = False, ICAR still creates a linear theory LUT. I'm using the same hi res file (domain) every time. I also tried commenting write_LUT, but it still created the LUT.

I'm not sure I quite understand what is happening.  It has to create the LUT in memory, but it shouldn't write the file if write_LUT is false.  Are you sure it is reading the namelist you have edited?  When it writes the LUT to disk, does it print anything to the screen?
The relevant code is here: https://github.com/NCAR/icar/blob/master/physics/linear_winds.f90#L991
  if ((options%lt_options%read_LUT) .and. (error == 0)) then
    print*, "Not writing Linear Theory LUT to file because LUT was read from file"
  else
    print*, "Writing Linear Theory LUT to file: ", trim(options%lt_options%u_LUT_Filename)
    error = write_LUT(options%lt_options%u_LUT_Filename, hi_u_LUT, hi_v_LUT, options%dz_levels, options%lt_options)
  endif
endif

Or do you just mean that it is recomputing the LUT even when it should be reading it from disk?  It should print out some information if it is or is not able to read the LUT. Do you get such an error message?
see https://github.com/NCAR/icar/blob/master/physics/linear_winds.f90#L903
  print*, "Reading LUT from file: ", trim(options%lt_options%u_LUT_Filename)
  error = read_LUT(options%lt_options%u_LUT_Filename, hi_u_LUT, hi_v_LUT, options%dz_levels, LUT_dims, options%lt_options)
  if (error/=0) then
    write(*,*) "WARNING: LUT on disk does not match that specified in the namelist or does not exist."
    write(*,*) "    LUT will be recreated"

I have attached a log and my namelist of the icar run. ICAR was compiled using MODE=debug. I think the error at the end might have to do with the compile option as just using 'make' results in a failed build, but 'make MODE=debug'  is successful.
cfs_icar_options.nml.txt
icar_log.txt

ah, this probably isn't as clear as it should be.  Many of the namelists are not even read if you dont' set the corresponding "use_X_options" to true in the main parameter namelist.  In this case, you need to set use_lt_options=true so that it will read the options related to linear theory.
https://github.com/NCAR/icar/blob/master/run/complete_icar_options.nml#L164

It would help if I read every line of the full options namelist. Maybe I will add this to the docs or FAQ


Repository.ListByOrg: Add nebula-preview to receive visibility field

What type of PR is this?
feature
What this PR does / why we need it:
In addition to the changes added in https://github.com/google/go-github/pull/1780, this change also ensures the Visibility field is included when calling Repositories.ListByOrg.
Special notes for your reviewer:
None

@googlebot I signed it!


SavingCallback used with ContinousCallback error

Hi,
Even after this correction https://github.com/JuliaDiffEq/Sundials.jl/issues/202
the following code still produces an error. Julia solvers (e.x. Tsit5) handle this setup correctly.
f = (du, u, p, t) -> du[1] = u[1]
out = SavedValues(Float64, Vector{Float64})
scb = SavingCallback((u,t,integrator)->[2*u[1]], out, saveat = [0.0,0.25,0.5,0.75,1.0])
condition = (u,t,integrator) -> t-0.7
function affect!(integrator)
    save_affect! = integrator.opts.callback.discrete_callbacks[1].affect!
    save_affect!(integrator, true)
    integrator.u[1] = 1.0
    save_affect!(integrator, true)
end
cb = CallbackSet(scb, ContinuousCallback(condition,affect!,(integrator) -> nothing,save_positions=(false,false)))
prob = ODEProblem(f,[1.0],(0.0,1.0),callback = cb)
sol = solve(prob,CVODE_BDF(),  save_start=false, save_end=false, save_everystep=false)

[CVODES ERROR]  CVodeGetDky
  Illegal value for t.t = 0.725424 is not between tcur - hu = 0.760925 and tcur = 0.928816.

┌ Warning: CVodeGetDky failed with error code =
│   flag = -25
└ @ Sundials C:\Julia-1.1.0\packages\Sundials\eAJ5O\src\simple.jl:20

condition = (u,t,integrator) -> t-0.7 is causing it to always trigger at t=0.7 and then saveat = [0.0,0.25,0.5,0.75,1.0] wants to interpolate back to zero which isn't in the interval. This is just a bad idea and the integrator interface mentions that you shouldn't be interpolating out of the current interval. Instead, you should trigger at each interval passing a saveat value, which is exactly what the saving callback does in practice if you just use it directly.

Chris, could you please give me an example how to rewrite it in the intended way. My goal is to save some values f(u,t,integrator) at saveat timepoints. When I use events I also need to call  save_affect! function before and after the affect!. I understand the interpolation problem here but what is the proper way to handle it?

You need to trigger the SavingCallback at each step separately from the continuous one, and then just trigger the save_affect! before the internal effect of the SavingCallback

Sorry, could you please give me an example how it should look like

Oh that might be a little difficult 🤷♂ . You might want to essentially put the saving callback code into a callback, i.e. fancy interpolations + calling savevalues! directly.

Though it is not related to Sundials (maybe we better move this talk elsewhere), I'll be grateful if you help me better understand the way SavingCallback and Continuous/Discrete  Callback should be used together. Now I use the following code (workaround):
function affect!(integrator)
    save_affect! = integrator.opts.callback.discrete_callbacks[1].affect!
    save_before_after(save_affect!, integrator)
    # change some parameter values
    save_before_after(save_affect!, integrator)
end

function save_before_after(
    affect!::DiffEqCallbacks.SavingAffect,
    integrator
)
    affect!.saveiter += 1
    copyat_or_push!(affect!.saved_values.t, affect!.saveiter, integrator.t)
    copyat_or_push!(affect!.saved_values.saveval, affect!.saveiter, affect!.save_func(integrator.u, integrator.t, integrator),Val{false})
end

Is it an ok solution or there can be issues with it? I am still a bit confused about the intended way to handle this problem))

When I did this in PuMaS, directly without SavingCallback, I used the difference between savevalues!(integrator) vs savevalues!(integrator,true) (forcing a save), with save_everystep=false, using the first to trigger saveat while the second is to then just save at a point. I assume something similar would be needed here, so maybe SavingCallback needs a PR, but this is something that is quite intricate.


how to disable virtio-serial in machines that do not support pci

Describe the issue
I want to test u-boot with rpi3B(arm64).
I search the question and know that it’s impossible to edit qemu ‘-device virtio-serial’.
Is there any way to boot it ?
Configuration (required)

UTM Version: 4.4.4
OS Version: 14.5.1
Device Model: iPad Pro m1
Is it jailbroken (name jailbreak used)?  Unc0ver
How did you install UTM?  Cydia

I get uboot and iso from alpine Linux website.
And I just want to know the respi3B’s .dtb and qemu-arm64’s u-boot.bin can work or not…

If the u-boot can work and I want to ask if I can boot the asahi Linux or macos via uboot… I know it’s not that easy but I just think it’s cool.


[ipaddress-cpp] Add new port

[x] Changes comply with the maintainer guide.
[x] The name of the port matches an existing name for this component on https://repology.org/ if possible, and/or is strongly associated with that component on search engines.
[x] Optional dependencies are resolved in exactly one way. For example, if the component is built with CMake, all find_package calls are REQUIRED, are satisfied by vcpkg.json's declared dependencies, or disabled with CMAKE_DISABLE_FIND_PACKAGE_Xxx.
[x] The versioning scheme in vcpkg.json matches what upstream says.
[x] The license declaration in vcpkg.json matches what upstream says.
[x] The installed as the "copyright" file matches what upstream says.
[x] The source code of the component installed comes from an authoritative source.
[x] The generated "usage text" is accurate. See adding-usage for context.
[x] The version database is fixed by rerunning ./vcpkg x-add-version --all and committing the result.
[x] Only one version is in the new port's versions file.
[x] Only one version is added to each modified port's versions file.

A library that implements functionality similar to the ipaddress library from Python

Thanks for your PR. There is already port ipaddress on https://repology.org/. Its upstream URLs do not match this port, so it is recommended to rename this port to vladimirshaleev-ipaddress, add vladimirshaleev as the prefix. Or if you have any other good ideas, feel free to share.

Note: I will be converting your PR to draft status. When you respond, please revert to "ready for review". That way, I can be aware that you've responded since you can't modify the tags.

All features passed with following triplets:
x86-windows
x64-windows
x64-windows-static

Usage test passed on x64-windows.

Hi Lily! Thanks for your review!
I probably don't understand the point of repology.org. Port ipaddress for the R language; this library for C++. The name was not chosen by chance. This is similar to the API provided by the ipaddress Python module. Therefore, there likely exist similar analogs for other languages. Because people will search for a library by this name for the language they use.
If it’s not too much trouble, could you confirm whether renaming is necessary in this case? If so, I would propose the name ipaddress-cpp, as it better reflects the library’s purpose and keeps the name quite short. How do you think?

If it’s not too much trouble, could you confirm whether renaming is necessary in this case? If so, I would propose the name ipaddress-cpp, as it better reflects the library’s purpose and keeps the name quite short. How do you think?

Thanks for your reply, I agree with the new name ipaddress-cpp, this is good.

Hi! I renamed it, does this match your expectations?

Tagging vcpkg-team-review to confirm we are happy with the name. (I think it's OK but I want to confirm)
Repology has IPAddress which is a Java library https://github.com/seancfoley/IPAddress , and 2 other language-prefixed libraries also named IPAddress. This is the first library result for "ipaddress c++"

Tagging vcpkg-team-review to confirm we are happy with the name. (I think it's OK but I want to confirm)
Repology has IPAddress which is a Java library https://github.com/seancfoley/IPAddress , and 2 other language-prefixed libraries also named IPAddress. This is the first library result for "ipaddress c++"

@ras0219-msft @vicroms @dan-shaw and I discussed this today.
After further analysis of the repology entries above that convinced me that this might work, we realize that several of the language variants are all owned by https://github.com/seancfoley , and we feel they have effectively taken the name 'ipaddress' in terms of customers' expectations.
As a result we would need this to follow the normal [github org]-[project] form (vladimirshaleev-ipaddress) before adding this to our registry.
If this project gets the blessing of https://github.com/seancfoley and it ends up listed on the readme of https://github.com/seancfoley/IPAddress we will be happy to change the name to remove the [github org]- part. (This can happen after vladimirshaleev-ipaddress is initially added)
We are explicitly fine with #include <ipaddress/*> et al. not needing to change.

Once again, there’s nothing surprising about having libraries with similar names. In Python, this is done well, and other programmers would expect equivalents in their language with similar functionality and a similar name (since they would search google for it that way).

The problem is less 'different projects in different languages with the same name', it is 'we want people who do vcpkg install blah to get what they expect blah to mean. We use repology's database to ensure that we aren't giving names to projects which may surprise people. Giving the 'obvious' name to a project which is not clearly established as the provider of a given thing is a risk to us because we effectively can't change who has a name once it has been assigned. Our default answer when these problems happen is to prefix with the GitHub organization of the source (when the sources come from GitHub).
If use of that component explodes and it does become the clear and obvious defacto provider of a thing, we can always rename/alias the port to give it a prettier name.
(Effectively, we can add new names, we can deindex names, but we can't change the ownership of a name once it's already out there)

Do I understand correctly that we are talking primarily about possible confusion with the addresses of repositories with the same names? And the fact that the port name vladimirshaleev-ipaddress will eliminate possible ambiguities during the search?

Yes. This is why we are explicitly saying there's no problem with taking #include <ipaddress/*>. If 10 years from now vladimirshaleev/ipaddress is unmaintained and unused and people now use some-other-fancy-org/ipaddress we can safely deindex vladimirshaleev-ipaddress and index some-other-fancy-org-ipaddress to change the ownership of #include <ipaddress/*>, but once we've made vcpkg install ipaddress-cpp mean vladimirshaleev/ipaddress that's effectively frozen forever. If 10 years from now vladimirshaleev/ipaddress is used by everyone and everyone expects it to have the shorter name, we can rename vladimirshaleev-ipaddress to ipaddress and make vladimirshaleev-ipaddress just be {"name": "vladimirshaleev-ipaddress", "version": "a bigger number", dependencies: ["ipaddress"]}

Thank you for taking the time to explain this to me in detail. I really appreciate it.


Luna-French - Release 1.0

Hello,
This is the end of the project version 1.0 of the Luna forums translation.
Patch note:

[x] Release French translation : 100%
[x] Release Complete test of the translations
[x] Improved Correct translations
[x] Fixed Translations of version 1.0-beta.3 and earlier

Please note that this version will not be the last one, we will rely on your feedback and report any translation problems in order to continue to correct these translations.

New release is available !
Please note that this version will not be the last one, we will rely on your feedback and report any translation problems in order to continue to correct these translations.
Create new issue for report translation problem


Move virt-controller metrics to pkg/monitoring

What this PR does / why we need it:
Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #
Special notes for your reviewer:
jira-ticket: https://issues.redhat.com/browse/CNV-29245
Release note:

Move virt-controller metrics to pkg/monitoring

/test all

/test all

/test all

/cc @enp0s3

/uncc

/approve
/retest-required

/lgtm


Less nested Config hierarchies

Change Summary
In case of models that inherit multiple base models, the dynamically generated Config creates a deep class hierarchy as each Config inherits the Config of exactly one base. This PR replaces inherit_config with a more general combine_configs that allows a Config to extend multiple bases.
Checklist

[ ] Unit tests for the changes exist
[ ] Tests pass on CI and coverage remains at 100%
[ ] Documentation reflects the changes where applicable
[ ] changes/<pull request or issue id>-<github username>.md file added describing change
(see changes/README.md for details)
[ ] My PR is ready to review, please add a comment including the phrase "please review" to assign reviewers

sorry not to be more positive, but I think this is the best decision overall.

No worries, I didn't know that v1.* was in bugfix-only mode.

sorry, yes we're pushing hard to get V2 out asap, hence not making general improvements to V1.

Big +1 for making config a dict in V2, looking forward to it!


Create new tour based on the updated platform

The tour code is written in many parts, and is scattered all over in a mess.
We should create it from scratch, or at least rebuilding from an early stage #146, and address issues such as behavior #393, windows #372, icons #393 / #407 and more.
Since we're having a whole new menu, marker and data fields we need a 95% new guided tour to answer the new requirements and solve the piled-up issues.
@OmerSchechter you've been looking at this... just an idea :)
For some reason I'm not seeing Agam as a team member but it would be very helpful if we had his assistance.
@galraij  @LironRS

I will contact Agam ant let you know if he is still around and can help

Related to #393 #599. Anyone willing to improve the tour?


Fix issue with grounding dummy capacitors in switched_capacitor_filter

This is ready for review.
@kkunal1408 @854768750 Is there some way to know ahead of time whether the cap placer will produce a cell with dummy gnd pins? Here I'm running it, checking to see if they are created, and then stitching the pins in the netlist. We could improve the code if we know this (we wouldn't have to manipulate the verilog.json file twice.).

Currently the dummy pins and dummy nets are generated inside the capplacer. I need to check at which situation will dummy pins generated (I think it is related to shape m \times n, if so we can know dummy pins before capplacer).

Currently the dummy pins and dummy nets are generated inside the capplacer. I need to check at which situation will dummy pins generated (I think it is related to shape m \times n, if so we can know dummy pins before capplacer).

If this is how it is done, then what I'm doing is fine. I'll check this in and we can see if this can be streamlined later.


Handle restarted actors

remove throughput graph because of ui lags

👍

Current coverage is 60.11%

Merging #111 into master will decrease coverage by -0.26% as of 0a7fa3d

@@            master    #111   diff @@
======================================
  Files           37      37
  Stmts          530     534     +4
  Branches        54      54
  Methods          0       0
======================================
+ Hit            320     321     +1
  Partial          0       0
- Missed         210     213     +3

Review entire Coverage Diff as of 0a7fa3d

Powered by Codecov. Updated on successful CI builds.

:heart:


Update dashboard

Hi,
i'm trying to use this dashboard https://github.com/justwatchcom/elasticsearch_exporter/blob/master/examples/grafana/dashboard.json but it seems not working anymore.
first, if I've the node_exporter installed on all the nodes of the cluster it sums the nodes. I've 2 nodes and the nodes displayed are instead 4 since it does a sum and both nodes report 2 for that cluster.
Memory / CPU and other are not showing any data, I think (i'm not an expert) that the exported metrics have changed name.
Does anyone has a dashboard to suggest? i've seen that there are several others in grafana, but I can't get my head around to find something that show cluster + instance usage.

Hi,
sorry for the late reply. The dashboard relies on a relabeling config that adds a label "cluster" to the elasticsearch_exporter metrics (described in https://github.com/justwatchcom/elasticsearch_exporter#alerts--recording-rules).
If you add such a label, the dashboard should work.

it's not the elasticsearch_exporter that needs the label cluster added, but the node_exporter(s) that a running on the ES nodes. The elasticsearch_exporter itself gets the cluster label from the ES API.
So if the __meta_ec_tag_Name matches the cluster label value you get from the elasticsearch_exporter, the dashboard should work. Otherwise you need so set the value, either manually in the job definition via labels (https://prometheus.io/docs/prometheus/latest/configuration/configuration/#static_config) or via rewriting from some aws ec labels.

Ah nice, thanks for the tip. If you want to include a section in the README for AWS users, and for anyone else who may look for this in the future, this is what worked for us:
  - job_name: ec2
    ec2_sd_configs:
      - region: eu-west-1
        access_key: xxx
        secret_key: xxx
        profile: xxx
        port: 9100
    relabel_configs:
      - source_labels: [__meta_ec2_tag_Name]
        target_label: instance
      - source_labels: [instance]
        regex: (.*elasticsearch.*)
        target_label: cluster
        replacement: elasticsearch

Our instances contain the word elasticsearch, so the regex may need to change if yours aren't set up the same way.

Hi @mtanatwine ,
thanks for getting back on this issue, great it worked for you. Your use case is a bit too specific (how your labels are named) to include in the README, but a link to this issue might help people. I'll add it to the README


Update MOI_callbacks.jl

x-ref: https://discourse.julialang.org/t/jump-0-20-1-possible-bug-in-cplex-when-using-generic-lazy-callback/35425

Codecov Report

Merging #286 into master will increase coverage by 0.04%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master     #286      +/-   ##
==========================================
+ Coverage   69.43%   69.47%   +0.04%
==========================================
  Files          15       15
  Lines        2460     2457       -3
==========================================
- Hits         1708     1707       -1
+ Misses        752      750       -2

Impacted Files
Coverage Δ

src/MOI/MOI_callbacks.jl
89.61% <100%> (+2.11%)
: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 1e24a71...19c82b9. Read the comment docs.

Thanks for looking into this. I applied the patch and reran the code mentioned in the discourse page: CPLEX doesn't throw an error any more, but it rejects every feasible solution and eventually says that the problem is infeasible.
From the docs https://www.ibm.com/support/knowledgecenter/SSSA5P_12.10.0/ilog.odms.cplex.help/refcallablelibrary/macros/CPX_CALLBACKCONTEXT_RELAXATION.html
"CPLEX invokes the generic callback in this context when it has found a relaxed solution available. The relaxed solution is usually not integer feasible. It can, for example, be the solution to a node LP (but can also come from another place)."

On this branch we only call the lazy constraint from CPX_CALLBACKCONTEXT_CANDIDATE:
https://github.com/JuliaOpt/CPLEX.jl/blob/19c82b917b173189b45a4818331d53dee86a0e8d/src/MOI/MOI_callbacks.jl#L81-L89
Please provide a reproducible example.


Deploy protocol contracts on Blast

Deployed protocol contracts on Blast Mainnet. Deterministic deployment worked. Also bumped @api3/chains to v4.11.1 as Blast is already added.
Contract Addresses:

AccessControlRegistry

AirnodeRrpV0

AirnodeRrpV0DryRun

RequesterAuthorizerWithAirnode

@vanshwassan can you remove the deprecated chains in a separate PR so that Ci/CD pass


SniffCommand::handle() does not exist (Lumen 5.5)

After upgrading to Lumen 5.5 the Artisan-Command ist broken:
[ReflectionException]
Method SocialEngine\SnifferRules\Command\SniffCommand::handle() does not exist

Fixed in 2.3.0. Let me know if you have any issues.


Strange behaviour with $_ variable in ValidateScript validation attribute

Steps to reproduce
"thisIsAString" -is [PSobject]
# gives False
420 -is [PSobject]
# gives False
@{} -is [PSobject]
# gives False
(New-Object -TypeName PSObject) -is [PSobject]
# gives True
# All correct this far

function mainscript {
    param(
        [ValidateScript({$_ -is [PSobject]})]
        $testvalue
    )

    Write-Host `$testvalue validation passed. Script continues..

}

mainscript "thisIsAString"
# why argument "thisIsAString" passed the validation?
mainscript 420
# same with 420
mainscript @{}
# same with hashtable
mainscript (New-Object -TypeName PSObject)
# This is correct

So in validation the actual variable is encapsulated in a PSObject referred by $_?
For example if .GetType() is called then the actual type is returned, but -is operator cannot distinguish this type for some reason?
Is this by design? I personally feel that this is a caveat where a programmer can fall. ( I used that in a longer validation script, where I first checked whether type is suitable before proceeding into more extended validation part, where I check if object has proper properties and their values, and started to wonder why the first type check did not invalidate the input)
Expected behavior
Only the last execution of mainscript , where $testvalue is really a [PSObject] should pass the validation

Actual behavior
All executions pass even the type of validated parameter is not [PSObject]

Environment data

Name                           Value
----                           -----
PSVersion                      7.0.1
PSEdition                      Core
GitCommitId                    7.0.1
OS                             Darwin 18.7.0 Darwin Kernel Version 18.7.0: Mon Feb 10 21:08:45 PST 2020; root:xnu-4903.278.28~1/RELEASE_X86_64
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           <IP_ADDRESS>
WSManStackVersion              3.0

Element is explicitly converted to PSObject
https://github.com/PowerShell/PowerShell/blob/fde00de77f48f4bd2eede46dc3ed4a812da0c2d6/src/System.Management.Automation/engine/Attributes.cs#L1368-L1374

This limitation can be easily overcome by replacing the original -is comparison in the example with
[ValidateScript({$_.GetType() -eq [System.Management.Automation.PSCustomObject]})]

If the origin of this issue is in interest to anyone, here is the validation script.
function Test-ObjectStructure {
    param (
        [Parameter(Position=0)]
        $testStructure,
        [Parameter(Position=1)]
        $referenceStructure,
        [Switch]
        $checkValues
    )
    <#
    .SYNOPSIS

    Validate a PSobject or Hashtable against a reference structure.

    .DESCRIPTION

    For Hashtable, it is checked that the test item has least the same keys as the reference.
    For PSobject, it is checked that there is a noteproperty corresponding each key in the reference structure.

    .PARAMETER checkValues

    This option checks key/noteproperty values against regular expressions in the reference structure values.

    #>

    # if (-not $testStructure) { # This is not really needed as ValidateScript wont pass null values.
    #     throw "Argument is an empty, 0 or null."
    # }

    if ($testStructure -isnot [Hashtable] -and $testStructure.gettype() -ne [System.Management.Automation.PSCustomObject]) {
        throw "Argument has invalid type of {0}. It needs to be a hashtable or a PSCustomObject to proceed to property checking." -f $testStructure.gettype()
    }

    foreach ($key in $referenceStructure.Keys) {
        if (-not $testStructure.$key) {
            throw "Argument has no NoteProperty or key with name '{0}'." -f $key
        }

        if ($checkValues -and ($testStructure.$key -notmatch $referenceStructure.$key)) {
            throw "Argument.$key value '$($testStructure.$key)' does not match pattern '$($referenceStructure.$key)'."
        }
    }

    1
}

@p3rdu Can we close the issue if you have the workaround?

Mmm. Yeah, I think ultimately this is by design, since anything that goes through parameter binding in PowerShell is always wrapped into a PSObject.

There are ScriptBlock.DoInvokeReturnAsIs samples where no wrapping is done. i don't know why.

There is something quirky in operator -is type checking against PSObjects. Even all PowerShell objects are always inherently also PSObjects, isn't there something strange with the following:
> $obj = 420
> $obj.Gettype().Name
Int32
> $obj -is [Int32]
True
> $obj -is [PSObject]
False
# But I can still enrich the object by adding some noteproperties
> $obj | Add-Member -NotePropertyName "metaText" -NotePropertyValue "silly meaning"
# And I can also access the underlying PSObject through PSObject hidden property
>$psObj = $obj.PSObject
>$psObj.GetType().name
PSObject
# But now what? Can somebody explain?
> $psObj -is [PSObject]
False
> $psObj -is [Int]
False
# Let's check sanity
> $obj2 = New-Object PSObject
> $obj2 -is [PSObject]
True
# How about this then
> $obj2.PSObject -is [PSObject]
False

The short version: it's confusing. PSObject was probably originally intended to be largely an invisible implementation detail/wrapper type and really isn't meant to be used in type checks.
@mklement0 has a few issues with well-written up details on how it actually works (and some ways it might be better improved to be less confusing in general).

Mmkay. I don't know nothing about Powershell implementation, so there is a PSObject behind every Powershell object, and this PSObject holds the Noteproperty extensions applicable to any other type. And sometimes this PSObject is more present than other times? So what actually happens here?
> 42 | Add-Member -NotePropertyName "metaData" -NotePropertyValue "meaning of life"
> 42 | convertto-json
{
  "value": 42,
  "metaData": "meaning of life"
}

Wrapping to PSObject assumes that we expect using PowerShell magics like ETS (Entended Type System).

I do not sure that we need this for ValidateScript.
Another thought is that -is operator should check BaseObject if current object is PSObject.

I believe we could fix both.
Maybe @daxian-dbw could make a conclusion.


add units: bar and siemens

add the units  bar and siemens to the units.csv

Thank you for your contribution!


No 'Open with Live server' option

I'm submitting an issue

[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  <!-- Please search GitHub for a similar issue or PR before submitting -->
[ ] Feature request
[ ] Documentation issue or request
[ ] Other: <!-- Please describe: -->

Current behavior
Visual Studio is not showing the Open with live server option, which was there last time I used the extension, no problem.

Expected behavior
Showing the option to open with live server; I've tried reinstalling the extension, but nothing.

Environment
Browser:

- [ ] Chrome (desktop) version XX
- [ ] Firefox version XX
- [ ] Safari (desktop) version XX
- [ ] IE version XX
- [ ] Edge version XX

For Tooling issues:

- Live Server: 5.6.1
- Platform:  Mac
- Visual Studio Code: 1.40.0

Others
I'll try to upload an image showing that the option is not there.

Live server not running browser :
Chrome
Firefox
Edge
I've tried reinstalling the extension, but nothing. also reinstalling VScode , nothing

I believe that I've found the reason and I've managed to make the extension work again: It has something to do with autosaving option enabled and the use of workspaces; When using a workspace (which I found out is nothing more than a folder) the extension works like a charm - working outside of it, it doesn't seem to work. Also, I must have the parent folder open for the extension to work... I don't know why, but it's working again.


2.3: org rename changes

stolostron/backlog#18733
Signed-off-by: Subbarao Meduri<EMAIL_ADDRESS>

/lgtm


ImportError due to hypothesis incompatibility

There seem to be incompatibilities with different versions of hypothesis.
With hypothesis-5.1.0 I got the error:
    from hypothesis_gufunc.gufunc import gufunc_args
../../.pyenv/versions/3.6.1/lib/python3.6/site-packages/hypothesis_gufunc/gufunc.py:28: in <module>
    from hypothesis.searchstrategy import SearchStrategy
E   ImportError: cannot import name 'SearchStrategy'

I tried upgrading to hypothesis-5.1.5 giving now the error:

    from hypothesis_gufunc.gufunc import gufunc_args
../../.pyenv/versions/3.6.1/lib/python3.6/site-packages/hypothesis_gufunc/gufunc.py:26: in <module>
    from hypothesis.internal.compat import integer_types
E   ImportError: cannot import name 'integer_types'

Going back to hypothesis=4.24.5 fixed this issues.
Please specify for now the working version of hypothesis in the setup file, of course for the future it would be great to support the current version of hypothesis.
Besides this, thank you so much for this great module, it really is a godsend.

@DerWeh - since Hypothesis 4.44 (November), there's been a mutually_broadcastable_shapes() strategy upstream.  While it gives you shapes rather than arrays, it also has considerably better performance when shrinking.
(@rdturnermtl - perhaps you could rebase hypothesis-gufunc's internals on this?)

The pinned version of hypothesis (and other packages) that this has been tested with is in requirements/. The hypothesis version being in requirements/base.in.
It looks like hypothesis has had some API changes with version 5. I will look at this for maintaining compatibility.

We've moved some private internals around (which it looks like this package is using), but the public API hasn't changed much at all.

It looks like problem 1 is because:
hypothesis.searchstrategy.SearchStrategy
has been moved to
hypothesis.strategies._internal.SearchStrategy
Is there any way to check isinstance(shapes, SearchStrategy) without having to import from private in hypothesis 5?
The other issue is that hypothesis.internal.compat.integer_types has been removed following the Py2 deprecation.  This is an easy fix, because hypothesis_gufunc can just use int by dropping Py2 support as well.

https://hypothesis.readthedocs.io/en/latest/details.html#hypothesis.strategies.SearchStrategy

Requiring a strategy might be a good change for a major increment, but I think I will keep the API the same in this small patch.  It was based on the old behavior of arrays but I guess that has changed now?

arrays() has not changed, since we are serious about compatibility for our public API and expect that many people rely on the current behaviour.
It was our experience using and teaching arrays() that prompted that particular API style rule - IMO once you want to test with varied shapes and broadcasting it's usually more elegant to use the st.data() strategy to draw values inside your test.  numpy/numpy#15189 provides a well commented example of this style while using mutually_broadcastable_shapes() to test np.clip().
I'm not delighted by this split between simple uses (in @given(...)) and complex uses (in the test), but on balance I think making the inline approach - which works for any strategy and domain - as approachable as possible is better than adding an intermediate API specific to Numpy.
That's also the short version of why we don't have a mutually_broadcastable_arrays() strategy upstream - IMO by the time a user needs that, we should be pushing them towards inline st.data() or defining their own with @st.composite anyway.

I have pushed a branch fix_issue_2 that should work. @DerWeh and @Zac-HD can take a look and see if there are any issues with that. I can merge if that resolves all the issues.
Bigger changes like switching to mutually_broadcastable_shapes can wait for another diff.

In your test file you only use integer_types once and hunichr twice, so it'd be a smaller diff to replace them than define and comment the variables.  I'd also suggest adding python_requires=">=3.6", in setup.py to explicitly block install on unsupported versions, and adding the classifiers for 3.7 and 3.8 since you're testing those now.  Otherwise it looks good to me!
Agreed that the other stuff can wait 👍

I made those cleanups to setup.py.
@Zac-HD can you file a separate issue for mutually_broadcastable_shapes, and explain its difference with gufunc_arg_shapes? Or a PR would be even better.

Comparing the docs for gufunc_arg_shapes() to mutually_broadcastable_shapes(), there are several differences - upstream:

supports lower bounds on number of loop dimensions (both support upper)
uses the same API for ufunc shapes (e.g. specify num_inputs=2 for np.add)
returns a namedtuple BroadcastableShapes(input_shapes=..., result_shape=...) to facilitate gufunc result shape checks (signatures + broadcasting -> headache)
has much better shrinking performance.
does not support the excluded argument
does not support per-dimension size bounds

The proper use of excluded isn't clear to me, but it's possible to adapt everything else (though per-dim bounds require either upstream support, or flatmapping over rewritten signatures...).

I think the actual challenge here is not implementation though, it's designing a really nice API and that in turn means we all need to understand the users and use-cases.  If you're coming to PyCon US we could meet up with @rsokl and hash it out in person?  Otherwise maybe a teleconference or something, but text is awkwardly low-bandwidth for this...

This issue has been resolved and merged to master. The version has been bumped to 0.0.6.


PR support

Currently all modules are packaged together and the DBMStoDSPI stack just uses a library of bitstreams which have the modules already placed in the shell.
For PR support we'd need a working shell. And for the shell we'd need templates for the following module types:

U-turn
Regular 1 input side 1 output side.
DMA

Currently in progress in HW side but nothing can be done on the SW side.


Cannot debug while RepoM is on

As the new update enforces a single RepoM instance, it is no longer possible to debug while RepoM is on.

Yes, RepoM enforces only one single instance to run and I can imagine this is not very nice when developing.  I just close RepoM when developing but this is not optimal
Possible solutions:

Running in 'debug' doesn't use a mutex (or de different one).
Based on the configuration location, a different lock is used.

The first one is easier, the second one is imo nicer.

Running in 'debug' doesn't use a mutex (or de different one).

Yes, this is also what I had in mind.


Update Animated traffic flow.html

Not sure this PR was meant to be checked into this project. Closing without merging as it's not what we want in the official sample site.


getNameInfo method is undefined

I'm unable to find and use the getNameInfo method for some reason.
import blockstack from 'npm:blockstack';
let name = 'markmhendrickson.id';

blockstack.getNameInfo(name).then((info) => {
  console.log('info', info);
});

This results in the error Uncaught TypeError: _npmBlockstack.default.getNameInfo is not a function and when I console log the entire blockstack module (loaded with ember-browserify) for inspection, I don't see it in the list of properties alphabetically:

You need to use blockstack.config.network.getNameInfo See also
https://github.com/blockstack/blockstack.js/issues/555#issuecomment-441011884

Much thanks. I see the other issue is intended to update documentation related to this method, but does it make much sense that this method (and others) are under a config path? I would expect blockstack.network.getNameInfo if it's intended to be organized with other "network" methods. But "config" is confusing to me.


Minor Spelling and grammar changes

Fixed minor spelling issues and made some grammar changes.

Thanks for the contribution, much appreciated!


Made generic request function public

CircleCI has a number of undocumented APIs.  A generic Request method is the easiest way to make them all accessible.

Indeed, I have noticed that as well, but I hesitate a bit to make the request func public as it isn't the most pleasant interface and I would want to:

Make sure no further changes to its interface can be anticipated
Tests for the method itself are added
Documentation for the method is added

The alternative is that we encode the undocumented APIs as their own methods as they are discovered.


Unable to receive values from the controller.

Hi, Thanks for the great code. I tested it out with given test scripts and both of them run fine. The Steering wheel moves properly.
I am trying now to get values from the steering wheel. Specifically of the steering rotation. I would like to know the force being applied by the user (or the angle of the steering wheel). I have tried the state engine but no luck so far. Can't seem to get the states of the buttons as well.
Would really appreciate if you could point me in the right direction. Thanks
Here is the code i have tried.
import sys
sys.path.append('../logidrivepy')
from logidrivepy import LogitechController
import time

controller = LogitechController()
controller.steering_initialize()

while True:
    state_pointer = controller.LogiGetStateENGINES(0)
    state = state_pointer.contents

    # Retrieve force feedback values
    force_x = state.lFX
    force_y = state.lFY
    force_z = state.lFZ

    # Print or use the force feedback values
    print(f"Force X: {force_x}")
    print(f"Force Y: {force_y}")
    print(f"Force Z: {force_z}")

controller.steering_shutdown()

Hi @MurtazaHassan01/@cengizozel  , I'm using Logitech G923 (with Windows OS). Any idea if this package works with windows?
Coz I've installed the package & when trying to run the scripts, My steering is not getting detected & when i run spin_wheel_test.py - it's just saying "passed" but steering isn't getting rotated.
Am I missing out anything, If yes please correct me

Hi @saicsk-deloitte
Yes, this package should work with Windows, and I'm currently gathering feedback to ensure its full functionality and to identify any additional dependencies that may be required.

Is your Windows 32-bit or 64-bit?
Do you have the Logitech's G Hub application installed? https://www.logitechg.com/en-us/innovation/g-hub.html

@saicsk-deloitte
No additional setup should be required after the package and G Hub. It might be worth mentioning that this package was tested on Python 3. Beyond this, I'm not entirely sure what might be causing the issue with your Logitech G923 not being detected correctly by the scripts.
If you discover any interesting insights or solutions, please feel free to share. Your experience might be valuable for others facing similar issues.

Just found a fix, seems like it was detecting a different USB Game Controller, in my case, a guitar hero controller which had a higher priority than my wheel, make sure that the only USB Game Controller connected is the steering wheel.

@MurtazaHassan01 maybe you have forgotten the logi_update method?

Logitech wheel SDK will initialize at whatever window you have focused, so if you switch focus to for example Pygame window it can no longer read input values. This might be the problem here. I've made a pull request with a function allowing to manually specify window handle. It would be nice if maintainer accepted it. sry for my english

Im working with a Microsoft Sidewinder Force Feedback. It does not want to connect. When I run "run_controller_test.py" it fails all the tests. However, a different laptop with different user does create a connection and is able to run different FFB commands to the joystick (the first few hours it did not work, but suddenly, it did. I would love to know what i might have accidentally changed).
I have multiple working demo's, for example the demo included in the Logitech SDK works fine. Pygame works fine for reading the joystick but I can't seem to connect to the joystick using this library.
Is there anything worth looking at?

@TCoolwine
Hey, I'm running into the same issue trying to read the data from the wheel. Could you elaborate more on what devices you disabled and help me through the process? I'm trying to disable "Logitech G Hub PRO Racing Wheel ....." and re-enable it and I still can't seem to read any axis data such as steer and pedals.


It doesnt describe how it does it, just say the capability. No idea how to install it!

[Enter feedback here]

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

ID: 795962ba-55a1-65f3-e7fe-4c5d968af8e5
Version Independent ID: 4a0cf543-0959-42cc-55b8-bc40481dd591
Content: Deployment plans - Azure Active Directory
Content Source: articles/active-directory/fundamentals/active-directory-deployment-plans.md
Service: active-directory
Sub-service: fundamentals
GitHub Login: @ajburnle
Microsoft Alias: ajburnle

Hi @HTGIT87,
I'm not sure which installation you're referring to, but Azure Active Directory comes with your Azure tenant. To create a new Azure tenant you can follow this guide: https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-access-create-new-tenant
Hope this helps! If you have further questions feel free to reach out on Q&A or create a new issue.


Cann't close dropdown list of items in multiple select

After opening options list in multiple select cann't close it if I wann't select item.

any errors in console?

no, you can see it even here example

I'm have the same problem.


Don't resolve TS files if it's not detected in the project

This causes weird behavior that allows the user to think types are being checked when they're really not.

👋 I'm that user

Can we also show some error?

How about this?

Actually, that's goofy. We can do better.

How about this?


You may want to change to jakarta instead of javax

Shows up in the live templates

Can you please provide an example? It's likely that any created before the Spring Boot 3 release will use javax.
I mostly created these for demos and screencasts. I'd be happy to update ones that I'm using in future demos.

Just looking at the readme

For example
@lombok.Data
@lombok.AllArgsConstructor
@lombok.NoArgsConstructor
@javax.persistence.Entity
class $name$ {

    public $name$(java.lang.String name) {
        this.name = name;
    }

    @javax.persistence.Id
    @javax.persistence.GeneratedValue
    private java.lang.Long id;

    private java.lang.String name;
}