Stencil operations

Opening this issue to discuss supporting stencil operations in Dask. Am interested to see a nice wrapper function or functions that do a reasonably good job at wrapping up common case stencil function APIs. Also should work for users interested in adding their own custom stencil operations. Just a few cases and relevant discussions are listed below. As suggested elsewhere by @mrocklin, these might benefit from using map_overlap for the implementation.
It may make more sense to hash this out after we have tried to handle a few cases. Then again a good wrapper could really open the door for a lot of cool operations in Dask or with Dask much faster.
cc @rabernat @mrocklin
xref: https://github.com/dask/dask/issues/2241
xref: https://github.com/dask/dask/issues/2147
xref: https://github.com/dask/dask/issues/2132#issuecomment-290107519

I'm glad to see an issue like this.  @jakirkham if you want to start the
conversation with thoughts or questions you have that might be best.
Otherwise this issue might be in danger of lingering here.
On Fri, Apr 21, 2017 at 3:57 PM, jakirkham<EMAIL_ADDRESS>wrote:

Opening this issue to discuss supporting stencil operations in Dask. Am
interested to see a nice wrapper function or functions that do a reasonably
good job at wrapping up common case stencil function APIs. Also should work
for users interested in adding their own custom stencil operations. Just a
few cases and relevant discussions are listed below. As suggested elsewhere
by @mrocklin https://github.com/mrocklin, these might benefit from
using map_overlap for the implementation.
It may make more sense to hash this out after we have tried to handle a
few cases. Then again a good wrapper could really open the door for a lot
of cool operations in Dask or with Dask much faster.
cc @rabernat https://github.com/rabernat @mrocklin
https://github.com/mrocklin
xref: #2241 https://github.com/dask/dask/issues/2241
xref: #2147 https://github.com/dask/dask/issues/2147
xref: #2132 (comment)
https://github.com/dask/dask/issues/2132#issuecomment-290107519
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/dask/dask/issues/2244, or mute the thread
https://github.com/notifications/unsubscribe-auth/AASszDy2Ew2cb2-LdpA9ZzU2CHSBqS3Sks5ryQoNgaJpZM4NEuCe
.

I opened this issue mainly because there were particular cases of this problem that I was trying to solve. Perhaps it was a bit premature to open this right now. I think it will be easier to determine an answer to the question raised here after we solve some specific use cases and gain some intuition.

OK.  If there aren't particular thoughts or questions then I'll go ahead and close this.  If you feel like starting the conversation again please do so, I would like to see progress on this topic.  I think that a good start to such a conversation would be a few options of things that we could try, or a description of the conversation so far and what issues and choices have arisen.

I guess I'm a bit confused. It seems like you were interested in seeing this issue opened. Why close it then? That said, I have no real complaints as it will probably sit for a bit.

Though I do have a small observation. One thing that I have encountered is often filters specify an origin that is used to store the result of the filter. Currently map_overlap or ghosting operations don't really have a way to factor this in directly. Though different origins seem to have an effect on how overlaps are determined.

If you're interested in starting conversation then that would be great.  At the moment what I see here is "here is a place for people to talk about stencil operations".  Instead I think that an issue would be better phrased as "Here is what we know about stencil operations in Dask: ...  It seems that we have the following options: ...  Given these objectives and constraints how should we proceed?"
As it is not clear to me how I or others can push this issue forward without doing the work of setting up the background and identifying the paths forward as suggested above.  I don't personally see value in having "a place to talk about stencil operations" without such context.  If someone does do the work to write out the background and sketch out some options they can create a github issue at any time.  Until then I wouldn't mind keeping things lean.
I see that you have done some of the background here by linking to other issues (thanks!) You also provide that we want to support common stencil operations as well as user defined stencil functions.  It would be really useful to outline what these are and what other cases might be.  You say that a few cases are listed below.  I suspect that this refers to the referenced issues.  For the benefit of readers here it might be good explicilty listing them here so that people don't have to dive through many other issues.  You say that performance might be an issue and that we might try to make it better; it might be helpful to say how it might be an issue and what in particular we should expect as bottlenecks and how we might address them.
Sorry to be a bit pedantic here.  As I said I'm in favor of better supporting stencil operations.  I think that I probably personally misinterpreted this issue as "hey, other people should think about stencil operations", which probably wasn't the intent.  I was probably a bit rushed at the time.

So probably how I should have responded instead is with questions:

What are common operations?  Are these common just for your application space or do you have a sense of what is common in other domains?
What are some ways in which users might want to define custom operations that we wouldn't want to include standard?
Are there existing APIs that we can copy to avoid creating new APIs?  This tends to involve a fair amount of maintenance.   Alternatively, should we consider this as a spinoff package?
What are the performance expectations and performance issues of stencil operations?

Thank you for your effort in bringing this up @jakirkham .  Hopefully we can impose on you a bit further.

Hello!
In my experience, the general use of stencils operations is to approximate a Laplacian operation, for example, you have a linear differential equation that represents some physical process: heat transmission, fluid dynamics, magneto-dynamics, etc, with a small enough grid, you can get  a good approximation of the dynamic behavior of the system.
Maybe I am not too creative, but I can't find another use for stencil operations, filter for example, are a convolution of a Laplacian operator over the grid.
Considering this, map_blocks and map_overlap together with array.ghost.ghost and array.ghost.trim are enough (again, this is only my opinion), programmer just have to specify a function (the laplacian operator). This function can come from another package or be hand-written (in general, they are short an simple functions).
My real concern with stencil operations in Dask is performance, consider the following code:
def local_stencil(block):
    block[1:-1,1:-1,1:-1] = ( block[1:-1,1:-1,1:-1] + block[0:-2,1:-1,1:-1] + block[2:,1:-1,1:-1] + block[1:-1,0:-2,1:-1] + block[1:-1,2:,1:-1] + block[1:-1,1:-1,0:-2] + block[1:-1,1:-1,2:]) / 7.0;
    return block

def stencil(grid, iterations, workers):
    g = grid.map_overlap(local_stencil, depth={0:1, 1:1, 2:1}, boundary={0:0, 1:255, 2:0})
    for iteration in range(iterations-1):
        g = g.map_overlap(local_stencil, depth={0:1, 1:1, 2:1}, boundary={0:0, 1:255, 2:0})
    return g

Every convolution of the laplacian operator over the grid represents a little time-step, to get to final the state of the system you have to apply the operator in a iterative fashion, the problem with doing this in Dask is that every call to array.ghost.map_overlap() or any other combination of functions available through array.ghost implies extending original array with boundaries, ghost cells, applying the given function to every chunk an then trimming boundaries and ghost cells again, this impose a unnecessary overheat, as shown in the figure bellow, dask version was bechmarked against a numpy version.

A more suitable workflow would be to extend original array with boundaries, ghosting, applying the given function and then ghosting again (exchanging neighboring cells), and at the end trimming boundaries and ghost cells.
I know that dask.array is not mutable, but chunks are simple numpy.array, so they are mutable and as far as I can see, this suggestion is implementable without changing a big portion of code. Actually, I tried the following:
In dask/array/ghost.py  I added a new function called new_map_overlap(), it is almost identical to original map_overlap(), but receives an extra key argumen: iterations, by default in 1, also it has a for loop that makes the "iterative convolution", in each iteration it calls ghost_internal() to exchange ghost cells.
def new_map_overlap(x, func, depth, boundary=None, trim=True, iterations=1, **kwargs):
    depth2 = coerce_depth(x.ndim, depth)
    boundary2 = coerce_boundary(x.ndim, boundary)

    g = ghost(x, depth=depth2, boundary=boundary2)
    for iteration in range(iterations):
        g = g.map_blocks(func, **kwargs)
        g = ghost_internal(g, depth2)
    if trim:
        g3 = add_dummy_padding(g, depth2, boundary2)
        return trim_internal(g3, depth2)
    else:
        return g

This code works awesome! Delivers the right answer in a sorter time than original map_overlap(). My hope was to present here some results, but my knowledge of dask internal implementation is not very wide and new_map_overlap() fails with more than 1 worker (I set number of workers with dask.set_options(pool=ThreadPool(num_of_workers)), so I had only tested this in a multithreading environment, not multiprocess, but it should work, I guess...)
So, if you think this is a good suggestion I would be happy to contribute and learning a little more about Dask.

Hi @gmocornejos thank you for the writeup and profiling.  I apologize for letting this linger for so long (I have been at conferences most of last month).
I agree with you that for laplacian-style operations we're likely to be heavily bound by memory-copies and stitching together of the current map_overlap operation.  I also agree with you that combining multiple iterations into a single task is probably the right way to amortize this cost.
It is important that tasks do not modify inputs in place (bad things can sometimes result if we do so), however we can always take inputs, create new copies, and then modify them extensively within our function.  This is where your suggestion of doing multiple iterations at once seems to come in.
So perhaps a map_overlap_iter function (or with some better name) could exist that took an interations= keyword as you suggest.  Presumably it would have to get a larger depth than the user requests.  Something like depth2 = depth * iterations.
Thoughts?

Hi!
Great! I think this little change will improve performance in some of my programs. About the function name, I think it is more related with API design, I don't have much experience in that field...
Sorry, maybe I don't understand all the depth2 = depth * iterations thing. As I understand, depth parameter means how many cells should be ghosted, why would it depend on iterations? I have the feeling that what is wrong with the code snipped above, a changed it a little:
def new_map_overlap(x, func, depth=1, boundary=None, trim=True, iterations=1, **kwargs):
    depth2 = coerce_depth(x.ndim, depth)
    boundary2 = coerce_boundary(x.ndim, boundary)

    g = boundaries(x, depth2, boundary2)
    g = ghost_internal(g, depth2)
    trim = dict((k, v * 2 if boundary2.get(k, 'none') != 'none' else 0)
                 for k, v in depth2.items())
    g = chunk.trim(g, trim)
    for iteration in range(iterations):
        g = g.map_blocks(func, **kwargs)
        g = ghost_internal(g, depth2)
    if trim:
        g2 = add_dummy_padding(g, depth2, boundary2)
        return trim_internal(g2, depth2)
    else:
        return g

It works as expected with one workers, but with more than one, it breaks.

ghost_internal  still does a few copies and is probably fairly expensive (depending on how cheap your per-chunk function is).  By ghosting a greater depth once you might then be able to map several times before having to ghost again.
I don't know why your computations are failing with multiple workers.  My guess is that you are operating on data in-place.

Not sure if this is related to the current discussion, but it would be really neat if Dask could fuse sequential map_overlap calls.
For instance it is not uncommon to say apply a few filters in sequence that may be of different kinds (e.g. a median filter and a Gaussian filter) on the same data. Morphological operators fall in this same category.
Chained filters (where A and B are some regular Python functions):
input -> map_overlap(A) -> map_overlap(B) -> output

Fused map_overlap calls (where AB is input block -> A -> B -> output block):
input -> map_overlap(AB) -> output

Could also see element-wise operators going through a similar fusion if they were inbetween map_overlap calls (e.g. type casting, scalar multiplication, etc.).
I'm not totally sure how we go about tackling this in the current framework, but expect it also applies if one wants to iteratively apply the same filter.

@jakirkham it sounds like you're talking about optimizations.  This page
may be of use to you: http://dask.pydata.org/en/latest/optimize.html
On Thu, Jun 8, 2017 at 6:46 PM, jakirkham<EMAIL_ADDRESS>wrote:

Not sure if this is related to the current discussion, but it would be
really neat if Dask could fuse sequential map_overlap calls.
For instance it is not uncommon to say apply a few filters in sequence
that may be of different kinds (e.g. a median filter and a Gaussian filter)
on the same data. Morphological operators fall in this same category.
Chained filters (where A and B are some regular Python functions):
input -> map_overlap(A) -> map_overlap(B) -> output
Fused map_overlap calls (where AB is input block -> A -> B -> output block
):
input -> map_overlap(AB) -> output
Could also see element-wise operators going through a similar fusion if
they were inbetween map_overlap calls (e.g. type casting, scalar
multiplication, etc.).
I'm not totally sure how we go about tackling this in the current
framework, but expect it also applies if one wants to iteratively apply the
same filter.
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/dask/dask/issues/2244#issuecomment-307247828, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AASszIejJsZQ7hdSxWebTVPAzV7mM_ryks5sCHm1gaJpZM4NEuCe
.

I took a look at the list and I'm not totally sure how to apply them to this problem yet. The trick is that map_overlap ends up adding a bunch of stuff to the graph, which could prove tricky to optimize (especially while avoiding creating new problems).
In general, I think we would be better off to keep the problem in a form nearly identical to the one diagrammed above. This makes any operations one would apply to the DAG quite straightforward. Also it would avoid mucking with things like getitem in the operations, which could have unforeseen consequences.
One solution might be to use a Lisp style quote. Would da.quote work here? How does one "unquote" in Dask? If we could handle these sorts of operations, we could do the optimization on the simple DAG and then unfold the map_overlap afterwards.
Alternatively I could see adding another function like map_overlap_quoted or similar that acts as a stand-in for map_overlap. Then one could do an optimization that consolidates the map_overlap_quoted instances. After consolidating the map_overlap_quoted calls, a rewrite rule could replace map_overlap_quoted with map_overlap (or possible evaluate map_overlap) creating the DAG.

Are there any updates on this? My use case is somewhat related to stencil operations. Essentially after one call of map_blocks, where the mapped function also writes to the overlapped regions, I need to also aggregate all results. The exact application are denoising algorithms similar to BM3D.
My idea how to implement this is the following:

Implement overlap_aggregate(x, func, depth) which applies func on all regions that overlap in the original array and also writes the result to x. Essentially accesses the boundaries of neighboring blocks akin to overlap_internal.
Implement overlap_update(x, depth) to copy the new x to the overlapping areas. This is essentially overlap without the trimming and adding the overlap to each chunk.

A complete stencil application would work like this
x_ov = overlap(x, depth, boundary)

for _ in range(niter):
    x_ov = map_blocks(x_ov, func, **kwargs)
    # this is specific to my use case and uneeded for simple stencil functions
    x_ov_aggr = overlap_aggregate(x_ov, func, depth)
    x_ov = overlap_update(x, depth)

# final result
x_res =  trim_overlap(x_ov, depth, boundary)

If nobody is working on this issue and there are no objections I would get started.

@gbaier, very cool use case.
@jni and I worked on something similar not too long ago for a connected components implementation, which might be a useful starting point for you. We perform our map_blocks step, find slices for overlapping regions, operate on those overlapping regions, aggregate the results, and perform a global update.

May also be worth engaging with the devito project, which uses Dask and is concerned with stencils.


feat: samples pipeline scripts

CircleCI Aqua Scanner Integration Example

Just updated the Readme file! Thanks @krol3


⚠ Paypal Email visible to non-admins

Describe the bug
I can see the Paypal email in the expenses of a Collective I am no admin of.
Expected behavior
Only Collective Admins should be able to see PayPal emails.
Screenshots
Why am I seeing this, I am no admin of this Collective

Desktop (please complete the following information):

OS: Mac
Browser: Firefox

Additional context
@stom79 donated to my project, and I to his. Other than that there are no connections between the two accounts, and there is no reason to leak the email address of any of us. I also noticed that I can see the email of users who submitted expenses to my collective on other collectives.

I inspected the behavior and it's working as intended in the code base.
If someone is a member of a collective that you're administrating, you have access to their personal informations like their email and their paypal email. This permission is granted everywhere and is not specific to a specific collective.
I understand the way it's surprising you but it's not a security hole, but more something that needs to be better explained or reconsidered in a new iteration.

Closing. Feel free to follow up in a new issue if needed.


FastAdapterDiffUtil documentation

please add documentation (either javadoc or in the readme file) for FastAdapterDiffUtil.
i don't really understand how to use it or what each method does.

Take a look at the sample code:
https://github.com/mikepenz/FastAdapter/blob/6ca81ab1d584b901d1102c3fd096dcf4fb9bb3d9/app/src/main/java/com/mikepenz/fastadapter/app/DiffUtilActivity.java
Feel free to add documentation for it (in the readme for example).

@FabianTerhorst the sample code doesn't really explain anything.
i cant write documentation for it because as the questions suggests, i don't really understood how it works and what each method does and what my possibilities are.

Most important part of the sample:
1.) It creates new data (background thread)
createData();

2.) It calculates the difference between the new and old data (background thread)
FastAdapterDiffUtil.calculateDiff(fastItemAdapter, simpleItems);

3.) It sets the difference record to the adapter (main thread)
FastAdapterDiffUtil.set(fastItemAdapter, result);

disposables.add(Single.fromCallable(new Callable<List<SimpleItem>>() {
            @Override
            public List<SimpleItem> call() throws Exception {
                return createData();
            }
        }).map(new Function<List<SimpleItem>, DiffUtil.DiffResult>() {
            @Override
            public DiffUtil.DiffResult apply(List<SimpleItem> simpleItems) throws Exception {
                return FastAdapterDiffUtil.calculateDiff(fastItemAdapter, simpleItems);
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<DiffUtil.DiffResult>() {
                    @Override
                    public void accept(DiffUtil.DiffResult result) throws Exception {
                        FastAdapterDiffUtil.set(fastItemAdapter, result);
                    }
                }));

So there are just two important methods, calculate and set.

@FabianTerhorst thanks for the reply

does calculateDiff() automatically run in background or is it because its wrapper inside the apply () method? i am not familiar with rxJava so i don't really understand those methods/callbacks in the sample activity.
it looks like set() automatically applies all the changes and there is nothing else i need to do. is that correct?
3, its not very clear what detectMoves does. please tell me if my assumption is correct or not:
lets say i have an array of 3 items and i switch between the first and last items and then call calculeDiff(). if detectMoves is false, the DiffResult  object will return as if nothing has changed? and if detectMoves is true it will return the changes? if this is correct, then what if i want to detect changes AND have a DiffCallback? there is no method that accepts both. does that mean that if i want to have a DiffCallback  i dont have a way of detecting moves?
if Set() is used to apply changes to the adapter, then what is the purpose of displatchUpdateTo()?
looking at ListUpdateCallback() i see that onInserted for example only tells me how many items have been inserted into int position... but what if i need to know which items were inserted? my use case is that the user can add an item to a list but that item is being represented only by its id, then i need to get that item from the server using the inserted id - so i need to know which items (which ids) have been inserted. how can i do that?

@or-dvir I have added javadoc. most things you see in the FastAdapterDiffUtil are simply convenient functions to make it easier to use the default DiffUtil provided by the appcompat support libraries.
Please see these docs for the different functionalities provided.

ok thanks @mikepenz


Change start page utm params

Change start page UTM params so we can more easily see the impact.

Please use a more explicit property name. Otherwise -whatever works

header_signup_link ?


Standardized file format for .emb files

Hello,
This project seems very promising. It would be great to use a standard format to allow more features built on .emb file declarations.
The Kaitai project, which could be seen as an heavier alternative, benefits of such approach. Multiple generic tool like the IDE are able to use the same definition files.
https://formats.kaitai.io/
https://ide.kaitai.io/
Thank you

I am not entirely certain what you mean.
If you mean a way for file explorer and protocol analyzer tools to use .emb files, I do have a plan for that.  The Emboss compiler is divided into a front end and (at the moment, only one) back end.  The front end does a lot of processing to the .emb (about 90% of the compiler is in the front end), and generates an "intermediate representation" (IR) in JSON format.  The back end reads the JSON IR and generates a C++ header file.
A protocol analyzer or similar tool would use the IR, not the uncooked .emb -- the .emb format is designed for humans to write somewhat easily, while the IR format is designed for computers to read.
I have not stabilized or documented the IR yet because I only have the C++ back end, and I am not confident that the IR is entirely suitable for other uses.  I plan to create a couple more back ends -- a protocol buffer "equivalent representation" back end (for Google reasons), a documentation generator back end, and at least one more language back end (probably Python, Rust, or Go), then document and IR and make it stable.
Other than that:
We do not have as many formats "out of the box" because Emboss has not been public as long as Kaitai Struct, and for various reasons I have not been able to release any internal Google-created formats.  I would certainly welcome any contributions!
I do have .emb syntax highlighting support for Vim, and it should be possible to set up syntax highlighting for other IDEs and tools.  There is also an autoformatter that is built on the exact same syntactic parser that the compiler front end uses, but the parser changes every time I add a new feature to the .emb file, so I do not have a plan to allow external tools to easily use it.

Thank you very much for this complete response. I was hoping for something like JSON support to eventually interface with some forensic software for file/disk analysis (nothing precise yet). The IR seems perfect, I will look forward to future Emboss versions.

@bitwiser73, if you want to give it a go it should be pretty straightforward to add JSON hooks in the IR.


Ignore outdated versions of module metadata <1.0

For module metadata version <1.0 we do not give any compatibility guarantees. So if we increase the version number, older versions should just be discarded. In the case of java libraries, the pom/ivy metadata should then be used instead.
For example, if we would increase the version now from 0.3 to 0.4, version 0.3 (and lower) should just be discarded instead of failing here.

This behavior has changed, Gradle will always try to parse the Gradle Module Metadata and check the version only if it fails to do so. This was done to improve support for compatibility.


Object type on metadata prevents getting values

When xMetadata is an object type, it prevents accessing properties in a type-safe way:

eslint recommends using Record<string, unknown> instead, based on this issue.

Here, I set it to {[key: string]: string} to be a little more restrictive and closer to how I've seen other metadatas used (i.e. Stripe's). Either works for my use case, curious to see what you guys think.

even stranger, it seems like update calls only work if the publicMetadata is a stringified JSON instead of an object:
> users.updateUser(id, { balance: 35});
< error long_message: '`public_metadata` must be a `json`.',

> users.updateUser(id, JSON.stringify({ balance: 35}));
< success

@dvargas92495 Thank you for raising this.
We opted for Record<string, unknown> because we can't assume the values will be strings.
All your concerns are addressed in this PR.
I'll add you as a reviewer.

Took a look at the PR, looks great! I'll close this one!


Use default state for status in process notification

Hi @paulcelie,
Thanks for the PR! Indeed we should check on the default state becasue that is as well in the front-end the only state you can select if you assign a state to a status. I will merge this PR.
Regards,
Rik
Adyen


Render methods should be marked deprecated

As indicated by the documentation, the render methods shouldn't be used anymore. When looking at the API I was confused about the difference between render and generate. Only recently did I see the note about render.

Prior to Asciidoctor 1.5.0, the term render was used in these method names instead of convert (i.e., render, renderFile, renderFiles and renderDirectory). AsciidoctorJ continues to support the old method names for backwards compatibility.

The API should annotate the render methods with @Deprecated and also provide the replacement as a @deprecated description in the Javadocs.

render() has been marked as deprecated.


add support for matching union options

This adds support to define options which would vary among concrete types in union.
For example:
const options = {
  item: {
    case: {
      KnownAccount: { template: knownAccountTemplate },
      UnknownAccount: { template: unknownAccountTemplate }
    }
  }
}

This is basically shorthand to write custom:
const options = {
  item: (value) => {
    const concreteAccountType = Account.dispatch(value);
    switch (concreteAccountType.meta.name) {
      case 'KnownAccount': {
        return { template: knownAccountTemplate }
      }
      case 'UnknownAccount': {
        return { template: knownAccountTemplate }
      }
    }
  }
}

If you approve this, I could write tests and additional documentation.
Please note, that this causes some unneeded renders of some of item (or props in case of Struct) components, because it will create new instance of item options object even if value didn't change. But this is the case as when options function is used (e.g. in my second example), so I think this PR does not add to this issue. Maybe some kind of memoization technique could solve both problems.

Hi @minedeljkovic,
Type names are not reliable (actually they are optional), I'd prefer something based on <union>.meta.types meta info and the good ol' === comparison:
// usage

const Account = t.union([KnownAccount, UnknownAccount], 'Account')

...

const options = {
  item: [ // one options object for each concrete type of the union
    {
      label: 'KnownAccount'
    },
    {
      label: 'UnknownAccount'
    }
  ]
}

// util.js

...

function getUnion(type) {
  if (type.meta.kind === 'union') {
    return type
  }
  return getUnion(type.meta.type)
}

function findIndex(arr, element) {
  for (let i = 0, len = arr.length; i < len; i++ ) {
    if (arr[i] === element) {
      return i
    }
  }
  return -1
}

export function getOptions(options, defaultOptions, value, type) {
  if (t.Nil.is(options)) {
    return defaultOptions
  }
  if (t.Function.is(options)) {
    return options(value)
  }
  if (t.Array.is(options) && containsUnion(type)) {
    const union = getUnion(type)
    const concreteType = union.dispatch(value)
    const index = findIndex(union.meta.types, concreteType)
    // recurse
    return getOptions(options[index], defaultOptions, value, concreteType)
  }
  return options
}

I see. I wanted to avoid iterating over collection of types, but that is probably not a big issue since there are usually only few types per union.
I would rather avoid positional mapping, because I thought it would be useful to optionally leave out some concrete types, and use options in root of item key as common for any of concrete types. Example:
const options = {
  item: {
    label: 'Awesome account', // applicable to any concrete type
    case: {
      // e.g. KnownAccount may be left out, since it there is no need to define specific option
      UnknownAccount: { template: unknownAccountTemplate }
    }
  }
}

Would something like this be ok (odd items would be types, even items would be options for last type)?
const options = {
  item: {
    label: 'Awesome account', // applicable to any concrete union type
    case: [
      KnownAccount, { template: knownAccountTemplate },
      UnknownAccount, { template: unknownAccountTemplate }
    ]
  }
}

I wanted to avoid iterating over collection of types, but that is probably not a big issue since there are usually only few types per union

Better reliable than fast. Moreover I agree with you, in general there will be few types, so will be also fast (in extreme use cases you can always implement your own solution like you did in the function example of your first comment or generating the array programmatically)

it would be useful to optionally leave out some concrete types

And better explicit than implicit. Just use null or undefined:
const options = {
  item: [
    null,
    {
      label: 'UnknownAccount'
    }
  ]
}

and use options in root of item key as common for any of concrete types

In general seems unlikely to share many options (maybe just the label?):
const options = {
  label: 'Awesome account' // <= a common label can be here instead
  item: [
    null,
    {
      template: unknownAccountTemplate
    }
  ]
}

Using positional mapping has some benefits:

reliable
explicit
easy to implement
easy to explain
if getOption can recurse you can handle pretty complicated use cases:

const U1 = t.union([A, B])
const FormType = t.union([C, D, U1])

const options = {
  item: [
    { ... },            // static options
    (value) => { ... }, // dynamic options
    [                   // sub union
      { ... },
      { ... }
    ]
  ]
}

In general seems unlikely to share many options (maybe just the label?):

I cannot say in general. Take for example UnknownAccount | KnownAccount example, where they share multiple fields, and you need to configure label for each of them. This would be shared options:
{
  fields: {
    field1: {
      label: 'Label 1'
    },
    field2: {
      label: 'Label 1'
    }
    // field3, field4... all other shared fields
  }
}

const options = {
  label: 'Awesome account' // <= a common label can be here instead
  item: [
    null,
    {
      template: unknownAccountTemplate
    }
  ]
}

I think this is not the same. Here label would be option of list as a whole, not of list item.
My second proposal was actually inspired by tcomb's match function. :) It is also some kind of pattern matching (limited to union types). I agree it is less easy to explain, but I beleive it has advantage of not having positional dependency. Plus it resolves shared options problem.
I beleive it would also support complicated use case:
const U1 = t.union([A, B])
const FormType = t.union([C, D, U1])

const options = {
  item: {
    case: [
      C, { ... },            // static options
      D, (value) => { ... }, // dynamic options
      U1, {
        case: [                   // sub union
          A, { ... },
          B, { ... }
        ]
      }
    ]
  }
}

I think this is not the same

You are right, they are not the same.

I beleive it would also support complicated use case:

Yes, but you must define the exact semantic. Will U1 inherit the options defined in the top level?

My second proposal was actually inspired by tcomb's match function.

Indeed, I'm not yet sure that match has a good API :|
I'll think about it again but I still prefer a low level API. Given a clear an simple API it's fairly easy to build your own DSL on top if really needed.

Yes, but you must define the exact semantic. Will U1 inherit the options defined in the top level?

I beleive it should. Options for A would inherit shared options of U1 and shared options of FormType.

I'll think about it again but I still prefer a low level API. Given a clear an simple API it's fairly easy to build your own DSL on top if really needed.

:+1:

Closing in favour of https://github.com/gcanti/tcomb-form/pull/334
As stated above I prefer to begin with a low level API and get feedback if a DSL on top if really needed


Want to add a new website for internships

@avinash201199 Kindly assign me this issue under hacktoberfest 2022

Want to contribute some changes in it


[ENH] Make types immutable under 3.10 again, or document that they won't be

This is related to https://github.com/cython/cython/issues/4200#issuecomment-854050697:

E.g quick search showed that cpython 3.10 uses it (Py_TPFLAGS_HEAPTYPE) to see if it should set Py_TPFLAGS_IMMUTABLETYPE (but also uses it other places):

That's possibly something we should fix. Although it's possibly not a huge moral problem whether types have mutable attributes or not - I don't think it's something that Cython has intentionally designed for, and it may well change with CYTHON_USE_TYPE_SPECS

Is your feature request related to a problem? Please describe.
I'm working on porting gevent to Python 3.10. gevent has python modules that support running in three ways: (1) pure Python on CPython; (2) pure Python on PyPy2 and PyPy3; and (3) compiled by Cython on CPython. I had at least some code that relied on the compiled-by-Cython case being immutable. This code started doing the wrong thing under Python 3.10 when compiled with Cython 3.0a9 and master. (Its possible there's more code like that too, I just haven't found it yet.)
I eventually realized that was the problem, and tracked down the mention of Py_TPFLAGS_IMMUTABLE in the Python change log, and the corresponding Python bug report. But by inspection, it didn't seem to apply to my code, because I'm using static types, not heap types. I was surprised to eventually figure out what Cython was doing and why my types weren't immutable as expected.
I can workaround this particular problem in a backwards compatible way, so I'm not blocked on this. But I figure if I was surprised, other projects might be surprised too.
Describe the solution you'd like
Ideally, I'd like my types to be immutable again under 3.10. The Python bug report lays out some reasons why that's good for built-in types, even heap types, and it prevents surprises or "gratuitous" behaviour differences when porting to 3.10.
Describe alternatives you've considered
I understand that types aren't guaranteed to be immutable if you opt in to CYTHON_USE_TYPE_SPECS, which is considered experimental. (But I don't do that and I don't want to support that.) However, I can understand if the Cython devs feel that's enough reason to make static types mutable in 3.10.
In that case, then may I suggest that this be clearly documented? Perhaps the Cython documentation could have a "Porting to Python 3.10" section that points out that all types will now be mutable?

For your specific case this seems like the right thing to do would be to use cython.compiled in Shadow.py:
class C:
   if not cython.compiled:
    def __new__(...):

rather than patching it at runtime (which looks like it needs some awkward PyPy special-casing too).

In general, it's probably the right thing to do to keep them immutable.

Thanks for the suggestion! gevent strives to keep its minimal requirements as small as possible and as such doesn't have a runtime dependency on Cython, just compile-time, so it's not clear that can actually work for us.

I managed to get the following to work on the current master branch: Which is pretty similar to your suggestion
try:
    import cython
    cython_compiled = cython.compiled
except ImportError:
    cython_compiled = False

if not cython_compiled:
    def f():  # doesn't appear in the compiled module
        pass

In general, it's probably the right thing to do to keep them immutable.

One counter-suggestion. I'm not completely convinced by this but I'm just suggesting it as an alternative:

Cython 0.29 should keep cdef classes immutable (for compatibility reasons)
Cython 3.0.x could make them mutable where possible (i.e. Python 3.10, or with CYTHON_USE_TYPE_SPECS or similar). On the basis that 3.0.x is trying to close a lot of the incompatibilities with Python, and making classes mutable fits with that broad direction.

If we did that it should obviously be documented.

FWIW, I've always viewed the fact that cdef classes are immutable as an advantage. I use them in core parts of the implementation where changes by unsuspecting users could be dangerous (for example, I can rely on certain things never running arbitrary Python code that might trigger greenlet switches and invalidate assumptions). I can always just compile a regular class if that's not a problem.
That said, aside from the migration issues, I don't feel that strongly either way.


Fix: ordered list number vertically centered in IE

This fixes an issue where the number inside the circle is not vertically centered in IE only. This also fixes the incorrect counter-reset issue in IE.
http://vjira2:8080/browse/BDS-286

@mikemai2awesome, what part of this PR fixes the counter reset issue?  Is it changing the name of the counter from list-item to li?

@mikemai2awesome, what part of this PR fixes the counter reset issue? Is it changing the name of the counter from list-item to li?

@remydenton I believe it has something to do with the dashes in the counter CSS property value (IE doesn't seem to like dashes in that)

The weird part is I didn't see anything about that.
Browser support seems pretty universal (https://caniuse.com/#feat=css-counters), and there are examples all over the place with dashes https://css-tricks.com/almanac/properties/c/counter-increment/
@mikemai2awesome, can you comment?

@remydenton Tested in IE and that was the fix.


Support displaying annotations in the editor

Currently comments that have been added to files/lines are viewable in the editor. It would be great if lint or codeql annotations were also available to be viewed in the same way.

It would be great if lint or codeql annotations were also available to be viewed in the same way.

Can you please explain what these are?

Hi, a good rundown of what I am thinking of is here: https://github.blog/2018-12-14-introducing-check-runs-and-annotations/
But for clarity it is the feature in github where a linter, test reporter, code coverage tool etc can attach an item (annotation) to a line in a file that can highlight a potential issue, defect or test failure.

@alexdima FYI - not sure who is the right owner here as it involves various editor features . Hence pinging you.


(REQUEST) Add bloom remover

I played in my server with sv_cheats 1 and with disabling bloom i get some fps

how do you remove bloom?

how do you remove bloom? (what convar)

mat_disable_bloom

here you go @Frouk3 #2010

Disabling postprocessing also disables bloom, doesn't it?

I do think so dan heh. But i made it standalone if he wants it.

mat_disable_bloom gives 5-10 fps but i don`t know how many fps gives in other pc


WMA - 04 - Fixed Apply View Widgets, Signin View Assets and Widgets , Navbar Items, Import Names.

Fixed Tabbar colors in Applys View.
Fixed icons in Signin with Accounts View using Asset Gen.
Fixed the names of some Items in the navbar using L10N.
Fixed some Import Names.

Fixed Tabbar colors in Applys View.
Fixed icons in Signin with Accounts View using Asset Gen.
Fixed the names of some Items in the navbar using L10N.
Fixed some Import Names.


Core functionality

Core functionality for the endaoments.
Once cleaned up this will be merged and redeployed.
More details to come.

Merging this for now. Will address comments and add tests in future pull requests.


Readme

Added basic instructions in order to integrate the plugins with neo-cli

I've done some changes, @erikzhang  could you please review it again?

Sometime ago I wrote this Readme, Ricardo.
Try to merge with your if you think it is useful.
What is it
A set of plugins that can be used inside the Neo core library.
How to use
Basic steps to follow:

Compile the neo-cli project as usual.
Compile the plugin you desire to use and copy its .dll to a folder called Plugins inside the neo-cli compiled release.

Create your personalized plugin
If you think that your plugin can not fit inside the already create set of Plugins, otherwise you can also create your specific class.

Firstly, we suggest you to go to Neo Core Plugins and add the basic template of your function there;
After that, find the specific spot of the Neo Blockchain that you want to add a specific functionality.

Make sure that the select file contains using Neo.Plugins;
Insert your plugin functionality after checking if the plugin exists                 foreach (IPolicyPlugin plugin in Plugin.Policies). IPolicyPlugin is the class that contain the function you want to invoke at that point, Policies is a set of plugins (TODO: check the objects that can be inside Policies);
For creating a specific class of plugins you should:

Edit the main Plugin center(https://github.com/neo-project/neo/blob/6f9208d2e96dda7dae3b5bca2e9ecccc69c03531/neo/Plugins/Plugin.cs) with your new class, as well as create a root template folder in Neo Core Plugins

Where are the changes?

Hello. Sorry, I did some confusion with another push (in neo-cli), I'm sorry for keep you guys waiting.
I added what you suggested @belane, but I don't know how these plugins work (I have some idea). Could you help with that?
@vncoelho Sorry, but I didn't understand how to create a plugin, so I left a "TODO". Maybe you can explain to me in Discord?

@erikzhang  Updated with the suggestions. I removed the plugin creation after a quick conversation with @vncoelho  in Discord.


Relationship field: Search causes error when minus (-) prefix used in defaultSort and/or sortOptions

Link to reproduction
https://github.com/BrianJM/payload-bug-minux-prefix-relationship-fields
Describe the Bug
defaultSort
When searching (typing) in a Relationship field that has a Collection with defaultSort prefixed with a minus -, the following error occurs:
QueryError: The following path cannot be queried: -name

From the docs:

Prefix the name of the field with a minus symbol ("-") to sort in descending order.

Example:
{
  fields: [
    {
      name: 'name',
      type: 'text',
      required: true,
    },
  ],
  slug: 'tags',
  defaultSort: '-name',
  admin: {
    useAsTitle: 'name',
    defaultColumns: ['name', 'createdAt'],
  },
}

sortOptions
When searching (typing) in a Relationship field that has sortOptions prefixed with a minus -, the following error occurs:
TypeError: Cannot destructure property 'operator' of '(0 , _sanitizeQueryValue.sanitizeQueryValue)(...)' as it is undefined.

From the (docs):

You can prefix the field name with a minus symbol ("-") to sort in descending order.

Example:
{
  name: 'category',
  type: 'relationship',
  relationTo: 'categories',
  admin: {
    sortOptions: '-updatedAt',
  }
},

To Reproduce

Fork the reproduction repository.
Run pnpm dev _community
Open the Admin URL: http://localhost:3000/admin
View an existing Post
Type test in the Category field. View the error in the UI and server console.

Type test in the Tag field. View the error in the UI and server console.

Payload Version
main, 2.11.1
Adapters and Plugins
db-mongodb

Should be fixed by #5964


.Net Client docs

Hi there, it would be great if you could add some docs to describe .Net clients, similar to the docs for JavaScript clients. The current documentation is very thin on support for .Net clients.

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

ID: 3cf283c9-5cd2-a9ff-b8c8-372d8a04356d
Version Independent ID: 729fddcf-24e4-b563-4952-a8045b231868
Content: ASP.NET Core SignalR JavaScript client
Content Source: aspnetcore/signalr/javascript-client.md
Service: aspnet-core
GitHub Login: @rachelappel
Microsoft Alias: rachelap

@hannesne Great timing! We're working on this right now, as there's a PR in process for it https://github.com/aspnet/Docs/pull/6200
Going to close this since it's almost published. Keep a lookout in the next few days for the doc.


Remove unused function from mnist example

While reading the example I couldn't find any use of the create_directory function so this PR proposes to remove it.

recheck


Route are not working says 404

a specific route or all the routes?

it should be fixed, updated to the last routing system, as soon as I have time I'll improve it

if closed feel free to close the issue


Resolve issues found during Cadence integration for Atree inlining and deduplication

I ran into some integration issues while updating onflow/cadence to use Atree PR #342 and #345.  We should:

[ ] Rename TypeInfo.ID() to TypeInfo.Identifier()
[ ] Change array encoding error type
[ ] Change map encoding error type
[ ] Add InlinedExtraData interface
[ ] Add ContainerStorable interface
[ ] Rename Encode to EncodeSlab
[ ] Encode inlined map as map key
[ ] Add test verification for compact map serialization
[ ] Add more tests for decoded array/map
[ ] Export EncodeStorableAsElement()
[ ] Add ContainerStorable.HasPointer()

More details will be in the PR that closes this issue.

This is closed by #353 and https://github.com/onflow/cadence/pull/2920.
For more info, see https://github.com/onflow/cadence/pull/2882.


Added gap between footer and faqs section

Problem
The FAQs page was touching the footer section, resulting in an unappealing layout with no space between the content and the footer. This layout issue affected readability and user experience.
Solution
To fix this, I added a bottom margin to the FAQs page, creating adequate spacing between the page content and the footer. This adjustment improves the visual structure and enhances readability.
Changes Made

Added a CSS margin to the bottom of the FAQs page.
Tested the changes to confirm consistent spacing across various screen sizes.

closes #319

I have successfully created the pull request. please merge it.


free resources when loading cert files

to address this issue: https://github.com/spotify/docker-client/issues/428

the build is failing due to a check for closing the resources which is kind of funny. question is whether you are ok with relaxing this check or whether you prefer me to change this to use the pre 7 finally block approach?
[INFO] BugInstance size is 1
[INFO] Error size is 0
[INFO] Total bugs: 1
[INFO] new com.spotify.docker.client.DockerCertificates(DockerCertificates$Builder) may fail to close stream [com.spotify.docker.client.DockerCertificates] At DockerCertificates.java:[line 91]
[INFO]

LGTM

tvm @mattnworb


Add Symfony 6 support

allowed symfony 6 in version constraints
removed legacy-folder from phpunit config
updated php-cs-fixer
added ci-config for php 8.1 and symfony 6.0.*

⚠ this also drops support for php 7.1 (php-cs-fixer 3.4 requires php ^7.2.5 || ^8.0)

Thank you Justus.


Main Page Examples are Broken

Description
This link
http://jsfiddle.net/gh/get/library/pure/fnndsc/ami/tree/master/lessons/00#run
Is on the main page and ends up with a error 422?
Live Demo
Its in master above.
Steps to Reproduce
Follow the link
Expected Results
Loader example in jsfiddle as in the past.
Browsers Affected

[X] All
[ ] Chrome
[ ] Firefox
[ ] Edge
[ ] Safari 9
[ ] Safari 8
[ ] IE 11

Versions

AMI: vX.X.X
THREEJS: vX.X.X

Thanks for reporting, I suspect that the ami.js build file provides some features that jsfiddle doesn't support. One thing that may fix it is change the babel targets in https://github.com/FNNDSC/ami/blob/dev/.babelrc
to be tested

With the 422 error, I have a  "Js wrap is invalid" message.
it seems that in demo.details js_wrap: onLoad is the problem ?
A possible solution : (?)
js_wrap: l

https://github.com/jsfiddle/jsfiddle-issues/issues/949
I don't know how to try it (without control on it) (and why would it stop working without any change... ?)

@PtiLuky the fix you suggested works, can you please submit a PR?

lessons 00 is ok now, but the other lessons start from 01 are still broken, 422 error, "Js wrap is invalid"

I can confirm, lesson 00 is working but the other still result in Js wrap is invalid error.
OS X 10.11.6, Firefox v61.0.1

Will be fixed soon, once #dev is merged into master.
Then we will just work on the master branch for a faster development process.


set graphite-to-zabbix.QueryResult back to 0

Could this alarm also be made a highest priority alarm per Chef-BACH #651 ?


Add Comments to Code

Applies to everyone: Code needs more comments to specify each section of the code

Comments added and detailed as well. Will add as more code is added/deleted. Closing issue.


Search bar fail if Virtual list created on popup

This is a (multiple allowed):

[x] bug

[ ] enhancement

[ ] feature-discussion (RFC)

Framework7 Version: 2.2.5

Platform and Target: IOS

Live Link or JSFiddle:  https://jsfiddle.net/mohshraim/op84wjje/1/

What you did
create a dynamic popup that contain a virtual list ;;; on open popup initialize the virtual list,, virtual list will created but search bar will fail..
Expected Behavior
search bar should work on popup with  virtual list??
Actual Behavior
search bar doesn't work on popup with  virtual list

Just add additional view-init class to the view in popup. It is required for page to initialize


feat: Data Gatherers

Data gatherers are kinda like questions but they are not asked. They are commands which runs to gather data. like suppose you wanted to get the user's git username you can run git config --get user.name :-
[gatherers]
id-of-gatherer = "git config --get user.name"

Before creating the template these commands will be run and there output will be saved. and u can use them just like questions

Sure! I'll assign it to you


Patch 1

sorry, my fault.

Well, why not... It was planned on our side at long time to rely only on GitHub CI.
But the GUI depends on a rare compiler.


Dictionary Portuguese Brazil

Hi,
I've a tested dictionary pt_BR, I would like to send it to jitsi server, how can I do this?
thank you

Currently all translations happen on http://translate.jitsi.org/ and changes got pushed to the repository from there.

@damencho I think he's talking about the spellchecker, not the translation. These dicts are downloaded from somewhere on jitsi.net/org on demand.

Exactly, we need to publish the file pt_BR.zip on http://dictionaries.jitsi.net/ like other dicts.
Then include in /jitsi/resources/config/spellcheck/parameters.xml the line:
<locale label="Portuguese (Brazil)" isoCode="pt,br" dictionaryUrl="http://dictionaries.jitsi.net/pt_BR.zip" flagIcon="br"/>

You can send it to me and I will upload it and add it.

I sent an email to you, can I do a pull request?

I've upload it and add it to the list of dictionaries, you can test it with build 5490 when it is ready.


Added CRYPTO test cases

Added test cases for detecting Bitcoin addresses. The CRYPTO detection algorithm unfortunately doesn't work on other currencies like Ethereum for example.

I previously watched only part of the video and have now seen that we had some more information to look at (adding context cases, checking context scores). I'll be heading back to sleep for the moment, but will address this in the morning today. Please feel free to take a look at the code as it is.
My context scores were a full 1.0, perhaps due to the unique nature of bitcoin addresses, but adding words like "my credit card number is..." or "my ethereum wallet is..." could affect the score.

Great work on the test cases! They cover a good range of Bitcoin address types and help confirm the CRYPTO detection accuracy. I agree about the Ethereum limitation. I think having that context noted here is useful. Overall, great work!


Fix memcache configuration in Swift to include all nodes in cluster

This will fix issue #1130

Can one of the admins verify this patch?

"ok to test" to accept this pull request for testing
"test this please" for a one time test run
"add to whitelist" to add the author to the whitelist

ok to test

ok to test

@j2sol @paulczar @dlundquist  Can we restart tests again so these changes can be merged?

retest

You may need to do an empty git commit --amend and force push to trigger another test attempt.

@j2sol That worked - thanks!


fix export for multi-language surveys

closes #13

Codecov Report

Merging #16 (e67244a) into main (39be96f) will increase coverage by 0.01%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main      #16      +/-   ##
==========================================
+ Coverage   93.69%   93.70%   +0.01%
==========================================
  Files           9        9
  Lines         523      524       +1
==========================================
+ Hits          490      491       +1
  Misses         33       33

Impacted Files
Coverage Δ

src/xml.jl
87.63% <100.00%> (+0.06%)
:arrow_up:

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


LifecycleTransformer lose type information?

Observable.just(1).compose(bindToLifecycle()).subscribe(/*int*/)
Single.just(1).compose(bindToLifecycle().forSingle()).subscribe(/*Object*/)

Is this behavior intended or a bug or a feature request?
Thank you,
Balazs

I feel like there's something missing from your sample. Either you're compiling with Java 8 (and the type information will propagate correctly) or you're compiling with Java 7 (and you need to explicitly cast the bindToLifecycle() call), like so:
Observable.just(1).compose(this.<Integer>bindToLifecycle()).subscribe(/*int*/)
Single.just(1).compose(this.<Integer>bindToLifecycle().forSingle()).subscribe(/*int*/)

In other words: If you were on Java 8, both would work. If you were on Java 7, neither would work.

Hi,
thank you for your answer. Unfortunatelly this is not the case, because when I only switch in the very same project between those line, and the result is different.
The explicit cast helps me at the Single case, but it is ugly.
Observable.just(1).compose(bindToLifecycle()).subscribe(new Action1<Integer>()
		{
			@Override
			public void call(Integer integer)
			{

			}
		});

Single.just(1).compose(bindToLifecycle().forSingle()).subscribe(new Action1<Integer>()
		{
			@Override
			public void call(Integer o)
			{

			}
		});

The second one cause a compiler error in a same file. I am using the latest AndroidStudio with pretty updated libs.
Can you double check?
Thank you,
Balazs

Hmm, I checked it out on Java 8 and you're right, it's not working there.
It may be a limitation of Java's type inference. I'll have to look deeper.

Thank you, I am waiting for your feedback!
Balazs

Just a warning, this is fairly low on my priority queue right now because A. I don't use Single that often myself and B. there's a clear workaround (using this.<Integer>).


WireGuard does not like my LAN

Oh wow it's been awhile since I had an issue. I tried to use WG at home but I'm having a problem.
Prerequisites

[ ] Can you reproduce?
[x] Are you running the latest version of SoftEtherVPN?

SoftEther version: [Latest compiled code]
Component: [Server,]
Operating system: [Linux]
Architecture: [Intel 64 bit]
[In case it's a computer with known specs, such as the Raspberry Pi, you can specify it omitting the details.]
Processor: [Intel Core 2 Duo]
Description
WireGuard does not work when using a external DHCP server such as on a SOHO Router.
Expected behavior:
WireGuard client connects and allows for communication on the LAN
Actual behavior:
WireGuard client connects, VPN Session is seen by SoftEther, Internet/LAN communication does not work.
Steps to reproduce

Set up SoftEtherVPN and configure a Hub to use the local network (bridge). Set up SoftEther related stuff.
Connect the client to the server. Check the current sessions and see that the WireGuard client is connected to the VPN Server
Try pinging a local device such as a printer or NAS, and get nothing. Try to connect to an internet site and get nothing.

Btw, The IP I use for the Interface Address is <IP_ADDRESS>/16 That is an available address in my home router's Subnet. Not sure if I need to configure that somewhere in SoftEther VPN Server.

Nvm I fixed it with 'SetStaticNetwork /GATEWAY:<IP_ADDRESS> /SUBNET:<IP_ADDRESS>' I think this needs to be documented somewhere xD. I just took a shot in the dark and it somehow worked.

Now that I got IPv4 working... How do I get IPv6 working?

Please create a new issue for the new question, and close this one.


lipa na mpesa

Failure.
Service request creation failed. Kindly try again
what issue is this? i place the otp but keeps on telling me this

let me try this


[ci] Use github.ref_name on pushes for sibling checkouts

@ani-sha can you double-check my logic here, the idea is that on pushes, this would make sure that we check out the sibling repository with the same branch name as in the core repository, i.e. main, 2.6, etc.
@jpechane if Anisha gives this the green light, we should backport this to 2.6.

@Naros Applied, thanks!


WIP Finalize dockercompose

Do not marge work in progress

How to import full DB for development

new instance with import full DB for devlopment

docker-compose -e INITIALIZE=yes  up
stop anyway container( to unlock the DB for delete )
e.g. docker container stop anyway_anyway_1_fa08861ba84b
copy the DB dump to the DB docker  container
e.g. docker cp ../anyway_dump/  anyway_db_1_6145697c0503:/tmp
login the the DB container
e.g. docker exec -it  anyway_db_1_6145697c0503   /bin/bash

delete the current Anyway DB
"dropdb -U  anyway anyway"
login to postgress DB
e.g. su postgres -c psq
create new empty Anyway DB  and define missing role
CREATE DATABASE anyway OWNER anyway;
CREATE ROLE anyway_redash WITH CREATEDB LOGIN SUPERUSER;
quit

import the the DB
su postgres -c “psql --set ON_ERROR_STOP=on anyway <  /tmp/anyway_dump”
exit the DB container
start anyway container
e.g.   docker container start anyway_anyway_1_fa08861ba84b

add support for docker persist volume


Add PubWise.io Analytics to Downloader

Addition of PubWise.io Analytics to downloader. Inserted alphabetically.

Any idea if this will go out with the next push of the site?

We'll include when the download page is updated - should be by EOW.

@mkendall07 great! Thanks!

@mkendall07 any update on when Version 24 (or beyond) will be on the downloader?


ring.com mailbox sensor keeps falling off of the lid

The tilt(?) sensor device keeps falling off of the mailbox' lid. To be fair, I do not know whether the mail delivery person(s) add some force so that the device gets peeled off, or if they scrape it off.
This has already happened a few times in the last 1 or 2 months. Every time this has happened I just put it back using the both-sides tapes that are already on the lid.

Added new both-side tapes, and this time I added duct take pieces as well. :crossed_fingers:


Simple testing: Try adding this project in your iOS app!

Before cutting our first release I'd love to see a couple people try it in their own apps!  This way any issues can be surfaced and the Readme can be polished up with real integration steps.
How can you help?

In your Podfile add:
pod 'GitYourFeedback', :git => 'https://github.com/gabek/GitYourFeedback'
or your Cartfile:
github "gabek/GitYourFeedback"

In your AppDelegate or some other place of your choice that sticks around for the lifetime of your app, add an instance of FeedbackManager using your GitHub Personal Access Token, your GitHub username, and the repo you'd like to create the issues in.  This user needs access to create issues in the repo specified.

var feedbackManager
func setupFeedbackManager() {
   feedbackManager = FeedbackManager(githubApiToken: "abc123", githubUser: "reesedewhat", repo: "gabek/MyReallyCoolProject", datasourceDelegate: self)
}

Implement FeedbackManagerDatasource's uploadUrl:completionHandler method to point to a valid Google Storage bucket.  This bucket needs access for you to read and write to.  It can look like this:

func uploadUrl(_ completionHandler: (String) -> Void) {
    let filename = String(Date().timeIntervalSince1970) + ".jpg"
    let url = "https://www.googleapis.com/upload/storage/v1/b/mybucketname.appspot.com/o?name=\(filename)"
    completionHandler(url)
}

Run your app and take a screenshot.  Verify the interface is displayed.  Fill out the form fields and save the issue.  Make a comment below with a link to your issue.

Just added it to some production software.  We'll see how it goes!

Heads up: The instructions above are now out of date.  I'll fix them up soon.


Add staticBinary linkType for Carthage dependency

When we try to use binary only framework with Carthage with Cartfile as below,  XcodeGen generate only "$(PROJECT_DIR)/Carthage/Build/iOS/Static" in FRAMEWORK_SEARCH_PATH.
Binary only framework in Carthage will download binary at "$(PROJECT_DIR)/Carthage/Build/iOS" so we need to distinguish these.
Cartfile
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAuthBinary.json"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseCrashlyticsBinary.json"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseDynamicLinksBinary.json"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseInAppMessagingBinary.json"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseMessagingBinary.json"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebasePerformanceBinary.json"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseRemoteConfigBinary.json"

project.yml (Before)
    dependencies:
      - carthage: FirebaseABTesting
        linkType: static
      - carthage: FirebaseAnalytics
        linkType: static
      - carthage: FirebaseAuth
        linkType: static
      - carthage: FirebaseCore
        linkType: static
      ...

project.yml (After)
    dependencies:
      - carthage: FirebaseABTesting
        linkType: staticBinary
      - carthage: FirebaseAnalytics
        linkType: staticBinary
      - carthage: FirebaseAuth
        linkType: staticBinary
      - carthage: FirebaseCore
        linkType: staticBinary
      ...

@brentleyjones Thank you for reviewed my PR and I've modified change log also.

@d-date There is a test failure: https://github.com/yonaskolb/XcodeGen/pull/847/checks?check_run_id=637043045#step:6:80

@brentleyjones I fixed test cases and CI has passed now.

Thanks again @d-date!

Hi @d-date. What was the issue you were running into exactly? When using such dependencies, you can set embed to false. Does that solve your issue?
dependencies:
      - carthage: FirebaseABTesting
         embed: false

I'm hesitant to overload the linkType term with the idea of a dependency being a binary. If anything we could maybe add a binary: true, which XcodeGen could potentially determine for you automatically? Thoughts? @brentleyjones?

I don’t like having to manually edit embed. Before we had explicit static support that worked, but ideally we have something else that sets the correct embed state.
I’m not married to this change, and binary: true does seem like a better orthogonal way to express this, especially since Carthage could choose to download them to a different location based on of it was a binary (they don’t currently).

@yonaskolb We have problem that  FRAMEWORK_SEARCH_PATH is wrong on linking statically.
In console you can see:
ld: framework not found

We have a workaround for this problem.
  framework: ./Carthage/iOS/Build/XXX.framework
  embed: false

This is originally solution before introduced linkType: on Carthage dependency.
However, this solution asks users to understand what framework should be embedded.
binary: true is better than linkType: staticBinary, and default value should be false and only worked in linkType: static.

only worked in linkType: static.
I think it should just not care about the link type then. Since regardless of link type a binary is always downloaded to the same location (same end result as what you are saying though).

@d-date Do you mind opening a PR to make this change?

@d-date, I'd like to make a release, but would like to get this fixed first. Do you know if you have time to make this update?

@yonaskolb Sorry for late but I'll take times to fix on this week. Thanks.

I'm reverting this change, so I can do a release. Feel free to open another PR @d-date! 😄👍

Thanks!


This is a leftover of the always_pass_authhandler that currently is only used in tests.

/test


Support ttlSecondsAfterFinished like Job

Codecov Report

Merging #81 (a982c37) into master (7ee4944) will increase coverage by 0.08%.
The diff coverage is 100.00%.

:exclamation: Current head a982c37 differs from pull request most recent head 0684517. Consider uploading reports for the commit 0684517 to get more accurate results

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the GitHub App Integration for your organization. Read more.
Additional details and impacted files
@@            Coverage Diff             @@
##           master      #81      +/-   ##
==========================================
+ Coverage   63.16%   63.25%   +0.08%
==========================================
  Files          15       15
  Lines        2905     2912       +7
==========================================
+ Hits         1835     1842       +7
  Misses        783      783
  Partials      287      287


Add build timeout

Fixes #254
Proposed Changes

Introduce build timeout under timeout
Default timeout is 10min.

/assign @pivotal-nader-ziada

@ImJasonH

Hmm, we should document that somewhere, that we effectively only enforce timeouts to a ~30s resolution.

I will submit PR for docs.

Maybe we should also Watch the pod, with a timeout? If we do that, do we need to worry about the controller job restarting while builds are ongoing, and losing state?

I did consider the idea of Watching the Pod with timeout but that would require huge refactor and I wanted to keep the scope small.
I can follow up with a POC PR to get some feedback on Watch. We can use callbacks map to track the Watch object for builds to avoid losing state. We need to be cautious of not resetting channel also.

/lgtm


🐛 [Bug report]: Wrong route being highlighted

Describe the bug
In this play, the wrong route is being highlighted even though the route being shown in the URL is not the same as the highlighted tab in the play.
To Reproduce
Steps to reproduce the behavior:

Select Breakfast tab
Then toggle between the three tabs in any random manner.
For ex, say you toggled the tabs in this way : breakfast -> dinner->lunch->breakfast->lunch->dinner->lunch
Now, when you hit the back button in the browser, the previous route was /dinner and this should highlight only the dinner tab in the app. But it highlights both lunch tab (wiz. the current route you were on before going back) and dinner tab ( wiz. the previous route) as well. This persists until the first route /:menu.
So, from whatever current tab you start going back from, it will stay highlighted till the end of routes for the app in the browser history.

Expected behavior
Only the correct tab as per the route being shown in the URL should be highlighted.
For ex: if the URL has /dinner as the route, only the dinner tab should be highlighted and all other tabs should stay in their unselected/non-highlighted state.
Screenshots

Desktop (please complete the following information):

OS: Windows 11
Browser: Edge
Version: Browser Version 102.0.1245.30

Additional context
Check the elements tab in the dev tools.
You can see that the active class is being applied to the lunch tab even if the route is /dinner. Infact, when you go to the same route i.e. /lunch , the active class is being applied twice on the NavLink.

@TejasShekar thank you brother for bringing it into light. I will work on it.

@Deepak8717 You're welcome. Also add a correct Github link that redirects directly to your play folder in react-play repo.

@TejasShekar , i did not understand. Care to explain ?

@TejasShekar , i did not understand. Care to explain ?

@TejasShekar thanks again.

Since this issue has been fixed with https://github.com/reactplay/react-play/pull/286, I am closing it.


SKPhotoBrowserOptions.displayCounterLabel is not working

I tried to use the SKPhotoBrowserOptions.displayCounterLabel option.
However It doesn't seem to work.
I think the option was deleted while refactoring.
Now, no codes refer to the option except for declaration.
I found that SKPhotoBrowserOptions.displayCounterLabel was deleted in this commit.
https://github.com/suzuki-0000/SKPhotoBrowser/commit/6564bee0a9f85000f57417e2b8904af6f1aabb88

Thanks for your report.
This is fixed at 5.0.7.


Disable selected date !

hey,
Is it possible to disable selected date in the picker , and how.
I got some date from database and i need to disable it  in the picker ?

Hi !
Did you take a look at this example ?

yup !
but it work for single date only ?
i need to disable multiple dates which stored from the database
if once the page loads i need to disable selected date from the picker
and somehow /selectable="ctrl.isSelectable(date, type)"/ have higher priority than others

hey ,
i got it ... in my try

I understand you achieved what you wanted to do ?

i need a page of information include a picker , bt some dates(previously selected) are do not selected by another page transaction ,
so the selected date are in the database. when the page loads date from the db will disable from the picker.

I don't think I've understood your problem @rohitbind. Which pages are you referring to? Can you please post a sample for your issue? Thanks.

fine . i got the solution thanks.

Good, happy to hear that! :)


Get user's online status

I have the following simple code:
UserWrapper wrapper = UserWrapper.initWithEntityId(firebaseId);
wrapper.metaOn();
wrapper.onlineOn();
wrapper.goOnline();
User user = wrapper.getModel();

Now I have access to the user's data (e.g. name, status, etc.). However, one key that is not included in the User core object, nor metadata, is online status. I assumed that I could use user.metaStringForKey(Keys.Online), or that there would be a getter like user.isOnline(), but the online key in Firebase (shown below) is not accessible anywhere in the User object.
Is this intended behavior? I could always use some ridiculous Date hacks on user.getLastOnline() and new Date(), but this seems to defeat the purpose of storing online in Firebase at all...

Hi @cireficc,
The online key isn't included in the meta data. You need to look at their availability:
model.getAvailability().equals(Availability.Available); // Online
model.getAvailability().equals(Availability.Unavailable); // Offline

@bensmiley thanks for the quick response. I do see how availability is processed after looking at ProfileFragment and AvailabilityHelper. However, I want to know when the user is actively using Chat SDK - that is, when the launch a ChatSDK-related activity, the online key appears in Firebase. I really prefer to have that data rather than availability.
Is it possible to access that data at all (maybe a feature request)? Or do I have to rely only on getAvailability()?

If you want to do this yourself, you could add the key to metadata. Just add a parameter when the chat opens and remove it when the chat closes. You could also use the onDisconnect method to undo this value when the user closes the app.

@bensmiley That seems like a reasonable solution. Thanks for your help!

@bensmiley Sorry but one last question. Is there a handler for when the chat opens/closes (i.e. LoginActivity or MainActivity are started/stopped)?

Currently there isn't but you could add one. You would need to fork the framework and add code like this:
NM.hook().executeHook(BaseHookHandler.ChatMainActivityStarted, null);
NM.hook().executeHook(BaseHookHandler.ChatMainActivityStopped, null);

You could then listen for the notification using:
        Hook authHook = new Hook(new Hook.Executor() {
            @Override
            public void execute(HashMap<String, Object> data) {
            }
        });

    NM.hook().addHook(authHook, BaseHookHandler.ChatMainActivityStarted);

Once that's done you could submit a pull request. If you did that today, I could probably have the framework updated by tomorrow.

@bensmiley I actually just hooked into application lifecycle events and checked to see if the user was authenticated with Firebase, then updated the metadata appropriately with:
NM.currentUser().setMetaString(Keys.Online, CHAT_STATUS_ONLINE);
NM.core().pushUser().subscribe();

which actually works better for my case, because I indeed wanted to track online in the app and not just inside a Chat SDK activity. Thank you for all of your advice and help!


chore(userconfigs): switch to go-api-schemas

To get updates by dependabot.

Closing this as the package has been damaged by invalid schema.

duplicates #327


No warning when mixing an HTML br element with Markdown

This usage is somewhat common:
column
one|column
two
:--|:--
a|b

Which obviously only works with this site configuration:
[markup.goldmark.renderer]
unsafe = true

But when the above is false I expected to see the "Raw HTML omitted..." warning introduced in v0.137.0.

OK, I guess my expectations are wrong. I guess this warning only applies to block level HTML elements. For example, this emits a warning:

one

But this does not:
one

It would nice if we emitted the warning whenever Goldmark replaces any HTML with the  comment.
So, changing this to a proposal.


is there ppo example by torchsharp?

is there ppo example by torchsharp?

@ChengYen-Tang WIP: PPO

@diybl
@ChengYen-Tang
Deel RL using TorchSharp for Deep Learning

FYI: @NiklasGustafsson
WIP: TorchSharp for Deep QLearning
https://github.com/xin-pu/DeepSharp/discussions/10

WIP: Deep RL using TorchSharp
mindmap
  root((Reinforcement
Learning))
    Definitions
      Interactions
          Environment
          Agent
      Elements
         State
         Action
         Strategy
策略
             Deterministic Policy
确定性策略
             Stochastic Policy
随机性策略
         State transfer probability
状态转移概率
         Rewards
即时奖励
      Others
        Episodes
        Trial
        Continuing Tasks
    Policy
      Policy based learning
      Value based learning
        Monte Carlo learning
             Temporal Difference Learning
                 SARSA
State Action Reward State Action
                 QLearning
        Dynamic programming learning
            Policy iteration algorithm
                Policy Evaluation
                Policy Improvement
            Value iteration algorithm
    Markov Decision Process
      Markov Decision Process
马尔科夫决策过程
           Trajectory
轨迹
      Markov Process
马尔科夫过程
   Objective Functions

@diybl
@ChengYen-Tang
@NiklasGustafsson <= dotnet team
@xin-pu
This is done => Now with WinForm UI and Winform Chat to monitor training progress
RL_Matrix => nuget Gym.NET using TorchSharp
@asieradzk
https://github.com/asieradzk/RL_Matrix/issues/1#issuecomment-1691274872

Yup. I'm hot on brining RL Matrix to Godot, particularly to flex on Unity's ML Agents.
Ideally I'd like to have at last: DDPG, Rainbow, Deep-MCTS (AlphaZero) on top of DQN and PPO
Please give me architecture advice on how you'd like environment/agent creation implemented, I am basing my current version on how matlab does it to allow easy swapping of agents/environments.

@asieradzk
Here, we only work on MIT FOSS license

@asieradzk
Here, we only work on MIT FOSS license

Thank you, great to hear. I will see about license change once I am done with Godot RL agents. Hopefully I find some time in the next weeks in-between working on my PhD.

@NiklasGustafsson
cc this issue

Related issue


High Vulnerabilities found -

When running npm install step, it reported  76 vulnerabilities (2 low, 69 moderate, 5 high). Is it normal ? I ran npm audit fix. The number and type of vulnerabilities remained same.
I went ahead with the deployment instructions but in step 14 (Deploy the b2c-crm-sync Application Code to Your Salesforce Org) , deployment fails :
npm run crm-sync:sf:org:deploy
....
-- deploying the base meta-data to the specified Salesforce Org; please standby
,----------------------------------------------------------------------.
|                                   |
|                                   |
|<PHONE_NUMBER>8                          88  |
| 88                              88  |
| 88                              88  |
| 88aaaaa   8b,dPPYba, 8b,dPPYba,  ,adPPYba,  8b,dPPYba, 88  |
| 88"“”"”   88P’  “Y8 88P’  “Y8 a8”   “8a 88P’  “Y8 88  |
| 88      88     88     8b    d8 88     “”  |
| 88      88     88     “8a,  ,a8" 88     aa  |
|<PHONE_NUMBER>8 88     88      “YbbdP”'  88     88  |  |                                   |  |                                   |  |           Oh no! Not one of these :(           |  |                                   |  |     It looks like you’ve run into an error or exception.     |  |            Please log an issue via            |  |  https://github.com/SalesforceCommerceCloud/b2c-crm-sync/issues.  |  |  That’s the best way to engage us. Thank you for your support!   |  |                                   |  ----------------------------------------------------------------------'
[
{
“stack”: “DeployFailed: Deploy failed.\n  at DeployResultFormatter.display (/Users/neeraj.jain/b2c-crm-sync-master/node_modules/@salesforce/plugin-source/lib/formatters/deployResultFormatter.js:61:19)\n  at Deploy.formatResult (/Users/neeraj.jain/b2c-crm-sync-master/node_modules/@salesforce/plugin-source/lib/commands/force/source/deploy.js:127:23)\n  at Deploy.run (/Users/neeraj.jain/b2c-crm-sync-master/node_modules/@salesforce/plugin-source/lib/commands/force/source/deploy.js:40:21)\n  at processTicksAndRejections (node:internal/process/task_queues:93:5)\n  at async Deploy._run (/Users/neeraj.jain/b2c-crm-sync-master/node_modules/@salesforce/command/lib/sfdxCommand.js:81:40)“,
“message”: “Deploy failed.“,
“name”: “DeployFailed”,
“exitCode”: 1,
“commandName”: “Deploy”,
“code”: “Error”
}
]
Thanks
Neeraj

It's a valid issue. Better to get high vulnerabilities fixed. All highs are related to glob-parent https://github.com/advisories/GHSA-896r-f27r-55mw. You can manually update the package-lock file for the glob-parent version and get rid of high vulnerability but it may end up in conflict or other dependencies issues. I tried but need to do the setup to test the build and deployment.

For the error (deployResultFormatter), Can you please check if your nodejs version is as per the recommendation?
Cheers

Hi @chandanrjit ,
The nodejs version is 15.2.1.  I reran the steps from beginning and again failed at the same step. The failure message is not helpful. I can run through the process with you if it helps in resolving the issue.
Thanks
Neeraj

@neeraj-jain01  let's connect to check this.

Hi @neeraj-jain01 , Let's connect on this. Cheers

Hi @chandanrjit ,
I am based in Melbourne, Australia. Current time is 1.30 AM. Let me know as to what time suits you ?
Thanks
Neeraj

Let's do it tomorrow (15th Jan around 14:00 PM AEDT).  google hangout<EMAIL_ADDRESS>

Hey @neeraj-jain01 , Let's do it tomorrow (15th Jan around 14:00 PM AEDT). google hangout<EMAIL_ADDRESS>

Hi @chandanrjit , I will be available from 2PM to 3.30 PM. Let us try to identify and resolve the issue.
Thanks
Neeraj

Hi @chandanrjit ,
I am available now.
Thanks
Neeraj

Hi @chandanrjit ,
It appears that you are busy elsewhere. I am signing off from Google Meet Session. Please let me know as to when you are avlbl this weekend or Monday.
Thanks
Neeraj

I missing your invite @neeraj-jain01 . Can you send the invite for tomorrow 6PM NZ time?

Hi @chandanrjit ,
Should I send the invite to<EMAIL_ADDRESS>or any other email address ?
Thanks
Neeraj

@chandanrjit , I have sent you an invite for 6 PM NZ time tomorrow. The link is provided below :
meet.google.com/sus-qaeb-hom
Thanks
Neeraj

https://prod.liveshare.vsengsaas.visualstudio.com/join?7B72E8443C4F5C36B3AF2160FA8CAD3B409E

Hi @chandanrjit ,
Seems you are busy today. I am signing off from Google Meet. Please let me know the time we can catch up and continue from where we left on Sunday.
Thanks
Neeraj

Hi @chandanrjit ,
Can we start back on this issue and deploy b2c CRM sync in my environment?
Thanks
Neeraj


Support universal wheels

I don't have anything against this, but could you explain what are the benefits and use cases for this?


Fixes #405: Add some spacing on the About view

Have added 12dp left and right margins.

Thank for writing a patch so quickly. I have no experience with the Android layout model. I hope you don't mind if I ask why the margins need to be added to the individual text blocks. Is it also possible to pad the whole view, or would that move other things around?

@tobias47n9e You are right. Giving the margin to the outer LinearLayout will give the same effect as adding margins to the TextViews. Have made this change.

I learned something about the Android layout model too. Thanks for updating the patch!


set default port to 5432 if creating a subscription with pg_tunnel mode

Summary of the changes / Why this improves CrateDB
Changes the default port to 5432 if creating a subscription with pg_tunnel mode
Checklist

[ ] Added an entry in CHANGES.txt for user facing changes
[ ] Updated documentation & sql_features table for user facing changes
[ ] Touched code is covered by tests
[ ] CLA is signed
[ ] This does not contain breaking changes, or if it does:

It is released within a major release
It is recorded in CHANGES.txt
It was marked as deprecated in an earlier release if possible
You've thought about the consequences and other components are adapted
(E.g. AdminUI)

retest this please


Update CLI extensions available doc

Update CLI extensions available doc.
Triggered by Azure/azure-cli-extensions - TRAVIS_BUILD_ID=403313433
https://github.com/Azure/azure-cli-extensions/commit/5a2c3eb7fd7010fbd34131df82fa8b6cfdce1d2a

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs-ref-conceptual/azure-cli-extensions-list.md
:white_check_mark:Succeeded
View (azure-cli-latest) View (azure-cli-2017-03-09-profile)

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Move Visual Testing tool from Percy to Happo

Just giving Happo a try for now
Changes

Moving the Visual Testing tool from Percy to Happo

Context

Closes #511
Tests

I've checked my work by:

[ ] Adding new tests or adjusting existing tests
[ ] Testing manually

I think that Happo isn't compatible with Cypress running in parallel. I'll have to check this again.

I think that Happo isn't compatible with Cypress running in parallel. I'll have to check this again.

I was wrong. It's doable, I'm updating this PR to make it compatible with parallel builds.

I'm trying to figure out what is causing that new error. 🕵♀

@trotzig Almost fixed! The 2nd job for Cypress failed: https://github.com/octoclairvoyant/octoclairvoyant-webapp/runs/4927813440?check_suite_focus=true
Error: Request to POST https://happo.io/api/async-reports/bd99089b804f2ed2a1daa398596d127de50e08bc/finalize failed: 404 - Async report not found for sha=bd99089b804f2ed2a1daa398596d127de50e08bc, nonce=1741998339-1
    at retries (/home/runner/work/octoclairvoyant-webapp/octoclairvoyant-webapp/node_modules/happo.io/build/makeRequest.js:87:17)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async finalizeAll (/home/runner/work/octoclairvoyant-webapp/octoclairvoyant-webapp/node_modules/happo-e2e/bin/happo-e2e.js:107:3)
    at async init (/home/runner/work/octoclairvoyant-webapp/octoclairvoyant-webapp/node_modules/happo-e2e/bin/happo-e2e.js:197:7) {
  statusCode: 404
}

Any idea what could cause that!

The finalize call needs to happen once only, after all parallel test runs have finished. Right now it's run with each individual percy run. I'm looking through github actions docs to see if I can figure out how to configure this.

I think you'll have to use needs for this:
https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds
I haven't set up parallel Cypress runs with Github Actions. With CircleCI, you use post_step which is built into the Cypress ORB I think: https://github.com/happo/happo-cypress/blob/c77ebdd664c4548503558c7e02f497ce90dfc61e/.circleci/config.yml#L83

Ooh I see. Didn't realize the finalize step should happen only once. Indeed, it should be possible in a separate job using needs property. I'll give it a try later.

It looks like you solved it -- nice!

@trotzig working now, thank you for your help!
@HonkingGoose I need to setup mobile sizes for the screenshots and this PR will be ready.

This is ready to go now!

@trotzig Safari iOS screenshots don't seem to be really accurate. Any idea what could cause that?

I'm having a look at this right now.

I'm assuming you're referring to the start/home page looking odd. Right now Happo runs ios safari 13.5, and this is what the home page looks like in Safari on such a device:

Compare that with the Happo screenshot:

It looks like there are two issues:
a) The image is missing
b) The top container is truncated
I'll investigate a) -- Happo should wait for the image to be ready before taking the screenshot.
For b) I noticed the container is a reverse column flexbox. There might be bugs around this in iOS Safari <v14.
It's on our roadmap to upgrade workers to iOS 15, but I can't say for sure when that will happen.

Indeed, I was referring to that page, but the comparator one looks strange too (no padding in the main container for example).
Ooh so it's an older Safari. That makes sense then, it doesn't support flexbox and we are not adding polyfills for it since it's officially not supported.
Thanks for taking a look at this. This is ok then, we will keep an eye on Happo updates to support modern Safari versions.

Apologies, it's iOS Safari 14.3 we're running, not 13.5. So it's old but not ancient. It definitely has flexbox support, but it looks like there was a bug at some point in relation to how the home page container/containers are laid out.
I decided to dig into this some more and found that the "fix" is quite simple. Just set flex-basis to some other value than 0px on this container:

This involves configuring chakra stacks and containers in some way. I played around with some different ways of doing it and ended up with a working fix -- just wrap some Stack children in StackItem. Here's a diff you can apply if you want to:
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index e7d51bd..f5df9eb 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -8,6 +8,7 @@ import {
   ListIcon,
   ListItem,
   Stack,
+  StackItem,
   VStack,
   Text,
   Container,
@@ -36,29 +37,32 @@ const MainSection = () => (
     direction={{ base: 'column-reverse', lg: 'row' }}
   >
     <Stack
-      shouldWrapChildren
       alignItems={{ base: 'center', lg: 'start' }}
       spacing="8"
       flexGrow={1}
       flexBasis={0}
     >
-      <Heading
-        as="h2"
-        color={{ base: 'gray.900' }}
-        fontSize="4xl"
-        fontWeight="black"
-        textAlign={{ base: 'center', lg: 'left' }}
-        letterSpacing="tight"
-      >
-        {BRIEF_DESCRIPTION}
-      </Heading>
-      <Flex py="6" justify="center" align="center">
-        <NextLink href="/comparator" passHref>
-          <Button as="a" variant="cta">
-            Try me now!
-          </Button>
-        </NextLink>
-      </Flex>
+      <StackItem>
+        <Heading
+          as="h2"
+          color={{ base: 'gray.900' }}
+          fontSize="4xl"
+          fontWeight="black"
+          textAlign={{ base: 'center', lg: 'left' }}
+          letterSpacing="tight"
+        >
+          {BRIEF_DESCRIPTION}
+        </Heading>
+      </StackItem>
+      <StackItem>
+        <Flex py="6" justify="center" align="center">
+          <NextLink href="/comparator" passHref>
+            <Button as="a" variant="cta">
+              Try me now!
+            </Button>
+          </NextLink>
+        </Flex>
+      </StackItem>
     </Stack>
     <Image
       priority

In the meantime, switch the target to a regular safari one with a smaller viewport. That's also running webkit, so there won't be much differences from running in a phone.

Is this a Chrakra UI bug, or something we're doing wrong?

@trotzig oh wow, thanks for the detailed investigation and explanation! Just knowing there was an issue with some unsupported flex property would have been enough, so I really appreciate it.
I'll switch to the regular safari then.

@HonkingGoose I'd say it's probably a webkit bug somewhere deep down. One could argue that it's a Chakra bug as well, since using the Stack component gives undesired results in earlier webkit versions.

I've replaced ios-safari with safari. This should be good to go now 🙏

📝 Changed routes:

/

(view full size)

Commit 1fa8f2127c4a1e863cbed3aff4d302207b4d5b88 (https://octoclairvoyant-webapp-4dyhieti1-octoclairvoyant-team.vercel.app).


Test pdw2pagermon.py on RPI image

Check pd2pagermon.py dependencies are installed on RPI image.
Traceback (most recent call last):   File "pdw2pagermon.py", line 18, in <module>     from clint.textui import puts, colored ImportError: No module named clint.textui

just need to import the Clint module
pip3 istall clint
https://pypi.org/project/clint/

I had it in there for making pager messages easy to read but is not needed. I can remove and re-do code to make it a "Standard fit"


Add a screen shot to the readme

Just a quick thought to add a screenshot in the readme to make it clear this is about graphical views of metrics

Some example screenshots using d3plus version 1:


Tools: Comment out default Fastmodels mount link

There is a default fast models mount link in the devcontainer which doesn't work out of the box and is there primarily as an example of how to set it up. This can cause the devcontainer to fail to load properly without errors. This commit comments out the link.

@pan @adbridge Why we don't check the GDB plugin only if we want to run in debug mode?  What if the user does not have access to the GDB plugin (
consciously) but simply wants to run applications?


GUI not opening

Describe the bug
When Pressing 'Right-Alt' the GUI doesn't appear
To Reproduce
Compile the source via universal installer and start the game via SPTAKI
Expected behavior
The console works but GUI doesn't appear

dupe of #509


Remove support for 1.8

Search the code base for any switches or conditionals supporting 1.8 and remove them.
Remove from travis.

Should we remove 1.9 support as well? By the time this gets out it will have been EOLed for a year: https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/
I vote yes.

I vote no, two version jumps would be a bad idea in my mind, especially as 1.9 is still (I believe) the vendored ruby for a LTS version of ubuntu..

If we were to do this right now I'd be :-1: on the removing of 1.9. We're not shipping 4.0 yet, and so I don't think it's meaningful to talk about what versions it will support. We should consult people on 1.9 as and when we're a few months out from shipping.

TL;DR - 1.8 and 1.9 don't compare. Dropping 1.8 is a major risk/pain. Dropping 1.9, 2.0 and even 2.1 is pretty much just a matter of how convenient it is for users to install a newer Ruby. And it's recommended too, anyway. RSpec is also a development tool, not a core server library - so it makes sense to have it running on the latest usable Ruby possible.
Just my 2 cents on this:
The shift from Ruby 1.8 to 1.9 is enormous. Meanwhile, going from 1.9 to even 2.3.1 is usually painless. So there's nothing indicative in the version number.
That's why I'm guessing that even today more people are going to be stuck with 1.8 than on 1.9 (because it's so much easier to upgrade, it's almost a no-brainer).
So dropping 1.8 is a big thing, though long overdue. The Ruby community doesn't deserve to keep supporting it as baggage, so it's a huge relief to drop it.
Meanwhile, 1.9 is basically 2.x with a misleading name. Dropping it would be as trivial as dropping 2.0.0 on a project that supports 2.1.
As of today, Ruby >= 2.2.5 is officially recommended, so even dropping 2.1 would just be a matter of convenience and nothing else much.
As for LTS support and related, I remember a post about Debian Jessie and backporting Ruby 2.2 to it.
The issue there is that there's too much recompiling and testing just for a "backport". The updates and whole operation would be too massive to qualify as a "backport".
The solution there is of course to build/download your own Ruby version and install gems so they build with the ABI for whatever Ruby you want.
With that said, RSpec is a special case, because it's the primary tool needed for upgrading. If you have an old Ruby 1.8 project, using the newest RSpec and transpec would definitely help get the specs updated sooner.
So RSpec is actually a tool to help drop support for older Rubies ;)
But, as a development tool, it's usually no big deal (in business sense) to stop running RSpec on an old Ruby to test the code of an old codebase. You can upgrade Ruby during development and upgrading the codebase, and then downgrade again to 1.9 by locking to an earlier RSpec.
RSpec 2.99 had awesome work put into it to make upgrading painless - and it works the other way too (downgrading).
So practically, dropping Ruby 1.9 would be no big deal. It's not like a 1.9 codebase needs to be tested by a test framework compatible with Ruby 1.9. Meanwhile, life is too precious to realize you've spent the last 3 hours debugging a Ruby 1.9 bug that will never be fixed.
I'd consider dropping support for everything up to Ruby 2.1 in 4.x. (The mistake they made with Debian Jessie is that they didn't switch to Ruby 2.2 before releasing, although they could have).

Not going to keep this open. There's no ongoing pain here, if it begins causing some we can talk about it again.


Style fix as requested

https://github.com/zeke/npm-hub/pull/7#issuecomment-222343707
I also made a change to simplify the style application. I would have used template literals but they're not supported in Safari 8
The 13px style matches the file list above the readme

I split up the commits to make them more readable

Looks great, @bfred-it! Thanks for the PR.
I published the changes to the Chrome store. Takes a while to propagate.