Signature binary function (e.g. comparison) design

There's a recurring need for more control over how we compare and/or merge signatures.
These often involve some logic on parameter objects (with their name, kind, and optionally default and annotation), order, etc.
We'd like to have a clean framework that enables the user to easily and correctly define these functions, reusing much of the common logic.
Examples:

comparison Boolean operators/functions such as:

sig1 == sig2: equality (more precisely "equivalence relation") of two signatures
sig1 <= sig2: comparison (more precisely "total order relation" as issubset, issubclass etc.)

operators/functions such as signature merging (sig1 + sig2)
function that gives a score or more complex information about how appropriate it is to feed the function with signature sig1 to an input value of function with signature sig2

Notes
Return type of a comparison
Must cases might just need a Boolean, like with x == y or x <= y (or issubset, issubclass, etc.).
But in some cases, such as with self-organizing code (or less crazily: validation scores), we'd like to have a numerical (or more generally, vectorial) score, or more generally, some "comparable" type that can be used to do things like "best match".
Use a key function or a binary comparison function as the specifier?
Might want to express comparisons based on key functions like builtin sorted, max etc. do. What are the pros/cons? It seems like a cleaner design enabling easier UX (and obviously, a big pro is the interface-consistency with familiar builtins). But, for example, is it complete? Are there things we cannot do with key functions that we can with the usual binary operator way (specifying comparison function via a two-element boolean function such as compare(x, y)).
For example, how would comparison scores be derived from key functions? Even if it's possible to "fit" any comparison function with vectorial key functions, would it be the most intuitive way of expressing it?
References

_validate_sanity_of_signature_change
Signature Compatibility section of signatures.py code

Related issues

Dag.ch_func and signature comparison
Enable code_to_dag to use wrapped function signature for the dag signature it produces, which could be a convenient interface for the user to get over the restrictive signature comparison when using code_to_dag. But that's only for code_to_dag. Still, the long issue has some reflections about signature comparison.
The right way to parametrize comparison operators, though the subject is about using operators to compare signatures, also has some relevant ideas.
Need a more powerful and clean signature merging functionality: Indeed, we encounter the signature comparison concern again when we do signature merging (union). There are useful pieces of code around the problem that one could collect to get a better idea of the problem.
Write a general parameters merging function: an older signature merging issue, possibly duplicate.
Revise, refactor and robust(ize) function normalization tools: Because signature comparison comes up in the situations described there.
Rethink what i2.Sig instances should do, or not do also contains some analysis around the subject of signature comparison
The "Binding changes when using ch_funcs" was perceived as a bug, but wasn't. The clarification points yet once more to the need of  proper signature comparison (and error messages for them).

Further notes
The definition of signature equality
Sig doesn't redefine it -- the builtin is used, which boils down to using the following (acts basically as a "key function"):
    def _hash_basis(self):
        params = tuple(param for param in self.parameters.values()
                             if param.kind != _KEYWORD_ONLY)

        kwo_params = {param.name: param for param in self.parameters.values()
                                        if param.kind == _KEYWORD_ONLY}

        return params, kwo_params, self.return_annotation

About the question: "Are there things we cannot do with key functions that we can with the usual binary operator way (specifying comparison function via a two-element boolean function such as compare(x, y))?", the answer should be "No" because of the existence of functools.cmp_to_key(func).
Transform an old-style comparison function to a key function. See the doc: doc for cmp_to_key
A comparison function is any callable that accepts two arguments, compares them, and returns a negative number for less-than, zero for equality, or a positive number for greater-than. A key function is a callable that accepts one argument and returns another value to be used as the sort key.

The code of cmp_to_key is nothing more than:
def cmp_to_key(mycmp):
    """Convert a cmp= function into a key= function"""
    class K(object):
        __slots__ = ['obj']
        def __init__(self, obj):
            self.obj = obj
        def __lt__(self, other):
            return mycmp(self.obj, other.obj) < 0
        def __gt__(self, other):
            return mycmp(self.obj, other.obj) > 0
        def __eq__(self, other):
            return mycmp(self.obj, other.obj) == 0
        def __le__(self, other):
            return mycmp(self.obj, other.obj) <= 0
        def __ge__(self, other):
            return mycmp(self.obj, other.obj) >= 0
        __hash__ = None
    return K

I'm not managing to come up with a design that I'm satisfied with.
I'll do some more work on this, but am thinking that, for now, I won't solve the issue as a mini-framework like I was hoping, but rather collect a few useful tools around the issue. (Perhaps, this is the right design I've been looking for.) Here are my thoughts about these.
At the very top level, some contexts will call for a signature binary function (SBF). That is, a Callable[[Signature, Signature], Any] (where; typing.Callable and inspect.Signature). The output is often a bool (example signatures_are_compatible) or a Signature (example, merge or bust). The first thing we could do for this issue is
Task: extract what ever logic is hardcoded in our code and percolate it to the surface (as a function's argument).
By doing this, we're keeping things as they are, while making them open-closed for this issue. A user can always change the behavior by making a different SBF.
From there, there's a temptation to go further, because we'll quickly realize that there's a lot of reuse potential when making these SBFs. I propose we don't go further (until the need calls for it), except perhaps documenting the problem patterns we see, and possibly making functions for these (but without trying to fit these in a framework).
Here are some problem patterns I see:
matching params
Essentially, adding a layer of information (or structuring, annotating) about the params of each of the signatures (and possibly the return_annotations). For example,

In strict equality, we assume the both have the same number of params and each pair is compared (in a strict sense) on the basis of their position in the list
A looser equality might perform this matching not based on position, but on name (this would be more convenient for meshed.DAGs for example, whose bindings are based on param names, but not (once the meshed.FuncNodes are initialized) on position
When merging two signatures (the way it is done now), matching is made on a name-basis and same-name params must be equal in the strictest sense (i.e. also equal in kind, default and annotation). But here, we can have non-matched params on both sides, which will then (as a separate concern) be incorporated in the final aggregate signature.

param binary functions
Several times in the above, we forwarded the problem down to the "pairs of params" level.
This means that there an implicit Callable[[Parameter, Parameter], Any] (param comparison, or more generally, param binary function) going on. The default one is usually strict: That is "values must be equal for each of the four inspect.Parameter attributes: .name, .kind, .annotation, .default. But here again, this strictness might be in the way of expressivity.
Here are some example situations:

We might not care about the kind because we're calling our functions with i2.call_forgivingly anyway, as in a DAG
When merging, we might decide that only cases where the two annotations or two defaults are non-empty (and conflicting) are problematic, because if only one of them is empty, our protocol is to take the value of the non-empty one.

param attribute binary functions
Most of the time, our param binary function will really be just an aggregate (e.g. all for Booleans, or sum for scores) of functions applied to each of the four attributes individually. Even here, when we said "equality", we differed to what ever that meant for each of the values of the attributes. There's definitely cases where we want to control that.
In fact, probably most of the time it will be through this definition (plus an aggregate function) that we'll define our param binary functions. Here are some examples:

When using types as annotations, do we really want to use equality? Might the issubclass be a better idea?
The "only two conflicting non-empties" case mentioned in the last section is really a concern at the param attribute level. Here we're saying, return True if any of the attributes are empty.
Only some pairs of kinds would be problematic if not equal.
In some cases, we might not need strict string equality for matching names, but "both members of a same synset (set of semantically equivalent words)" is enough

The following code (meant to be used as a factory that makes param binary functions through functool.partial) might do the trick for param binary functions through the definition of functions over their attributes:
from operator import eq

def param_binary_func(
    param1, param2, *, name=eq, kind=eq, default=eq, annotation=eq, aggreg=all
):
    aggreg all((
        name(param1.name, param2.name),
        kind(param1.kind, param2.kind),
        default(param1.default, param2.default),
        annotation(param1.annotation, param2.annotation),
    ))

Though "binary function" is more precisely indicates the generality we need here, I'm wondering if we should sinfully just call it "comparator" since

it's not an aggregate word like "binary function", so no need for underscore in variable names
it's a fairly known concept
often (but not always) our binary functions will indeed be comparators (or we can say that the object they return can themselves be endowed with order through a key function).

Any opinions?

Regarding using the parameter comparators to make signature comparators, one way is to do:
graph
    a(sig1) --> matcher
    b(sig2) --> matcher
    matcher --> matches(matches)
    matcher --> remainder(remainder)
    matches -- for each match --> param_comparator
    param_comparator -- collect --> comparison(comparison)
    comparison --> aggreg
    remainder --> aggreg
    aggreg --> output(final output or error)

Or something like that.
But, it could also be:
graph RecursiveWay
    sig1 --> cartesian_product
    sig2 --> cartesian_product
    cartesian_product -- for each pair --> param_comparator
    param_comparator --> comparisons_matrix(comparisons_matrix)
    comparisons_matrix --> reduction
    reduction --> result(result)

The latter is cleaner, but quite wasteful, and maybe harder to express some simple cases (our most common cases).


jvm crash logs in artifacts

we don't get that many JVM crashes, is I guess why this never progressed


Benchmark issue

So i scan with nscan for NTP with the imported Monlist script using the stable version.
Like this : ./nscan.py 0.range.0/0 -p123 --import=monlist:123 -n 2000 -o amp_ntp.txt --cooldown=10000,0.3
So i got my results in a text file but when i try to benchmark using saddam with pinject in the same folder like this : python Saddam.py benchmark -n ntp.txt
i get these errors:
Traceback (most recent call last):
File "Saddam.py", line 321, in
main()
File "Saddam.py", line 309, in main
Benchmark(ddos)
File "Saddam.py", line 163, in Benchmark
recvd, sent = ddos.GetAmpSize(proto, soldier)
File "Saddam.py", line 198, in GetAmpSize
sock.sendto(packet, (soldier, PORT[proto]))
socket.gaierror: [Errno -2] Name or service not known

Not sure about the format of your output
But the list may looks like:
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
.....
Few ip address for your test purpose(Still valid yesterday):
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
(Don't be evil)
Also:
a ip address with a opened port 123 ≠ a server with NTP&monlist service

As you can see i used
./nscan.py 0.range.0/0 -p123 --import=monlist:123 -n 2000 -o amp_ntp.txt --cooldown=10000,0.3
To get a big list of ip's with port 123 open running monlist.
So the problem could be that Nscan is not putting the results in the results.txt file correctly..?


[REQUEST] Mark as watched only after successful download

Please follow the guide below

You will be asked some questions and requested to provide some information, please read them carefully and answer honestly
Put an x into all the boxes [ ] relevant to your issue (like this: [x])
Use the Preview tab to see what your issue will actually look like

Make sure you are using the latest version: run youtube-dl --version and ensure your version is 2<IP_ADDRESS>. If it's not, read this FAQ entry and update. Issues with outdated version will be rejected.

[X] I've verified and I assure that I'm running youtube-dl 2<IP_ADDRESS>

Before submitting an issue make sure you have:

[X] At least skimmed through the README, most notably the FAQ and BUGS sections
[X] Searched the bugtracker for similar issues including closed ones

What is the purpose of your issue?

[ ] Bug report (encountered problems with youtube-dl)
[ ] Site support request (request for adding support for a new site)
[X] Feature request (request for a new functionality)
[ ] Question
[ ] Other

Currently, youtube-dl marks a youtube video as watched (assuming the flag is on) before starting the download. If the download fails halfway, the video remains marked, but not downloaded. I'd like to request the action of marking as watched to be moved to after the download&merge sucessfully completes. It's a minor annoyance, but it'd save me a bunch of double-checking every time I grab my watch later list.

Current behavior is expected. What you should use is --download-archive.

Except that that flag doesn't change anything about when the video gets marked as watched, so half-downloaded videos still show up as watched in my watch later.

Nothing wrong about that. Half-watched or even only opened in browser videos are similarly marked watched by Youtube itself.


modified eda script and upload dataset

upload dataset, where nyc acs and nyc evict geocoded data files are cleaned and joined
eda script variable names revised for better code readability

No conflicts with the base branch. Okay to merge.


It doesn't work with Supabase

Bug report
Describe the bug
Receive no changes from Supabase Database.
To Reproduce

Run the following code

SUPABASE_ID = <REDACTED>
API_KEY =  <REDACTED>

def callback1(payload):
    print("Callback 1: ", payload)

if __name__ == "__main__":
    URL = f"wss://{SUPABASE_ID}.supabase.co/realtime/v1/websocket?apikey={API_KEY}&vsn=1.0.0"
    s = Socket(URL)
    s.connect()

    channel_1 = s.set_channel("realtime:*")
    channel_1.join().on('*', callback1)
    s.listen()

Go edit tables on Supabase, add row, update row, etc.
Nothing happens

Expected behavior
See logs in the console
Callback 1: something

Screenshots

Sorry, it was my mistake to subscribe with ANON key. It works now with my service role key.


Game Scoreboard.html doesn't want to update

When I attempt to update the stream, it will only update the VS Screen HTML file, but the Game Scoreboard HTML file will freeze in OBS.

Tested:
- Deleting and re-adding Game Scoreboard.html from OBS Studio
- Quitting Melee Stream Tool and restarting it
- Both deleting Game Scoreboard.html and quitting MST, then adding back GS and opening MST (it works at first, but when I switch to VS Screen and then back, it doesn't work)

I use Pop OS 20.04

Hmm it's pretty weird that it works on once place but doesn't in the other html. Just to be clear, it works on startup but it stops working after switching scenes? Is Refresh browser when scene becomes active switched on in the source's settings?

After doing more testing just now, Game Scoreboard.html doesn't work period, even if I switch on Refresh browser when scene becomes active. The colors don't even show up now!

That's what happens when the browser source can't read Resources/Texts/ScoreboardInfo.json. It might be a permissions issue, but then again, you said the VS one worked.
It could also be the browser plugin your obs is using. Nowadays most OBS linux builds have official browser support, but not so long ago if you wanted to have a browser source you had to install a plugin. This plugin doesn't work like the official implementation, in this case when working with local files. To see if this is the actual issue, you would need to test it with a live server and use it's url path on the obs source to see if that works well. (you can do this easily, for example, opening the stream tool folder with VSCode and using a live server extension)

I don't think I'm using a browser plugin, since I've recently installed Pop OS on my computer, and consequently OBS Studio should be new enough to have had browser support baked in.
But I went ahead and tried using a live server extension and the Game Scoreboard works just fine.

So I think the issue does lie within OBS Studio, somewhere in there.

You can try opening obs with the parameter --remote-debugging-port=9222, then open localhost:9222 in your browser (info from here) and see what error is the scoreboard giving. It's really weird that it doesn't work on obs even with a live server.

I dunno what I'm supposed to be looking for, but the file doesn't appear to be giving any sort of error or output. For contrast, the VS Screen gave out 4 errors, and worked just fine.

On top of that, when trying to look at the HTML code through localhost:9222, it doesn't display any HTML whatsoever. On top of THAT, attempting to use the console when viewing Game Scoreboard.html gives nothing (I attempted to run console.log('test'); but my command disappeared without appearing on the console) while doing the same on VS Screen.html yielded "test".

Then I'm out of ideas. They don't give any problems to me on either Windows or Arch, I don't know where the problem is coming from.
Btw, could you test if the RoA Stream Tool version also has this problem? I plan to give the Melee one an update some day, it may be that this problem is fixed already with newer versions like the RoA one.

Umm, testing the RoA Stream Tool, its scoreboard seems to exhibit the same behavior as the Melee version (no characters/text in OBS, but works just fine in a live server), and the VS Screen updates just fine.

Looking when I use the remote debugging port, the Game Scoreboard for RoA exhibits the same behavior as that for Melee (no HTML, no response in the console). If you're saying that it works fine in Arch and Windows, then maybe it's an Ubuntu/Pop OS thing?

Yeah, I have no idea. The only thing I know its happening here is, the OBS browser cant for some reason read the ScoreboardInfo.json file. Why this is happening on just 1 of the 2, I don't know. Both use the same function to access files.

Ok, so after reinstalling Pop OS (don't ask, it's not important why), I tested using the Stream Tool and this time Game Scoreboard.html actually worked. I don't know what happened with my previous installation of Pop OS that disallowed it from reading ScoreboardInfo.json but whatever it is, it's fixed (even if reinstalling your operating system isn't exactly the most helpful solution to everyone). The only difference in between the two setups is that on this one, I installed the packages necessary for virtual camera output (which shouldn't affect how it reads data from a JSON file). The jury is out on what actually was the reason why it couldn't read ScoreboardInfo.json, though my only suspicion is that I did something that I shouldn't have and accidentally saved over an edit that made reading from that JSON file not work.


Assignment with templates

Hi,
I just tried creating a new classroom to experiment the new fork feature (been opting out last year). I next created an assigment with a template like I used to do. When my test student click the link, it joins the classroom like it should but I receive a 406 error when accepting the assignment. I don't remember the exact message but it was something like "teach need to edit assignment..". It seems that a fork repo has been created but the student can't access it and I can't delete this assignment anymore (errror 406).

Sounds very similar to the issue I just posted.
https://github.com/github/gh-classroom/issues/81

Sounds very similar to the issue I just posted.
#81

Definitely the same error message ! Seems to happen only with templates, though.


Nginx reverse proxy: different 'location'

Hello.
What must I do in order to use another location for my nginx proxy? I can only get it to work with /wetty, i.e. https://domain.xyz/wetty. For instance, I wanna use /ssh or something... I've tried some different nginx settings but always end out with "cannot get /ssh"
Any help appreciated, thanks.

Maybe rename the folder /wetty to /ssh and put /ssh in your nginx conf file.

Hi.
I also need that. I was able to use another location (example /ssh) with a rewrite but in that way I can access both on /wetty and /ssh. I think that it's NOT ok because you, as me, want to use only /ssh instead of /wetty

This is achievable using the ngx_http_subs_filter module. (I'm sure googling around a bit will point you in the right direction pretty quickly.) Even with an nginx-plus instance the module is packaged into the repositories so it's a fairly well used module.
I just tried @iz8mbw's use case of replacing /wetty with /ssh and it seems to work fine with the following configuration:
server {
  listen                 <IP_ADDRESS>:443 ssl http2;
  server_name            example.com;
  root                   /usr/share/nginx/html;
  location /ssh/ {
    subs_filter_types text/html application/javascript;
    subs_filter "/wetty/wetty.min.js" "/ssh/wetty.min.js";
    subs_filter "/wetty/socket.io" "/ssh/socket.io";
    proxy_redirect /wetty/ /ssh/;
    proxy_set_header Referer "$http_referer/wetty";
    proxy_pass http://<IP_ADDRESS>:3000/wetty/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_read_timeout 43200000;
  }
}

The important bits are:

subs_filter_types text/html application/javascript; - By default application/javascript won't be rewritten so you need to include this.

both the subs_filter directives. I tend to get pretty specific with my directives, but that's probably about as loose as you can leave them if you don't want to potentially see unwanted behaviour.

proxy_redirect /wetty/ /ssh/; is important as the node code running behind the nginx is expecting /wetty and will return responses that assume you have used /wetty. This seems to be related to if you are running the wetty service as root or not (I am running it as root so am using /bin/login not ssh for the connection.)

proxy_set_header Referer "$http_referer/wetty"; some of the code seems to look for the referer header and determine if wetty is in it or not. I just hacked over this by appending it to the end of whatever the incoming referer header is. Not sure how stable this is but it seems to work for me.

location /ssh/ { and proxy_pass http://<IP_ADDRESS>:3000/wetty/; the trailing slashes are important to make sure that nginx doesn't just append the /ssh onto the /wetty.

The output ended up looking something like this, which seems to be what you're after:

Hi all.
I'm experiencing issues trying to reach wetty under Nginx using rewrite rules.
How to manage rewrite? It seems that using the --base flag is not helping.
For example:
If I load the Nginx endpoint https://abc.xyz/my/custom/path (that Is rewrited to localhost:3000/wetty), it seems to resolve correctly the root page but all resources fail to load(stylesheet, socket.io connection etc...), because they are pointing to /wetty/ path.
Is there a way to manage this case?
Best regards and very very good work!


Added a note in step 6

Signed-off-by: Patrick Hession <patrick.hession>
Describe your changes in brief
Changes

Added a note to step 6 explaining how long this step can take
Explained that you can get the length of time the build took in this note too by using time command

How Has This Been Tested? (Optional)

VMWare Workstation 16 Pro

Signed-off-by: Patrick Hession<EMAIL_ADDRESS>


Styling title to custom headings instead of the default '###'

When we add the title input, we render that as H3 by prefixing ###.
when title = Coverage Report

Coverage Report

when title = 🧟  Coverage Report

🧟 Coverage Report

But I believe we can actually give this 'styling' control to the users who want Bigger or Smaller titles. If we do # or ## then we get the Horizontal line separator. This could be something that the users want. Or when they wanted to use an emoji in the title, but it's too small in the H3 styling.
when title = 🧟 Coverage Report

🧟 Coverage Report
🧟 Coverage Report
🧟 Coverage Report
🧟 Coverage Report

🧟 Coverage Report
🧟 Coverage Report
🧟 Coverage Report

So, if the title starts with # then let's not append the default ###.
Things to test:

Check if the update-comment works fine in this case
Also test if back-ticks works in the title well.

Back-Ticks works even in the current version. Only thing is we can't do

title: Coverage Report

instead it should be

title: 'Coverage Report'

We have to wrap the back-ticks within single-quotes


The Ultimate List Guide

Attention (CC)
@twblack88
@andytudhope
Summary of changes

Added a box around list link children to ensure 99.9% consistency

Motivation & Context

Issue #125

Types of changes

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Code style update (formatting, renaming)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] Documentation Update
[ ] Other (please describe):

Does this introduce a breaking change?
Breaking change is defined as "A fix or feature that would cause existing functionality to change."

[ ] Yes
[x] No

Checklist:

[x] My code follows the code style of this project.
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have added/changed necessary documentation (if appropriate)
[ ] All new and existing tests passed.

How Has This Been Tested?
Locally

Screenshots (if appropriate):

Further comments
Let's talk about Lists and Formatting
Lists are complex. They may seem overly complex, but there's a reason. The original design spec calls for content that goes in a heading and a sub-body with the added ability to show an arrow link at the end. This is complex because by design every component must work with every other component and no one wants to write MDX like this:
<ListContainer>

//This is one list element.
<ListElement hasLink hasArrow href="https//website.com">
<ListHeader> Dai </ListHeader>
<ListSubContent> Yadda yadda yadda yadda </ListSubContent>
</ListElement>

</ListContainer>

The carbon copy of this is:
<List>

- [https://website.com](Dai)
   - Yadda yadda yadda yadda

</List>

However this simplicity comes with a caveat.
You may have seen me talk about "Mind the Gap" and this is precisely what I mean.
Let's say we have a list component we write like this:
<List>
- <Link to="https://github.com/makerdao/dai-ui"> Dai UI </Link>
    - Components and React-based recipes for various themes

</List>

or this:
<List>
- <Link to="https://github.com/makerdao/dai-ui"> Dai UI </Link>
    - Components and React-based recipes for various themes
</List>

Your result will be:

Why?
You didn't put a new line at the top (and bottom) of the list. So Markdown rules treats the text itself, regardless of what you wrote, as individually unique children. ("-", "...", "- Components and React-based...")
The fix: Add a new line at the top (and bottom).
If you write something like this:
<List>

- <Link to="https://github.com/makerdao/dai-ui"> Dai UI </Link>
    - Components and React-based recipes for various themes
</List>

you will get:

Why: Because the way MDX converts the MD content into react/html fragments it has an issue with the fragment end. So it will render what you wrote. (Just like it renders code you write) But it will break.
The Fix: Add a new line at the end. Remember you're not just writing Markdown, you're writing code too.
If you write something like this:
<List>

- <Link to="https://github.com/makerdao/dai-ui"> Dai UI </Link>
    - Components and React-based recipes for various themes

</List>

you will get:

Why: Markdown sometimes recognizes your inner tabs as list elements of the list, sometimes it recognizes it as a direct child, and sometime it recognizes it as an LI. Because this is alll based on spaces and tabs, there's no getting around this. Markdown is picky.
The Fix: See the below examples, for consistency. Build a muscle memory to get better at formatting your MD.
If you write:
<List>

- <Link to="https://github.com/makerdao/dai-ui"> Dai UI </Link>
- Components and React-based recipes for various themes

</List>

you will get:

Why: The lack of spaces/tabs between the two list elements treat them as individual list element children. They will render as so.
The Answer
If you write:
<List>

- <Link to="https://github.com/makerdao/dai-ui"> Dai UI </Link>
Components and React-based recipes for various themes

</List>

or
<List>

- <Link to="https://github.com/makerdao/dai-ui"> Dai UI </Link>

    - Components and React-based recipes for various themes

</List>

or
<List>

- [Dai UI](https://github.com/makerdao/dai-ui)
    - Components and React-based recipes for various themes

</List>

you will get:

Why: This is the very specific case I've written for in the list component by leveraging "-" as a consistent character for recognizing that you want a list element with a header AND subcontent. You would think using a  component like the last code example would work, but gotta remember MDX is picky and they write the rules.
The Fix: These are the best practice ways of writing lists

I was literally just messing with lists, timely.

@all-contributors please add @MaximumCrash for code

@all-contributers add @MaximumCrash for design and example

@all-contributors add @MaximumCrash for design and example


Implement the OP_OF_FOUND_IN opcode.

This is a combination of "OP_OF" and "OP_FOUND_IN" that allows you to express
logic like "all of them in (0..100)".
This came out of the discussion in #1483 and likely makes part of that pull
request redundant.

@wxsBSD I think this ready to be merged, you can go head with the documentation.


How to get all documents with FT.SEARCH?

Hi, I can effectively search some documents with the Client.search(queryString) method. The result is a SearchResult object, with a totalResults property that correctly tells me the total number of results. How can I have all the documents, and not just the first ten or n, in the docs List of the SearchResult object? I would like not to use to use the limit(int, int) method, because I don't know how much results I have and I can't pick a maximum number.
Thank you.

Can you use Integer.MAX_VALUE for the limit?

I can't because apparently Redis imposes a limit of 1000000 results from Redis. For now I will use a constant set to 1000000, maybe it would cool to add a MAX_RESULTS constant to the library. Thanks for you help!


Big performance hit under undetermined circumstances

So, I've no idea what's actually going on yet but the performance discrepancy is huge for no apparent reason and I think should be investigated.
The requests are being performed against PhantomJS's WebDriver service for versions 1.9.2 and 2.0.1
At first I thought that it was a regression in PhantomJS, but the performance discrepancy seems to be occurring only when using Typhoeus.
Benchmark
require 'ap'
require 'net/http'
require 'typhoeus'
require 'childprocess'
require 'benchmark/ips'

EXECUTABLES = {
    '2.0.1' => '/bin/phantomjs.bak.2.0.1',
    '1.9.2' => '/bin/phantomjs'
}

AVAILABLE_PORTS = [
    9991,
    9992
]

def spawn_phantomjs( version )
    ChildProcess.posix_spawn = true

    # Clear output of previous attempt.
    output = ''
    port   = AVAILABLE_PORTS.pop

    process = ChildProcess.build(
        EXECUTABLES[version],
        "--webdriver=#{port}"
    )

    at_exit do
        process.stop
    end

    # @process.leader = true
    process.detach = true

    r, w = IO.pipe

    process.io.stderr = process.io.stdout = w
    process.io.stderr.sync = process.io.stdout.sync = true

    process.start

    # Wait for PhantomJS to initialize.
    while !output.include?( 'running on port' )
        begin
            output << r.readpartial( 8192 )
        # EOF or something, take a breather before retrying.
        rescue
            sleep 0.05
        end
    end

    {
        process: process,
        url:     URI.parse( "http://<IP_ADDRESS>:#{port}/status" )
    }
end

def assert_response( response )
    code = response.code.to_i
    fail "Got status code #{code}." if code != 200
    response
end

def request_net_http( webdriver_url )
    assert_response Net::HTTP.get_response( webdriver_url )
end

def request_typhoeus( webdriver_url )
    assert_response Typhoeus.get( webdriver_url.to_s )
end

v1_9_2 = spawn_phantomjs( '1.9.2' )
v2_0_1 = spawn_phantomjs( '2.0.1' )

# ap request_typhoeus( v1_9_2[:url] ).headers
# ap request_typhoeus( v2_0_1[:url] ).headers
#
# ap request_net_http( v1_9_2[:url] ).header
# ap request_net_http( v2_0_1[:url] ).header

Benchmark.ips do |x|
    x.report( '[Net::HTTP] 1.9.2' ) do |times|
        request_net_http v1_9_2[:url]
    end

    x.report( '[Typhoeus] 1.9.2' ) do |times|
        request_typhoeus v1_9_2[:url]
    end

    x.report( '[Net::HTTP] 2.0.1' ) do |times|
        request_net_http v2_0_1[:url]
    end

    x.report( '[Typhoeus] 2.0.1' ) do |times|
        request_typhoeus( v2_0_1[:url] )
    end
end

Results
Calculating -------------------------------------
   [Net::HTTP] 1.9.2    94.000  i/100ms
    [Typhoeus] 1.9.2   209.000  i/100ms
   [Net::HTTP] 2.0.1    94.000  i/100ms
    [Typhoeus] 2.0.1     2.000  i/100ms
-------------------------------------------------
   [Net::HTTP] 1.9.2     91.267k (± 8.1%) i/s -    451.764k
    [Typhoeus] 1.9.2    422.341k (± 8.1%) i/s -      2.082M
   [Net::HTTP] 2.0.1     87.531k (±10.4%) i/s -    430.520k
    [Typhoeus] 2.0.1     62.415  (±222.7%) i/s -    252.000

I revisited this and it turns out that the issue goes away if you specify forbid_reuse: true.


One to many connection

Getting error "Referencing column 'user_id' and referenced column 'id' in foreign key constraint 'FK5s53tythj7c44tr5tejj42kv' are incompatible." and
"alter table pictures add constraint FK5s53tythj7c44tr5tejj42kv foreign key (user_id) references users (id)" via JDBC Statement"

Fixed. Issue was that the foreign key column was users_id on the schema but user_id on the model. Changed schema to user_id


Add unsecure option to backend adaptor

Currently it expects kupogmios to be secure. It would be nice to add option to enable/disable secure connection to kupogmios for instances running in local machine/instances on VPN

@SeungheonOh you can specify the protocl explicitly http://localhost.
Only if http:// is omitted the wallet assumes https://.

Ah! that makes sense. Thank you.


Design of actions and metadata

Current issues that needs to be resolved.

The call to the REST api needs to be synchronous, whilst we will use a queue internally to queue up requests. We will need some kind of callback from the core when the action has completed.
Actions should be resolved by type

Movement
Aiming
Firing

var result = await battleService.EnqueueAndWaitForExecution(action);

There are a few actions in the game, for example

Move
GetVisual
Aim

and more...
They have some common properties

TimeToExecute - The amount of time they take to execute.
Action - The action that is carried out
Some data in
Some data out

From a games point of view, we could handle this with inheritance
public class ActionBase : IRobobobotAction
{
    public abstract TimeToExecute { get; }
    public virtual abstract ActionExecutionResult Execute() {};
}

public class MoveAction : ActionBase
{
    public MoveAction(Direction direction, Battle battle, Player player)
    {
    }

    public override ActionExecutionResult Execute()
    {
        // single threaded, modify anything goes here
        if (playerCanMove(direction))
        {
            player.location += direction;
        }

        var result = new MoveResult(player.location);

        result.PiggyBackState = battle.GetPiggyBackState(player.Token);

        return result;
    }
}

public abstract record ActionExecutionResult
{
    // The overall success or fail of the action execution
    bool Successful { get; set; }

    // The time it takes to execute the task
    int ExecutionTimeInMilliseconds { get; set; }

    // If any state needs to be returned to the player, it's added to this
    // list.
    public IEnumerable<State> PiggyBackedState { get; set; }
}

public record StateResult() : ActionExecutionResult;

public record MoveResult(Location newCoordinates) : ActionExecutionResult;

public record AimResult(int newHeading) : ActionExecutionResult;

Actions are created through an ActionProvider that takes local battle settings into consideration. An action is an instance of an action that has been or will be carried out. It's always bound to a Player and indirectly also to a Battle.
We might need some kind of ActionDescriptor that represents meta-data around an action.
public class ActionProvider : IActionProvider
{
    public Resolve<T>(string playerToken) where T : IActionBase, new()
    {
    }

   public ResolveDescriptor<T>(string playerToken = "", string battleToken = "") where T : IActionDescriptor
    {
        // the tokens are optional, if none are presented you will get the base descriptor.
        // If battleToken is provided, then you will get the descriptor with battle specific modifications.
        // If playerToken is provided, then you will get descriptor with battle + player modifications.
    }
}

Flow

The client calls the REST API
The action is created using the ActionProvider and enqueued in the BattleService, which returns the action for reference.
The server dequeues the actions on the next frame handling (game tick).

Done!


Endpoint support for pagination

Hi,
Please refer to my last comment added to Fetching Clips #25.  Would appreciate your thoughts on that.
So in the meantime, I've changed my implementation to yours as per your last update on this topic but I don't appear to be able paginate and retrieve the additional files.  Passing page 0, page 1, page 2 just returns the same list of files.
Am I doing something wrong...?
Thanks
Nutz

I've had another look at this...  found that I was setting up the URL separately to what was going on within the getVideos routine.  Made a small modification to getVideos that allows the passing of the page number and the URL is set accordingly (url: this.urls.video_url + "/page/" + pageNo).  Works for me.
Still would appreciate your thoughts on my comments to #25.

If there was a bug in getVideos that you've fixed, can you make a PR please? Re: session issue - looking into it

Hmm, can't find anything to be shared between two instances of the class. How do you re-authenticate a new user?

Hi, I only authenticate the once and capture the token that is returned.  This is passed as part of subsequent calls.  Is this a NodeJS session configuration thing...?

Yes understood.  Within my web application, I don’t switch user.  What could cause another user from accessing the shared data?  May be I’ve a global variable that is holding this data...?  Will check.  I may have to stick code up on Github so you can see what’s happening..?

If you could share the code it would be easier to debug. Otherwise it's really hard to understand what's wrong since you have your own auth flow.

Thanks for sharing the code. I don't see any issues unless of course you log in with the same credentials twice or both users have the same Blink account. I can't run the code myself right now, but I'll do it in a few days when I get back to my laptop.

I assume this can be marked as closed. lmk if not

Yes that’s fine thanks.  I wasn’t able to resolve... NodeJS knowledge a bit rusty.


fix: multiple commands loses history

Fixes a bug in the chat-console, where when running multiple commands the context file is lost.
To recreate
Highlight text, press F1, type /explain, then type /improve

maybe remove the first command from the model input


MPI Smart Default for Processes per Host

For the referenced line/section below, would it be reasonable to have a smart default here to consume all available GPU’s per host if executed inside SM job and the parameter isn’t supplied?
Would prevent user from having to translate p3.16xlarge to 8 GPU for instance, and modifying these parameters if changing instances.
https://github.com/aws/sagemaker-containers/blob/71bd1ce3da7a6c70c28736fd1b76303bbb8ed724/src/sagemaker_containers/_runner.py#L48

@canada4663,
Apologies, as I am not an expert with MPI.
However, this seems like a reasonable proposal. How should this value be handled if a GPU isn't being used? Would it be safe to use the number of CPUs?
Let me reach out to the team and see what they think.
Thanks!

+1 for this idea. It's easy to implement since sagemaker-containers exposes the SM_NUM_GPUS environmental variable.
It seems like 1 process per host is a decent default when doing CPU training. Also, I'm not sure if CPU training with Horovod is very common.

Let me write a PR. I'll have the value of this variable follow this order:

customer input
env.num_gpus
1

Whatever the customer defines as the value should override everything. If we detect GPUs we default to the number of them. Otherwise, we can assume the instance is CPU and we will default to 1.

PR: https://github.com/aws/sagemaker-containers/pull/204

While testing my image, it seems that the Python SDK defaults to 1 if one doesn't provide a value in the distributions in the constructor.
https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/estimator.py#L548
With this even if we do smart defaults it will go to 1.

Python SDK PR to get around the default on the client side: https://github.com/aws/sagemaker-python-sdk/pull/928

Great thanks!!!


Grammar enumeration script

Created a script to enumerate all possible codes that can be generated by BenchGen.
Also, removed the '_' token, since it is useless.

Looks good to me


openssl: 3.0.8 -> 3.1.0

Description of changes
update openssl from 3.0.8 into 3.1.0

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

#221206
Please don't update openssl,  If you don't know what you're doing.

sorry, i thought it was a simple upgrade just like the Robot did.


Problems with trailing slashes on the new docs path

For some reason, at some point after #1257, trailing slashes appear in the hrefs of links pointing to the new homepage at "/doc", but inconsistently as the effect is removed upon navigation.
This issue is to investigate and fix that.

From my investigation so far, it seems to be related to the sidebar which hasn't actually been completely decoupled from link logic. The normalized sidebar has the doc page as /doc/ despite everything else, even the internal Gatsby node, having no trailing slash.
This issue alone shouldn't be too hard to patch up quickly, but it indicates we're in need of a bigger fix to actually separate this sidebar or re-integrate it in a better way.


upgraded gradle plugin version and gradle version

upgraded gradle plugin version to 4.2.0-alpha14 and gradle version to 6.7-rc-4

@googlebot I signed it!

Thank you for the contribution but per the contributing guide all work happens on the latest dev_XXX branch where we've already started upgrading AGP/Gradle. This will be merged back to main when the next Compose alpha is released.


install not working

Server Environment:
Fedora Server 36 VM on Proxmox
Firewall disabled, SELINUX Disabled
Node 16.14.0
NPM 8.19.2
Client Environment:
Firefox 105.0.1
(https://weatherstar.netbymatt.com/ runs fine in this same browser)
Steps:

Install and setup fresh copy of fedora server with all updates.
Install git and node.js
pull repo, enter repo dir
install dependency node install package.json
run index.js node index.js
Open browser to http://weather-star:8080/
Enter location and click go

Problem:
Entering in any location and clicking go does nothing.
The display never refreshes and just remains at:
WeatherStar 4000+
Enter your location above to continue
I am not sure if I have installed correctly, maybe there is some dependency I am missing or maybe a config file setup I don't know about.  Or maybe its a bug. Not sure So this could be either a bug report or a request for a more detailed install guide.

This is due to a CORS issue:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find?text=REDACTED&magicKey=REDACTED&f=json. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 400.
I'm not up to speed on these problems so I don't have a resolution per se. But a very crude workaround is if you go to the URL you see in the dev console, you can paste that JSON response into https://github.com/netbymatt/ws4kp/blob/52efea0b6755573681a4d10ad91dc31d89c474f7/server/scripts/index.js#L177-L183
index 5a42116..56f3605 100644
--- a/server/scripts/index.js
+++ b/server/scripts/index.js
@@ -174,13 +174,16 @@ const index = (() => {
                if (overrides[suggestion.value]) {
                        doRedirectToGeometry(overrides[suggestion.value]);
                } else {
-                       const data = await utils.fetch.json('https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find', {
-                               data: {
-                                       text: suggestion.value,
-                                       magicKey: suggestion.data,
-                                       f: 'json',
-                               },
-                       });
+                       const data = {
+                               spatialReference: { wkid: REDACTED, latestWkid: REDACTED },
+                               locations: [{
+                                       name: 'REDACTED',
+                                       extent: {
+                                               xmin: REDACTED, ymin: REDACTED, xmax: REDACTED, ymax: REDACTED,
+                                       },
+                                       feature: { geometry: { x: REDACTED, y: REDACTED }, attributes: { Score: 100, Addr_Type: 'Postal' } },
+                               }],
+                       };

                        const loc = data.locations[0];
                        if (loc) {

I think this would be fixed if SSL was enabled.  Is it possible to enable ssl with node?

I think there are two separate issues to deal with here.

geocode.arcgis.com appears to have dropped http-only support. I'm using a fetch routine that matches the protocol for the fetch to the pages protocol. This means that https is reduced to http for this call and then fails with a http 400 error. I can work on this issue.
You may be causing a CORS error by naming your server weather-star. I would have to dig into this further but I thought localhost allows for some special considerations around CORS and https for the purposes of local debugging. Can you try running it as localhost and see if the cors error becomes a http 400 error?

@gtxaspec Yes, you can use SSL with node. But it becomes messy because you have to create a self-signed certificate and then install that certificate in your browser. You can find npm packages and plenty of tutorials on how to accomplish this. But it's my goal to have this run locally without any special workarounds.


[PostProcessScene] is not intended to be used outside the editor (and sometimes can't be)

The April changes break compilation on some platforms (such as standalone windows) when building the application, instead of just running in the editor.  The entire UnityEditor package is not included in an actual executable, and can't be used in non-editor scripts.

Ok. Looking into this and possibly reverting that change. I'm considering making 1 editor script.

ios build failed too

Reverted the master. Thanks for the reports guys.


Draw tools in two contrasting colors

After annotating some images with areas of near white, I noticed the default non-active color for annotations is also white, so they completely disappear when overlying white areas. This is particularly a problem when an arrowhead or measurement overlies a white area.
Using a non-grayscale default color like red could work for most cases, but probably the best solution would be to draw all annotations with a contrasting "shadow". Not sure how you would prefer to architect this as each tool handles drawing on its own. Perhaps simply a custom function to handle line drawing that references a tool config to decide whether to draw the shadow?

Shadows are available for several tools (e.g. length, angle) but haven't been added to all of them yet. I do think it's useful though so we will probably make some global options for it.

That sounds reasonable to have a global option for tools. I haven't checked out the shadow option for those tools though so I'll see what that API looks like currently. Thanks!

I made a global setting for tool shadow and added it to all imageTools. I also mixed all tool settings (textStyle, toolColor) to toolStyle object since I think it is more convinient and it's easier to set the whole style for a tool. Please look https://github.com/0xym0/cornerstoneTools/commit/2b7385a127219aadbe226f1d9e6a6037b32984f0


Export c++ headers in CMake installation.

Closes #4894. Closes #4893.
Some notes:

This doesn't mean we have a c++ API,  they are just headers.
Unlike c API, which is well abstracted.  Those c++ headers have dmlc dependency.  User needs to link and include dmlc manually.
There are forward declarations in headers.  That means there are things one cannot do even with the headers.
On the other hand, this PR cleans up many header include paths, it's been a headache for quite a long time now.  Since we will have to do the refactoring anyway, doing it earlier so we can avoid adding more git history to those moved files.

All in all, these headers don't form an API and might only be accessible to to someone who code for fun, like @codingforfun ;-).  But never the less it's a first step.  Thanks @hcho3 @codingforfun

I really need to find time to stabilize tests...

Also, we should put a warning about possibility of future change in the C++ headers.

Or try to reduce the memory usage in hist :-), I think there are plenty of room for that.
Yep, will add a short note in doc.

Codecov Report

Merging #4897 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #4897   +/-   ##
=======================================
  Coverage   71.65%   71.65%
=======================================
  Files          11       11
  Lines        2286     2286
=======================================
  Hits         1638     1638
  Misses        648      648

Continue to review full report at Codecov.

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

* This doesn't mean we have a c++ API,  they are just headers.

Well, headers are an API. Maybe not the one you wished to have, but they are.  For me this feels like a somewhat artificial distinction.

* Unlike c API, which is well abstracted.  Those c++ headers have `dmlc` dependency.  User needs to link and include `dmlc` manually.

That is an interesting point. Currently I just patch CMakeLists of XGB to locally install dmlc API ;-) along XGB.
Do you see DMLC as something independent that may be installed separately on a system in any real world scenario or is it merely a building block of XGB. In the latter case I would suggest to either check if it can be avoided in the XGB interface or just install it along XGB headers.

* There are forward declarations in headers.  That means there are things one cannot do even with the headers.

Have to check this, but with v0.80 we had no problems. (After patching access to install for installing all your headers.)

All in all, these headers don't form an API and might only be accessible to to someone who code for fun, like @codingforfun ;-). But never the less it's a first step. Thanks @hcho3 @codingforfun
The name doesn’t mean we are not doing serious programming. Actually we are using this for real world problems ;-)

To summaries: My whole point here is: There is a lot of interesting things to do with the C++ library of XGB and it’s already all there so in my opinion there is no point in trying to suppress usage of it. Every interface is an interface. Maybe not the best possible one, but you can’t claim you don’t have one and trying to keep it secrets just creates pain on your side and for your users.

Well, headers are an API. Maybe not the one you wished to have, but they are.  For me this feels like a somewhat artificial distinction.

An API sure, an user interface, not really.  It needs to be tested, have demos, documents, release version control, reasonably stable etc ...  We currently don't have the resource to do all that.  For example, I'm trying to revise our IO logic to better handle distributed setting.  The c++ headers might got a some changes (enforcing a new IO functions with pure functions) while C/Python/R/Scalar/Java/Julia/Ruby API stay intact.

Do you see DMLC as something independent that may be installed separately on a system in any real world scenario or is it merely a building block of XGB. In the latter case I would suggest to either check if it can be avoided in the XGB interface or just install it along XGB headers.

It's a "common directory" for dmlc projects, another big user is mxnet.  With C API we hide it behind the scene,  but c++ headers use it extensively.  To give you an example, in latest release and master branch, you can use XGBoost as a CMake target like find_package(xgboost) target_link_library(awesome xgboost::xgboost). dmlc/openmp/cuda are not directly linked into your binary so you don't even need to think about them. Only libxgboost.so will appear in your ldd libawesome.so. But this limits to C API.  There's a demo in xgboost/demo/c-api .

The name doesn’t mean we are not doing serious programming.  ;-)

Every interface is an interface.

Since we have a plugin system (see xgboost/plugin/example), you can consider using it, not stable though.

@hcho3 Added some notes, please review.

@codingforfun As noted in the doc, we currently do not promise any kind of stability from version to version when it comes to the C++ header interface. However, if we ever come around implementing a C++ "frontend" in #4895, then we will designate this subset of C++ interface as more stable.

@RAMitchell I removed the tbegin from HostDeviceVector and put it into device_helpers.cuh to avoid specialized macros.   It's now dh::tbegin(vector), similar to std::begin.

Don't merge right now.  Will do some re-organization tomorrow.

@trivialfis Can we merge this for now?

Just want to remove the common subdirectory in headers

@hcho3 Done.  Sorry for the long wait.

ping @RAMitchell


Cannot replace edge when there are more than one graph

My Environment

ArangoDB Version:        3.5.1
Storage Engine:             RocksDB
Deployment Mode:       Single Server
Deployment Strategy:   Manual Start in Docker
Configuration:               Nothing special
Infrastructure:               own
Operating System:        Windows 10
Total RAM in your machine:        16Gb
Disks in use:        SSD
Used Package:              Docker - official Docker library

Steps to reproduce

Create graph graph_a.

curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/gharial <<EOF
{
  "name" : "graph_a"
}
EOF

HTTP/1.1 202 Accepted

Add an edge definition to the graph.

curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/gharial/graph_a/edge <<EOF
{
  "collection" : "edge_a",
  "from" : [
    "col_a"
  ],
  "to" : [
    "col_a"
  ]
}
EOF

HTTP/1.1 202 Accepted

Replace the edge definition with the same edge definition (really a no-op). This is important for later.

curl -X PUT --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/gharial/graph_a/edge/edge_a <<EOF
{
  "collection" : "edge_a",
  "from" : [
    "col_a"
  ],
  "to" : [
    "col_a"
  ]
}
EOF

HTTP/1.1 202 Accepted

Now, create another graph graph_b.

curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/gharial <<EOF
{
  "name" : "graph_b"
}
EOF

HTTP/1.1 202 Accepted

Rerun the same command in 3) to replace the edge definition in graph_a. I was expecting this to succeed.

curl -X PUT --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/gharial/graph_a/edge/edge_a <<EOF
> {
>   "collection" : "edge_a",
>   "from" : [
>     "col_a"
>   ],
>   "to" : [
>     "col_a"
>   ]
> }
> EOF

HTTP/1.1 400 Bad Request
X-Content-Type-Options: nosniff
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 117

{"code":400,"error":true,"errorMessage":"edge collection does not exist or is not part of the graph","errorNum":1939}

Sanity check to ensure the edge collection is in graph_a.

curl --header 'accept: application/json' --dump - http://localhost:8529/_api/gharial/graph_a/edge

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 51

{"error":false,"code":200,"collections":["edge_a"]}

Problem & Expected Results: I was expecting 5) to return the same result as 3). The edge definition does exist in the graph as shown in 6), and it worked before I created a second graph in 4).

Hi @ysmu
We reproduce this, we will discuss internally and get back
Best

Any updates?

Hi @ysmu,
Thanks for reporting this bug, a fix (https://github.com/arangodb/arangodb/pull/10690) will be available in the upcoming versions 3.5.4 and 3.4.9.
From the Changelog:

Fixed internal issue #4748: Editing a single edgeDefinition using the graph
API failed if it was not shared between all available graphs.

Thanks for the fix!


fix: compile types when building the library

🐝 PR preview in Swarm
Preview URL: https://bah5acgzavko7yqhstr3gb763253gelrlesp3pgbv2fdl3pkdz5ytpo2lie3q.bzz.link
Swarm Hash: aa9dfc40f29c7660ffdbd776622e2b249fb79835d146bdbd43cf7137bb4b4137
Commit Hash: c2845137128382e659bbc883495e3b85286e9e15
Commit Message: fix: compile types when building the library


Consider refactoring how functions are passed to azure-webjobs-sdk

As part of working on #279, I was trying to understand how the functions are invoked when an event happens. My current understanding is that the code generates a type using reflection emit that is then analyzed somewhere else and turned into an index. This seems very complicated. My understanding is:

In WebJobs.Script, the Generate method in FunctionGenerator uses Reflection Emit to produce a type with a static method for every Azure function.

This type is then passed to the runtime in azure-webjobs-sdk via an ITypeLocator instance.

In azure-webjobs-sdk, the type locator is then passed to FunctionIndexProvoider, which gets all the types & their methods and eventually invokes IndexMethodAsyncCore here.

This uses reflection (over the type that we had to manually generate with reflection emit!) to find the parameters of the method and figure out things like triggers for the function. At the end, it just makes IFunctionDefinition and FunctionDescriptor.

I do not know all the background here, but this seems rather complicated, especially given the fact that FunctionDescriptor is pretty simple type (with just list of parameters and MethodInfo).
In a perfect world, I think that azure-webjobs-sdk-script should not need to use reflection emit at all. It could just return an instance of some simple interface that defines what the parameters are and has an invoke method that gets called when the function is triggered. Using System.Type and MethodInfo as the public protocol makes the code quite hard to follow & debug.
I'm not immediately planning to do this, because I think it's a big change for a first-time contributor, but I think it would make the life of everyone who wants to contribute much easier.

Yes, this is something we've discussed. The current meta model for describing job functions in the core WebJobs SDK is reflection. I've considered refactoring everything to allow for a pluggable description model, which would support description via JSON metadata.
That is a substantial refactoring of the core SDK however, so the IL emit model was the most direct way of moving forward. In the fullness of time we might get to the SDK refactor, but there are much higher priority things for us to work on, given that the existing mechanism isn't causing any problems.

Also, I think this issue should be moved to the core SDK repo, since this is really a feature suggestion for that repo.

Moved to the SDK repo to better track this work - https://github.com/Azure/azure-webjobs-sdk/issues/714


Update doFetch to return a promise that resolves with same value as afterFetch

Solves #146.
@jamesplease Kind-of-unrelated question: While working on this, I noticed that there are prettier config files, but prettier isn't in devDependencies, so my editor wasn't auto-formatting. So I just ran it manually, but that seemed to make a bunch of formatting changes in areas I hadn't touched, so I reverted it back. Would you be interested in a PR that adds prettier to devDependencies, runs it on the code base once manually, and then always runs it automatically on any files that are changed by a git commit?

Oops, forgot to update the docs. I'll add a new commit for that in just a sec.

Thanks for the PR, @shanecav ! I'll take a look in the next few days

Sounds good, thanks!

Released as 3.1.0. Thank you @shanecav !!


Functional operator

Last peace of code to make ExternalDNS Operator functional (deployment/upgrade/removal).
What's inside:

New controller to copy the secret from the operator into the operand namespace. Hence the change in the API for the credentials: no namespace can be specified.
Adding of the owner reference to all the secondary resources which are related to the primary resource. This is needed for the cascade deletions. The shared resources like cluster role or namespace are not set to any ExternalDNS instance hence not removed.
FQDNTemplate is now a slice in order to be able to specify multiple values separately, not comma separated like before

$ oc -n external-dns-operator get pods
NAME                                     READY   STATUS    RESTARTS   AGE
external-dns-operator-7d8c765bcc-btg7s   2/2     Running   0          21m

$ oc get externaldns sample
NAME     AGE
sample   93s

$ oc -n external-dns get pods
NAME                                  READY   STATUS    RESTARTS   AGE
external-dns-sample-bb5f9969d-wst8c   1/1     Running   0          2m9s

$ oc -n external-dns get secret external-dns-credentials-sample
NAME                              TYPE     DATA   AGE
external-dns-credentials-sample   Opaque   2      2m42s

$ curl -L http://alebedev-httpserver.devcluster.openshift.com
Accept=*/*
User-Agent=curl/7.61.1
Now: http alebedev-httpserver.devcluster.openshift.com
Before: http alebedev-httpserver.devcluster.openshift.com

$ oc delete externaldns sample
externaldns.externaldns.olm.openshift.io "sample" deleted

$ oc -n external-dns get deploy external-dns-sample
Error from server (NotFound): namespaces "external-dns" not found

$ oc -n external-dns get sa external-dns-sample
Error from server (NotFound): namespaces "external-dns" not found

$ oc get clusterrolebinding external-dns-sample
Error from server (NotFound): clusterrolebindings.rbac.authorization.k8s.io "external-dns-sample" not found

/lgtm
/hold for other reviews

/lgtm
/hold for other people to review

@alebedev87  are we updating the status of the operator once we change something in the CRD ?

Answer to https://github.com/openshift/external-dns-operator/pull/22#issuecomment-926710634
@miheer : no, not yet, it' something we just started to work on.

Answer to https://github.com/openshift/external-dns-operator/pull/22#pullrequestreview-763496707.
@Miciah: yes, the amount of the boilerplate code in the tests can be optimized. I already did this for the deployment test but not everywhere. Some tests were quite small, creating helper functions for them didn't make much sense but now they grew up and this may become a problem.
This will need to be addressed in the follow ups.

/unhold

/lgtm

Answer to #22 (comment)
@miheer : no, not yet, it' something we just started to work on.

OK do let me know if you need help on this as it is a big component.


Update Notification Docs and Add Flow Charts

Flow Charts have been reviewed by dev. Adding QA to review as well.
Also cleaned up the Getting Started > Configuring Notifications page while doing so as it had a lot of out of date and unnecessary information for an onboarding end user

@lindalumitchell or @lfbrock any comments on this or are we okay to merge?


GitHub project page has several broken links

@vinogradoff, several badges are broken, have a look at the screenshot below:

@dialex I cannot reproduce the problem. Currently I see all the badges:

Sorry, my bad, I was behind a proxy/firewall.


BooleanPropertyNaming not reporting any violation

Expected Behavior
BooleanPropertyNaming was added in 1.18.0. After enabling this in detekt.yml, the violations should be reported.
Observed Behavior
Not even a single violation is reported.
Steps to Reproduce
I have a multi-module project. I have even setup custom Detekt rules in my project.
Here is the root level build.gradle.
plugins {
    id "io.gitlab.arturbosch.detekt" version "1.18.0"
}

apply plugin: 'io.gitlab.arturbosch.detekt'
dependencies {
    detektPlugins project(':static-analysis:detekt-rules') //custom Detekt rules
}

tasks.register("detektAll", Detekt) { //custom Gradle task
    description = "Custom Detekt build for all modules"
    parallel = true
    setSource(file(projectDir))
    config.setFrom(files("$rootDir/detekt.yml"))
    jvmTarget = "1.8"
    classpath.setFrom(project.configurations.getByName("detekt"))
    include("**/*.kt")
    exclude("**/build/**")
    reports {
        html {
            enabled = true
            destination = file("$rootDir/build/reports/detekt-results.html")
        }
        xml {
            enabled = true
            destination = file("$rootDir/build/reports/detekt-results.xml")
        }
        txt.enabled = false
    }
}

Part of detekt.yml
naming:
  active: true
  severity: error
  BooleanPropertyNaming:
    active: true
  ClassNaming:
    active: true
    classPattern: '[A-Z][a-zA-Z0-9]*'
  ForbiddenClassName:
    active: false
    forbiddenName: [Manager]
  MemberNameEqualsClassName:
    active: true
    ignoreOverridden: true
  NoNameShadowing:
    active: true
  NonBooleanPropertyPrefixedWithIs:
    active: true

When I copy the code for BooleanPropertyNaming in my custom rules project static-analysis:detekt-rules, the violations are reported.
Context
Just trying to enable BooleanPropertyNaming on my project.
Your Environment

Version of detekt used: 1.18.0
Version of Gradle used (if applicable): 7.0.0
Gradle scan link (add --scan option when running the gradle task):
Operating System and version: MacOS 10.15.6
Link to your project (if it's a public repository):

That's a real bug. The fix is in #4071

In 1.19.0 BooleanPropertyNaming still doesn't working.
My task:
task detektAll(type: io.gitlab.arturbosch.detekt.Detekt) {
    description = "Runs Detekt task for all modules"
    buildUponDefaultConfig = true
    allRules = true
    parallel = true
    setSource(files(rootDir))
    config.from(files("$rootDir/tools/detekt/detekt.yml"))
    baseline.set(file("$rootDir/tools/detekt/baseline.xml"))
    include("**/*.kt")
    include("**/*.kts")
    exclude("**/resources/**")
    exclude("**/build/**")
    reports {
        html.enabled = true
        xml.enabled = false
        txt.enabled = false
        sarif.enabled = false
    }
}

detekt.yml part:
naming:
  active: true
  BooleanPropertyNaming:
    active: true
    excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
    allowedPattern: '^(is|has|are|should|have|can|was|had)'

Tried to remove allowPattern block, but nothing changed.
Copied class BooleanPropertyNaming to my custom rule, but nothing changed. While debugging I found out that bindingContext is always BindingContext.EMPTY

Version of detekt used: 1.19.0
Version of Gradle used (if applicable): 7.0.4
Operating System and version: MacOS 12.2.1

task detektAll(type: io.gitlab.arturbosch.detekt.Detekt) {

You're not using Type Resolution, therefore you're not running BooleanPropertyNaming to it's full capacity:
More on type resolution here https://detekt.dev/type-resolution.html

Thanks, I missed it.


Decoding failure

Summary shows the subject is
Ãj fiÃ³k megerÅsÃtÃ©s TÃ¶rÃ¶lj ki kÃ©rlek TÃ¶rlendÅ rÃ©szÃ©re
Source
Subject: =?utf-8?B?w5pqIGZpw7NrIG1lZ2VyxZFzw610w6lzIFTDtnLDtmxqIGtpIGvDqXJsZWsgVMO2cmxlbmTFkSByw6lzesOpcmU=?=

Please advise.
on https://outlook.live.com/owa/

Do you have what OWA shows the subject as?

The decoded subject.

Subject: Új fiók megerősítés Törölj ki kérlek Törlendő részére

Thanks - got this working - doing more test cases now - how to check in soon

Fixed by 053af2ca57af9057b99cf106f99b29bfe7393688

What a big commit!
Thank you.
--
+36204242498
Ezen a készüléken sok az elütés.
Elnézést!
On October 8, 2017 12:11:26 AM CEST, Stephen Griffin<EMAIL_ADDRESS>wrote:

Fixed by 053af2ca57af9057b99cf106f99b29bfe7393688
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/stephenegriffin/MHA/issues/16#issuecomment-334969155


Improve Farm Event calendar performance

Coverage increased (+0.02%) to 84.008% when pulling 7135067b452f5861619c196cd737a61bf1ba0c76 on gabrielburnworth:staging into 1b1f0793a0dfd27e192d0b5b28f6ab79c506c7ce on FarmBot:staging.


add: index page layout

add: index page layout

Codecov Report

Merging #149 (9162a8e) into main (35273ff) will decrease coverage by 0.31%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##               main     #149      +/-   ##
============================================
- Coverage     22.74%   22.42%   -0.32%
  Complexity      160      160
============================================
  Files            87       87
  Lines          1495     1516      +21
  Branches         92       92
============================================
  Hits            340      340
- Misses         1139     1160      +21
  Partials         16       16

Flag
Coverage Δ

unittests
22.42% <ø> (-0.32%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

.../dev/simulator/pulsar/PulsarConsumerSimulator.java
0.00% <0.00%> (ø)

Continue to review full report at Codecov.

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


go1.20.2 Not able to compile with cgo

What version of Go are you using (go version)?

$ go version
go version go1.20.2 linux/amd64

Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/tejaskumar/.cache/go-build"
GOENV="/home/tejaskumar/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/tejaskumar/repo/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/tejaskumar/repo/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.20.2"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/tejaskumar/work/code/go/example/go.mod"
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build728345486=/tmp/go-build -gno-record-gcc-switches"

What did you do?
Directory structure --
example --> main.go
        -->lib
            lib.c
            lib.h

cat main.go
package main

// #include "lib/lib.h"
// #include <stdio.h>
// #include <stdlib.h>
import "C"
import (
	"fmt"
	"unsafe"
)

func main() {
	cstrin := C.CString("welcome")
	s1 := C.struct_s1{b: cstrin, a: 100}

	C.f32_123(&s1)
	cs := C.GoString(s1.b)
	fmt.Println(cs)
	fmt.Println(s1)
	C.free(unsafe.Pointer(cstrin))
}

cat lib/lib.c

#include <stdlib.h>
#include <stdio.h>

void printc(char *str, int *t)
{
     str = "Test";
     printf("%d\n", *t);
     *t = 30;
     printf("%s\n", str);
}

void f32_123(struct s1 *s)
{
     printf("%s\n", s->b);
     s->a = 10;
     s->b = "Hello123";
     printf("%d\n", s->a);
     printf("%s\n", s->b);
}

cat lib/lib.h
{
    int a;
    char *b;
};

void printc(char *str, int *t);
void f32_123(struct s1 *s);

What did you expect to see?
Expecting that code should compile successfully, but somehow it is not. If documentation I have read correctly then I have to keep lib.c and lib.h into same directory with main.go file. But I am not sure if this can be achieved or I am doing something wrong.

If I keep all the files into same directory example then compile is successful.

If I keep lib.c and lib.h into subdir then compile fails

If I remove one function f32_123 from main.go then also compile is successful and that is pretty strange and that is the reason opening this bug to get more understanding why compile has not issue with printc function when lib.h and lib.c is in subdir.

What did you see instead?
example
/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/bin/ld: /tmp/go-link-3024881602/000001.o: in function _cgo_cf24297edd23_Cfunc_f32_123': /tmp/go-build/cgo-gcc-prolog:49: undefined reference to f32_123'
collect2: error: ld returned 1 exit status

Unlike many projects, the Go project does not use GitHub Issues for general discussion or asking questions. GitHub Issues are used for tracking bugs and proposals only.
For questions please refer to https://github.com/golang/go/wiki/Questions


bug @ demo.py

~/DL/tf-faster-rcnn$ CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py

Traceback (most recent call last):
  File "./tools/demo.py", line 118, in <module>
    dataset = dataset
NameError: name 'dataset' is not defined

Thanks! I fixed the code but didn't test it. Does it work now?


Not found package:mapbox_gl/mapbox_gl.dart

Can't able to import import 'package:mapbox_gl/mapbox_gl.dart'

Please do check the lastest package .i have fixed it
On Wed, 11 Jan, 2023, 6:21 pm jeeva, @.***> wrote:

Can't able to import import 'package:mapbox_gl/mapbox_gl.dart'
—
Reply to this email directly, view it on GitHub
https://github.com/BadalAc/Mapbox_draw_polygon_area/issues/4, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/ANXRSK5GAMDH3B7JHLOWA4TWR2SOFANCNFSM6AAAAAATX7S5EI
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

Resolve


OLD SDK Compatability

Hi Team,
I have used StonlySdk Pod library in my iOS native, recently when i tried to install the pod, i got an issue like repo url is not found.
And also i tried with new library stonly-ios-sdk, but what ever the APIs that I used with old pod are not available.Please check this for your side.
What could be the compatible version?

Hello.
Thanks for your continuous interest on Stonly.
We no longer have a support for our previous SDK.
You should be able to use every Apis you had before and more with the new SDK, with really simple changes in your code.
Can you please contact<EMAIL_ADDRESS>they will reach out to you to activate the new mobile experience on Stonly for your account and guide you on how to make the changes.


Java 5.2: Bitwise Operators

Description 📜
Add audio, documentation, and video regarding the Bitwise Operators.

Domain of Contribution 📊

[x] Java

Location of File to be added
The files should be added inside the Bitwise Operators  folder which is inside the Operator  folder present in the   Java  main folder.  The documentation file can be in the .md/.py/.ipynb format. Audio should be in .mp3 format and to be submitted through a Google drive link. Video can be in any format and should be submitted through a Google Drive link.
Note:

You are required to comment with \assign CONTENT_TYPE, so that other content types can be created at the same time.
Failing to comment in the above manner will lead to the removal of assignment from the issue even if the bot assigns.
You are required to do a PR within 7 days otherwise you will be unassigned and others will be assigned.
Issues will be assigned on a first come first serve basis.

/assign Document

@tejaswini5801 Have been appointed for documentation.

/assign document

/assign document

/assign documentation

/assign audio

@Palak-Srivastava You have been assigned for Audio

\assign video

@Rosy-Chadha You have been assigned video

@AkMo3
I have created a PR for video.
https://github.com/girlscript/winter-of-contributing/pull/4572#issue-749614434


MINOR; Use equals method with Uuid

Uuid is an object so they need to be compared with the equals method and not the == operator.
Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

@mumrah this test fails without this fix:
Gradle Test Run :metadata:test > Gradle Test Executor 12 > ControllerMetricsManagerTest > testPartitionCountDecreased() FAILED
    org.opentest4j.AssertionFailedError: expected: <0> but was: <2>
        at app//org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
        at app//org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
        at app//org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
        at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150)
        at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:145)
        at app//org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:527)
        at app//org.apache.kafka.controller.ControllerMetricsManagerTest.testPartitionCountDecreased(ControllerMetricsManagerTest.java:199)

Thanks for the reviews. The following command passes:
$ ./gradlew metadata:test

Uuid is an object so they need to be compared with the equals method and not the == operator.


Waveform hides when scrolling to the end on mediaElement loaded server generated waveform

Wavesurfer.js version(s):
"wavesurfer.js": "^2.1.0",
Browser version(s):
Version 71.0.3578.98
Code needed to reproduce the issue:
My audio element:
<audio id="audio"><source src={this.state.audioURL} type="audio/mp3"></source></audio>
I set the media element;

this.mediaElt = document.getElementById('audio');

I am loading it like this:
 this.wavesurfer = WaveSurfer.create({
    container: '#waveform',
    waveColor: 'gray',
    progressColor: 'rgb(14, 204, 208)',
    barWidth: 3,
    partialRender: true,
    responsive: true,
    scrollParent: true,
    scrollSpeed: 3,
    scrollThreshold: 50,
    height: 60,
    normalize: true,
    backend: 'MediaElement'
   })

I generate waveform on server:

audiowaveform -i ${inputAudio} -o ${outputWaveform} -b 8 --height 25 --pixels-per-second 100

Once axios fetch returns, I am loading the generated waveform and audio file, and then calling this.mediaElt.load() to tell the media element that the audio source has been updated
this.wavesurfer.load(this.mediaElt, this.state.waveformURL.data);
Everything loads and plays nicely, though I am experiencing two key problems.

When I scroll left or right, the scroll bar unhides, however when I leave the waveform area, it never unhides again. Sometimes it does, other times it doesn't. It is very random in that sense. This was still occurring when I was using webaudio and not the mediaElement.

More importantly, when I scroll to the end of the waveform, it disappears completely and doesn't return. I believe this is an issue with the length of the audio/waveform that is being loaded.

e.target.scrollWidth (scroll width of the container)
34762
scrollWaveLeft (position at the end once I have completed scrolling)
33904
difference
858
So I can't scroll anymore, though it is saying that I still have 858 to scroll. At this point, the waveform completely disappears and I cannot see anything, though the audio still plays all the way to the end. On that note, the waveform does not sit flush with the left hand side of the screen, there is a 155px margin on the left. So I am unsure whether this has anything to do with this issue.
Any suggestions greatly appreciated.

try hideScrollbar: true?

Thanks for your reply Thijs! I did, though then that doesn't allow me to scroll to beyond 40s of the waveform. I am not sure if I should be passing in a preload option to the load(url, peaks, preload) or not. Though don't think that will make a difference in this case.

I hacked a awful scroll bar solution, though didn't solve the waveform disappearing at the end of the scroll. Basically just forced it to disappear when the mouse leaves the waveform.
On mouseleave of the waveform:
this.wavesurfer.containers.childNodes[1].style.overflow = 'hidden';
On mousenenter of the waveform:
this.wavesurfer.container.childNodes[1].style.overflow = 'scroll';
Still haven't been able to solve the disappearing waveform though ;(

The problem occurs when you set partialRender to true. If you set it to false, then it won't occur.

So after more research, turns out that it is because the width of the ends up being 1px bigger than the end value of the scroll.
A quick hack fix to add on approximately line 1076 of the wavesurfer.js file:
 if (
            this.params.fillParent &&
            (!this.params.scrollParent || nominalWidth < parentWidth)
        ) {
            width = parentWidth;
            start = 0;
            end = width;
        }

        **if (end > width) end = width;**

        let peaks;
        if (this.params.partialRender) {
            const newRanges = this.peakCache.addRangeToPeakCache(
                width,
                start,
                end
            );
            let i;
            for (i = 0; i < newRanges.length; i++) {
                peaks = this.backend.getPeaks(
                    width,
                    newRanges[i][0],
                    newRanges[i][1]
                );
                this.drawer.drawPeaks(
                    peaks,
                    width,
                    newRanges[i][0],
                    newRanges[i][1]
                );
            }
        }

@rockyhuber sounds familiar, can you try with 2.2.0?

no feedback, closing.

Hi, sorry for the delay mate. Don't receive github notifications in email for some reason. I have done some custom work to wavesurfer, so will need to merge the code bases. Will let you know if the 2.2.0 fixes work in due course.


Revert SSD for use as cache

What is the process to revert an SSD so that it can be used as a cache drive?

Just delete the storage pool and the drive will be available to create a cache.


Try to run all relevant tests in schema test rake task

We recently changed the content schemas to make details required (https://github.com/alphagov/govuk-content-schemas/pull/310). The tests for this PR passed for Whitehall, because for changes in govuk-content-schemas it only runs tests for the publishing-api presenters.
This is done because we don’t want to run the entire whitehall test suite for schema tests as it would take a long time.
There are a couple of schema tests outside of this directory that use schema tests, and were not run previously:
test/unit/statistics_announcement_test.rb
test/unit/whitehall/publishing_api/redirect_test.rb
test/unit/whitehall/publishing_api_test.rb

Because the schema tests didn't test these files the test failure surfaced somewhere else (fixed in https://github.com/alphagov/whitehall/pull/2594).
With the grep-based file selection we pick up any new schema tests automatically.

cc @boffbowsh @fofr

LGTM :+1:
Thoughts @boffbowsh?

@boffbowsh updated with new regex.

👍


WIP:Update Features article

Fixes #12316 Fixes #11429
Internal review URL

@serpent5  I'll start over with 3.0 updates and new wording.

I forgot about https://github.com/aspnet/AspNetCore.Docs/pull/13923/files

@serpent5 I reverted your commit so we can start with this.


Native support for GIFs

I would like it if it was possible to simply import a gif and play it. I found this thread with workarounds, but even so, it'd just be nice to support gifs out of the box. I mean, if plain HTML supports it out of the box, I think PlayCanvas should support it too.

Another project with a working solution is here:
https://forum.playcanvas.com/t/gif-texture-gifunc-js-integration/30062

One reason this is low on a priority list:
GIFs may seem attractive for their animation support, but the quality is very poor, especially when compared to the file size. Also, there is no programmatic way to control which GIF frame will be copied to the texture, so using it for an animated texture is not practical. Use video formats for this use case instead.
from https://toji.dev/webgpu-best-practices/img-textures.html


Updated Documentation

Combined the Installation and Configuration steps
Added a link to Silverstripe Email Helpers to assist with setting up emails
Thanks

Thanks Antony!


Merging Develop into Master - Email Validation API release note, first hacktoberfest contribution, small edits

Description of the change:
Reason for the change:
Link to original source:

Closes #

Hello @Whatthefoxsays,Thanks again for the PR! It's HACKTOBERFEST! We want to show our appreciation by sending                                              you some special Hacktoberfest swag. If you have not already, could you please fill out                                              this form so we can send it to you? Thanks!                                             Team SendGrid DX


Basic usage with AutoRoute

the 'nextScreen' param expects a 'Widget' while 'context.pushRoute(LoginScreenRoute)' gives a 'Future<Object?>'. How can I resolve this?

Here is the error recieved when attempting to pass a Widget into the 'nextScreen' param...
A page-based route cannot be completed using imperative api, provide a new list without the corresponding Page to Navigator.pages instead.

same issue  @ndemari

Same issue here!

same issue ethier


"undo"

🚀 Feature
Add "undo" feature
Motivation
Sometimes I add a marker and can't figure out how to delete it. Or deleted a layer on accident
Pitch
Press the "undo" button or "ctrl+z" and the viewer is set to the previous state.

Yup, we're planning to implement some form of history feature. i feel like i may know the answer already, but curious how important to you is it to have arbitrarily many "undos" vs just being able to do one?
And any thoughts on how we should think about "undos" once we get to a stage where plugins can do some pretty intense analysis that either generates large copies of data or takes a long time.
I could imagine that for some simple things like shape editing / drawing markers we could support many undos, but for loading / deleting / manipulating images we might have to have a cap

This has been partially addressed with the merge of #533 where we add an undo / redo button to the labels layer. We have a plan for a more comprehensive undo / redo system laid out in #474 so I am closing this issue in favor of that one.


[Package Request]: Kopia.KopiaUI version 0.10.2

Package Requested

[ ] I would like someone else to build the manifest.
[ ] I would like help so I can submit the manifest.
[ ] I have performed a search and couldn't find this package.
[ ] I have checked that the installer for this package is not a standalone or portable executable or a .zip file
[X] I think there is a new version available and I have provided the URL.

Please provide the following information
Publisher: Kopia
Publisher Url: https://github.com/kopia/kopia/
Package Name: Kopia.KopiaUI
Description:
Package Version: 1.10.2
Installer URL: https://github.com/kopia/kopia/releases/download/v0.10.2/KopiaUI-Setup-0.10.2.exe
Current Package Identifier (for new versions): Kopia.KopiaUI

Note that 1.10.2 is obsoleted by 1.10.3 - but for completeness, I've added this anyways.


Autocomplete (downshift)  doesn't appear to respect multiline

[x] I have searched the issues of this repository and believe that this is not a duplicate.

Expected Behavior

When specifying multiline={true} in the <TextField> component of the downshift example code, I would expect to see the selected value chips wrapping round on to multiple lines when they reach the maximum available width.
Current Behavior

The selected chips do not wrap, instead they continue out of the side of their container
Steps to Reproduce (for bugs)

Example here: https://codesandbox.io/s/km3qxq055r
Note multiline={true} has already been added to the <TextField>
Context

I am attempting to use the Autocomplete (downshift) component within a Dialog and space is limited, hence my requirement for multiline
Your Environment

Tech
Version

Material-UI
1.0.0-beta.35

React
16.2.0

browser
Chrome 65.0.3325.146 (Official Build) (64-bit) on Linux

@Chuckatron The multiline={true} property is here for rendering a <textarea> element. It won't help in your use case. Don't try it. I have added some style to improve the rendering: #10641. Let me know what you think about it.

@oliviertassinari That's looks much better! Many thanks indeed for that, and such a speedy response too! :+1:


WPF/Drag drop not working:  An unknown error occurred in the remote end while processing the command.

I'm trying to automated one of our UI tests from CodedUI to WinAppDriver.
I'm facing an issue with  a drag'n'drop, my original code look like this:
session.Mouse.MouseDown(from.Coordinates);
session.Mouse.MouseMove(session.FindElementByPath().Coordinates);

After the mouse down action, any attempts to retrieve a control via FindElementByXPath on the session is giving a "Currently selected window has been closed"
==========================================
POST /session/657D8DA9-FB67-4265-8D9B-AB7A75FD2E56/buttondown HTTP/1.1

{}
HTTP/1.1 200 OK

{"sessionId":"657D8DA9-FB67-4265-8D9B-AB7A75FD2E56","status":0,"value":null}

==========================================
POST /session/657D8DA9-FB67-4265-8D9B-AB7A75FD2E56/element HTTP/1.1

{"using":"xpath","value":"toXPath"}
HTTP/1.1 400 Bad Request
Content-Length: 102
Content-Type: application/json

{"status":23,"value":{"error":"no such window","message":"Currently selected window has been closed"}}

I try something like:
var currentHandler = session.CurrentWindowHandle;
session.Mouse.MouseDown(from.Coordinates);
session.SwitchTo().Window(currentHandler);
session.Mouse.MouseMove(session.FindElementByXPath().Coordinates);

which gives me (I remove some of the HTTP header for simplicity
==========================================
POST /session/912703CB-34F6-4351-AC56-62A7FC8994E1/element HTTP/1.1
{"using":"xpath","value":"XPATHQUERY"}
HTTP/1.1 200 OK

{"sessionId":"912703CB-34F6-4351-AC56-62A7FC8994E1","status":0,"value":{"ELEMENT":"7.4836.10462895"}}
==========================================
POST /session/912703CB-34F6-4351-AC56-62A7FC8994E1/moveto HTTP/1.1

{"element":"7.4836.10462895"}
HTTP/1.1 200 OK

{"sessionId":"912703CB-34F6-4351-AC56-62A7FC8994E1","status":0,"value":null}

==========================================
POST /session/912703CB-34F6-4351-AC56-62A7FC8994E1/buttondown HTTP/1.1
{}
HTTP/1.1 200 OK

{"sessionId":"912703CB-34F6-4351-AC56-62A7FC8994E1","status":0,"value":null}

==========================================
POST /session/912703CB-34F6-4351-AC56-62A7FC8994E1/window HTTP/1.1

{"name":"0x005D04F6"}
HTTP/1.1 500 Internal Error
{"status":13,"value":{"error":"unknown error","message":"An unknown error occurred in the remote end while processing the command."}}

Note that the drag'n'drop is working with this :
session.Mouse.MouseDown(from.Coordinates);
session.LaunchApp();
session.Mouse.MouseMove(session.FindElementByXPath().Coordinates);

==========================================
POST /session/06FCBE74-0034-40C3-980C-2AD49255F732/buttondown HTTP/1.1
{}

HTTP/1.1 200 OK

{"sessionId":"06FCBE74-0034-40C3-980C-2AD49255F732","status":0,"value":null}

==========================================
POST /session/06FCBE74-0034-40C3-980C-2AD49255F732/appium/app/launch HTTP/1.1
{}

HTTP/1.1 200 OK

{"sessionId":"06FCBE74-0034-40C3-980C-2AD49255F732","status":0,"value":null}

==========================================
POST /session/06FCBE74-0034-40C3-980C-2AD49255F732/element HTTP/1.1

{"using":"xpath","value":"drop xpath"}

{"sessionId":"06FCBE74-0034-40C3-980C-2AD49255F732","status":0,"value":{"ELEMENT":"7.31752.18997019"}}

==========================================
POST /session/06FCBE74-0034-40C3-980C-2AD49255F732/moveto HTTP/1.1

{"element":"7.31752.18997019","xoffset":450,"yoffset":300}

HTTP/1.1 200 OK

Any idea what to make the drag'n'drop working ?

I would try (1) switching to a desktop session first and (2) using the Actions API implementation  to perform a drag and drop.

Does the actionsequence support the mouse ? last time I tried it was with pen and touch event only ?

it seems we are able to get it working by doing Mouse.Move(null,1,1) before continuing to our next step.
It seems a workaround.

You're correct, mouse implementation isn't currently added to WAD. If enough people request it, we can consider porting it over in a future release.


Add tool options for size and shape

Hotkeys included
resolves #35

Thank you so much! I will take a look at this as soon as I have time. One note I'm a bit unsure of, I've been working on the sysgpu branch (and I also apologize this wasn't obvious), but allowing this project to use sysgpu required moving to a different binding so the other branch is a pretty hefty change to most of the project. I haven't really ever had much outside contribution so I'm a bit unfamiliar with the best way to handle merging these PR's.

Got it, no problem. I'm not too experienced with git merges, but if it's a drastic difference I could imagine just reworking the change off of the new branch, which hopefully isn't too painful. It's something I could possibly look into once that stuff gets figured out.

No worries!  Thanks again!

@no1hitjam Thanks again so much for your PR. I worked off of it and I'm about to merge those changes. I did things a little differently but overall all the same functionality is there. Bracket keys increase/decrease the stroke size. You can right click the pencil tool for a context menu with the options for it there, and a help text has been added to the hover popup over pencil/eraser.