Multi-value Support for KnnVectorField

Description
It would be nice to support multiple values in a Knn vector field.
This must be compatible with both the Exact and Approximate Nearest Neighbor search.
There are two sides to the coin:

Index time support - allowing to add in the indexing data structures multiple vectors for the same field and docID
Query time support - how to retrieve a topK list of documents, where each document my have multiple neighbors to the query

The problem is more complicated than it seems.
An initial tentative design and draft implementation is attached

I see a lot of good work on the implementation in the attached PR, great! What I'm lacking though is any understanding of what the use cases for this might be. Do we have some? I think it's important to have at least some envisioned so we can know how to go with the implementation since there will undoubtedly be tradeoffs.

There are also late-interaction-models that do embeddings per token. While the current HNSW codec wouldn't be best for that, it is another use case for multiple embeddings per document.

I have a customer using Solr to do kNN for trademark images. Each trademark has several images and they want to find te trademark with closest imae match (cosine distance). They currently use some outdated homemade plugin using BinaryDocvalues and  scan through them, but to speed up search kNN looks like right Choice. But to do facetting they want hits counted on the trademarks and not on the images.

So, I have been thinking of the current implementation and was wondering if we could instead move towards using the join functionality?
Just to make sure I am not absolutely crazy.

join already requires children and parent documents to be indexed next to each other (parent docs as the last doc in the child&parent block).
When searching the graph, a separate kind of NeighborQueue that requires topK parent documents (ParentNeighboQueue?). This queue would require a BitSet of the parent doc ids. Then when a child doc is visited via the graph, we can check its score and determine the parent block via BitSet#nextSetBit. Tracking how many parents we have visited and their scores wouldn't be too bad from that avenue.
Top scoring documents would be the scores according to the parent docs. I guess this COULD be flexible allowing mean, min, max discovered child during the graph explore.

I would still prefer to have multiple values per document. From the point of view of implementation this does not look crazy to me, but using blockjoins adds too many limitations and often people don't want to use it for other reasons
The implementation as suggested by @alessandrobenedetti looks great to me and goes in line with other multivalued fields in Lucene, just my comments after watching his talk and skimming through th PR:

the general storage implementation of the storage of vectors is basically similar to SortedSetDocValues (see also @msokolov initial implementation which solely used DocValues). The change here is SortedDocValues to SortedSetDocvalues. We may keep a separate single valued implementation and offer a wrapper (like for docvalues).
the index to find nearest neigbours (HNSW) does not need any change because the grpah entries just point to ordinal numbers. We just need to take care that the number of ordinal numbers may go beyond Integer.MAX_VALUE
result collection is different because we need to apply the min/max/avg functions. To me this is the most complicated change, but this would be similarily complex with block join.

I think the biggest problem of the current PR is that ordinals need to be "long" as the number of vectors may go beyond Integer.MAX_VALUE.

I'll have to spend more brain time on the proposed block-join alternative, but isn't it already "available" in that form? (with the consequent problems and benefits of joins?)
When I have more time I'll give a more informed opinion!

I'll have to spend more brain time on the proposed block-join alternative, but isn't it already "available" in that form? (with the consequent problems and benefits of joins?)

The key issue is document collection. Right now, the topK is limited to only topK children documents. Really, what you want is the topK parent documents based on children scores.

The key issue is document collection. Right now, the topK is limited to only topK children documents. Really, what you want is the topK parent documents based on children scores.

Just curious, has there been any progress with multi-value vector field support?
Elasticsearch seem to support the idea of using the "block join" approach as outlined in this blog post from a couple of weeks ago: https://www.elastic.co/search-labs/blog/articles/chunking-via-ingest-pipelines, although from what I can see, it will suffer from the same issue @benwtrent mentions where the topK will be applied to child documents.

Hi @david-sitsky, the multi-valued vectors in Lucene's contribution is now paused for lack of fundings.
I'll resume it from my side if and when I get some sponsors :)
The nested documents approach on the other hand has been released with Lucene 9.8! You read the various considerations that apply in the thread!

What are some use-cases for multi-valued vectors that are not easily supported using parent-child block joins?
I'd like to contribute here, trying to understand our main requirements given we now have parent-child joins in knn. I suppose block joins require all child documents with each update. Is that the main overhead we'd like to avoid with multi-valued vectors? Are there query time scenarios that block joins cannot fulfill?

Hi, I gave a talk about this at Berlin Buzzwords where I touched on the motivations:
https://www.youtube.com/watch?v=KhL0NrGj0uE
In short:

multi-valued vectors will add feature parity with most of the others field types (multi-valued is supported for many field types)
nested docs bring various considerations in terms of both performance and the necessity of aggregating at different levels

I do think things like ColBERT would benefit from having multiple vectors for a single document field.
One crazy idea I had (others have probably already thought of this, and found it wanting...) is since HNSW supports non-euclidean space already, what if HNSW graph nodes simply represented more than one vector?
Then the flat storage system and underlying scorer could handle the distance computations and HNSW itself doesn't actually have to change.
I could see this maybe hurting recall, but I wonder in practice how bad it would actually hurt things.
The idea would be:

A new FlatVectorFormat type that allows more than one vector (or possibly extending the existing ones)
That type would provide a scorer to HNSW that resolves the multi-vector scores by providing a particular aggregation of the scores of the vectors. This could be "max", "min", "avg", "sum" or something.
Then we need to test how recall is for the graph for individual vectors as a query could be one vector (regular passage search) or multiple (ColBERT).

HNSW doesn't actually look at the vectors at all, it simply provides an ordinal and requests a score, so the change in regards to code wouldn't be too bad I think.

@benwtrent : ++, I've been thinking on similar lines in the context of e-commerce type applications where different vectors represent different aspects of a document. The scorer can do a weighted dot-product across different vectors.
I like the wider generalization here, of using max/min/sum/... aggregations. Another thing to consider is that the multi-vector scorer will also need to handle similarity computations between nodes during graph build. For e.g. if the aggregation is max, would we need to compute  distance between n x n vectors and then take the max?

if the aggregation is max, would we need to compute distance between n x n vectors and then take the max?

Correct, I would even want flexibility between what was used to build the graph vs. how we query it.
This may be a good enough trade-off against recall. I would hope that adding additional connections in the graph would off-set any recall differences we would see when combining vectors in a single node vs. each vector being its own node. All this requires testing and prototyping, I just haven't had the time to dig deeply.

I was thinking about this and thought this would be cool with a few different use cases for a multi-valued vector:

The multi-values are treated the same as the single value, except once it's found to be a nearest K, it won't repeat.  For example: Doc A has vectors A1, A2, and A3.  Doc2 has vectors B1 bad B2.  Then we have a Doc3 with C1. A vector search is performed, and the K'th nearest return:
A1
A2
C1
B2
B1
A3

In one scenerio, the search results would be the same as above, and the docs would repeat.
In another scenario, the results would just return the top doc and not repeat it.  So a KNN result would be:
Doc1 (A1 won)
Doc3 (C1 won)
Doc2 (B2 won)
...
In another option, we can look into indexing the vectors where we get an average, min, or max between each dimension and just index the avg, min, or max.  For some reason, I think this might be a bit weird since you can do these calculations at index time.  But just a thought...
Are any of the suggestions similar to what I'm suggesting?

In another scenario, the results would just return the top doc and not repeat it.

I believe this is what the parent-block join implementation for vector values does currently. Collected vector values are deduped within the DiversifyingNearestChildrenKnnCollector, and we only keep the top scoring doc per parent.

In one scenario, the search results would be the same as above, and the docs would repeat.

So the idea is that query returns the same document multiple times, with different scores? I'd worry that we lose top-k slots to same document scores, which we'd probably want to aggregate per document anyway before using (similar to the parent-block join approach).

@vigyasharma @krickert There are a couple of ways to implement this natively in Lucene.

Have each individual vector be a connection in the graph with some resolution back to the original doc. One concern I have with this is that vector ordinals will now have to be stored as long values, effectively doubling heap requirements and increasing off-heap storage
Have documents be the vertices in the graph and consider only the max-sim other docs for the connections. My concern here is recall. It could be that the graph is too sparse, as now passages don't actually have maxConn connections.
Have documents be vertices, but ensure that there are connections relevant for each passage (would require adjustments to the HNSW builder). My concern here would be the complexity in the graph builder. It doesn't seem insurmountable, but this would alleviate the recall concern in point 2.

All this also is predicated on a nice iterator API. I would expect us to have to update Float|ByteVectorValues to have a new "isMultiVector" or something and adjust the iterators so that you can iterate by doc, and then iterate all the vectors in a doc.

@benwtrent  I like the idea of having documents be vertices in the graph, with an API that let's you iterate/access the different vectors per doc. It would have an indexing time similarity used during graph build (e.g. max-sim), and could allow for a different similarity to be used at query time (e.g. weighted dot-product across different vectors). I suppose this is option 2 you describe above?
Not sure I understand option 3. Are you thinking that graph has different types of edges b/w documents based on diff. similarity functions? So if you were using max similarity you would follow one path, but if you wanted avg. similarity, you might use a different set of edges?
I started a prototype that's close to Option-2, will try to get it to a shareable state soon.

Not sure I understand option 3. Are you thinking that graph has different types of edges b/w documents based on diff. similarity functions? So if you were using max similarity you would follow one path, but if you wanted avg. similarity, you might use a different set of edges?

Option 3 is the same as option 2, except on graph building we ensure the connectivity between the vertices (still docs with multi-vectors) reflects the connections that would have been built if each vector was vertex. This would significantly increase document connections and could slow down search/index times but would (conceivably) improve recall.
Maybe option 2 is enough, and recall & speed tradeoff is still good enough given our current parameters (maxConn & beamwidth).

Raised https://github.com/apache/lucene/pull/13525 with the approach we discussed above. We retain 1:1 graph node ordinal to document mapping, and define a new FlatVector reader, writer and scorer to work with multiple vector values per doc.
This is a big change and it's an early PR to get feedback on the overall approach (tests and some cleanup pending). If we agree with the idea, I'm happy to reraise separate split PRs with different changes.
would love to get your thoughts on this @benwtrent , @msokolov , @alessandrobenedetti


Can't reproduce the results for GLUE and hyperparameter misalignment

Hi,
Thanks for the great work.
I am trying to reproduce the result of Roberta-large on the NLU tasks, however, I got a CoLA score = 0 and MNLI = 31.3 using the provided finetuning scripts, and then I found out that there are misalignments between the hyperparameters in the provided training scripts and those on the paper. For example, in roberta_large_cola.sh the lr is set to 3e-4, but in the paper, it is set to 2e-4. Which settings should I follow to reproduce the reported result?
looking forward to your reply!
Best,
Sean

But I am still only getting 62.82 CoLA score, anyone encountered similar problem when trying to reproduce the result

But I am still only getting 62.82 CoLA score, anyone encountered similar problem when trying to reproduce the result

Hi，Did you solve this problem?

I changed the lr in the CoLA training script to 2e-4 and solved the CoLA constant 0 eval correlation value problem, but still couldn't reproduce the MNLI result :(

My result in CoLA is 63.48 which matches the paper. And the random seeds used are (1 3 13 37 71), but I can not reproduce other task, only CoLA can match the paper.


Chinese word typo

Request type

[ ] Please close this issue, I accidentally submitted it without adding any details
[ ] New documentation
[x ] Correction or update

Details

文本 should be 本文

https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object-oriented_JS

Hi there! Apologies, but we don't have the bandwidth to maintain translations. You are more than welcome to edit it yourself; this page explains how.


SLIC ROOT/IF macros don't abort all ranks

Unless the given expression to any of these macros is true on all ranks, the other ranks do not stop.  This also will never be true on any ROOT call because the internal rank == 0 is only true on the for one. This is not a bug in Serac but I don't want to lose track of this.
To reproduce, put a sleep(100) after any SLIC_ERROR_ROOT macro and watch it hang.
Related Axom issues:
https://github.com/LLNL/axom/issues/26
https://github.com/LLNL/axom/issues/524

fixed in various PRs.


set-output` command is deprecated

When trying this action I always get this response:
Warning: The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

Am I doing something wrong?

This is true. This action hasn't been updated for a while...

https://github.com/pavi2410/html-preview-action/releases/tag/v3


Add packages that dont install to their own file called TURDS.txt

just deleted them. plenty of fish in the sea


Add match arms regressed

https://github.com/matklad/rust-analyzer/commit/c211fb81df35fb06b9035bb8490bdb9b09b158d2
this used to work I think.

Minimal reproduction:
fn match_tuple_fill() {
    match (Some(()),) {
        (Some(()),) => {}
    }
}

It's possible that fill match arms has never supported product types, since none of these provide the assist either:
fn match_tuple_fill() {
    match (Some(()),) {}
    match (Test2 { val: Some(0) }) {}
    match Test2(Some(0)) {}
}
struct Test(Option<i32>);
struct Test2 {
    val: Option<i32>,
}

For these, my suggested UX would probably be to expand to
match (Some(0),) {
    (${0:_},)=>{},
}

With an action on the _ ident to split the arms:
match (Some(0),) {
    (Some(${0:_}),)=>{},
    (None,)=>{},
}

Note: However, rust-analyzer correctly gives the missing match arm diagnostic for all of these examples

(should also unindet those tests to match our style)

matklad@c211fb8
this used to work I think.

Definitely used to work.

Isn't that match already exhaustive though? I don't think it ever worked in this case specifically. Only a match with a single _ match arm is special cased to be completely filled.

It's missing the (None, None) case.

https://github.com/rust-analyzer/rust-analyzer/blob/e6728a8cd39f9111dcdd654c7c65e99e5a2f1190/crates/ide_assists/src/handlers/fill_match_arms.rs#L474-L491

I don't think this is regressed as the assist history shows it was limited since implemented.
Anyway I'd like to tackle on this.
The minimized example is a bit different, simple to fix https://github.com/rust-analyzer/rust-analyzer/pull/8543

Attempt on this https://github.com/rust-analyzer/rust-analyzer/pull/8565
I think this assist should be replaced with an assist [not yet implemented] offered by match check diagnostic.
Fill match arm assist also carries "expand wildcard" kind of functionality (https://github.com/rust-analyzer/rust-analyzer/issues/8129#issuecomment-803933984) which should be made into its own assist.
Is my considerations correct?
Off-topic: How to lower a generated ast::Pat to hir::Pat? If I want to call hir_ty::diagnostics::match_check::is_useful to check if a particular pattern is useful or not. Or to create Witnesses(Vec<hir::Pat>)> of missing patterns returned from the function.

Yes, both are correct.
I think creating the hir::Pat directly and turning it into AST later would be the cleaner approach.

The example now works, so I think it's fine to consider this particular window repaired.


Fix broken link to isForwardRange in split doc.

I messed up the syntax for FULL_XREF in #2817. FULL_XREF wasn't appropriate anyway. This replaces it with the new XREF2 (see https://github.com/D-Programming-Language/dlang.org/pull/748).

Auto-merge toggled on


hint and and link to set operators from Range

The problem
Solution provided

It would have helped if you had said something about the problem (issue, for instance) and what the solution is about. I'll check it anyway.

forget it, the docs are all yours

Hey, no, they are not...


Type guard does not narrow generic type via property check

Bug Report
I tried to find it in existing issues, there's a lot of similar ones, but repro case is not quite the same, so I'm not sure if it's duplicate.
🔎 Search Terms
type guard generic property narrow union
🕗 Version & Regression Information
TS version 4.2.3

This is the behavior in every version I tried, and I reviewed the FAQ for entries about the search terms

⏯ Playground Link
Playground link with relevant code
💻 Code

type UnionParam = 'a' | 'b' | 'c'

type Test<T extends UnionParam = UnionParam> = {
    param: T
    data: {
        a: { a: 1 }
        b: { b: 1 }
        c: { c: 1 }
    }[T]
}

const mock = {} as Test

if (mock.param === 'a') mock.data.a
/*
Property 'a' does not exist on type '{ a: 1; } | { b: 1; } | { c: 1; }'.
  Property 'a' does not exist on type '{ b: 1; }'.
*/

🙁 Actual behavior
Type of mock.data is not narrowed to { a: 1; } by a type guard
🙂 Expected behavior
Type of mock.data is narrowed to { a: 1; } by a type guard.
Expected to work because mock.param type is properly narrowed to 'a' by the type guard, and the type of mock.param is defined  by the same generic parameter that narrows the mock.data type union.

There is nothing it can narrow to, because your parameter T is typed 'a' | 'b' | 'c'.
This is a completely legal object for your type:
const mock: Test = { param: 'b', data: { a: 1 } };

There is nothing it can narrow to, because your parameter T is typed 'a' | 'b' | 'c'.

T is not 'a' | 'b' | 'c', rather T extends 'a' | 'b' | 'c' which is very important since after the type guard mock.param type is properly narrowed down to just 'a', and type of mock.param is parametrized by T, the same T that parametrizes mock.data, so it should bed narrowed as well.
Your point would stand only in case where mock.param and mock.data are not connected by the same param, e.g.:
type Test = {
    param: UnionParam
    data: {
        a: { a: 1 }
        b: { b: 1 }
        c: { c: 1 }
    }[UnionParam]
}

In that case both param and data prop types are independent from one another.

T is not 'a' | 'b' | 'c', rather T extends 'a' | 'b' | 'c'

Not in the example you gave. You did not provide a type argument to Test, so the default type argument UnionParam you specified is being used.
Test<T extends UnionParam = UnionParam> means T must extend UnionParameter (which means T can extend 'a' | 'b' | 'c' as well), and if not provided use the type UnionParam.

I did not provide the exact type exactly because there's this type guards feature that should be able to narrow it down based on runtime assertions, and that's exactly why both properties are parametrized by the same generic argument!
I feel like you're ignoring the fact that types for param and data depend on the same T, so narrowing down one of them narrows down the other as well, this is logical and that's the whole point of using generics -- so you can parametrize types.

I feel like you're ignoring the fact that types for param and data depend on the same T.

I'm not ignoring it. But I'm telling you that T is 'a' | 'b' | 'c', it's not one of those. So there is nothing that can be narrowed down. :-)
I provided you a correct working solution, showing the behavior you want. The code you provided simply won't work, you're misunderstanding how generics and unions work here.

Here's a set of questions then:

In my initial example is the type of param extends or is T?
Does the type guard from initial example narrows down the type of mock.param to just 'a'?
Does the type of data depend directly on T?

param is T, and T extends UnionParam. That means T can be just 'a', but it also can be 'a' | 'b' | 'c'.

Your type argument T has the default type of UnionParam ('a' | 'b' | 'c') if no type is provided.
Your variable mock is typed Test, so no type argument for T is provided, and T defaults to UnionParam.

It does indeed narrow mock.param to 'a'.

The type of mock.param is 'a' | 'b' | 'c', because you didn't provide a type argument and it uses the default.
The type 'a' | 'b' | 'c' can be narrowed to 'a' with your check.

It does!

But data does not depend directly on param.
And as clarified before, T is typed 'a' | 'b' | 'c' in your example.
{ a: { a: 1 }; b: { b: 1 }; c: { c: 1 } }['a' | 'b' | 'c'] results in the type { a: 1 } | { b: 1 } | { c: 1 }.
You narrowed param, but you did not narrow data.
It's completely legal to assign 'b' to param, and { a: 1 } to data. The types match with what Test specifies.

Your type Test (not the lack of type argument) is exactly this type:
{
    param: UnionParam;
    data: { a: 1 } | { b: 1 } | { c: 1 };
}

Where as you actually want this type:
 { param: 'a'; data: { a: 1 } } | { param: 'b'; data: { b: 1 } 0 | { param: 'c'; data: { c: 1 } }

Here you have three clear different types that can be narrowed as you want. The type where param is typed 'a' has data typed { a: 1 }, so TypeScript knows that when you narrowed param to 'a' you can only have one of these three possible types: The one with data being { a: 1 }.
I hope this clears it up for you. :-)

That's alot of answer to seemingly simple questions :)
Thanks for the efforts! Tho I'm still left confused as to how TS works here.

Your type Test (with default type argument) / Test (with explicit type argument) is exactly this type:

{
    param: UnionParam;
    data: { a: 1 } | { b: 1 } | { c: 1 };
}

From this it seems to me that once the generic is "instantiated" it loses the parameter and just uses compiled unions as they are without initial connections between them (I'd still call it a bug :))
This logic may not be in line with TS implementation of generics, but please follow me here:

if:

type of param is T
type of param is narrowed down to a

therefore T is narrowed down to a
and if type of data directly depends on T
therefore type of data is narrowed down as well as type of param and vice versa

I see how this would not work if my guess about the loss of parameters upon generic "instantiation" is correct, but I see this as a flaw as it does not follow the logic and, therefore, is misleading. I understand that there could be workarounds on this, e.g.: making a top-level union based on T like you suggested.
So if my statement of those 4 points could be proven wrong -- I would gladly close the issue myself.

From this it seems to me that once the generic is "instantiated" it loses the parameter

Depends what you would call "loses". Perhaps the terms "expanded", "implemented" or "closed" generic types help you get the correct mindset. When providing a type argument you're not dealing with a "hypothetical" type anymore, you're dealing with an actual concrete type. In your case it's UnionParam.

therefore T is narrowed down to a

That's where you got it wrong. You're not narrowing the type parameter T, you're narrowing the type of your parameter a.

therefore type of data is narrowed down as well as type of param and vice versa

You're wrongly assuming that all instances of T are the same type, but that's not specified by your type definition. Again, in your case T results in 'a' | 'b' | 'c'. So in one case the actual value can be 'a', in the other case it could be 'b'. Not all T are the same instance, so the core assumption "narrowed one T parameter, narrowed them all" is wrong.

Again, there is no flaw or bug here. It's just a (unfortunately common) misunderstanding of how generic types work.

Perhaps this simplified example helps you understand it:
// We have a dummy type with two properties, each having the type provided as an argument: T.
type Example<T> = { first: T; second: T }

// We create an instance. As the type argument we provide the type `1 | 2`.
const ex: Example<1 | 2> = {} as any;

// Now we're not dealing with a hypothetical type "T" anymore, we **know** the type is `1 | 2`.
// So the type of the example variable is:
// { first: 1 | 2; second: 1 | 2 }

ex.first = 1; // ex.first is typed `1 | 2`, so this is okay!
ex.second = 2; // ex.second is typed `1 | 2`, so this is okay!

if (ex.first === 1) {
    // We checked and narrowed the type of `ex.first` from `1 | 2` to `1`.
    // But that doesn't mean the type of `ex.second` is also narrowed.
}

So basically yes, upon generic "instantiation" it's parameters are replaced by their values, so the type becomes { first: 1 | 2; second: 1 | 2 } -- no connection between first and second anymore (type of parameter T is inlined into the type and the parameter itself is lost).
Good example :+1: , tho the 4-point statement still stands as you have previously agreed that param is T, but that's not how TS works apparently and param is whatever T was instantiated as and not refers to T anymore:

assumption was: first_arg_type -> T -> param and T -> data
reality: first_arg_type -> param and first_arg_type -> data

T works just as a placeholder, not as a type variable (it's pretty much either constant after initiation or is a template placeholder).
And it does not go in line with the official handbook as it says that:

Instead, we need a way of capturing the type of the argument in such a way that we can also use it to denote what is being returned. Here, we will use a type variable, a special kind of variable that works on types rather than values.

So at this point it's more like a documentation issue, I guess, as otherwise it'd be a super-breaking change.


Call Girls In Dehradun ♜♜93I579IO9O♜♜ Dehradun Escorts

Discussed in https://github.com/fastlane/fastlane/discussions/25361

Originally posted by rubydn24 October 15, 2024
We offer various services, including escort services, 93I579IO9O body rubs, and more. Call Girls In Dehradun We are dedicated to providing the best possible experience to our clients. Call Girls In Dehradun ♜♜93I579IO9O♜♜ Dehradun Escorts

Call Girls In Dehradun ♜♜93I579IO9O♜♜ Dehradun Escorts


Let users choose what quality of track to listen to

As title, if users are listening to music under bad network, it would be helpful to be able to let them choose low quality tracks. By doing so, it can make the player work smoothly and would make the user experience better.

fixed at #235


Support packaging Chrome extensions

It wold be great to have the possibility to inject selected Chrome plugins into the app package. Is it possible to implement that?
As I use nativefier mostly for development, my idea is to have a few devtools preinstalled.

+1 would like this

+1

Hi, there are no plans to extend the app to support chrome plugins on a high leel, but you can use the --inject flag to run your own javascript

@priezz Are you referring to dev extensions or regular chrome extensions?
I think it might be possible to add chrome dev extensions to an electron app, as indicated here. Would someone like to look into it?

Yeah, I mean exactly dev extensions. Maybe will find time to take a look at it later, thanks.
18 июля 2016 г. 7:10 AM пользователь Jia Hao<EMAIL_ADDRESS>написал:
@priezz Are you referring to dev extensions or regular chrome extensions?
I think it might be possible to add chrome dev extensions to an electron app, as indicated here. Would someone like to look into it?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

+1

There is a solution provided by Electron for this:
http://electron.atom.io/docs/tutorial/devtools-extension/
How would this be integrated into a Nativifier app?

@aexmachina This solution works fine to me. I used with Trello and ColorTitlesTrello extension .
nativefier "https://trello.com" --name Trello -i ~/Downloads/trello.png --inject "/<user_home_directory>/Library/Application Support/Google/Chrome/Default/Extensions/hpmobkglehhleflhaefmfajhbdnjmgim/1.0.1_0/override.css"
Thanks!

Hi there, any update on this issue ?

Would love to inject
https://chrome.google.com/webstore/detail/skype-calling/blakpkgjpemejpbmfiglncklihnhjkij

Love this project, started using it recently andit's fantastic.
I have a use case for an extension.   I have nativefied my Gmail and would love to be able to use the Todoist extension for sending emails to Todoist in here.

I found this tool, which might make some of it easier 😀 I'm not sure where that needs to be called, maybe within the scope that nativefier script runs in?
There is also more documentation about the underlying electron api

can we use the print preview in chrome?

can we use the print preview extensions in chrome?

I 100% agree with this. I would love to see Nativefier have an ability to include Chrome extensions out of the box. This can especially be good in situations in which I want to apply browser protection for Nativefier apps with my antivirus or internet security software.

Any news on this? :D

Any news on this? :D

You can do a workaround:
https://github.com/jiahaog/nativefier/issues/246#issuecomment-718708717

Thanks for the research, @kiprasmel 🙂

The injection itself was successful, but both extensions did not work properly because, I assume, they require browser APIs that are not supported in Electron (see http://www.electronjs.org/docs/api/extensions#supported-extensions-apis).

Indeed. As stated by Electron docs / Chrome Extension Support, with the bold "not-goal" not my emphasis but from the official docs:

Electron supports a subset of the Chrome Extensions API, primarily to support DevTools extensions and Chromium-internal extensions, but it also happens to support some other extension capabilities.
Note: Electron does not support arbitrary Chrome extensions from the store, and it is a non-goal of the Electron project to be perfectly compatible with Chrome's implementation of Extensions.

Now, to comment on you question "if anyone can figure out how to make an ad blocker work with electron / nativefier (especially if it works on youtube) please let me know",

I suggest you try to address your issue (have ad blocking in Nativefier) by other means. See issue #177 - Support basic ad blocking (maybe through @cliqz/adblocker-electron, or another lib, or homebrew). That being said, something basic will be easy, but a robust adblocker (especially for youtube) will undoubtedly be a challenge.
Or see if there's a way to port / transform (with a tool transforming JS code into JS code replacing/shimming Chrome Extension API calls) existing Chrome extensions into "Nativefier-compatible" extensions.
Or be a hero and add support for the full Chrome Extensions API into Electron! (Good luck, see you in a few years 😄).

Hey, thanks for the reply @ronjouch!
Could you elabore on the 2nd part?

Or see if there's a way to port / transform (with a tool transforming JS code into JS code replacing/shimming Chrome Extension API calls) existing Chrome extensions into "Nativefier-compatible" extensions.

do you perhaps have any idea what one need to transform / what APIs are available as replacements in nativefier (if they even exist?) and how would one transform the code? Babel & webpack? Thanks

Could you elabore on the 2nd part? Do you perhaps have any idea what one need to transform / what APIs are available as replacements in nativefier (if they even exist?) and how would one transform the code? Babel & webpack? Thanks

@kiprasmel not really, it was only a wild possibility I mentioned by the way, but I haven't investigated any of it, and you're totally right when asking A. whether replacements exist for all Chrome Extensions APIs, and B. which code transformation tooling would be .appropriate.

@kiprasmel @ronjouch in my bi-annual attempt at optimizing my digital life, I revisited nativefier and specifically chrome-extension support and I stumbled across this electron-chrome-extensions npm package. Could either of you comment on the viability/compatibility of this? I might play around with it this weekend, amid the myriad of other projects I have haha (so probably not this weekend).

@kiprasmel @ronjouch in my bi-annual attempt at optimizing my digital life, I revisited nativefier and specifically chrome-extension support and I stumbled across this electron-chrome-extensions npm package. Could either of you comment on the viability/compatibility of this? I might play around with it this weekend, amid the myriad of other projects I have haha (so probably not this weekend).

Just want to kindly ask for plugin support of Firefox plugins, which handle privacy way much better :)
Thanks in advance

Just want to kindly ask for plugin support of Firefox plugins, which handle privacy way much better :)
Thanks in advance

Electron is based off of Chromium, so that's not really possible. Also, privacy support regarding plugins is based off of the plugins themselves, not the browser they run off of.

Ohhhh, that makes sense :)
Thanks a lot for clearing this for me; I'll look into making my chromium use the same plugins :+1:

@kiprasmel @ronjouch in my bi-annual attempt at optimizing my digital life, I revisited nativefier and specifically chrome-extension support and I stumbled across this electron-chrome-extensions npm package. Could either of you comment on the viability/compatibility of this? I might play around with it this weekend, amid the myriad of other projects I have haha (so probably not this weekend).

Have you got around trying it?

For those who wants an ad-blocked web app
I recommend
ungoogled-chromium with --user-data-dir=$HOME/.config/myapp option.
It will create a fresh /home/user/.config/myapp config directory for standalone instance of the browser. Also use the --app option.
Like this:
ungoogled-chromium --user-data-dir=$HOME/.config/myapp --class=myapp --name=myapp --app=https://myapp.com

Or if you want incognito app:
ungoogled-chromium --user-data-dir=$HOME/.config/myapp --disable-popup-blocking --noerrdialogs --disable-translate --no-first-run --fast --fast-start --disable-infobars --disable-features=TranslateUI --disk-cache-dir=/dev/null --password-store=basic --temp-profile --incognito --class=myapp --name=myapp --app=https://myapp.com

Extensions:

You need to select here:
chrome://flags/#extension-mime-request-handling
a  Always prompt... option and restart
And then you install crx from here: chromium-web-store or here: ungoogled-chromium-extension-installer
And now you install your favorite adblocker extension (or any other) from web store

Why ungoogled-chromium? Just because calls to google has been removed there, just like in Electron.

I'll follow this thread. It would be great to have the ability to add extensions. In my case I love to be able to install darkreader so I can apply a dark theme to mitmweb.

I've done some digging about extension injecting into electron / nativefier. I've primarily attempted to inject an addblocker (ublock origin / adblock plus). The injection itself was successful, but both extensions did not work properly because, I assume, they require browser APIs that are not supported in Electron (see http://www.electronjs.org/docs/api/extensions#supported-extensions-apis).
This will still be useful if you want to try & inject other extensions.

injecting extensions into electron
it should be done inside Electron's main process -- see http://www.electronjs.org/docs/api/session#sesloadextensionpath for exact instructions. Their excerpt:
// main.js
const { app, session } = require('electron')
const path = require('path')

app.on('ready', async () => {
  await session.defaultSession.loadExtension(path.join(__dirname, 'react-devtools'))
  // Note that in order to use the React DevTools extension, you'll need to
  // download and unzip a copy of the extension.
})

now, you don't need to create the main.js file yourself -- it's already created by nativefier when you package an app with it.
Here's how I did it. I'll use youtube.com for the example:
nativefier \
	https://youtube.com \
	--name YouTube \
	--tray \
	--internal-urls "(.*?)(accounts\.google\.com|youtube\.com)(.*?)" \
	--user-agent 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0'

(the last 2 options are necessary to allow you to sign in into youtube if wanted)
then cd into the created folder. For me, it was YouTube-linux-x64
then:
cd resources/app/lib/
ls -lah

you should see some files like main.js[.map], preload.js[.map], static/.
edit the main.js file -- search for app.on('ready'
if not already, make the function async
right inside the function, add this line (or lines for multiple extensions):
await electron_1.session.defaultSession.loadExtension(path_1.default.join("/PATH/TO/THE/UNPACKED/CHROME/EXTENSION/"));

you can find the path of the extension by installing the extension into chrome, navigating to chrome://extensions, finding the wanted extension (i.e. chrome://extensions/?id=pndboagckgcidceccglekpgodhhekdbk, taking it's id, locating the extension on your file system where it is installed (i.e. on linux, it was in ~/.config/google-chrome/Default/Extensions/) and then pasting that path into the quotes.
you can also clone and build the extension yourself if you want to and if it's available on i.e. github - just make sure it works on chrome itself before trying to load it in electron to avoid wasting time.

Note on patching nativefier itself

Note that this file (main.js) is compiled output from typescript, so in the future if it not longer works, you should instead clone nativefier, patch the main.ts file in resources/app/src/ (instead of lib) by finding the same app.on('ready', making it async and adding a normal call:
await session.defaultSession.loadExtension("/PATH/TO/THE/UNPACKED/CHROME/EXTENSION/");

and then following the build instructions and either copying the built main.js file into resources/app/lib of the apps that you previously built with nativefier, or rebuilding the apps with the patched nativefier.

see also:

initial documentation about electron extensions: http://www.electronjs.org/docs/api/extensions
electron's main process http://www.electronjs.org/docs/glossary#main-process

side note: if anyone can figure out how to make an addblocker work with electron / nativefier (especially if it works on youtube) -- please let me know -- big thanks

Well, what if we want to add more than one chrome extension (using the electron-chrome-extensions library from the internet for better chrome extension API support). Where to put that and how


HMR failure, must restart Vite

I am opening this FYI. As I don't have the time to find out what is required for a proper repro, I'm going to close it immediately. @yyx990803 if you want to look at a private repository that reproduces this issue get in touch with me on discord (same handle).
Describe the bug
I start Vite on one of my projects.
Everything works fine.
Now touch any .ts file with an irrelevant edit. Let's say sequence.ts.
This appears on the terminal and looks quite suspicious given the simple edit:

Application doesn't work anymore, because of a JS bug.
Full app refresh with F5 doesn't work either!
Only solution seems to be a full restart of Vite: now app works again.
My Analysis
The JS failure in browser is related to a static global field exported by one TS module, that seems to be undefined after the edit, always.
Turns out the containing module is imported twice.
First with a timestamp: state.ts?t=1610318299861.
But then a later file action.ts imports the same module as just state.ts, no timestamp in querystring.
Needless to say for the browser that's 2 different modules, and they don't share variables which leads to all kind of bugs.
Why Vite references 2 different versions of the same file after HMR, I haven't found out.
System Info

vite version: 2.0.0-beta.19
Operating System: win 10
Node version: 15
Package manager and version: npm 7

@yyx990803  This bug is incredibly impacting. I basically have to restart Vite at every edit I make.
I am reopening as I figured out what Vite doesn't like here.
There's a minimal repro for you here: https://github.com/jods4/vite-1477
The bug happens when you have circular dependencies amongst your module (something that is fine in native ESM, under some initialization constraints).
In the repo, App.vue imports module A (it seems to be key to trigger HMR and reproducing the bug that a Vue SFC is involved); which imports module B, which imports module C, which imports module A again.
So App.vue -> A -> B -> C -> A.
Each module logs once in the console that it has been initialized.
As this is an empty app, you have to look carefully to observe the bug ;)
Here's how:

Clone the repo, start Vite.
Open your dev tools and look at the network and console.

Nothing unusual here: each file has been fetched from network and we can see each module initialized once in the console.

Now just hit save inside module B. This triggers HMR of App.vue.
The app is now broken but it's hard to see it. Just hit F5 and do a full reload of the app.
You'll see this in devtools:

And that's broken.
Module A has been imported twice: once without a query string and once with a t=... query.
These are two different modules as far as the browser is concerned, and you can see that Module A has logged twice in the console.
This is not how the app should work.
If you shut down Vite and start again, it works alright until you trigger HMR again.

@yyx990803  This bug is incredibly impacting. I basically have to restart Vite at every edit I make.
I am reopening as I figured out what Vite doesn't like here.
There's a minimal repro for you here: https://github.com/jods4/vite-1477
The bug happens when you have circular dependencies amongst your module (something that is fine in native ESM, under some initialization constraints).
In the repo, App.vue imports module A (it seems to be key to trigger HMR and reproducing the bug that a Vue SFC is involved); which imports module B, which imports module C, which imports module A again.
So App.vue -> A -> B -> C -> A.
Each module logs once in the console that it has been initialized.
As this is an empty app, you have to look carefully to observe the bug ;)
Here's how:

Clone the repo, start Vite.
Open your dev tools and look at the network and console.

Nothing unusual here: each file has been fetched from network and we can see each module initialized once in the console.

Now just hit save inside module B. This triggers HMR of App.vue.
The app is now broken but it's hard to see it. Just hit F5 and do a full reload of the app.
You'll see this in devtools:

And that's broken.
Module A has been imported twice: once without a query string and once with a t=... query.
These are two different modules as far as the browser is concerned, and you can see that Module A has logged twice in the console.
This is not how the app should work.
If you shut down Vite and start again, it works alright until you trigger HMR again.

BTW I can confirm this is still a problem in latest Vite, tested NOK in beta 31.

BTW I can confirm this is still a problem in latest Vite, tested NOK in beta 31.


.NET Fringe 2016 website

Still have some work to do on styling changes, but otherwise here good to go.
FYI: switched over to Jekyll and GH pages.

@Aaronontheweb just realized we still need actual links for the CFP & Tickets. Right now both point to todo.com

@Aaronontheweb also, it's the 2017 web site. Your PR title is so last year.

Other high-level updates that were made:

A decision to pick a complimentary color to the blue (a mint green in this case)
The docs pages have also been re-styled
The styles are now done using .scss
Structure site pieces are broken up into Jekyll includes (nav, footer, etc.)
Docs styles have been updated too -- it's all the same system now
Some older stylings (e.g. clearfix) have been removed
A readme was added to explain how to build the site

We're still eyeing some other issues & enhancements as well.

A note: prior to accepting the PR, we might want to make sure that GH Pages doesn't expect the entire site to live in the docs folder, per this Github link.
I think we should be fine, but want to give it a second look with less tired eyes.

@SeanKilleen yeah, still waiting on the other folks in charge of CFP and ticket sales to get their stuff setup... and my bad on the PR title


Fixes the terminology

Signed-off-by: Jerome Simeon<EMAIL_ADDRESS>

Coverage remained the same at 95.911% when pulling d0ff0b359bd74f79ce3c8b6d8891132fdf213014 on jeromesimeon:js-fix-terminology into ea339cdedb17317646041297e511615e9f6056c7 on accordproject:master.


 These would not be visible either way.

It should return success no?

I'm not sure what the semantics of RenderCommandResult are intended to be.
The RenderCommandResult doesn't appear to be used anywhere.

adding a gizmo line adds the line position to the list, then unconditionally push an "empty" slot with NAN. could we instead not push those nans when we didn't push actual data to the lines?

Also I learned recently that we should prefer u32::MAX over NaN. It is the "official" way of telling the GPU that our line list is ending.

@devil-ira can you make the RenderCommandResult change requested and then I'll merge this in for you.

@devil-ira can you make the RenderCommandResult change requested and then I'll merge this in for you.

I would prefer if someone tries to fix the issue at the source rather than this PR. We are pushing garbage in the mesh, and this PR just says "oh if there's only one garbage, don't draw it"

When we add a retained version of the line gizmo well need this check either way as users could easily create a linestrip of length 0 or 1.

@mockersf @superdump; I'll defer to one of you on whether we merge this PR as is.

I'm going to merge this following the approval from @DGriffin91, whose expertise I trust here: crashes are very sever bad and we can revert this very simple fix in a PR with a better fix later.

@alice-i-cecile imo we should try to get this into 0.11.1 if we're merging it now. I noticed it was removed from the milestone, not sure if that means it would no longer be cherry picked for the point release.

I'll defer to @cart for that decision, but I do agree.

Sorry I didn't check my notifications before publishing so I missed this.


32 bit iPhone devices in the lab may need a manual reboot

Some jobs on the 32 bit iPhones have been failing consistently:
https://ci.chromium.org/p/flutter/builders/prod/Mac_ios32 flutter_gallery__transition_perf_e2e_ios32

Sorry didn't file an issue for this, but @yusufm has helped rebooted the device. Let's see if it will help the test pass.

New test run passes.


imzML download

Resolves #547
Adds feature-flagged functionality to download the input files for datasets.
Details:

When the feature flag is off, only admins can download. Otherwise, everyone who can see a dataset can download it.
Downloading is only implemented for files stored on S3.
Currently the license is determined by the public/private status of the dataset. I'm not really happy with this - I think it needs further discussion. The UI explaining the license is a big ugly, but there's no sense working on it until we have a concrete plan about licensing.

Screenshots
Download link

Download dialog

@intsco Please review the python-client and graphql changes.
@richardgoater Please review the webapp changes.


operator == is missing

🦄 if (2==2) { return true}
Uncaught Error: Unknown identifier '=='!
    at Object.run (/Users/milimetr/Desktop/x/askql/src/askvm/lib/run.ts:29:12)
    at __awaiter (/Users/milimetr/Desktop/x/askql/src/askvm/lib/run.ts:4:12)
    at new Promise (<anonymous>)
    at /Users/milimetr/Desktop/x/askql/src/askvm/lib/run.ts:8:71
    at Generator.next (<anonymous>)
    at Object.<anonymous> (/Users/milimetr/Desktop/x/askql/src/askvm/lib/run.ts:82:9)
🦄

Dear new contributor,
If you have any questions on how to start, please write a comment with a tag: @czerwinskilukasz1 or @mhagmajer, or join our Discord Community and let us know there. We will be very happy to help you start! :)
Hint #1: implement in a similar way to lessThanOrEqual
Cheers,
Łukasz (@czerwinskilukasz1)
AskQL Core Developer

Please not that because of data immutability and type awareness we won't need to have "strict equality" === operator in this language

That's a good point.
@mhagmajer, so should our == work like Javascript's ===?

@czerwinskilukasz1 there is no operator in JavaScript that works exactly as equality should in AskScript because we'll actually do a deep comparison of immutable objects. Look at https://immutable-js.github.io/immutable-js/#equality-treats-collections-as-values for reference.
{ a: 1 } == { a: 1} should be true

Could you write more examples here, so that we define =='s behavior?
What about < and other inequality operators. Would you like them to also perform a deep comparison? How?

@czerwinskilukasz1 you can find more examples in the Immutable docs linked above. Deep comparison would work only for equality

@mhagmajer  OK, so this implies there would be no equivalence between a <= b && b <= a and a == b, right?

@czerwinskilukasz1 you can only use < for numbers, not objects I think

@mhagmajer how about:

strings
booleans
Should the operator throw an error for these types, like in https://github.com/xFAANG/askql/pull/245 ?

I think 2 == '4' should be false. This is something that linting/static analysis could point out as an issue with code one day. At runtime it should not throw

@mhagmajer how about:

strings
booleans
Should the operator throw an error for these types, like in #245 ?

Actually, I meant < here, e.g. check like: '4' < '0' or false < true.   Or '4' < true, 3 < true.

@czerwinskilukasz1 these types of comparison (using <) should only work for numbers. If there is some other way to compare other data types let's create separate functions/operators for those. I can imagine lexicographical comparison would be useful for sorting data

Back to ==, should this operator be equivalent to equals resource, therefore equals should be modified?

Yes, equals should return false when comparing data of different type groups - eg. 2 != '2', but 2:toFloat ==2

Yes, equals should return false when comparing data of different type groups - eg. 2 != '2', but 2:toFloat ==2

Posted as a separate issue: https://github.com/xFAANG/askql/issues/343


Version compatibility issue with sqlite3 in Linux CentOS-7 even after installing the Sqlite-3.9.2

(evoting-venv3.8) [root@ip-172-31-84-84 e-voting-with-django]# python3.8 manage.py makemigrations
Traceback (most recent call last):
File "manage.py", line 22, in
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/core/management/init.py", line 401, in execute_from_command_line
utility.execute()
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/core/management/init.py", line 377, in execute
django.setup()
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/init.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/apps/registry.py", line 114, in populate
app_config.import_models()
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/apps/config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib64/python3.8/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1014, in _gcd_import
File "", line 991, in _find_and_load
File "", line 975, in _find_and_load_unlocked
File "", line 671, in _load_unlocked
File "", line 783, in exec_module
File "", line 219, in _call_with_frames_removed
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/contrib/auth/models.py", line 2, in
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/contrib/auth/base_user.py", line 48, in
class AbstractBaseUser(models.Model):
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/db/models/base.py", line 122, in new
new_class.add_to_class('_meta', Options(meta, app_label))
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/db/models/base.py", line 326, in add_to_class
value.contribute_to_class(cls, name)
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/db/models/options.py", line 206, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/db/init.py", line 28, in getattr
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/db/utils.py", line 214, in getitem
backend = load_backend(db['ENGINE'])
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/db/utils.py", line 111, in load_backend
return import_module('%s.base' % backend_name)
File "/usr/lib64/python3.8/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 70, in
check_sqlite_version()
File "/root/e-voting-main/evoting-venv3.8/lib64/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 67, in check_sqlite_version
raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
(evoting-venv3.8) [root@ip-172-31-84-84 e-voting-with-django]# ls -l | grep sqlite
-rw-r--r-- 1 root root    0 Jul 25 19:03 db.sqlite3

Hi there,
What are the steps you followed that led to this, please?

Hey. This issue is resolved now by downgrading the django version to 2.1.2

Hey. This issue is resolved now by downgrading the django version to 2.1.2.


CORE-12069 - change confusing use function on EntityManagerFactory

Fix up the use extension method on EntityManagerFactory as its current usage is confusing as it doesn't close the EntityManagerFactory, only the EntityManager it creates.
This makes the usages slightly more verbose, but more explicit and will hopefully lead to fixing some failures to close connection pools in the integration tests.

I'd be inclined to pull in consume from the crypto processor, but that doesn't have to be done now.

I don't agree. It doesn't add much and hides away what is created and closed, which I think leads to some confusion.
It's also rare you want to create an EMF, create a EM and close both in a single statement. We should discourage that pattern especially as we should be looking at caching the EMFs more effectively.
But maybe that's a discussion for another day.

We should make tickets to clear up all EMFs in places that leak them.

I think we should fix them when we see them. It'd be more work to create the tickets than fix them as the biggest amount of work would be to find them.


Bug find and fix session

The first section of the page is blurred out without pop up window,
On line 7 you already toggled the '.blend mode' class before calling the clickMenu() function.
Try to move the code on line 7 into the function.
https://github.com/Mar12358/Portfolio/blob/3fabc00ae246259479216a5e9248560675045308/main.js#L7-L15

The stacks buttons display HTML buttons twice on the pop-up card.
On line 46 you already initialized a child element for the stacks button here
https://github.com/Mar12358/Portfolio/blob/3fabc00ae246259479216a5e9248560675045308/main.js#L46

Try to take out line 46 and let the loop on line 55 handle the display of the Stacks buttons
https://github.com/Mar12358/Portfolio/blob/3fabc00ae246259479216a5e9248560675045308/main.js#L55-L57

This is out of date and already assesed. Closing.


Keras implementation

Hi!
I'm trying to reimplement your code in Keras.
I've reimplemented the whole architecture, but I'm facing a problem to deal with your loss function.
You loss function is computed over the logits:
  self.loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=self.logits, labels=self.y)
Then you compute your final loss function only of the non masked elements:
 self.mean_loss = tf.reduce_sum(self.loss * self.istarget) / (tf.reduce_sum(self.istarget))
However, with keras, the output given to the model are 1 - 0 vectors, and not logits:
model = Model(input=x, outputs=preds)
Computing the loss with preds (result of the argmax on the logits layer), gives me obviously bad results, because of the sparsity.  It seems the framework does not permit to train on a certain type of data (logits) and to predict another type of data (1 - 0 vectors).
Do you know how I could deal with that with Keras?
Thanks!
Thank you again for the good work ;)
Paul,

Ok I found how to deal with this problem :-)
I perform the argmax after the predict( and the behaviour is strictly identical.
THanks anyway.


Make large strain materials work with 2d-wrappers

Codecov Report

Merging #40 (849f5bc) into main (57ceea5) will increase coverage by 0.02%.
The diff coverage is 87.50%.

@@            Coverage Diff             @@
##             main      #40      +/-   ##
==========================================
+ Coverage   92.07%   92.09%   +0.02%
==========================================
  Files          11       12       +1
  Lines         404      443      +39
==========================================
+ Hits          372      408      +36
- Misses         32       35       +3

Impacted Files
Coverage Δ

src/wrappers.jl
81.15% <80.00%> (-0.51%)
:arrow_down:

src/LinearElastic.jl
100.00% <100.00%> (ø)

src/traits.jl
64.70% <100.00%> (+3.41%)
:arrow_up:

src/CohesiveMaterials/XuNeedleman.jl
95.23% <0.00%> (ø)

src/CrystalViscoPlastic/CrystalViscoPlasticRed.jl
98.63% <0.00%> (+0.01%)
:arrow_up:

src/CrystalViscoPlastic/CrystalViscoPlastic.jl
98.55% <0.00%> (+0.02%)
:arrow_up:

src/Plastic.jl
98.33% <0.00%> (+0.02%)
:arrow_up:

src/FiniteStrain/yeoh.jl
95.65% <0.00%> (+0.19%)
:arrow_up:

src/FiniteStrain/stvenant.jl
95.23% <0.00%> (+0.23%)
: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 57ceea5...849f5bc. Read the comment docs.


Logo not change

Hi my new logo does not change, i have done all the cache manager in admin page as well as clear data in chrome, is there any things else must be done?  Thanks

Do you see your new logo when you go to http://YOUR-URL.com/templates/themes/base/img/logo.png?v=123? (change base to your current template name).
If it is the case, that means your logo has been successfully updated and it was only a cache problem.
It is isn't the case, that means you have permission issues and the software doesn't have writing access to update the logo. Make sure to allow "write" for /templates/themes/base/img/ folder (change base to your current template name).
Hope this helps!

Thanks


Bind context to ractive methods

Hi! I have a lot of places in my code where method of some ractive instance should be passed as callback.
For example:
new Ractive({
    complete: function () {
        $(window).on('resize', this.onResize) // <--- here it is
    },
    data: {
        message: 'hello'
    },
    onResize: function () {
        console.log(this.get('message'))
    }
})

But the problem is that the context will be global object. Of course, I can bind context but by this approach method should be defined in oninit. But callbacks are wrapped when I use this.on to handle events and I like this behavior: http://jsfiddle.net/pvtabau9/. How can I bind context but define it method as normal?

You can bind a function to a context using the bind method, so your example would become:
new Ractive({
    complete: function () {
        $(window).on('resize', this.onResize.bind(this)) // <--- here it is
    },
    data: {
        message: 'hello'
    },
    onResize: function () {
        console.log(this.get('message'))
    }
})

What @Madgvox said plus es6 fat arrows can be handy though not much shorter:
$(window).on('resize', () => this.onResize() );

Some libraries (not jquery though) offer a this argument:
library.on('resize', this.onResize, this);

However: sometimes end of ractive instance means end of browser window, but remember that you should remove handers unless you know the scope and lifecycle of the event emitter.
This gets a bit messy in the amount of tracking that has to be done:
new Ractive({
    complete: function () {
        $(window).on('resize', this.resizeHandler = this.onResize.bind(this) );
    },
    data: {
        message: 'hello'
    },
    onResize: function () {
        console.log(this.get('message'))
    }
    onteardown: function(){
       $(window).off('resize', this.resizeHandler);
   }
})

Yep, I was going to follow up to my previous post that if you need to support a browser older than IE9, you can also do this:
var self = this;
$(window).on('resize', function() {
  self.onResize();
});

Which is basically the long form of @martypdx's example:
$(window).on('resize', () => this.onResize() );

The nice thing about using the Ractive event infrastructure is a) it puts the declaration in the template on the element where it's used, b) you get contextual binding, c) you can directly call instance methods if you want, d) it gets cleaned up as part of the instance lifecycle.
I wonder if it would be useful to offer logic document and window element in the template:
<@window on-resize='resize()'/>
<@document on-mousemove='{{#dragging}}drag{{/}}'/>

That's an interesting idea, but I think it's kind of weird for a template to reach outside of itself. The more I think about it the more I like it though. :+1:

@atomiomi Event handlers are at the mercy of their callers. In the case of this.on and this.observe, the context is the instance because their handlers are at the mercy of Ractive. In this case of $(window).on('resize', this.onResize.bind(this)), jQuery holds control. A developer would easily say "Ahh, I expect window." - changing that expectation might lead to confusion.
I'm not saying it's impossible (the instance's handlers could be bound to the instance beforehand), but I think it's all about not making any surprises - which Ractive has been quite good at recently.
@martypdx Might be handy to put in a few more "environment"-related ones, especially those very handy ones. Posted this issue, building up from your idea. https://github.com/ractivejs/ractive/issues/2003

Thanks guys! I like your environment "components" idea. Now there is need to bind context, save reference to this handler and unsubscribe in teardown but all this things ractive do for local events.
But for me it will be more convenient if in addition to your idea it is possible to attach handlers to global events as to component events:
var ractive = new Ractive({
    oncomplete: function () {
        this.on('window.resize', this.resizeHandler())
    },
    data: {
        message: 'hello'
    },
    resizeHandler: function () {
        console.log(this.get('message'))
    }
})

I just wanted to mention that you can also use $.proxy.

Will close this as auto-binding is generally a Bad Idea, and it's easy to solve using fat arrows or bind


Update aws-core, http-client-spi, ... to 2.29.6

About this PR
📦 Updates

software.amazon.awssdk:aws-core
software.amazon.awssdk:http-client-spi
software.amazon.awssdk:netty-nio-client

from 2.28.29 to 2.29.6
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "software.amazon.awssdk" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "software.amazon.awssdk" }
}]

labels: library-update, early-semver-minor, semver-spec-minor, commit-count:1

Superseded by #1353.


ATTENTION: Download of aima-data.2008.08.24.zip appears to contain Worm

What steps will reproduce the problem?

1. download of aima-data.2008.08.24.zip
2. scan with ClamTK

What is the expected output? What do you see instead?

Expect no virus.  Instead contains - Worm.Sircam

What version of the product are you using? On what operating system?

Found using Ubuntu 10.04.

Please provide any additional information below.

Original issue reported on code.google.com by<EMAIL_ADDRESS>on 17 May 2010 at 2:22
Attachments:

[ClamTK Virus Scan.png](https://storage.googleapis.com/google-code-attachments/aima-python/issue-17/comment-0/ClamTK Virus Scan.png)

False alarm.


tmy_to_power commited? could not find it

I wrote a new tmy_to_power notebook that replaces Test_Scripts.

I have great difficulty with this upstream - pull request thing.  I spend more time correcting mashups than doing worthwhile coding.
Perhaps the tmy_to_power notebook was committed, but I did not find it after fetch upstream & merging to my branch. Test_Scripts is still there.

Not yet, it's still in PR #74. We have a policy of administrators not merging their own pull requests.
If you're using the command line interface you can get it by doing something like
git checkout -b wholmgren-tutorials master
git pull https://github.com/wholmgren/pvlib-python.git tutorials

If you're using the github GUI client then you can lookup how to add my fork as a new remote.


[docs] community content: article description copy edit

Description
You included my Starlight vs VuePress comparison in the community content page. Thanks!
There was a typo in the description.
The first commit fixes the typo.
The second two are a naive pass at correcting the existing localizations. I do not speak French or Korean, so used Google Translate. Google Translate translates the "before" English into the "before" French and Korean, making me think it's getting it right — or perhaps that the "before" translation was also done with Google Translate.
(There is also a Chinese localization. Running the "after" English through Google Translate results in no change in the translation.)

Hello! Thank you for opening your first PR to Starlight! ✨
Here’s what will happen next:

Our GitHub bots will run to check your changes.
If they spot any issues you will see some error messages on this PR.
Don’t hesitate to ask any questions if you’re not sure what these mean!

In a few minutes, you’ll be able to see a preview of your changes on Vercel 🤩

One or more of our maintainers will take a look and may ask you to make changes.
We try to be responsive, but don’t worry if this takes a few days.


Create upcoming notes

Closes #9.

@Gewerd-Strauss Thanks for the feature suggestion. Can you try this build to see if it meets your need? obsidian-upcoming.zip

This seems to resolve the issue on the end of this plugin; now all I need to do is figure out how to fix the issue this poses with regards to the template. (I only now realised this is an issue.)
The details as to why this was a short-thought solution:
The daily note template I use has distinct settings per weekday, and uses the this.app.workspace.getactivefile().basename command to detect the date, then converts that to its corresponding weekday:
## Day Planner <% this.app.workspace.getActiveFile().basename %> - <% tp.date.now("dddd",0,this.app.workspace.getActiveFile().basename,"DD.MM.YYYY") %>
---
### Start of Day (<% this.app.workspace.getActiveFile().basename %>)
<%  tp.file.include("{{Morning - 0" + tp.date.now("d dddd",0,this.app.workspace.getActiveFile().basename,"DD.MM.YYYY") + "}}") %>
---
### The Day (<% this.app.workspace.getActiveFile().basename %>)
<%  tp.file.include("{{Day - 0" + tp.date.now("d dddd",0,this.app.workspace.getActiveFile().basename,"DD.MM.YYYY") + "}}") %>
---
### Evening (<% this.app.workspace.getActiveFile().basename %>)
<%  tp.file.include("{{Evening - 0" + tp.date.now("d dddd",0,this.app.workspace.getActiveFile().basename,"DD.MM.YYYY") + "}}") %>
---

This, of course, doesn't work if the file is never rendered, and instead the files created by the upcoming-plugin will refer the filename of the note which is active when the command is issued. That means all notes created by it will contain the same contents.

As this is moreso an issue with my template, and not your plugin, I will be opening a discussion over in the templater-repo regarding this.

Bottom line: Seems to work flawlessly.
Only issue with this plugin I seem to have is that the settings don't seem to allow toggling this feature off:

A toggle "Create without opening notes" should be added to toggle this functionality, I think.

Addendum: I have potential other ideas how to resolve this if it cannot be fixed via a change in template, but that would be more work for you - which I wouldn't want to request if other options might be available - not to mention that you shouldn't feel obligated doing so anyways.

Sorry, I forgot to mention this release added a “Create upcoming notes” command instead of it being a setting. Have you tried running that action?

Thank you, that action does resolve this side of my project, and the scope of the original PR made by myself here. And now on to figuring out the templater-side of things :P

I have a short question for verification that came up during the second leg of this journey for me:
Is (this version of) the upcoming-plugin not capable of executing templater-syntax?
Because given the really basic daily note template:
---
banner: "https://www.nasa.gov/sites/default/files/thumbnails/image/simulated_bh.jpg"
banner_x: 0.5
banner_y: 0.42794
cssclass: clean-embeds
date:
---
file.title: <% tp.file.title %>

I get the same contents as output:
---
banner: "https://www.nasa.gov/sites/default/files/thumbnails/image/simulated_bh.jpg"
banner_x: 0.5
banner_y: 0.42794
cssclass: clean-embeds
date:
---
file.title: <% tp.file.title %>

I get the same output, aka tp.file.title does not get resolved if the daily note is created via the "Create upcoming notes"-cmd. It does however resolve when using "Open upcoming notes".
This seems most likely like a bug on the side of upcoming, however; or perhaps a weird interaction between the two plugins, especially because templater does get triggered via the other way as described above.

Do you have “Trigger Templater on new file creation” setting turned on for Templater? If so, it should work when you run “Create upcoming notes”.

Yes I do and no it doesn't.
More specifically, when creating via the command of upcoming, I get this issue from templater:

And even more frustratingly, that above message and bug I cannot reliably replicate. I will take more time for this.

However, I am experiencing a different bug, reliably across restarts and restarts of obsidian as of right now:
Today's date: 19.12.2022
I have the plugin set to create the next 6 days. This issue has been observed when creating 2+ days in advance.
Resulting filename - inserted content
20.12.2022 - 20.12.2022
21.12.2022 - 21.12.2022
22.12.2022 - 21.12.2022
23.12.2022 - 22.12.2022
24.12.2022 - 22.12.2022
25.12.2022 - templater: reached incursion limit (10) - this seems to me like all files are somehow issued as a single batch to templater, instead of on a per-file basis. Each daily note template has 3 1st-level calls to tp itself, so neither single call should be able to reach an incursion of 10.

Furthermore, files (visually) seem to populate from the last date to the first - 25th → 20th. This means that once the incursion limit is reached in 23.12.2022, the remaining dates 20.12.2022 - 22.12.2022 are not resolved.

And this is not even replicable in its exact state - which I only noticed while writing this up, so yea. A few more repetitions below.
Each time, the results map to the following dates:
20.12.2022
21.12.2022
22.12.2022
23.12.2022
24.12.2022
25.12.2022

The next attempt, I am repeating the same, only that in the same files I now get the contents of the
20th,
unresolved,
unresolved,
20th,
21st,
21st

The next attempt, this is the result
20th,
unresolved,
unresolved,
21st,
21st,
21st

The next attempt, this is the result
20th,
20th
unresolved,
21st,
21st
22nd

Bottom line: I have no idea how/why this is so random. if you want, I can provide you a copy of the template, folder paths and plugin settings if you want to take a closer look.

Additionally, none of this occurs if the notes are created via the calendar plugin. So I'd assume that there's some error in how the upcoming plugin dictates what date to feed to tp, and thus we get the mayhem above. Especially since the mapping seems kind of random - at least to me. I could automate a couple runs large scale over the next couple days, but I don't know if I will have the time for doing so.
All plugins refer to the same template.

I hope this is detailed enough, otherwhise I will happily provide more details and/or a demo-section of my vault - which will take a bit to create first, but it's doable.


add ability to export prompt data to text file

please add ability to export image metadata to a text file

export for all scanned files
export for selected files (optional)

the format could be plain text like invokeai does in invoke_log.txt
[Generated] "\invoke\outputs\001933.b74dc82b.2350011342.png": "professional illustration of dark room, mysterious (test tube glass green liquid)+ on the floor leaking
detailed, hdr, muted colors, art, pastel -s 25 -S<PHONE_NUMBER> -W 640 -H 768 -C 7.5 -A k_dpmpp_2_a

or some json format

That's a useful feature.  I'm sure others would like different formats depending on what tool they use.
Would it be dumped into a single text file?

it can prompt for a file name or gather into a single file, just start with anything and then watch for people's complains/praises :)
as for the formats, anything fits if it's easy to parse with a regexp

I would like this feature also. or just be able to mouse highlight the prompts in prompt tab and copy/paste into notepad.

please add ability to export image metadata to a text file

Why don't you just activate the option to save to a TXT file when generating images? 🤔

good question.  let me explain. i use dynamic prompts in auto1111 and make
like 3000 images with random prompts. i have in the past checked the box to
make the text file of ALL of the prompts.  But this became somewhat useless
because i would grade all 3000 png files for either "keep and make new
images from this exact prompt using different models/seeds" or else the
image would be in the "delete" file.  so now the huge list of 3000 prompts
doesn't mean so much.  I just want prompts of the images I put into the
"keep" folder.  Ideally I'd like a script that reads a folder on my
harddrive and makes a CSV file of every prompt in that folder (since those
are the random prompts I want to replicate since they gave an interesting
image in the first place). I have spent a great deal of time interrogating
chatgpt and I have a script that is about 90% there, but I can't figure
out/ find out on the internet what keyword in a png file is used to denote
the prompt.  I think it is "title" but I haven't had a chance to test it
yet.  So as I try to tackle this problem from several angles I wanted to
feature request the ability to mouse-lasso the prompts listed in the
program and copy paste.
On Thu, Sep 21, 2023 at 8:07 AM Woisek @.***> wrote:

please add ability to export image metadata to a text file
Why don't you just activate the option to save to a TXT file when
generating images? 🤔
—
Reply to this email directly, view it on GitHub
https://github.com/RupertAvery/DiffusionToolkit/issues/78#issuecomment-1729529887,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A3RW2ZQSXZ7IBYLCHD7RQJLX3Q3YHANCNFSM6AAAAAAXAFO4YU
.
You are receiving this because you commented.Message ID:
@.***>

I still don't quite get it, but if you sort the images already, where is the problem to move the txt files along with the image you keep?
Besides that, what you obviously need, is some external tool, and not something that A1111 should or could do. Once the image is generated (and no further processing is done), the job and purpose of A1111 is over.
The only thing that comes near your request, would be the image browser extension in A1111. But then you have to talk to AlUlkesh if this is even possible and he is willing to implement such a feature. I don't see how or why A1111 should take this task.
Another possibility would be a command line tool, that reads all PNGs in a folder and outputs the prompts into a text file. I'm not aware of such a tool, but that doesn't mean it doesn't exists already.
The only thing I could suggest here, would to get in touch with receyuki and ask him, if his SD Prompt Reader could be modified to batch extract prompts from images, either directly from the program itself or when used as a command line tool.

I just ended up brute-forcing the keyword for the prompt and made my own
python script.  it scrapes all the prompts off of all the png's in any
given folder with the photo name.  I could include all the other meta data
if i want since the csv file separated each category, making it easy to,
say, change all of the prompts by adding a new keyword, or manipulating
the  seeds  and it is all saved back to the same folder as a csv file,
ready to be copy/pasted back into auto1111 to make more variations with
those same good prompts.  thanks for your help.
On Thu, Sep 21, 2023 at 10:30 AM Woisek @.***> wrote:

I still don't quite get it, but if you sort the images already, where is
the problem to move the txt files along with the image you keep?
Besides that, what you obviously need, is some external tool, and not
something that A1111 should or could do. Once the image is generated (and
no further processing is done), the job and purpose of A1111 is over.
The only thing that comes near your request, would be the image browser
extension in A1111. But then you have to talk to AlUlkesh if this is even
possible and he is willing to implement such a feature. I don't see how or
why A1111 should take this task.
Another possibility would be a command line tool, that reads all PNGs in a
folder and outputs the prompts into a text file. I'm not aware of such a
tool, but that doesn't mean it doesn't exists already.
The only thing I could suggest here, would to get in touch with receyuki
and ask him, if his SD Prompt Reader could be modified to batch extract
prompts from images, either directly from the program itself or when used
as a command line tool.
—
Reply to this email directly, view it on GitHub
https://github.com/RupertAvery/DiffusionToolkit/issues/78#issuecomment-1729819267,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A3RW2ZSYDLKV6ZZ6P7PUPI3X3RMS5ANCNFSM6AAAAAAXAFO4YU
.
You are receiving this because you commented.Message ID:
@.***>


Pyautogui Documentation: 'space' hotkey not present in the list of keys given in the documentation

In the documentation given here- http://pyautogui.readthedocs.io/en/latest/keyboard.html#keyboard-keys , 'space' key is not mentioned.

The fourth option listed (right after '\r') is a space (' '). It doesn't explicitly say the word space, but I'm assuming it has the same functionality.

The keyword space was added for issue #85, and there's a proposed fix for the documentation in pull request #105.

Yes that's right! And there is already an issue on this, as mentioned by @glitchassassin .

Closed. Fixed in pull request #105


When there is an Image in the ListView, the value of controller.position.maxScrollExtent will change. Is this a bug?

For example, I build a ListView that contains 200 Text widgets. No matter where I scroll the list, the maxScrollExtent I get is the same, which is the same as expected.print maxScrollExtent:2639.0
code:
class _Test4State extends State<Test4> {
  ScrollController controller = ScrollController();
  List<Widget> list = List.generate(200, (index) {
    return Text('item  $index');
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('test'),
        elevation: 0.0,
        actions: <Widget>[
          IconButton(
              icon: Icon(Icons.room),
              onPressed: () {
                print('maxScrollExtent:${controller.position.maxScrollExtent}');
                controller.jumpTo(controller.position.maxScrollExtent);
              })
        ],
      ),
      body: Center(
        child: ListView(
          controller: controller,
          children: list.toList(),
        ),
      ),
    );
  }
}

However, when I insert one (or more) Image widgets in it, the value of maxScrollExtent will be problematic.
Change the above list to:
List<Widget> list = List.generate(200, (index) {
    if (index == 130) return Image.asset('assets/images/img.jpg');
    return Text('item  $index');
  });

Now when I get the value of maxScrollExtent in the first click, I got maxScrollExtent:2639.0, This is not the distance of max. The value of maxScrollExtent obtained by clicking the button again is maxScrollExtent:3009.4615384615386

I wild guess is this is due the elements being of various height. If Flutter doesn't render all items, it can only calculate the maxScrollExtent using the heights of the rendered (visible) items.
To investigate we would need a minimal runnable reproduction
as a single file so that we can just copy your code into lib/main.dart of a new project and run to reproduce.
Please also add the output of flutter doctor -v.

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  ScrollController controller = ScrollController();
  List<Widget> list = List.generate(200, (index) {
    if (index == 100) return Image.asset('assets/images/img.jpg');
    return Text('item  $index');
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
        elevation: 0.0,
      ),
      body: Center(
        child: ListView(
          controller: controller,
          children: list.toList(),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Text('print'),
        onPressed: () {
          print('maxScrollExtent:${controller.position.maxScrollExtent}');
          controller.jumpTo(controller.position.maxScrollExtent);
        },
      ),
    );
  }
}

Image, you may need to add one yourself.

[√] Flutter (Channel beta, v1.0.0, on Microsoft Windows [Version 10.0.17134.471], locale zh-CN)
    • Flutter version 1.0.0 at D:\flutter\flutter
    • Framework revision 5391447fae (2 weeks ago), 2018-11-29 19:41:26 -0800
    • Engine revision 7375a0f414
    • Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
    • Android SDK at C:\Users\55045\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
    • All Android licenses accepted.

[√] Android Studio (version 3.1)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 29.0.1
    • Dart plugin version 173.4700
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)

[√] Connected device (1 available)
    • vivo X6D • UOGUJFT4TCQ479JJ • android-arm64 • Android 5.1 (API 22)

• No issues found!

Same behavior with
class _MyHomePageState extends State<MyHomePage> {
  ScrollController controller = ScrollController();
  List<Widget> list = List.generate(200, (index) {
    if (index == 100) {
//      return Image.asset(
//          'packages/flutter_gallery_assets/food/butternut_squash_soup.png');
      return SizedBox(height: 250, child: Text('item sized $index'));
    }
    return Text('item  $index');
  });

So the list calculates the scroll extent from the height of the currently visible items and the length of the data. It doesn't know the height of the items outside the visible area because they are not rendered for performance reasons.
This is why #12319 is difficult to implement.
I'm going to close as duplicate.
Feel free to add a comment if you disagree to have it reopened.

Duplicate of #12319


Install in local system

Hai,
I want to install this in my local system(Linux). For that i download the file from this link http://bin.begriffs.com/dbapi/heroku/postgrest-<IP_ADDRESS>.tar.xz .
What are the next steps that is need to do for using this service.

Did you close this because you figured it out?

Ya. I think installation i complete successfully now. Did i need to do anything in postgresql for this connection?


Script editor: Rename 'Clone Down' to 'Duplicate Selection'

Fixes #36670.
Supersedes #47229.

Also renamed the relevant CodeEditor code to be consistent, CC @Paulb23.

Cherry-picked for 3.4.


Issues trying to launch rover.launch file

Hello,
after following the steps to install the driver and populating the rover.yaml file to the desired values for my ins (AsteRx-i D UAS) i reiceive the following errors when trying to launch using the launch command: roslaunch septentrio_gnss_driver rover.launch param_file_name:=rover.
[ERROR] [1651696982.905807212]: /septentrio_gnss: Invalid command just sent to the Rx! The Rx's response contains 40 bytes and reads:
$R? sga, MultiAntenna : Invalid command!
[ERROR] [1651696983.164258781]: /septentrio_gnss: Invalid command just sent to the Rx! The Rx's response contains 55 bytes and reads:
$R? sivl, VSM1, -0.348, 0.546, 0.711 : Invalid command!
[ERROR] [1651696983.288957650]: /septentrio_gnss: Invalid command just sent to the Rx! The Rx's response contains 33 bytes and reads:
$R? siih, auto : Invalid command!
Tried troubleshooting myself but am not sure what I am missing.  The AsteRx-i D UAS has an older firmware and does not support all new features like velocity aiding. Despite the error messages the driver should output valid data. Can you confirm this?
After a quick look into the firmware reference guide, I can confirm that the three errors you get are indeed not supported.

Newer receivers let you choose to use multi-antenna for heading aiding. As I read the guide, your receiver automatically uses multi-antenna if it has the appropriate permission. Just make sure to set the correct att_offset for the secondary antenna.
The AsteRx-i D UAS does not support velocity aiding, so no frame can be set.
siih corresponds to the parameter ins_initial_heading, it determines if the heading is initialized from GNSS or from a stored value. This is not supported by the AsteRx-i D UAS.

Hi @aFriendlyNoob,
the driver was developed with latest generation of Septentrio receivers. The AsteRx-i D UAS has an older firmware and does not support all new features like velocity aiding. Despite the error messages the driver should output valid data. Can you confirm this?
After a quick look into the firmware reference guide, I can confirm that the three errors you get are indeed not supported.

Newer receivers let you choose to use multi-antenna for heading aiding. As I read the guide, your receiver automatically uses multi-antenna if it has the appropriate permission. Just make sure to set the correct att_offset for the secondary antenna.
The AsteRx-i D UAS does not support velocity aiding, so no frame can be set.
siih corresponds to the parameter ins_initial_heading, it determines if the heading is initialized from GNSS or from a stored value. This is not supported by the AsteRx-i D UAS.

Thank you for the detailed response, after launching the rover launch file with

Hi @aFriendlyNoob,
the driver was developed with latest generation of Septentrio receivers. The AsteRx-i D UAS has an older firmware and does not support all new features like velocity aiding. Despite the error messages the driver should output valid data. Can you confirm this?
After a quick look into the firmware reference guide, I can confirm that the three errors you get are indeed not supported.
* Newer receivers let you choose to use multi-antenna for heading aiding. As I read the guide, your receiver automatically uses multi-antenna if it has the appropriate permission. Just make sure to set the correct att_offset for the secondary antenna.

* The AsteRx-i D UAS does not support velocity aiding, so no frame can be set.

* `siih` corresponds to the parameter `ins_initial_heading`, it determines if the heading is initialized from GNSS or from a stored value. This is not supported by the AsteRx-i D UAS.

Thank you for such a detailed response, the errors seemed to have been cleared after messing around with it a bit and it is outputting valid data but am failing to get it to output the orientation. Any ideas? I will attach my updated rover.yaml file.#  Then you can get the orientation from e.g. insnavgeod or in the imu topic. You also might want to use the position from insnavgeod instead of pvtgeodetic because the later only incoroporates GNSS.

whenever I run roslaunch septentrio_gnss_driver rover.launch param_file_name:=rover I get the following error
ERROR: cannot launch node of type [septentrio_gnss_driver/septentrio_gnss_driver_node]: Cannot locate node of type [septentrio_gnss_driver_node] in package [septentrio_gnss_driver]. Make sure file exists in package path and permission is set to executable (chmod +x)

Did you install it via ROS packages or did you build it from source? In the latter case, have you sourced setup.bash of your workspace (cf. README.md)?

I install it via ROS package as sudo apt install ros-noetic-septentrio-gnss-driver

Hm, that is weird. Are you able to run other ROS nodes? Can you please check if septentrio_gnss_driver shows up when you run rospack list and if septentrio_gnss_driver_node exists under /opt/ros/noetic/lib/septentrio_gnss_driver?


Update composer.json to use Larastan Org

Description
Starting with Larastan 2.7.0, the Larastan repository will now be managed under the Larastan organization.
Code style

[ ] composer cs command has been run.

Testing

[ ] Changes have been tested.

Documentation

[ ] Documentation is up-to-date.

Thanks!


61x kafka connect replicator plain kerberos rhel

Description
This PR updates the Kafka Connect Replicator Plain Kerberos RHEL scenario to properly run.  We needed to add additional properties for keystore and truststore passwords, remove rbac and ldap related properties as this scenario was introduced before RBAC support on replicator.
Fixes # (issue)
ansieng-985.
Type of change

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

How Has This Been Tested?
This Kafka Connect Replicator Plain Kerberos RHEL scenario  now completes and the verification produces and consumes data while it is transferred between clusters via replicator.
Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] Any dependent changes have been merged and published in downstream modules
[ ] Any variable changes have been validated to be backwards compatible

Really good catch!  Re: variable doc.

@nsharma-git looks like there were a few other variable changes from previous PR's which had also not been updated, so those are now in here as well.

@nsharma-git looks like there were a few other variable changes from previous PR's which had also not been updated, so those are now in here as well.

Thanks!

@nsharma-git this was built on 6.1.x, if we move it back to 6.0.x we end up with ALOT of changes that are not appropriate.  Will do a seperate PR for 6.0.x if you want this back ported there as well.

@nsharma-git just confirmed, we didn't add support for replicator until 6.1 thus this scenario doesn't exist in 6.0.x, thus we are fine to merge this up.


PrefixFree removes every base64 image in the css

PrefixFree removes every base64 image in the css?
If I use it, my page doesn't show the images.
See this: http://t.co/HjqOqIHw

Is it fixed now?

Yes! Thanks for the fix. It works like magic!


Stream reporters

For now reporters looks like this:
function(errors: {Errors[]}): {void}

These reporters are launched when validation is complete.
I believe we can make a better approach. Like in jshint, we can output errors as soon as we encounter them. If reporter support it.
I suggest alternative reporter interface:
interface Reporter {
    start(): {void}
    writeError(error: {ErrorInfo}): {void}
    finish(): {void}
}

Workflow:
reporter.start();
// on error found
reporter.writeError(error);
// and finally
reporter.finish();

And it is easy to wrap old-style reporters:
class NonStreamReporter {
    constructor(reporterFunc) { this._reporterFunc = reporterFunc; }
    start() { this._errors = []; }
    writeError(error) {
        this._errors.push(error);
    }
    finish() {
        // errorCollection = split by files(this._errors)
        this._reporterFunc(errorCollection);
    }
}

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/3353169-stream-reporters?utm_campaign=plugin&utm_content=tracker%2F281640&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F281640&utm_medium=issues&utm_source=github).

Do we want to close this for now?


LIHADOOP-18918: Dr. Elephant should support all play versions

Support for running activator
Rename jvm_props to jvm_args
Correction in README

+1 LGTM


Update rewrite to 1.0.0

Hi @zachdaniel
I have released a new version of rewrite and it comes with a bunch of breaking changes and a better handling of source formatting. I have also added a hook to keep the dot-formatter configuration in the project up to date.
This PR contains all the changes needed for igniter.
Have a nice weekend.

How cool, so this will automatically do the work I was doing manually?

Thank you very much for all of your amazing work on rewrite, BTW! It's on my list to do some writing to thank both you and Dorgan for the work that makes igniter possible ❤. On top of that, you even updated rewrite in a way that makes igniter better and simpler and you PRd the upgrade for us. Huge. Thank you 🙇


Problem: (Fix #163) Lack of CICD workflow

Solution: add github action cicd flow and fix vuepress config for /docs path

When I build with npm run docs:dev locally, the dropdown example seems broken?