Q: Comparison with react-query's fetchQuery?

First, thanks for creating this library. It seems potentially like exactly what I'd want.
Second, your README says that this handles a case that react-query doesn't, which is the unification of multiple ongoing fetches into the same promise. Is this different from what fetchQuery in react-query claims to do? Specifically:

...fetchQuery is async and will ensure that duplicate requests for this query are not created with useQuery instances for the same query are rendered while the data is fetching.

xref quote here
Or is it potentially that fetchQuery itself is the problem (i.e. it doesn't unify simultaneous outgoing requests into the same promise) even though it purports to do so for useQuery hooks?
Thanks for clarifying! Really appreciate the work.

Upon a little more digging, the core query object in react-query ~ seems ~ to return the same promise. Specifically, in query.fetch source:
  fetch(
    options?: QueryOptions<TQueryFnData, TError, TData>,
    fetchOptions?: FetchOptions
  ): Promise<TData> {
    if (this.state.isFetching)
      if (this.state.dataUpdatedAt && fetchOptions?.cancelRefetch) {
        // Silently cancel current fetch if the user wants to cancel refetches
        this.cancel({ silent: true })
      } else if (this.promise) {
        // Return current promise if we are already fetching
        return this.promise
      }
  ...

And query objects are cached in a queryMap that's used by each queryClient.
The big caveat is that I've researched this all of 5 mins, while you obviously know a lot more about this whole thing (to the point where you created a package specifically to solve this problem), so I apologize beforehand for the great likelihood that I'm misunderstanding the whole thing.

Hello @fivecar! Thanks for the interest and the nice words!
When I created this package, react-query was somewhere around version 2.19.0. Back then, after some people asked me, I checked if react-query does promise caching, and as far as I digged into it, I didn't find any evidence of promise caching.
It seems like this feature was added with v3 around 10 months ago.

Some more facts:

When I created this package, I mostly intended to use it in nodejs, and not in the browser, so I didn't even consider checking any existing packages for the browser.
Well, react-query does 100,000 more things (which is generally good) but some times you don't need all of those, so if that's the case, I would choose my package.

Awesome - super-helpful, @chrispanag ! I've created #8 as a result of your thorough explanation, which I really appreciate!
Thanks again for all the time and effort you put into this. Love it!


Export to Anki?

I would like to see integration with Anki to drill things I learn when reading new texts.

spaced repetition vocabulary learning will be built in (that's a huge part of my focus) so I'd actually like to discourage exporting to Anki. I want people to drill in the reading environment itself so I can build latent trait models and use those in the way texts are recommended and scaffolded.


Add a locale filter to links

@davidtaylorhq
Hello ! As per the effort of the forum we're currently holding, and to allow localization, we've added an attribute "locale" to links, which allows filtering of links according to the HTML's lang attribute !
For instance, if the link has "fr" tag for the french page, but the browser client has the english as default, then the link will not be pushed to the site's HTML :)
Thank you in advance for revieweing !


Deprecating auto-expand of nested dataclasses without default value in OmegaConf 2.0

TLDR
You have a config with nested dataclass without a default value.
The behavior of this will change in OmegaConf 2.1 and you should give it a default value (either MISSING or an object of the appropriate type).
Read on to see why this is changing and what are the migration options.
Primitive fields in OmegaConf 2.0
Consider the following:
from omegaconf import MISSING
from dataclasses import dataclass

@dataclass
class User1:
    age: int = MISSING
    name: str = MISSING

The MISSING values are required in OmegaConf 2.0. Creating a Structured Config from User1 with fields that does not have a default value will result in this error:
ValueError: Missing default value for User1.age, to indicate default must be populated later use
OmegaConf.MISSING

Primitive fields in OmegaConf 2.1
OmegaConf 2.1 will allow that and will automatically treat age and name as MISSING, making this equivalent to the definition above:
@dataclass
class User2:
    age: int
    name: str

Nested dataclasses in OmegaConf 2.0
In contrast to primitive values like the ones above,  OmegaConf 2.0 will not complain about nested data classes without a default value:
class Config:
    user: User1

Instead, It will auto expand using the fields from the class User.
This behavior is surprising and is in conflict the behavior primitive fields in 2.1.
Nested dataclasses in OmegaConf 2.1
OmegaConf 2.1 will change this behavior to be in line with that for primitive fields:
The above will be equivalent to:
class Config:
    user: User1 = MISSING

Migration options
If you are relying on the deprecated behavior you will need to assign an explicit value to create the same config.
Recommended option
Assign an actual object of the appropriate type:
class Config:
    user: User1 = User1()

Note that if you omit the default values for age and name like in User2, you will have to manually provide default values for Python to instantiate the object. You can still use MISSING:
class Config:
    user: User2 = User2(age=MISSING, name=MISSING)

More compact but not recommended option:
An more compact alternative is to assign the type itself to the field:
class Config:
    user: User = User # type: ignore

Python type checkers will not be happy about it. use # type: ignore to allow it anyway.
For this reason it's recommended to assign an actual object here.

This makes sense. In my current use case: https://github.com/pytorch/hydra-torch/pull/21,
we are going to use the Recommended option :+1:

Sorry for digging this up, but I spent my day struggling with the updated behavior of nesting dataclasses.
First, the difference between not assigning anything and an actual object instance is not documented in the manual. It is only implicitely hinted at by using factories in the examples.
Second, the situation that lead to my confusion:

I use a fairly complex nested structured config as schema / validation for a user-supplied hydra config
Even without assigning actual objects, the type information from nested dataclasses is taken into account correctly. Put differently: everything works for my use case so far, so I did not consider adding ugly factories or object assignments to my dataclasses.
I wanted to add some default values in my schema that the user config can't overwrite (convert keys for hydra)
The resulting config had ??? in all the keys that should contain default values

I find this result highly confusing and would very much prefer the old behavior because:

The typing information of nested classes is considered even without assignments, so it is surprising this does not work for values as well
Even more confusing, default fields show up in the merged config, but their value is crippled sometimes (see example)
The proposed solutions litter my structured config with assignments that create visual noise and no obvious benefit (or don't typecheck) - in short, they are not very pythonic

Here is an example:
from dataclasses import dataclass
from omegaconf import OmegaConf, errors
from contextlib import suppress

@dataclass
class SubConfig:
    x: int
    y: str = "hi"

@dataclass
class Config:
    s: SubConfig

c = OmegaConf.structured(Config)

print(c)
# {'s': '???'}

# merging c first works as expected...
print(OmegaConf.merge(c, dict(s=dict(x=3))))
# {'s': {'x': 3, 'y': 'hi'}}

# ... but I can't add new keys:
with suppress(errors.ConfigKeyError):
    OmegaConf.merge(c, dict(s=dict(x=3), extra=5))

# when trying to merge the other way round, the nested field 'y' is
# carried into the resulting config, but the value is lost:
print(OmegaConf.merge(dict(s=dict(x=3)), c))
# {'s': {'x': 3, 'y': '???'}}

What is the advantage of the updated behavior? The first post mentions that is should create less surprises, but I think actually the opposite is true.

Pinging @Jasha10 since he seems more active recently in the repo.
If you find time, please tell me your thoughts or what I did wrong.

Hi @raphCode,
My impression is that your confusion is somewhat orthogonal to the behavior change described by the original post above.
Let me start here:

# ... but I can't add new keys:
with suppress(errors.ConfigKeyError):
    OmegaConf.merge(c, dict(s=dict(x=3), extra=5))

Being unable to add new keys is a feature of using structured configs; this feature is active whether there are missing values present or not.
For example:
c_non_missing = OmegaConf.structured(Config(SubConfig(123)))
with suppress(errors.ConfigKeyError):
    OmegaConf.merge(c_non_missing, dict(s=dict(x=3), extra=5))

The same ConfigKeyError is raised regardless of whether c or c_non_missing is used:
omegaconf.errors.ConfigKeyError: Key 'extra' not in 'Config'
    full_key: extra
    object_type=Config

Hi, thank you for your explanation.
I agree that the example about adding new keys was a bit out of context.
However, I still believe my perceived issue is related to the behavior change. Maybe I find better words below:
As a hydra user, I value structured configs because I can check the types and presence of values in a user specified config. For this validation to happen, hydra merges the structured config with the user config at some point.
In OmegaConf terms, this looks like one of these options:
OmegaConf.merge(structured_config, user_config)
OmegaConf.merge(user_config, structured_config)

I can control which one happens with the hydra defaults list.
The validation happens in both cases since that is always triggered when the merge involves a DictConfig which was created from dataclasses.
In my app, apart from validating user configs, I have two more requirements:

the user config must be able to add new keys
default values from the structured config should be carried into the merged config

I played around and noticed that this correctly merges nested default values, in other words fulfills requirement 2:
OmegaConf.merge(structured_config, user_config)

Please note this works even without default assignments for the nested dataclasses, see my first example here.
For requirement 1 I need to swap the merge partners.
I expected when I swap them, I would get the same resulting config. As I tried to demonstrate in my last example here, it does not work.
My confusion:

The merges have a different result although no keys are in conflict
The keys of the structured config items are always present in the config, but the default values are not

I now suspect that with the old pre-2.0 behavior, I would get the same results.
Is my understanding correct so far?

To make sure I understand correctly: the point is that the following print statements give different results, right?
c = OmegaConf.structured(Config)
print(OmegaConf.merge(dict(s=dict(x=3)), c))  # {'s': {'x': 3, 'y': '???'}}
print(OmegaConf.merge(c, dict(s=dict(x=3))))  # {'s': {'x': 3, 'y': 'hi'}}

I now suspect that with the old pre-2.0 behavior, I would get the same results.

You might be right about this.

To make sure I understand correctly: the point is that the following two print statements give different results, right?

Yes, I don't understand why they differ.
My actual point is that I am complaining about the behavior change and don't see a benefit in the new way of handling nested dataclasses:
Merge order discrepancy
While I was experimenting, I discovered that omegaconf still seems to auto-expand structured configs sometimes, as you correctly summarized.
I don't know if that is considered a bug, but it hints that the new behavior is at least not implemented thoroughly.
At the very least I am annoyed that the functionality I want is still present, but I can't use it due to my requirement 1 as outlined in my previous post.
Bad migration options
The recommended options suggest a dataclass instance to be created and assign omegaconf.MISSING to the empty fields, creating a coupling between the dataclass and omegaconf. This dependency was the reason to remove the requirement for MISSING assignments.
The not recommended option suggests to assign the plain class, which requires ugly typechecking silencing.
Useless default assignments
It forces me to add default assignments to nested dataclasses, which I do not like because:

it adds visual noise to the class definitions - not very pythonic
it makes the dataclasses instantiable with nonsense default values

The dependency and instancing concern annoy me especially because I want use the dataclasses as a container for the config at runtime and for typechecking my code which accesses it.
Structured configs are all about nesting
This is implicitly acknowledged because even without default assignments, the types of nested dataclasses are validated - or should I say auto-expanded?
I don't see a single use case where one does not want the auto-expansion for values as well.
Default values in ListConfig
Auto-expand lets me carry default values into a ListConfig with varying length:
from attrs import define
from omegaconf import OmegaConf

@define
class SubConfig:
    x: int
    y: str = "hi"

@define
class Config:
    s: list[SubConfig]

c = OmegaConf.structured(Config)

print(OmegaConf.merge(c, dict(s=[dict(x=3)]*2)))
# {'s': [{'x': 3, 'y': 'hi'}, {'x': 3, 'y': 'hi'}]}

I found not way to perform this operation with the new behavior, since the list length must be given in the default assignment of the dataclass:
s: list[SubConfig] = [SubConfig]  # actual list instance with fixed length, does not adapt to user configs of differing lengths
s: list[SubConfig] = list[SubConfig]  # Invalid value assigned: GenericAlias is not a ListConfig, list or tuple.

# when trying to merge the other way round, the nested field 'y' is
# carried into the resulting config, but the value is lost:
print(OmegaConf.merge(dict(s=dict(x=3)), c))
# {'s': {'x': 3, 'y': '???'}}

This does feel unexpected.
Probably worth trying to fix, not 100% sure it's related to this issue or what are the implications of changing this behavior.
Maybe file another issue and try to work on a fix. See what tests this breaks and why.

cc @odelalleau

# when trying to merge the other way round, the nested field 'y' is
# carried into the resulting config, but the value is lost:
print(OmegaConf.merge(dict(s=dict(x=3)), c))
# {'s': {'x': 3, 'y': '???'}}

This does feel unexpected. Probably worth trying to fix, not 100% sure it's related to this issue or what are the implications of changing this behavior. Maybe file another issue and try to work on a fix. See what tests this breaks and why.

Yes I agree, I feel like this should probably be considered as a bug. The merge() code is somewhat complex and has a bunch of ad-hoc logic to handle the various scenarios it can encounter, and it's possible that this one is just not handled correctly right now.

One motivation for keeping the current behavior is the special treatment of MISSING with respect to overwriting other arguents: if the second argument to merge has missing values, those values will not overwrite the first argument to merge:
OmegaConf.merge({'y': 'bye'}, {'x': 3, 'y': '???'})  # {'y': 'bye', 'x': 3}
OmegaConf.merge({'y': 'bye'}, {'x': 3, 'y': 'hi'})  # {'y': 'hi', 'x': 3}

This means auto-expanding default arguments in the second argument would have implications for multi-step merges.
# current behavior:
>>> merge({'s': {'y': 'bye'}}, merge(dict(s=dict(x=3)), c))
{'s': {'y': 'bye', 'x': 3}}
# behavior after proposed change:
>>> merge({'s': {'y': 'bye'}}, merge(dict(s=dict(x=3)), c))
{'s': {'y': 'hi', 'x': 3}}

Currently, 'bye' from the left-hand argument is not overwritten. I worry that changing this could have ripple effects for Hydra.

This means aggressively auto-expanding default arguments would have implications for multi-step merges.

That's a good point, but personally I would favor intuitive and useful behavior on single-step merges before worrying about multi-step merges (which, anyway, are just a sequence of single-step merges, so if we agree on what a single-step merge should do, hopefully that makes it clear what the multi-step should do as well).
Also, I haven't double checked, but normally if s is actually a structured SubConfig (and not just a dict), then nothing should happen when we merge a Config (with missing SubConfig field) into it, regardless of whether s's fields are missing or not. I think that should not change. Which means this subtle behavior shouldn't come up when working only with structured configs (but I haven't read the whole discussion in details, so if there's actually a problem with only structured configs, sorry I missed it!)

Okay, I get the current behavior will probably stay.
Nonetheless I would really like to see auto-expand functionality during merges, not only because it feels nicer, also because there are some use cases where there is just no alternative:
When merging a structured configs contained in a list, the information how many list items should be expanded is only available at merge time. See here for a code example (at the bottom).
How about using dataclass field metadata to opt-in to auto-expand during merges?
Like the omegaconf_ignore functionality.
That would enable auto expansion on a per-field basis, and in the case of attrs, it can be implemented cleanly with a field transformer.

Currently, 'bye' from the left-hand argument is not overwritten. I worry that changing this could have ripple effects for Hydra.

Good catch.
I think the desired behavior is that only missing values are brought in from missing dataclasses on autoexpand.
Such values would carry the type and would not override an existing value.


Main Page background looks like shet

Can we find some way to have the background image like the splash page? so that it's not a repeating tiled image and just a full screen single photo?

I'll take care of it when I get home

I've handled it with my latest commit


insert cell bar flashes on cell insert #4242

we had fade in/out effect for changing buttons bar opacity on hover. but this animation was also applied when we wanted just hide buttons bar (e.g. when a cell becomes not the last one).
that's why i moved the logic from css to js to be able to determine whether to apply animation or not

this fixes the problem but i think it must be faster or something too, it seems to trigger a little more often, even when the mouse moves quickly over the buttons without pausing.
is it possible to add a small delay, just 20ms or so before the animation starts?

Or maybe if the mouse leaves before the animation is complete, then it should be canceled and return to 0 instead of going all the way.  i am not sure what exactly the difference is but i am seeing a lot more blue with this implementation.

it was necessary to stop the current animation before starting a new one


SDXL

Hello. SD updated the model SDXL and your plugin does not work with it. Writes a network error. I know that you haven't updated it for a long time, but it was convenient for me to use your plugin. Could you update it for the new model ? would be very grateful.

it works with XL, whats the issue ?

it works perfect with XL on Mac M1


Dashboard Token Listing: ARSFT

Discord Handle of Submitter: arsalan200900
Token Symbol: ARSFT
Network: Base
Token Address: 0xa26491f730a5338d2e5941d4cc7ee32d453294ab
Network Explorer Link: https://basescan.org/token/0xa26491f730a5338d2e5941d4cc7ee32d453294ab
Is a Super Token? true
Address of Underlying Token:  0xa26491f730a5338d2e5941d4cc7ee32d453294ab
SVG Logo Link: https://cryptologos.cc/logos/multi-collateral-dai-dai-logo.svg?v=010
Coingecko or Hardcoded Price?: Coingecko
Coingecko ID: https://www.coingecko.com/en/coins/moxie
Harcoded Price (if Coingecko ID is unavailable):
Token HEX Color: #F5AC37
Info on Listing: This token is the Moxy fan token of the account @ArslanG75523 , and I want to stream it to AlFaFrens subscribers using a custom frame that I built myself
Please close only after token has been added to resolver!

his token is the Moxie fan token of the account @ArslanG75523 , and I want to stream it to AlFaFrens subscribers using a custom frame that I built myself

this token is the Moxy fan token of the account @ArslanG75523 , and I want to stream it to AlFaFrens subscribers using a custom frame that I built myself


Using Joule as standard lightning link application

I am using Chrome and when I click lightning links sometimes they want to open Zap Wallet instead of the Joule extension. Is there a way to make Joule the default? I tried to follow some guides with mailto links but they didn't work for me.

Unfortunately extension support for intercepting application links like lightning: is really bad, so I'm using a link click listener. If applications are using window.location.href = "lightning:..." for instance, it won't intercept that. Do you know which applications are failing?
The other possibility is there's an error in the code and it's failing to bind. Can you check your javascript console when this happens and let me know if you see anything error-y looking?

For example if I try to pay for an article on yalls.org, sometimes I will get the Joule popup, but sometimes it will ask to open Zap Wallet. I think it's after the application is installed it works for a while and then it stops working. I am not sure if yalls.org uses different link formats each time.

Alright, I'll stress test this and see if I can replicate. Thanks for the info!

I noticed that tippin.me is doing
onclick="location.href='lightning:ln..."

which does not work, as I suspected. I haven't been able to get this to happen on yalls.org though, so perhaps a separate issue. Unfortunately, I don't think there's much I can do about the location.href redirects, but I'll dig into that.

Thanks for looking into it, I guess the problem is that I have no clue where Chrome stores the default handlers for lightning links. I can't find it anywhere in the settings or on the internet. If I remove Zap completely or reinstall Chrome it works since there is no other options for chrome to choose. Maybe it's some setting that Zap uses that makes some changes to the OS since it's more of a native app. I will chat with the Zap team and see where it leads me.

Ok so someone from the Zap Team just got back the me. The problem is that Electron (the technology Zap is based on) is integrating the handling of links deeply in the the OS. They are using this handler to listen for clicks on lightning links:

My test lead me to suggest that if the Zap app is open or minimized, it takes preference over the browser extension since the OS already catches the call before chrome does, so Joule never sees it. But if it is closed then Joule will see the call.


Send funds button is disabled when the user has ETH but no LMR

User should still be able to send funds if there LMR balance is 0, as long as they have some ETH.

fixed https://github.com/Lumerin-protocol/WalletDesktop/pull/132


Temporary workaround when image pulled but docker-java fails.

fixes #206

This change is

Codecov Report

Merging #207 into master will decrease coverage by 0.07%.
The diff coverage is 11.76%.

@@             Coverage Diff              @@
##             master     #207      +/-   ##
============================================
- Coverage     19.68%   19.61%   -0.08%
  Complexity      233      233
============================================
  Files            66       66
  Lines          2774     2784      +10
  Branches        254      256       +2
============================================
  Hits            546      546
- Misses         2165     2175      +10
  Partials         63       63

Impacted Files
Coverage Δ
Complexity Δ

.../github/kostyasha/yad/commons/DockerPullImage.java
39.43% <11.76%> (-6.47%)
17 <4> (ø)

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 2e0a5f3...620f010. Read the comment docs.


Dont use wizzard

First of all thanks for this package (looks very useful), This is a question actually not a bug.
I want to run publish-release from my build system in this case i would like to use all the defaults from package.json and not be prompted by the wizzard. Is this possible with the current version?

In order to understand the issue you're facing, can you describe what you've tried and the current behaviour of the package?

so basically I want my jenkins build to deploy to github automatically.
i have added to my scripts:
"release": "publish-release --reuseRelease --assets *-.tar.gz --token $TOKEN"

I was expecting this plus the information in package.json could be enough to not fire the wizzard.
So my question would be what are the minimum set of parameters + package.json configuration that will not request me any command line information request (as my build will not be able to answer 😛 ).

Try supplying --notes 'some notes'

nop... seems not to be that, still asks for tag, user, repo (even if it has defaults set and its a just hit enter actions).
do you have an example package.json?, to check if everything is in the correct format.

ok i understood now. package.json needs an extra object with
"publishRelease": {
"owner": "",
"repo": "",
"tag": "<>",
"name": "<>",
"notes": "something"
}
Is not that it will get the values from the current package.json
thanks for the time and the help

Oh, alright. I think I understand better now. Sorry, it's been a while since I've used this project myself so I forgot something. I'm glad it's fixed!


Overlapping download buttons

Fix overlapping buttons issue.

I couldn't reproduce this. What are the steps and the environment?

Hey @zhang1pr, there is some unrelated issue with the system as of now.
@aparcar It seems that https://aparcar.stephen304.com doesn't have .manifest files in target directories.


Is it possible to select various rows to cpy to clipboard?

I need to select multiple rows (with Control Key or other option)
Is is possible to do?
Thanks.

It depends on what you mean by "select a row".
You could use Batch Delete demo (http://js-grid.com/demos/ - demo page) as a reference implementation. It uses checkboxes to select rows. In your case you could use rowClick instead of checkboxes and verify that Ctrl key is pressed.


moved the search box from homepage to navigation bar

moved the search box from home page to navigation bar to enhance user experience.

@RaviP9973 The navbar isn't looking good because of that search bar.
Please contribute to other issues.


Allow nextSnapshot from a non-snapshot version (with tests)

Per request of @olamy I created this combined PR containing the fix of @aosagie in PR #206 and related tests in PR #225.

do we have an issue for this?

Yes, the related issue is https://github.com/mojohaus/versions-maven-plugin/issues/207

Is there a release date for the next release containing this fix? Waiting desperately for this! Thanks!


Fix rust audit report error

https://circleci.com/gh/starcoinorg/stargate/51
ID:       RUSTSEC-2019-0004
Crate:    libp2p-core
Version:  0.7.0
Date:     2019-05-15
URL:      https://rustsec.org/advisories/RUSTSEC-2019-0004
Title:    Failure to properly verify ed25519 signatures makes any signature valid
Solution:  upgrade to ^0.7.1 OR >= 0.8.1
Dependency tree:
libp2p-core 0.7.0

Already fixed. close it.


Individual bodies within compounds do not retain pointers to their positions

The way that we, and Bullet, treat compound bodies, makes our current implementation of getCenterOfMass() incorrect when rigid bodies are within a compound.
Here's the problem:
When creating a compound in tgcreator, we make a btCompoundShape (of type btCollisionShape), which is then passed as the collision shape when constructing a btRigidBody. This way, btRigidBodies have exactly one collision shape, which is made up of compound shapes, one for each tgRigidBody we've specified.
However, since there's only one btRigidBody within a compound, that means that the getPRigidBody() method for ANY shape within a single compound returns a pointer to the WHOLE btRigidBody. In effect, this means that we've got (for example), tgSpheres, tgRods, tgBoxes, etc. which are different in NTRT but are the same in Bullet Physics.
Practically: when calling getCenterOfMass() from a tgRigidBody, that gets the COM of its btRigidBody. So, when two tgRigidBodies are in a compound, getCenterOfMass() returns the center of mass of the entire compound, NOT each individual element.
Example: make a sphere on a stick, have them auto-compounded, and call getCenterOfMass() on each of them (as tgModels()) anywhere within NTRT. You'll get the same value (the COM of the compound.)
The only way to differentiate between components within a compound is to get the btCollisionShape of the rigid body (for any component), confirm it's a btCompoundShape, and try to get some information out of the child btCollisionShapes that make up that compound. (For the example suggested here - you can call getName() on the children and get back "SPHERE" and "CylinderY.")
This creates major issues with (1) consistency, since it's misleading to have centers of masses within NTRT that don't refer to individual objects, and (2) not seemingly possible to get the COM of each component in a compound.
I tried to pull out each btCollisionShape out of a btCompoundShape, and somehow get its transform with respect to the local frame of the compound (thinking we could call getCenterOfMass() for a compound then transform it individually to each component), but I couldn't seem to get it to work. Somehow, the pointers are all messed up with btCollisionShape's getChildTransform's getOrigin and getRotation methods.
Might try to use the btCompoundShape's calculatePrincipalAxisTransform() method, (https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=&f=&t=11004), to do what we want.
For now, all sensor data for individual bodies, within compound bodies, is BROKEN in NTRT.

Hi Drew,
You're correct that the components of a tgCompound are represented as a
single btRigidBody and there is no way that I know of in Bullet to keep
pointers/references to the corresponding parts inside the physics
environment.
If I remember correctly we originally thought to use joints between
separate components in the physics engine so that we could maintain those
references, but that approach had its own set of issues since joints are
not truly rigid in Bullet. Also I think the calculations are considerably
heavier when using joints as opposed to a single btRigidBody.
I believe that the most straightforward solution is, as you suggested, to
store the relative positions of the component centers of mass (and sensors
positions or other locations you care about) in the tg components. When one
wants the center of mass of a particular component, it can be calculated
using the position and orientation of the single btRigidBody and the
relative position of the point of interest. There might even be a
getComponentCenterOfMass() method floating around out there, but I'm not
sure how far down that road we got.
Hope this helps,
Ryan
On Sat, Feb 17, 2018 at 1:48 PM, Drew Sabelhaus<EMAIL_ADDRESS>wrote:

The way that we, and Bullet, treat compound bodies, makes our current
implementation of getCenterOfMass() incorrect when rigid bodies are within
a compound.
Here's the problem:
When creating a compound in tgcreator, we make a btCompoundShape (of type
btCollisionShape), which is then passed as the collision shape when
constructing a btRigidBody. This way, btRigidBodies have exactly one
collision shape, which is made up of compound shapes, one for each
tgRigidBody we've specified.
However, since there's only one btRigidBody within a compound, that means
that the getPRigidBody() method for ANY shape within a single compound
returns a pointer to the WHOLE btRigidBody. In effect, this means that
we've got (for example), tgSpheres, tgRods, tgBoxes, etc. which are
different in NTRT but are the same in Bullet Physics.
Practically: when calling getCenterOfMass() from a tgRigidBody, that gets
the COM of its btRigidBody. So, when two tgRigidBodies are in a compound,
getCenterOfMass() returns the center of mass of the entire compound, NOT
each individual element.
Example: make a sphere on a stick, have them auto-compounded, and call
getCenterOfMass() on each of them (as tgModels()) anywhere within NTRT.
You'll get the same value (the COM of the compound.)
The only way to differentiate between components within a compound is to
get the btCollisionShape of the rigid body (for any component), confirm
it's a btCompoundShape, and try to get some information out of the child
btCollisionShapes that make up that compound. (For the example suggested
here - you can call getName() on the children and get back "SPHERE" and
"CylinderY.")
This creates major issues with (1) consistency, since it's misleading to
have centers of masses within NTRT that don't refer to individual objects,
and (2) not seemingly possible to get the COM of each component in a
compound.
I tried to pull out each btCollisionShape out of a btCompoundShape, and
somehow get its transform with respect to the local frame of the compound
(thinking we could call getCenterOfMass() for a compound then transform it
individually to each component), but I couldn't seem to get it to work.
Somehow, the pointers are all messed up with btCollisionShape's
getChildTransform's getOrigin and getRotation methods.
Might try to use the btCompoundShape's calculatePrincipalAxisTransform()
method, (https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=&f=&t=11004),
to do what we want.
For now, all sensor data for individual bodies, within compound bodies,
is BROKEN in NTRT.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/NASA-Tensegrity-Robotics-Toolkit/NTRTsim/issues/223,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AH9dbBP97c2wllbTWwTUM7Zkuz4SrVv1ks5tV0kygaJpZM4SJefZ
.

Thanks Ryan! (PS - hope you're doing well!)
I'm working on a solution right now - won't get the COM of the components within a compound, but will get global node positions of any model, which is probably "good enough" and is what I really wanted anyway.
The general outline would be the following, inspired by Brian Mirletz' use of abstractMarker in his spines. Folks, let me know if there are unforeseen consequences here:

tgModels have a local variable of tgNodes object (a copy, or maybe a const pointer to a const?) that contains all the nodes in the model, as originally passed in to a structure. These are local positions.
In buildIntoHelper inside tgStructureInfo (I think that's where it is), the nodes from the structure are passed to the new tgModel after creation. That way, all nodes should be available in a model.
tgModel can then have a method such as "getNodesGlobalPosition()" which pushes the whole set of nodes through the btTransform of the rigid body. This should output the global position of each of the nodes of a model, at any timestep. TO-DO: not sure if this should be tgNodes or just a vector of btVector3s.
We could also provide a method that filters nodes based on a tgTagSearch. E.g., "getNodeGlobalPosition(tgTagSearch&)" that returns a list of nodes by tag.

One issue I'm already running into is passing around btVector3 objects as pointers to a vector of floats/doubles, since it seems to be overloaded that way, and since the simulator is smart enough to dynamically re-allocate memory from previous iterations, different data is stored in the same pointers. So I've got different tgModels with the "same" nodes, since only a pointer is stored. I'm going to need to be smarted about 'const', or maybe use copy constructors when passing tgNodes into a tgModel. Any advice here?
Do folks foresee any issues with dependencies? It makes me a bit concerned that we'll be including a class from tgcreator (tgNodes) in a tgModel, since I know we made a very conscious design decision to avoid that flow (creator knows about core, but core doesn't know about creator.)
Thanks all!


If a Microsoft assembly is part of the input assemblies and has no references api port throws an error really hard to diagnose

If I publish a .NET Core 2.0 app and I run analyze -f "publishDirectory" I will not get a report and the application will fail with a hard to diagnose error like this one:
Loading catalog                                   [Done]
Loading breaking changes                          [Done]
Detecting assembly references                     [Failed]

Cannot locate assembly information for System.Object. Microsoft assemblies found are:

Coming from here: https://github.com/Microsoft/dotnet-apiport/blob/dev/src/lib/Microsoft.Fx.Portability.MetadataReader/SystemObjectFinder.cs#L33
In order to find out what was wrong with my input directory I had to debug the code and discover this was failing whenever System.Private.CoreLib was passed in which doesn't have any references.
Also if I publish an assembly using Sdk-like projects, I don't want all the Microsoft assemblies shown in my report, so I think these assemblies should be filtered out from inputAssemblies, that way it wouldn't fail, nor show the portability of Microsoft assemblies in my report.
cc: @AlexGhiondea

Thanks, @safern, the question already contains the answer. Lets try.

@AlexGhiondea I don't think it'll matter. I can't fully remember why we need to find object, but I believe it was an edge case.

@safern Can you pull the recent changes (I just merged a possible fix) and check if it solves it for you?

Sure, I'll try it later today.

I just tried it and it's not fixed. I think I have a fix for it though - I'll let you know

Got a fix - the PR is open and once it passes everything I'll merge it in. It was slightly related to #699, but not entirely... similar area, but different fixes. I'll post a release (hopefully tomorrow) with the fixes available


Addresses passed with --public-addr get purged after a while

The --public-addr CLI option gives the possibility for the user to pass to the node its external IP addresses.
The way it's implemented is that at startup we call libp2p::Swarm::add_external_address:
https://github.com/paritytech/substrate/blob/3654d1ac2aa075cca1faa9f00580e1b9e3556041/client/network/src/service.rs#L381-L383
This, in turn, adds the address to the registry.
However, nodes continue to discover their (probably invalid) external IP address from other nodes.
Because of the way libp2p's Registry is implemented, the addresses passed with --public-addr will eventually get purged. This is obviously not supposed to happen.
The detection is automatically done in libp2p-identify, so Substrate can't disable it.
There seems to be lacking a way in libp2p to implement something like --public-addr.
cc @mxinden @romanb

For some history: --public-addr was implemented a long time ago when addresses stayed in the libp2p Registry forever.
But we then changed its behaviour to purge old addresses, and didn't update Substrate.

I can look into this on the libp2p side.

@ddorgan The problem with nodes behind nginx not receiving incoming connections should now be fixed.

Good news, thanks @tomaka


Add new addValidation polymorphism with View as param

Add new addValidation polymorphism with View as param. It is very useful if the validated view is not inflated on the activity view.

Hi @elsennov , it sounds good, I'll check it out later when I have time.
And I'm so happy that you've also added examples in demo, that makes it much easier :+1:
Thanks for your contribution :)

Hi @thyrlian ,
I am so glad that i could contribute to this awesome validation. Yes please, you are welcome :)

Hi @elsennov ,
Sorry for my late reply, coz I just got time to check it thoroughly.  Your code is good, and it works fine, thanks for that :)
The question is, as you mentioned in the commit - "It is useful if the validated view is not inflated on the activity view".  While the change you did in the demo project is still inflated to the same activity.  It would be great if you could elaborate a better example, thanks.
Explain it by comments is enough, and later we can see how should we change the demo.
Thanks again :+1:

Hi @thyrlian , i have added the demo for it. Basically, this pull request will allow us to use view instead of activity to get the edittext based on the resource id.
From the current version, if we pass edit text id, it will search only from activity. So, i made this, to search the edittext from the view.

Thanks @elsennov for adding a fragment demo, I'll check it out when time allows :+1:

Sorry @elsennov for my late reply (was busy due to some family stuff).
After checking your commits, I have several thoughts:

Actually we don't really need to overload set method or addValidation method to accept View rootView parameter.  Because they already accept EditText editText parameter (the view to be validated).  So that you can do EditText editText = (EditText) rootView.findViewById(viewId) outside, and pass the editText in (please check here).

After your modification, the DemoActivity now is mixed with validations in the activity, and validations in the fragment.  I think if we want to make it clear, we should build a better structure (with three different scenarios, and each of them has a solution based on current implementation):

Validations only in activity (no nested fragment)

the solution is exactly what the DemoActivity tells.

Validations only in fragment (activity body is empty)

similar to validation in activity, just move all validation code to fragment

Validations in activity and fragment (activity has nested fragment)

you could split validations into different places (activity and fragment), depends on which makes sense to you
you can keep all validation code in activity, which is cleaner and simpler (as long as the view in the fragment has an id, the addValidation API works for it)
if the fragment (and its validation) is reused by several different activities, so that you want to keep the validation code inside that fragment; meanwhile in each different activity, they have their own validation, and you want to trigger both fragment validation and activity validation in some listener from activity, then please add some new interface (e.g. ValidatableFragment), then implement the interface, call it at expected place:

public interface ValidatableFragment {
AwesomeValidation add(AwesomeValidation awesomeValidation);  // return AwesomeValidation object back to activity, prevent memory leak when refer to it (because it could hold activity)
void triggerValidation();  // you can hold an AwesomeValidation object inside fragment, but at your own risk, as for example UnderlabelValidator is referring to Context
}
3. In your fragment code, there is potential risk that could lead to memory leak (because of strong reference to activity).  You are calling `initAwesomeValidation` in `onCreateView `, while `initAwesomeValidation` set context by `setContext(getActivity())`.  But you didn't release the strong reference of the activity / context by setting mAwesomeValidation to null in `onDetach()`.

Come to the conclusion: Sorry, I have to close your pull request, as I explained above (you can make it work by current implementation).  But many thanks to your great work and support. :+1:


Add aria label for checkboxes in declarative table

This PR fixes addresses the accessibility issue https://github.com/microsoft/azuredatastudio/issues/22156 where users using a screenreader wouldn't know what the checkboxes in the table correspond to.
Before this change, the ariaLabel property for DeclarativeTableCellValue was only getting set if the cell type was string. This change makes it so that the ariaLabel of the cell will get set if the property is set for non-string cells.
checkbox in DeclarativeTable with aria label set (the aria label is the string getting announced before the row number):

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
2 unchanged lines in 1 file lost coverage.
Overall coverage increased (+0.007%) to 42.336%

Files with Coverage Reduction
New Missed Lines
%

extensions/machine-learning/src/common/processService.ts
2
81.48%

Totals

Change from base Build<PHONE_NUMBER>:
0.007%

Covered Lines:
30805

Relevant Lines:
67587

💛  - Coveralls


Standalone mode

Hey not sure if you're interested in merging this but I needed it personally so thought I would share...
Pull request adds a standalone mode which can be used for emoji reactions or any use case where you may only want to use a single emoji and not have a textarea.
Let me know what you think 😄

Hey there,
Any thoughts on wether or not you might integrate this? I love the changes you've made on v3 and would like to use them in my project... Cheers!

Hi, @MerlinBB, thanks for your improvements, it's realy cool.
Sorry, still can not find the time.
I wanted to make some more changes.
But in any way hands did not reach.
Now I'll create a new branch with your changes.
Thanks again.

This branch has conflicts, could you create new pull request to version2 branch for storing you in contributors.
Thanks

No problem, new pull request raised here: https://github.com/mervick/emojionearea/pull/26

Arrgh, quite a few merge conflict in there 💣
Do you think it's best to try and merge into version 2 or should we just try and implement it directly in version 3?

Thank you.
I think it is best to implement it in both versions.
If you can do it, I will appreciate it.

Was published in release v2.1.4

Awesome, thanks!
Shall I have a go a integrating this with v3 then?

If you want


Run as admin by default

Todo:

[x] Switch to logger rather than console log

So here is where I am up to. I have the code to write to the regedit to run as admin. It works when I run it as a node script but I can't quite get it to work within EyeCommander yet.
The problem is packaging the regedit package I am using: https://github.com/ironSource/node-regedit
There is a specific note in the readme about using it with electron. However it assumes you are using electron-builder but we are using electron-packager. 😠 I'll figure it out, its just a HUGE pain
Leaving it for now, hopefully fresh eyes on monday will help me solve it
CC @willwade

Just incase anyone stumbles across this - Remind me why we are using electron-packager over builder?

@willwade Good question.
We actually use electron-forge which is a tool for creating, publishing, and installing Electron applications. Under the hood electron-forge uses electron-packager, which we can't change.
We use electron-forge because it does literally everything out of the box for us. We can stop using electron-forge and then switch to electron-builder but that would require us to take on a lot of extra tooling.
I am almost certain there is a solution to solve this whilst continuing to use electron-forge.

@willwade Can you review this when you get a sec? Mainly just to check it makes sense. There is only really two new files which are worth looking at:

https://github.com/AceCentre/EyeCommander/blob/run-as-admin/src/backend/is-admin.js
https://github.com/AceCentre/EyeCommander/blob/run-as-admin/src/backend/squirrel-events.js


Cast inventory data toString.

This prevents a type error for fact values in the inventory page that are numeric.  Some of our custom facts simply return a numeric count which causes the replace function to fail unless it's cast as a string.

thanks for the fix!


feat(dapp): implement dapp create command

https://app.asana.com/0/1205969628270714/1206000704279352
We have to publish create kadena app package.
Working in cli found couple of minor issues in create kadena app package. I'll create a PR for that separately.

app.asana.com/0/1205969628270714/1206000704279352
We have to publish create kadena app package.
Working in cli found couple of minor issues in create kadena app package. I'll create a PR for that separately.

Can we add the create-kadena-app to the monorepo, BUT separate the tests for this project as an integration test, so that it doesn't block the CI (as this test is particularly slow)? @Ghislain89 should be able to assist you with that.


Compare method not scoped to comparer i.e. BinarySearch

https://deck.net/81f0287ca221a10777930dba7d3db6df
Expected Result
No exception
Actual Result
UndefinedReference exception

I'm unable to create a branche so unable to create a pull request (maybe my understanding of Git is not yet up to scratch)
But the issue can be fixed by adding .bind(obj) calls to the System.Collections.Generic.Comparer$1.get function in Resources/Collections/Comparer.js
System.Collections.Generic.Comparer$1.get = function (obj, T) {
    var m;

    if (T && (m = obj["System$Collections$Generic$IComparer$1$" + Bridge.getTypeAlias(T) + "$compare"])) {
        return m.bind(obj);
    }

    if (m = obj["System$Collections$Generic$IComparer$1$compare"]) {
        return m.bind(obj);
    }

    return obj.compare.bind(obj);
};

Hello! Thanks not only for reporting the issue but also suggesting a fix! That's very smart already, we'll take it in consideration for our next Bridge release.
Here's a repl.it fiddle showing the same code works for Native .NET.

Fixed! The fix for this will make it to the next Bridge release! The actual fix was very much like what you suggested, good job!


Diamond detector crashes for relaxed structure

If the cell is larger than 4000 atoms the kernel crashes when applying the diamond analysis on a relaxed structure for a cell smaller than 4000 atoms it works. If the cell is not relaxed it works as well.
https://github.com/jan-janssen/wired-pyscal-bug

@jan-janssen I wanted to extract the final structure for some testing. Can I access the final structure(the one that crashes) by
job.get_final_structure()

Sorry I saw how to do this :)

The problem is with the cell list in pyscal. In this particular case, there is an atom which lies exactly on the box edge. This was a condition which the cell list algo missed. I will update soon.

Should be fixed in the new release https://github.com/srmnitc/pyscal/releases/tag/2.10.5

Thanks a lot - I give it a try once the conda package is available.

Perfect the test notebook works now, so I am going to give the melting point calculation another try.


fix minor json formatting issue in Rockstor rock-on plugin. Fixes #38

Add a missing closing bracket in the json file that defines the EmbyServer Rockstor plugin (rock-ons).
Fixes #38
Pull request ready for review.
After this patch the EmbyServer option shows up in Rockstor's Rock-ons screen and appears to present appropriate config options and then installs as expected. The resulting WebUI once launched via Rockstor's rock-ons button "EmbyServer UI" appears to work and presents a "Welcome to Emby!" message along with a quick start guide and next button.

Thanks for the fix.

@hurricanehrndz Your Welcome.


angular-cli installation fails in windows 10 with error code ENOENT and error no 4058

Please provide us with the following information:

OS?

Windows 7, 8 or 10. Linux (which distribution). Mac OSX (Yosemite? El Capitan?)
Windows 10

Versions.

Please run ng --version. If there's nothing outputted, please run in a Terminal: node --version and paste the result here:
c:\learn\javascript\angular2naga>node --version
v6.7.0

Repro steps.

Was this an app that wasn't created using the CLI? What change did you do on your code? etc.
npm install -g angular-cli

The log given by the failure.

Normally this include a stack trace and some more information.

Mention any other details that might be usc:\learn\javascript\angular2naga>npm install -g -f angular-cli
npm WARN using --force I sure hope you know what you are doing.
npm WARN deprecated<EMAIL_ADDRESS>graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to<EMAIL_ADDRESS>as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN deprecated<EMAIL_ADDRESS>Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated<EMAIL_ADDRESS>This package is discontinued. Use<EMAIL_ADDRESS>npm WARN deprecated<EMAIL_ADDRESS>Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated<EMAIL_ADDRESS>ReDoS vulnerability parsing Set-Cookie https://nodesecurity.io/advisories/130
C:\Users\Dell\AppData\Roaming\npm
`-- (empty)
npm ERR! Windows_NT 10.0.14393
npm ERR! argv "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" "install" "-g" "-f" "angular-cli"
npm ERR! node v6.7.0
npm ERR! npm  v3.10.3
npm ERR! path C:\Users\Dell\AppData\Roaming\npm\node_modules.staging\abbrev-6fa77d19
npm ERR! code ENOENT
npm ERR! errno -4058
npm ERR! syscall rename
npm ERR! enoent ENOENT: no such file or directory, rename 'C:\Users\Dell\AppData\Roaming\npm\node_modules.staging\abbrev-6fa77d19' -> 'C:\Users\Dell\AppData\Roaming\npm\node_modules\angular-cli\node_modules\npm\node_modules\abbrev'
npm ERR! enoent ENOENT: no such file or directory, rename 'C:\Users\Dell\AppData\Roaming\npm\node_modules.staging\abbrev-6fa77d19' -> 'C:\Users\Dell\AppData\Roaming\npm\node_modules\angular-cli\node_modules\npm\node_modules\abbrev'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! Please include the following file with any support request:
npm ERR!     c:\learn\javascript\angular2naga\npm-debug.log
npm ERR! code 1eful.

Thanks! We'll be in touch soon.

Dupe of #1190


samples/net/mbedtls_dtlsserver needs fixing

samples/net/mbedtls_dtlsserver/sample.yaml has:
arch_whitelist: qemu_x86
This should be:
platform_whitelist: qemu_x86
Once we make that change, there are a number of code updates that need to be made to get the sample to build again.  Can you please look at fixing all this up.

actually @jukkar  fixed that already in the ini file, it was my mistake, so taking over :)

actually not. for some reason I though it was fixed.., i was mistaken.


Get Full Data-Record by Datum & Trace-Key

Is there a possibility to get (all) full data records gievn a datum and trace key?
I want to create custom over-templates for plotly-charts, which contain all available information about the data entry (and not only those ones dragged in the horizontal & vertical pivot-list). For this, my idea was to somehow modify this code inside of poltly_renderers.js:
for (j = 0, len = datumKeys.length; j < len; j++) {
    datumKey = datumKeys[j];
    val = parseFloat(pivotData.getAggregator(transpose ? datumKey : traceKey, transpose ? traceKey : datumKey).value());

    // Get the complete entry object(s) which belong to 'val, datumKey & traceKey' in here somehow...?
    // Then, a hover template with all keys & values of the object could be generated

    values.push(isFinite(val) ? val : null);
    labels.push(datumKey.join('-') || ' ');
}

I thought about using forEachMatchingRecord but I was unable to find the correct filters to only get the objects which contribute to the exact cell-value (note that the solution of using click-callback recommended in other issues doesn't work here, because I need to extract the relevant data inside of plotly_renderers.js)

@nicolaskruchten Are there any news yet / was my question understandable? (If you just had no time until now, no problem - I'm just curious :) )


gzip old logs by default

Request details
I'd like to suggest setting writer.convert  = gzip for TinyLog so that there is less space wasted on the device by default.

Sounds like a good enhancement, to be fair I through it already does that. Would you like to submit PR? :)


Full node follows p2p endpoint of bp node so slow!

I got public p2p endpoint list from https://eosnodes.privex.io/?config=1, and paste them into my config.ini.
But a few days ago, I found the syncing speed is so slow like a turtle. Averagely 0.5s per block.
My cloud servers are on Google Cloud and Aliyun, located in Taiwan and Shenzhen, China.
So when can I catch up with the latest block? Never?

Please tell me how to optimize the syncing speed. Like build private vpn connection with some bp node?

Encountered the same situation:

running in docker
p2p-peer-address from https://eosnodes.privex.io/?config=1
sync is so slow that node is not able to catch up with main stream

Bare metal is preferred.  Run on the highest clock frequency CPUs you can find.  nodeos is single-threaded, so large core counts are a detriment, not a help.  Bare metal on a base clock of 4.2 GHz Kaby Lake will certainly be able to keep up.  Base clock of 2.6 GHz may not be fast enough.

Try increasing sync-fetch-span in the config.ini for nodeos

We are using the bare metal as the server machine.

CPU: Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz
Memory: 184G
SSD
running in the docker

but the problem for us is that some times the sync speed is very fast, but some times it's very slow.
it doesn't look like that the hardware is holding down the speed.
received signed_block : #5952230 block age in secs = 144900
received signed_block : #5952233 block age in secs = 144901
received signed_block : #5952235 block age in secs = 144902
the num of the block is increasing, but the age in secs is increasing as well, which means the speed is slow and can't keep up the main net.
Is it related to the p2p network?

It's the network.  Mainnet is seeing a block with 200 transactions in it every 12 blocks for at least the past several hours.  Possibly many hours.  This is resulting in considerably longer processing time than normal for slower CPUs.  Non-producing nodes will need to be much closer in specification to producer nodes to handle the load until it abates.  (It appears to be artificial load, rather than organic demand.)  A lower specification non-producing node should eventually catch up once the transaction rate drops again.  Judging by the duration, someone with a lot of staked EOS is inducing the load.

Thanks, @jgiszczak for your quick response.
It's really slow to sync back to the main net. just as you said, especially when the blocks contained many tranxs. Do we have any method to tune the configuration to speed up? e.g. disable some plugins? change the stack size?
any advice is appreciated.

@jgiszczak Thanks for your reply. If BPs' non-producing full nodes do not have so high-performance hardware to supply public endpoint api service, is it their irresponsibility? After my testing, my cloud server can sync and process any many incoming transactions, and the only bottleneck is the incoming speed of net packets from the mainnet.
@redpolarbear No other tuning methods. Just wait for the syncing until latest enough. My nodeos have catched up with the mainnet head.

I have noticed this problem on a machine with 2.4GHz CPU... if you try to sync from scratch, nodeos takes way too much CPU and cannot keep up with all the big blocks we have right now.    I also tried to restore from 1 hour old backup, it can still not catch up.  (Restore from 5 minute old backup is fine).   It appears that when nodeos is current, then it uses much less CPU and can keep up with blocks fine.
Why does nodeos take so much CPU when processing older blocks?
(My tests have been running for several days now)

There is no configuration tuning that will help, but...
Good news everyone!
EOS.IO v1.1 has a change that disables speculative execution while synching, which substantially reduces the CPU time required to process irreversible blocks incoming over the network.  We're estimating as much as a factor of 10 speedup.  This should allow low spec CPUs to catch up to mainnet much more readily.  Look for the v1.1 release later today.

Sounds excellent!

@jgiszczak  I have not find the 1.1 docker image in docker hub. When will it upload to docker hub? Now the latest one is v1.0.10.
Tag Name    Compressed Size     Last Updated
latest           83 MB                       5 days ago
v1.0.10         83 MB                       5 days ago

The 1.1 Docker image was uploaded 2 hours ago.  Your patience is appreciated.


Can't get it to work on 3.67

I installed it using autoplugin and it installed fine, but it didn't really work. It still shows the normal unsupported message on the vita tv. I don't have any other whitelisting apps installed. I'm on 3.67.

It's fine now. I copied the plug in line in config to the config backup in ur0 as well as putting it in tai's ux0 folder and pasting that link in its config backup


Can't use when maximized since Alpha 90

When I maximize the terminus window it becomes unusable but if not maximized it is fine. See the below screenshots
OS: Windows 10
Maximized

Unmaximized

This should already be fixed in the nightly build - please check.

It is definitely fixed in the nightly build


NameError: name 'sys' is not defined

I have installed Python and Winfsp, as Dokan did not work for me. When attempting to start, WinFSP seems to work but when Python gets booted up i get this error;NameError: name 'sys' is not defined. I am running X-Plane 12.

I am aware that this error normally means that the sys module is loaded in the wrong order, or something akin to that. However since this is not a script I have created, that isn't really relevant since I cannot change the code, and I wonder how i can get the error to go away.

Figured it out, had to switch out something in the configs. Sorry for cluttering up the forum!

No problem, what did you have to change?
On Sat, May 20, 2023, 9:09 AM germannorwegian @.***>
wrote:

Figured it out, had to switch out something in the configs. Sorry for
cluttering up the forum!
—
Reply to this email directly, view it on GitHub
https://github.com/kubilus1/autoortho/issues/146#issuecomment-1555908786,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABVEDLHNUY4BOJAIHUDHQ3LXHC7BPANCNFSM6AAAAAAYIWYBHU
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

It was on the bottom, where you had to input "TRUE" for using WinFSP, although it said it was not recommended. In the meantime I have encountered more issues, and I turned it to FALSE again, aswell as uninstalling WinFSP because of CTDs

I am having issues with Dokan, making it impossible to use me, however, if I use WinFSP the game crashes, so sort of stuck right now.

The issue being, when I first installed AutoOrtho, I downloaded Dokan as normal, but then I uninstalled it wrong when I wanted to try WinFSE, for some reason. This resulted in some registry traces being left on my pc, so Dokan was not uninstalled completely afterall. When I tried to use the Dokan uninstaller, I got an error and I still do to this hour, so I cannot uninstall it that way. (I need to uninstall it to reinstall it again because AutoOrtho does not recognize that Dokan is installed on my pc because it is partially deleted, but I cannot delete the remaining files because of the error, paradox really.
I tried to delete the remaining registry traces, and then it actually worked, I was able to uninstall and reinstall Dokan completely using the installer, however AutoOrtho does not recognize that Dokan is installed on my pc, and therefore it does not start. It seems that even the installer has not installed Dokan properly either, and that is maybe why AutoOrtho does not recognize it as being installed. So I am very much stuck right now, been browsing the Dokan github but I have limited knowledge of anything related to coding so I am not able to do anything about the problem.

So to sum it up, I cannot use AutoOrtho because it does not recognize Dokan as being installed, and Dokan does not seem to be properly installed either. I have tried to uninstall Dokan and reinstall, however when I do i get an error. When I  try to delete the registry stuff manually, the installer works without error again, however when I reinstall Dokan (the same version) it does not install properly for some reason and is not recognized by AutoOrtho as being installed. So I am unable to install Dokan, and if i use WinFSP the game crashes.

And I cannot download older versions of Dokan either, like 2.0.5, that one does not install properly either and is not recognized by AutoOrtho, therefore meaning that the program does not run..

Same problem to me

Did you fix that?


feature/FI-1610-options-display

Adds selected options to the header.

Note: Full option choice data isn't attached to the testSession.suite_options object so there's a bit of parsing to pull that info (specifically labels) directly from the testSuite.suite_options object. We might want to look into making that data more widely accessible.

Codecov Report

Merging #220 (25206fb) into main (f4dce96) will increase coverage by 17.99%.
The diff coverage is n/a.

:exclamation: Current head 25206fb differs from pull request most recent head 12d5b66. Consider uploading reports for the commit 12d5b66 to get more accurate results

@@             Coverage Diff             @@
##             main     #220       +/-   ##
===========================================
+ Coverage   76.15%   94.14%   +17.99%
===========================================
  Files         184      114       -70
  Lines        4252     2971     -1281
  Branches      404        0      -404
===========================================
- Hits         3238     2797      -441
+ Misses       1011      174      -837
+ Partials        3        0        -3

Impacted Files
Coverage Δ

client/src/components/Header/Header.tsx

...nt/src/components/TestSuite/TestSessionWrapper.tsx

...mponents/TestSuite/TestSuiteTree/TestSuiteTree.tsx

client/src/components/SuiteOptionsPage/styles.tsx

...nts/RequestDetailModal/__mocked_data__/mockData.ts

...mponents/RequestDetailModal/RequestDetailModal.tsx

...stSuite/TestSuiteDetails/TestListItem/TabPanel.tsx

client/src/api/TestSessionApi.ts

...components/TestSuite/TestRunProgressBar/styles.tsx

...ponents/TestSuite/ConfigMessagesDetails/styles.tsx

... and 60 more

Continue to review full report at Codecov.

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

TIL those warning and error palette colors are available, maybe I should have used those for some icons that I changed.

@chris-at-work I think I updated those values in the accessibility PRs :)


Add config reference for cp conf

Description
This file should probably be at least linked from the docs if not published: https://github.com/kumahq/kuma/blob/master/pkg/config/app/kuma-cp/kuma-cp.defaults.yaml

Maybe just give a commandline example to cat the file from the kuma-cp image?


Communication between robots.

This year, we will use two robots (primary and secondary).
We made a lot of changes in the electronic architecture and it seems to be the right moment to centralize the strategy of the both.
And so on, the idea is to use one raspi on each to control the overall electronic, but only one will calculate the strategy of both robots (the environment will be shared and it is easier to make decisions).
Actually, our communication protocols work for serial and ethernet connections, so we need:

[ ] to choose the physical transport: Wifi? Bluetooth? ==> be careful, the wire environment is saturated because of the amount of teams so we should choose a reliable protocol not impacted by interferences
[ ] setup the protocol usage on the raspi
[ ] develop the appropriate code for the slave raspi to transmit orders from the master to elec and vice versa)

All the process needs to be transparent for the strategy: for example, if the primary robot is on the network <IP_ADDRESS> and the *secondary on <IP_ADDRESS>, this code should be sufficient:
Communication::wire_protocol primary("<IP_ADDRESS>");
Communicaiton::wire_protocol secondary("<IP_ADDRESS>");
primary.send_frame({. . .});
secondary.send_frame({. . .});

I found this article on the forum.
Basically we have 4 solutions to communicate:

WiFi 2.4GHz, which is exasperatly saturated at the Cup (in particular on the channel 1)
WiFi 5Ghz, which allows more channels and which is less used; the communication rate is higher but the range is smaller (only 3 to 4.5 meters)
Bluetooth, greatly discouraged
XBee
Li-Fi, using visible light; because of the illumination environment I wouldn't use it.

Personally I think we should use WiFi 5GHz, use 2 raspis to set up a communication in order to test the maximum range, and use this solution on an saturated environment. Does someone know a highly wifi-saturated place?


SetAccessControlListRecursive and ForceCloseAllHandles

closed via https://github.com/Azure/azure-sdk-for-cpp/pull/2173


[ICA] Validate operations on Interchain Accounts at Osmosis

The aim is to validate the ability to control accounts on Osmosis from logic implemented as a smart contract on Nolus.
Create an 'ica-demo' smart contract that :
On instantiate, creates an ICA on Osmosis, and keeps track of the result (success/failure/timeout) for subsequent queries of its state. It stores the data necessary for the following operations
On a "Transfer-out" execute message, sends the amount received to the ICA account. Listen to the result and update the balance (member data, not the bank one).
On a "Transfer-in" execute message, sends a message to the ICA account to transfer the given amount back to the 'ica-demo' contract instance. Listen to the result and update the balance (member data, not the bank one).
On a "SwapExactAmountIn" execute message, sends a message to the ICA account to swap the given amount (already transferred) on a given pool using this.
On a "SwapExactAmountOut" execute message, sends a message to the ICA account to swap the given amount (already transferred) for the exact output amount on a given pool using this.

closing it since the lease contract progressed a lot and it does the validation


Include missing files in sdist

Include missing files in sdist for #1
Tested with
++ mktemp -d
+ D=/tmp/tmp.ZWcKG27YBY
+ trap 'rm -rf /tmp/tmp.ZWcKG27YBY' EXIT
+ python -m venv /tmp/tmp.ZWcKG27YBY
+ python setup.py sdist -d /tmp/tmp.ZWcKG27YBY
running sdist
running egg_info
writing py_postdmarc.egg-info/PKG-INFO
writing dependency_links to py_postdmarc.egg-info/dependency_links.txt
writing entry points to py_postdmarc.egg-info/entry_points.txt
writing requirements to py_postdmarc.egg-info/requires.txt
writing top-level names to py_postdmarc.egg-info/top_level.txt
reading manifest file 'py_postdmarc.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'py_postdmarc.egg-info/SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md

running check
creating py-postdmarc-0.0.1
creating py-postdmarc-0.0.1/postdmarc
creating py-postdmarc-0.0.1/py_postdmarc.egg-info
creating py-postdmarc-0.0.1/tests
copying files to py-postdmarc-0.0.1...
copying MANIFEST.in -> py-postdmarc-0.0.1
copying readme.md -> py-postdmarc-0.0.1
copying setup.py -> py-postdmarc-0.0.1
copying postdmarc/__init__.py -> py-postdmarc-0.0.1/postdmarc
copying postdmarc/pdm_exceptions.py -> py-postdmarc-0.0.1/postdmarc
copying postdmarc/postdmarc.py -> py-postdmarc-0.0.1/postdmarc
copying py_postdmarc.egg-info/PKG-INFO -> py-postdmarc-0.0.1/py_postdmarc.egg-info
copying py_postdmarc.egg-info/SOURCES.txt -> py-postdmarc-0.0.1/py_postdmarc.egg-info
copying py_postdmarc.egg-info/dependency_links.txt -> py-postdmarc-0.0.1/py_postdmarc.egg-info
copying py_postdmarc.egg-info/entry_points.txt -> py-postdmarc-0.0.1/py_postdmarc.egg-info
copying py_postdmarc.egg-info/requires.txt -> py-postdmarc-0.0.1/py_postdmarc.egg-info
copying py_postdmarc.egg-info/top_level.txt -> py-postdmarc-0.0.1/py_postdmarc.egg-info
copying tests/__init__.py -> py-postdmarc-0.0.1/tests
copying tests/test_meta.py -> py-postdmarc-0.0.1/tests
copying tests/test_postdmarc.py -> py-postdmarc-0.0.1/tests
Writing py-postdmarc-0.0.1/setup.cfg
Creating tar archive
removing 'py-postdmarc-0.0.1' (and everything under it)
+ cd /
+ /tmp/tmp.ZWcKG27YBY/bin/pip install /tmp/tmp.ZWcKG27YBY/py-postdmarc-0.0.1.tar.gz
Processing /tmp/tmp.ZWcKG27YBY/py-postdmarc-0.0.1.tar.gz
Collecting dateparser<1.0,>=0.7 (from py-postdmarc==0.0.1)
  Downloading https://files.pythonhosted.org/packages/ad/0c/aba72d8454c28ab3800f3efd1ab3fe4f3fa41eb2746adc0cdcb318200796/dateparser-0.7.4-py2.py3-none-any.whl (353kB)
Collecting requests<3.0,>=2.0.0 (from py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/1a/70/1935c770cb3be6e3a8b78ced23d7e0f3b187f5cbfab4749523ed65d7c9b1/requests-2.23.0-py2.py3-none-any.whl
Collecting fire>=0.3 (from py-postdmarc==0.0.1)
  Downloading https://files.pythonhosted.org/packages/34/a7/0e22e70778aca01a52b9c899d9c145c6396d7b613719cd63db97ffa13f2f/fire-0.3.1.tar.gz (81kB)
Collecting python-dateutil (from dateparser<1.0,>=0.7->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/d4/70/d60450c3dd48ef87586924207ae8907090de0b306af2bce5d134d78615cb/python_dateutil-2.8.1-py2.py3-none-any.whl
Collecting tzlocal (from dateparser<1.0,>=0.7->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/5d/94/d47b0fd5988e6b7059de05720a646a2930920fff247a826f61674d436ba4/tzlocal-2.1-py2.py3-none-any.whl
Collecting pytz (from dateparser<1.0,>=0.7->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/4f/a4/879454d49688e2fad93e59d7d4efda580b783c745fd2ec2a3adf87b0808d/pytz-2020.1-py2.py3-none-any.whl
Collecting regex!=2019.02.19 (from dateparser<1.0,>=0.7->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/8e/03/52cf3f7f723aa6ea17858b979d8ab649e4fbb90bb3c14d4a3589c3beb948/regex-2020.5.14-cp38-cp38-manylinux2010_x86_64.whl
Collecting chardet<4,>=3.0.2 (from requests<3.0,>=2.0.0->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests<3.0,>=2.0.0->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/e1/e5/df302e8017440f111c11cc41a6b432838672f5a70aa29227bf58149dc72f/urllib3-1.25.9-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests<3.0,>=2.0.0->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/57/2b/26e37a4b034800c960a00c4e1b3d9ca5d7014e983e6e729e33ea2f36426c/certifi-2<IP_ADDRESS>-py2.py3-none-any.whl
Collecting idna<3,>=2.5 (from requests<3.0,>=2.0.0->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/89/e3/afebe61c546d18fb1709a61bee788254b40e736cff7271c7de5de2dc4128/idna-2.9-py2.py3-none-any.whl
Collecting six (from fire>=0.3->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl
Collecting termcolor (from fire>=0.3->py-postdmarc==0.0.1)
  Using cached https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz
Installing collected packages: six, python-dateutil, pytz, tzlocal, regex, dateparser, chardet, urllib3, certifi, idna, requests, termcolor, fire, py-postdmarc
  Running setup.py install for termcolor: started
    Running setup.py install for termcolor: finished with status 'done'
  Running setup.py install for fire: started
    Running setup.py install for fire: finished with status 'done'
  Running setup.py install for py-postdmarc: started
    Running setup.py install for py-postdmarc: finished with status 'done'
Successfully installed certifi-2<IP_ADDRESS> chardet-3.0.4 dateparser-0.7.4 fire-0.3.1 idna-2.9 py-postdmarc-0.0.1 python-dateutil-2.8.1 pytz-2020.1 regex-2020.5.14 requests-2.23.0 six-1.15.0 termcolor-1.1.0 tzlocal-2.1 urllib3-1.25.9
WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
+ echo Success
Success
++ rm -rf /tmp/tmp.ZWcKG27YBY

Much appreciated, thanks!


MemoryWrite for enum produces wrong code

dst^ := ABC_STATE_TO_DWORD(PRU_...) is produced
WORD_TO_DWORD should be used

Good to see your are working on it.


No baseline_15.1.1591.8.zip in repository

Hello,
I'm trying to run the CompareExchangeHashes.ps1 on my exchange server but I am getting the below error.
Found exchange version: 15.1.2176.2
Can't find local baseline for 15.1.1591.8
Downloading baseline file from GitHub to C:\temp\HAFNIUM\baseline_15.1.1591.8.zip
LoadFromGitHub : C:\temp\HAFNIUM\baseline_15.1.1591.8.zip not found... please open issue on
https://github.com/microsoft/CSS-Exchange/issues, we will work on it
I manually checked the assets in https://github.com/microsoft/CSS-Exchange/releases/tag/v15.1.1591.8 but there is no baseline_15.1.1591.8.zip only baseline_15.1.1591.10.zip. Can you please look at adding this baseline?
Best regards
Nelson

The baseline is now available, can you re-try?

tanks you


minimize() causing error because of implementation of sub project

Expected and Results
Minimize breaks when trying to use implementation with a sub project.
Cannot read field "forJava" because "parsedFileName" is null
Related environent and versions
Gradle 8.9
Shadow 8.3.3
Fedora 39
Reproduction steps

Create a Gradle project with multiple sub projects
Try to use implementation to implement a sub project into a sub project
Try to build a shadowJar

Anything else?
No response

I tried, this works for Ktlint after adding minimize()
https://github.com/pinterest/ktlint/blob/50e44a7d11207a96577fedd059cb95ffa225aa17/ktlint-cli/build.gradle.kts#L17-L27

Okay I will try to create an example repo.
I am using a different syntax for implementing the sub project, does that make a difference?
implementation(project(":MySubProject"))

Nope.

I can't replicate the issue in a separate project either. I will look into why my project has this issue later today.

I managed to fix the issue. I had the buildSrc folder generated by gradle init which caused problems with the plugins I used.


WebGPU: Fix stencil buffer creation with RTT

See https://forum.babylonjs.com/t/webgpu-higlightlayer-and-fxaa-issue/37730

Snapshot stored with reference name:
refs/pull/13484/merge
Test environment:
https://babylonsnapshots.z22.web.core.windows.net/refs/pull/13484/merge/index.html
To test a playground add it to the URL, for example:
https://babylonsnapshots.z22.web.core.windows.net/refs/pull/13484/merge/index.html#WGZLGJ#4600
Links to test babylon tools with this snapshot:
https://playground.babylonjs.com/?snapshot=refs/pull/13484/merge
https://sandbox.babylonjs.com/?snapshot=refs/pull/13484/merge
https://gui.babylonjs.com/?snapshot=refs/pull/13484/merge
https://nme.babylonjs.com/?snapshot=refs/pull/13484/merge
To test the snapshot in the playground with a playground ID add it after the snapshot query string:
https://playground.babylonjs.com/?snapshot=refs/pull/13484/merge#BCU1XR#0


@auto_close_db usage question

The Readme says:

Once we decorated all functions that utilized a connection, this service used less connections than it's total thread count.

In my case, I have a Django command where I want to use the decorator. This command imports some functions and classes from the project. So, for example, in a 5-level execution flow would be something like (tree levels are ok, markdown messed a little):

Django command
view1/function1

view1/function2

view2/function1

view3/function1, which has SomeModel.objects.___ call

Do I have to decorate the command all the execution tree down to the bottom function where Django uses a connection, or decorating just the main function (in my example, the Django command one) is enough?
Thanks!

The decorator simply runs the function it is decorating and then closes all connections.
You could just decorate the main function and it should work ok.

Thanks!
I'm going to test it this night. I'm having trouble with Django and long-time Django command runnings, getting "MySQL server has gone away" error.
I hope this will work.

If you are having trouble with long running Django commands, it may be more beneficial to use the decorator where the database is being accessed. This way, database connections will close after each function runs.
If you use the decorator on the main function, the decorator will only run once.

Fair enough. I'll write about it between friday and monday.
On Wed, Apr 22, 2015, 8:33 PM Travis Cunningham<EMAIL_ADDRESS>wrote:

If you are having trouble with long running Django commands, it may be
more beneficial to use the decorator where the database is being accessed.
This way, database connections will close after each function runs.
If you use the decorator on the main function, the decorator will only run
once.
—
Reply to this email directly or view it on GitHub
https://github.com/smartfile/django-mysqlpool/issues/10#issuecomment-95367282
.

Fair enough. I'll write about it between friday and monday.
Meanwhile, I don't want to miss any detail: if my function is @transaction.atomic, I have to do
@auto_close_db
@transaction.atomic
def fun():
    ...

right?

FYI, it seems it's working.
I was used to have problems every day, because the application had long idle periods of time, causing open connection timeouts (at least, it's the explanation given by Django guys in their thread.
Since Thursday-Friday night, when I deployed this code, it's up since there.
Thanks by the help, for anything else I'll come back.


Draw custom text at coordinates

It would be really great to have opportunity to draw custom short strings by coordinates.
Is where any chance you'll have time for this?

If you could just describe use case for such thing? There is already user message and popup messages with units info. I think plain text on field will be noisy and hard to read

Exact use case is visualizing weights of nodes of potential field

You may use different color intensity for that, there is support for alpha channel in latest versions.
Anyway correct text rendering with scaling right on field requires very much efforts, including manual true type rendering engine.
Simple solution may be to show arbitrary information in popup window, when mouse hovering particular region. But seems not so useful for me, though.

Yeah, i am already doing that but when you need an absolute values, colors are pretty useless.
Actually, solution with popup menu, containing custom parameters sounds good for me.

Ok, I think this feature may fit with current architecture. Unfortunately I really don't have much time at the moment.
If someone interested in implementing such feature, I'll be happy to help.


Call to upload() Doesn't Always Return

I have the following problem that is easy to reproduce on Ubuntu.  Version of Dronekit is 2.4.0
I isolated problem with debugger.  Function is below and snippet that hangs is
    "while False in self._vehicle._wp_uploaded:
        time.sleep(0.1)"

def upload(self):
if self._vehicle._wpts_dirty:
self._vehicle._master.waypoint_clear_all_send()
if self._vehicle._wploader.count() > 0:
self._vehicle._wp_uploaded = [False] * self._vehicle._wploader.count()
self._vehicle._master.waypoint_count_send(self._vehicle._wploader.count())
while False in self._vehicle._wp_uploaded:
time.sleep(0.1)
self._vehicle._wp_uploaded = None
self._vehicle._wpts_dirty = False

I have same issue.
https://github.com/dronekit/dronekit-python/issues/700
Did you solve this problem?

Just got this issue sometime:
/dronekit/init.py", line 3024, in upload
TypeError: argument of type 'NoneType' is not iterable

@tizianofiorenzani Quick look seems to say you can get this is if you call upload() twice from different threads.  Any chance you did this?

I don't think so, but I need to double check. Looking at the code, the only way _wp_uploaded becomes None is after the while loop. Before that, is initialized as a boolean array. The least it can be is []. So your explanation is sound


Bug: Data error value too long for type character varying(255)

It fails to write requests with long paths (for example with many GET params). I suggest to increase max_length of SonarRequest.path or even better, change it to textfield instead of charfield.

Thanks for the suggestion! I'll add a migrations in the next release for this.


Bot traffic spotted among GA4 user numbers

GA4 user numbers seem to have jumped during the period 10/1/24-6/3/24. This looks like bot traffic and the user numbers after 6/3/24 appear to be at "normal" levels.
Here are user numbers from Jan 2023:

The green circle around the April 2023 user numbers indicates the period when bots were at their highest just before the spam filter was deployed in May 2023.

This appears to be due to due to bytespider activity. Here's user numbers by country with China highlighted in purple:

To do: clean analytics data
Size: Big

@pollecuttn Each month, I submit user numbers in this spreadsheet and quarterly figures in this spreadsheet. As bots are discovered, estimates are subtracted from the categories and previously-submitted data amended where appropriate.
Unfortunately, there is nothing I can do about the GA4 data.

According to GA4 user numbers for China, suspected numbers of bots have not reduced significantly since changes in March.

As this appears to be an ongoing issue, I have documented how I've arrived at estimated bot numbers and deductions for monthly and quarterly stats:

@kenoir I've noticed a huge increase in direct traffic during Q2 which appears to be due to China (see below.) Seeing as we're assuming the majority of China user numbers are bytespider, it looks like this bot is targeting wellcomecollection.org direct. I thought bots crawled browsers - or is bytespider a particularly clever bot that way?

@taceybadgerbrook this is a really useful analysis. A few things come to mind:

These requests are likely not ByteSpider that was scraping our site for content, analysis of the most recent traffic makes it look like the Chinese character link spam bot is to blame.
It makes sense this is an ongoing issue as we are rate limiting these requests rather than flat blocking them as it's awkward to identify them at the WAF.
It is possible to filter the raw request data provided by GA and ingested via BigQuery to give us a more realistic idea of "real" requests over time.

@kenoir maybe Alex's spam filter could be tweaked to catch more of these spam bots? I count spammers in Kibana and during the last quarter this only picked up 22,000.
While the spam filter wouldn't keep the spam bots out, it would go a long way to helping whoever does the stats after me. I am in the middle of doing the Q2 stats and writing guidance on how to adjust the user numbers to exclude bots.

I count spammers in Kibana and during the last quarter this only picked up 22,000.

The count in Kibana is based on the Segment data AIUI. Significant bot traffic will have been filtered out before it reaches the app so I don't think it's a good measure of overall activity.

maybe Alex's spam filter could be tweaked to catch more of these spam bots?

I don't think the app is the best place to implement the spam filter as allowing spam requests to fall through to the app can cause performance issues. I understand it's a compromise intended to provide real users who might be mistaken for bots with useful errors, but I am not sure how many real users are being aided by this pattern.
I'd recommend that we look at the raw analytics data collected in the data lake for a better source of truth with more flexible filtering of bot requests.

@kenoir I suppose I could add to the monthly/quarterly instructions details of how to access Postgres and an SQL query that can be cut and pasted. I am concerned that this is all going to fall to Lauren, though.
Maybe a good compromise would be to create the instructions for the Lead Digital Analyst when they start but leave the instructions as they are for Lauren's sanity. These attribute excess China users to bots.
Could you put a Teams meeting in my calendar for some time next Mon/Tues to have a look at the data and come up with a generic query?

Maybe a good compromise would be to create the instructions for the Lead Digital Analyst when they start but leave the instructions as they are for Lauren's sanity. These attribute excess China users to bots.

Yes, perfect. I think we are probably safe to make a naive estimate by removing traffic from China/Singapore regions from our counts as they represent a small proportion of the overall traffic in any case, that's a sustainable practise long term though.


PDB2Cif error

Hi
I am using mkdssp for my own database. For some pdb files the server gives the massage below.
can you tell me what is causing it？
Thanks a lot.
mkdssp: /libcifpp/src/PDB2Cif.cpp:5512: PDBFileParser::ParseCoordinate(int)::<lambda(atomRec&, atomRec&)>: Assertion `d != 0' failed.

Most likely you are trying to read a PDB file containing atom numbers that are not unique.
May I suggest you start using mmCIF files instead of PDB files?


Add noScope key to damage and weaponFire objects

Equivalent to the noScope key in every kill object, a noScope key could be added to damage and weaponFire objects as well - would be useful for my current project.

Added zoomLevel for damage and weapon fire events. It is an int that refers to the zoom level of the gun. 1 = no zoom, 2 = half zoom, 3 = full zoom.
From Markus' documentation:
"Only weapons with scopes have a valid zoom level."
Ref PR: #117

Edit, the scale is 0,1,2