An essential fault appears to remain in Scala 3’s implementation of type classes. That is AFAIK the implicit resolution is not hierarchical according to the function hierarchy. So you can up with inconsistent implicits in the call hierarchy if you inject an instance as an argument but some place else in the call hierarchy an implicit is resolved implicitly to a different instance.
AFAICS my technological proposal avoids that design error. (oh but remember according to you, I do not make any technological contributions here, lol)

Having used both Rust and Scala extensively at this point, I must say I considerably prefer even the Scala 2 approach over Rust's. Rust interfaces are littered with "Oops, what if I don't want the default implementation?" methods for sorting or whatever.

And yet you criticize my generative essence hypothesis for why Rust is the way it is. And criticize me for expressing it. And equate that analysis with a lack of control over my emotions, lol. :laughing:
I guess you did not even appreciate that upthread recently I was defending your arguments where I though @keean was not fully appreciating your points. Yet I am the arrogant one. :fearful:

Of the two scenarios, being able to get custom functionality when you're using typeclasses, at the expense of some difficulty with finding the right one in certain obvious cases, seems much better to me in practice.

And I posit will be even better with my proposal for partial orders.

Rust's solution (newtyping) works okay if the thing is a bare type, but when it's a generic type parameter, you can very easily run into major runtime performance penalties in addition to the tedious boilerplate.

Pita.

It's possible that with sufficiently different language features that there could be no downside to a flexible scheme like Scala's, or no need for anything but global uniqueness.

It seems there could at least be more flexibility in choosing the tradeoff between how many implicit total ordering and how must explicitness one wants. I wrote that above already in my response to @andrewcmyers yesterday.

The extant examples have downsides both ways, though. And while I find Haskell not to my liking, plenty of people do and don't seem particularly bothered by uniqueness constraints, so I can't make a strong claim that my preferences are universally shared.

I don’t want Haskell.

Numerous upthread edits including but not limited to:

Learning about Pony (thanks to @Ichoran for telling me about it) was also very important because it caused me to think about Actor-like partitions versus green threads versus Rust and the GC and data race safety issues. I think I have devised something better than both of Go and Pony in theory. We’ll see...

Added:

@keean I think @Ichoran makes a very important implicit point here. Rust may end up giving type classes a bad reputation. We need to hurry up if we think we can do better before type classes become spurned.

@shelby3 Rust is doing okay, it's the most loved programming language: https://appetiser.com.au/blog/the-most-loved-and-hated-programming-languages-according-to-developers

@keean

@shelby3 Rust is doing okay, it's the most loved programming language: https://appetiser.com.au/blog/the-most-loved-and-hated-programming-languages-according-to-developers

Don’t believe everything you read.
“Most loved” is apparently not synonymous with ‘most used’:
https://www.zdnet.com/article/developers-love-rust-programming-language-heres-why/

In fact, Rust has been voted the most-loved language for the past four years in Stack Overflow's annual developer surveys, even though 97% of respondents haven't used it. So how has it become the most-loved programming language?

[…]

"The short answer is […hype, hype, hype…]," explains Jake Goulding on Stack Overflow's blog.

[…]

Goulding is the co-founder of Rust consultancy Integer 32, so he has a vested interest in Rust's success, but he's also not alone in taking a shine to the young language.

[Brave defies Google's moves to cripple ad-blocking with new 69x faster Rust engine](Brave defies Google's moves to cripple ad-blocking with new 69x faster Rust engine):

Brave now claims to have delivered a "69x average improvement" in its ad-blocking tech using Rust in place of C++.

Oh so let’s dig into the details of that lie:
https://brave.com/improved-ad-blocker-performance/

Our previous algorithm relied on the observation that the vast majority of requests are passed through without blocking. It used the Bloom Filter data structure that tracks fragments of requests that may match and quickly rule out any that are clean. Alas, blocked trackers are not that uncommon. We reused the dataset from Cliqz ad-blocker performance study that collected requests across top 500 domains and up to 3 pages of each domain. Out of the 242,944 requests, 39% were blocked when using the popular combination of EasyList and EasyPrivacy.
We therefore rebuilt our ad-blocker taking inspiration from uBlock Origin and Ghostery’s ad-blocker approach. This focuses on a tokenization approach specific to ad-block rule matching against URLs and rule evaluation optimised to the different kinds of rules. We implemented the new engine in Rust as a memory-safe, performant language compilable down to native code and suitable to run within the native browser core as well as being packaged in a standalone Node.js module. Overall, we found that:

The new algorithm with optimised set of rules is 69x faster on average than the current engine.

Reading Brendan Eich’s historical account.
Design by committee … well perhaps the best thing that happened to JavaScript is the committee was most inactive for 10 years:
https://dl.acm.org/doi/pdf/10.1145/3386327#page=3

By the year 2000, JavaScript was widely used on the Web but Netscape was in rapid decline and Eich had moved on to other projects. Who would lead the evolution of JavaScript into the future? In the absence of either a corporate or individual łBenevolent Dictator for Life, the responsibility for evolving JavaScript fell upon the ECMAScript standards committee. This transfer of design responsibility did not go smoothly. There was a decade-long period of false starts, standardization hiatuses, and misdirected efforts as the committee tried to find its own path forward evolving the language

I added:

I also think that is the problem with C++ is that it tried to be Java + C instead of just a better C and leave the high-level stuff to something better designed for high-level. Mixing both high-level and low-level detracts from the optimum focus of each.

@shelby3 wrote:
I also think that is the problem with C++ is that it tried to be Java + C instead of just a better C and leave the high-level stuff to something better designed for high-level.

The problem with C++ is that it eats anything what smells like a feature.

I added to my long post after reading that 125 page history of JavaScript:

EDIT: Perhaps the most important insight I learned from the following endeavor was that Microsoft schemed to keep JavaScript as limited as possible so that it would not complete with C# and .Net. And even to this day the marching orders for TypeScript is that it must be a faithful transpile to ES2015 (formerly ES6) and not introduce exotic features which do not transpile more or less intact. This is what has opened the opportunity for someone like us to build on top of TypeScript or ES2015 what should have been there a long time ago. IMO, this is why Scala.js is so popular.

Does anyone really like teamwork? Gavin McInnes at TEDxBrooklyn ← funny

@sighoya wrote:

@shelby3 wrote:

I also think that is the problem with C++ is that it tried to be Java + C instead of just a better C and leave the high-level stuff to something better designed for high-level.

The problem with C++ is that it eats anything what smells like a feature.

Yeah but I think my point remains. They add those features for low-level performance optimizations or high-level programming capabilities, because they want to be both a low-level performant and a high-level PL.
I know you all know the following but I will explain for other future readers.
Yet attempting to be both makes it more complex to excel at either end of the spectrum.
One example is pointer arithmetic which is enables low-level optimizations in some cases yet at the high-level it breaks encapsulation which prevents buffer overruns.
Another example for C++ is the concept of r-values and all the optimization complexity to prevent copying of return values:
https://en.wikipedia.org/wiki/Copy_elision#Return_value_optimization
https://shaharmike.com/cpp/rvo/
https://bastian.rieck.me/blog/posts/2015/return_value_optimization/
Then the complexity of the corner cases where it doesn’t work:
https://www.linkedin.com/pulse/c-return-value-optimization-dipanjan-das-roy/
https://stackoverflow.com/questions/19792135/return-value-optimizations-and-side-effects/19792614#19792614
So we can sort of emulate type classes with templates but without the implicit functionality:
https://functionalcpp.wordpress.com/2013/08/16/type-classes/
Yet templates are Turing-complete so we end up with template metaprogramming which makes it unpredictable what templates even do, i.e. you have to run the compile to see if they even halt or if they resolve in a predictable manner as you refactor code for maintenance and new features.
AFAICS, the complexity clusterfuck is significantly due to the goal of trying to merge high-level and low-level.

I’m not a Rust expert having not used it to write any code (other than maybe a few toy snippets). I’ve read the documentation and read a lot of expert commentary. Rust seems to have many cases where the desire for both high-level and low-level features create complexity that wouldn’t be the case if it has just focused on being a data race safety and “zero-cost abstraction” low-level language. For example the complexity around closures which @keean raised. Others such as the Rust discussion I cited up-thread have enumerated other examples. Again it seems to be an improvement over C++ complexity if total program order lifetimes are not factored in, but they can’t be factored out as that is the essential USP for Rust.

I added:

I might be interested in a low-level PL that stripped out the type classes, closures and all the implicit cuteness from Rust and focused on being a faster and more safe C.
If Rust had focused on something I really need, I might be a fan. But as it stands right now I do not need the tsuris of Rust for high-level programming. And I don’t need for low-level programming, the complexity of Rust’s ecosystem and high-level conflation. I want the next low-level language I will master after C to be stable and hyper-focused on seamless integration (without FFI marshalling overhead) with whichever high-level PL has formed a market Schelling point.
For example I might be willing to tolerate the lifetime borrowing complexities and annotation noise (given the apparently improvement in performance and some safety guarantees is provides) if there wasn’t the conflation with the high-level feature of type parameter polymorphism (aka generics). A low-level language doesn’t need type parametrisation.
I suppose after creating a high-level programming language then I need to tackle creating a fork of Rust and new low-level focused PL. Ha. Dreaming, if I was only 25 years old again I could possibly do that. No chance of that anymore. :moon:
Does anyone else have a different perspective?

Added more of my very opinionated ranting (might as well just vent while this is all fresh in my mind):

[1] Intelligent guys who make intelligent technical arguments, but they miss the big picture point. They are so religiously attached to the notion that Rust is some hypersonic, hypersafe killer app. And that colors and feeds their confirmation bias blindspot — the world doesn’t need a conflation of high-level ease with low-level performance resulting in a Frankenstein pita.

@andrewcmyers

@andrewcmyers

For some examples of more powerful ways to integrate pattern matching into OO languages, without breaking data abstraction in the way that functional pattern matching typically does, see PredJ and JMatch.

Have not looked at this yet.

Apologies to ask you for extra effort, but is it possible to elucidate the significance (beyond just being some syntax sugar) and essential concept for JMatch without myself needing to try to figure out how balancing red, black trees, CPS, interation, ADT, forward and backward model abstractions, etc all play together to offer something new and important? I suppose this somehow integrates/unifies iteration and pattern matching in some holistic model. Could you help me grasp it?
Can I somehow receive a tl;dr that creates that “a ha” moment which inspires understanding?
I just don’t have the time nor mental energy to digest all the verbiage of the paper. Maybe someone else here does? I got through the first page and half and it was not getting me close enough to holistic understanding to keep me motivated to push on. Is there any way to get more directly to the point or is the model that complex such that some degree of understanding can’t be conveyed with a paragraph and a simple example? I can’t even decipher what the code example is supposed to be accomplishing. I’m not detecting the key point of it from the example on the home page.
Probably someone who has more experience with the specific use case of your example will have more context with which to form an understanding.  Of course I am familiar with the concept of walking the branches of a tree.
Also I am not proficient in Java although I am in Scala so I do not know if the following is legal Java code:
boolean contains(Object elem) {
  if (left != null && value < elem) return left.contains(elem);
  if (value.equals(elem)) return true;
  if (right != null && value > elem) return right.contains(elem);
} iterates(elem) {
  foreach (left != null && left.contains(Object e)) yield e;
  yield value;
  foreach (right != null && right.contains(Object e)) yield e;
}

Thus I don’t comprehend the semantics of the iterates(elem)… there — when and where is it invoked? I don’t recall seeing that syntax in Scala, although perhaps I missed it or have forgotten over the years since I last used Scala.
Also there is a reference to logic programming which I vaguely assimilate although I have never used Prolog for example. @keean has. I am aware of the backtracing feature in Prolog because Keean has mentioned it for example in the context of a model of typeclass resolution and type system unification algorithms.
I understand the concept of a predicate for filtering a set or defining a domain:

I understand by forward and backward you may be referring to the relation between the domain and codomain?

Looking at this with a clearer mind and more sleep and ignoring the white paper and focusing solely on the code examples on the JMatch homepage:

AFAICS the “Containment predicate is also a tree iterator” unification of contains and iteration of contained can be abstracted with an interface that provides a new iterator and a findNext. Thus contains instantiates a new iterator and invokes findNext on it returning the boolean of whether was found. Whereas iteration of the contained will repetitively invoke findNext.

The “Balancing a red-black tree with pattern matching” is a clear example of how constraints expressed as pattern matching are much more coherent and succinct compared to the equivalent conditional expressions code required to accomplish the same algorithm. I presume the JMatch compiler compiles the pattern matching syntax into the optimal conditional expressions code.

The “A client loop selecting elements matching a pattern” exemplifies that pattern matching on iteration more coherently and succinctly expresses the invariants of the algorithm compared to the equivalent conditional expressions code required to accomplish the same algorithm.

I don’t know if there is additional significance or novelty to your work, because I have not tried again to digest the research paper.
I do agree with the value of these features and would be interested to explore them.

I think you're getting the gist of it. Pattern matching can be viewed as a kind of reverse-mode computation in which values are deconstructed instead of constructed. JMatch allows any method to declare reverse modes that can be used to pattern-match (one or more times) against a set of arguments. What it means to match can be specified with a logical formula, so pattern-matching is not tied to the concrete representation of values as in Haskell, OCaml, etc.

@keean, so your idea is likewise for records.
Records are datatypes and get bounded to fields over typeclasses:
data MyStructInstance = MyStructInstance

class struct StructInstance where
    assocType A
    assocType B
    a :: A
    b :: B

instance struct MyStructInstance where
    A=Int
    B=Float
    a=2
    b=3.0

-- Generic Typeclass Bound
fun :: struct s => s -> s.B
fun s = s.b

-- Trait Object
data TraitObject = forall s. (struct s) => TraitObject s
fun :: [TraitObject] -> TraitObject
fun = ts = ts!!0

All this kind of stuff can then be generated with normal record like syntactic sugar:
data struct A B = struct {fieldA::A, fieldB::B}

[…] Rust seems to have many cases where the desire for both high-level and low-level features create complexity that wouldn’t be the case if it has just focused on being a data race safety and “zero-cost abstraction” low-level language. For example the complexity around closures which @keean raised. Others such as the Rust discussion I cited up-thread have enumerated other examples. Again I will reiterate that Rust seems to be an improvement over C++ complexity, at least if total program order lifetime borrowing is not factored in, but they can’t be factored out as that is the essential USP for Rust.
Rust is only slightly more performant on benchmarks than C/C++, yet it is considerably more performant than Go:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust.html
I might be interested in a low-level PL that stripped out the type classes, closures and all the obfuscating, implicit conversions cuteness from Rust and focused on being a faster and more safe C.
If Rust had focused on something I really need, I might be a fan. But as it stands right now I do not need the tsuris of Rust for high-level programming. And I don’t need for low-level programming, the complexity of Rust’s ecosystem and high-level conflation. I want the next low-level language I will master after C to be stable and hyper-focused on seamless integration (without FFI marshalling overhead) with whichever high-level PL has formed a market Schelling point.
For example I might be willing to tolerate the lifetime borrowing complexities and annotation noise (given the apparent improvement in performance and some safety guarantees is provides) if there wasn’t the conflation with the high-level feature of type parameter polymorphism (aka generics). A low-level language doesn’t need type parametrisation.
I suppose after creating a high-level programming language then I need to tackle creating a fork of Rust and new low-level focused PL. Ha. Dreaming, if I was only 25 years old again I could possibly do that. No chance of that anymore. moon

The Node.js replacement Deno is advocating Rust as the low-level language for the (probably much) less than ~20% (i.e. Pareto principle aka power-law distribution of resources) of your code that needs to be fast.
https://youtu.be/1gIiZfSbEAE?t=723

They've coded the entire Deno executable in Rust, but that's understandable given all of it needs to be fast given it is a system layer. Their mainstream options were essentially C++ or Rust, so it makes sense they chose Rust per my prior comments in this thread. But for the majority of users who just want to code some lower-level subroutines in a high performance, low-level PL, then the conflation of higher-level Rust features with the lower-level requirements, adds unnecessary complexity and unsoundness.
My current priority (if I can get healthy enough to consistently think clearly) is to improve upon TypeScript for the high-level language part.
Again Scala was a breath of fresh air for me and a significant improvement over what I had used before it. But then I ran into the aforementioned issues of its non-principled, “kitchen-sink” design (being a jack of all trades and not hyperfocused on a superior paradigm, removal of implicit conversions, simpler and more sound type system, etc).
Pony was an experimental PL that provided some interesting insights into what is and isn't needed for an Actor-like partitions (ALP) paradigm, but I posit it's not the right design and will very likely die on the vine. Sorry to be so frank, but they didn't incorporate green threads and their GC scheme is not performant for intense sharing and if you're not going to do intense sharing then the reference capabilities do not need to be as complex and I posit the GC scheme can be made radically more performant with a paradigm-shift.
I wrote more details about this in the WD 40 thread #35.

P.S. Yet another example of how design-by-committee creates a clusterfuck, setting up Unicode character shortcuts for ellipsis, right and left quote marks in Kubuntu is byzantine, although Shift+Ctrl+U+[code] worked fine in Mint Mate and on standard Ubuntu:
https://askubuntu.com/questions/1095339/how-can-i-input-unicode-characters-in-kate-and-konsole-on-kubuntu-18-04
https://bugs.kde.org/show_bug.cgi?id=103788#c15
Maybe eventually I will find the compose key combinations for all the Unicode characters I want:
https://en.wikipedia.org/wiki/Compose_key#cite_note-xorg-12
https://askubuntu.com/questions/34932/where-can-i-find-the-full-list-of-compose-combinations-for-my-locale
And then employ keyboard shortcuts to make them easier to remember and type:
https://forum.kde.org/viewtopic.php?f=66&t=97493#p206186

I added:

Yet the rudimentary integration across the FFI is apparently not mutually typed:
https://youtu.be/HjdJzNoT_qg?t=1379

I inserted:

The creator of Node.js has created Deno to correct the accumulated crud in Node.js. He remarks that Go is a more performant PL for a server but the JavaScript server still has some valid use cases (e.g. sand boxed):
https://youtu.be/M3BM9TB-8yA?t=174

Ryan Dahl mentions the clusterfuck of module importing, require, package.json, etc., which BTW was what I told the Node.js project to simplify and move to ES6 modules deprecating that crud and got me banned from their Github issues some years ago. Design-by-committee can never shred the crud and start anew.

Inserted:

EDIT: indeed I was correct that Ryan considered C++ as the other option:
https://youtu.be/M3BM9TB-8yA?t=1406

(Also in the SO survey I see that […] @keean our age bracket is only 3 – 4% of programmers.)

Ryan also mentions that his design wisdom has improved with age. :stuck_out_tongue_winking_eye:

“Uncle” Bob Martin points out in the “The Future of Programming” that the rate of increase of programmers is growing so fast that more than half of the programmers have less than 5 years experience and are young. Apparently the younger the programmers, the more heavily tilted towards males the programmer demographic is.
https://youtu.be/ecIWPzGEbFc?t=3055

The implication is that PLs and frameworks are becoming less disciplined because the programmer demographic is becoming less disciplined (young age, low-level of experience, high testosterone, more energy than wisdom, etc).

Despite @shelby3's accurate understanding of my technical points, which I appreciate, he's misunderstood my non-technical points almost without fail (e.g. mistaking the logical thoroughness of breaking down a situation into cases as an implicit accusation of the negative parts of each case).    It's not just because they've learned from history in a number of areas (e.g. crates, docs, community) and created either a best-in-class or a refreshingly-nice-alternative (for those people who want to use Rust).  It also solves a problem that many systems-level programmers have, and for which there were zero good solutions, which is how to use mutability safely.
Not every new language has to allow the same thing.  Immutability is another approach, though if you think the borrow-checker is annoying, try putting someone up against either the borrow-checker or the entire field of pure FP ("so, you see, just use State, except no not really, use IO instead...but anyway, monads don't commute, so we need monad transformers (uh, actually, a lot of them), except that final tagless is a better way to go, except..."), the borrow-checker both admits much higher performance without insane compiler wizardry, and is a lot easier to swallow.  (Admittedly it solves many fewer problems, but for that problem it's absolutely brilliant.)
I've done a lot of programming in C++ over the years.  Although I occasionally get frustrated with Rust not allowing something that is "obviously" safe, it is VASTLY outweighed by the number of times that it stops me from doing something obviously "safe", meaning actually not safe at all, and I didn't think it through carefully enough.  It's almost as big an advantage for me as having strong types instead of none.
My point in writing this is not to say that you have to bite off the whole borrow checker thing.  My point is that Rust has that covered, and it's a very compelling feature, and if you go head-to-head with it, you have to either come up with something incredible, or you will lose.  (That goes for multithreading, too...it's not enough to be 30% better at multithreading if Rust can beat you by 2x on single threads.)
If you don't need to go head-to-head, though, because you're targeting a different area (e.g. not the-very-fastest-speed), then the design constraints are a bit less acute.  Competing with Go is vastly easier than competing with Rust on a technical level.  (Sociologically it may be harder...I'm not sure.)
All this makes me wonder if you've read about Unison, [https://www.unisonweb.org/docs/abilities](specifically its abstraction construct which it calls abilities).

Inserted an edit upthread:

I will repeat that I think technologically Rust will fail because it attempted to merge high-level and low-level programming (in addition to the organizational reason I think it will fail). [EDIT: note how much slower Go is on benchmarks because it doesn’t attempt to be pedantic about low-level performance and create a clusterfuck of complexity with the high-level features — which are admittedly also spartan] And I am observing that mistake and deciding instead to focus on the high-level and only add the ability to share binary packed data with the low-level FFI.

@Ichoran I have programmed in Rust, and I have published the iterator chapter from Stepanov's "Elements of Programming" translated to rust as best I can, here on GitHub.
Rust has some nice ideas, but fails in the execution for me. The borrow checker is ad-hoc, and has no systematic design, which means it misses obviously safe cases, and the work arounds add complexity to the language. The type system also seems thrown together with no use of well known concepts from the functional world that solve the problems (like universal and existential quantification). Again this results in corner cases with undefined behaviours, or unsoundness where the type system and the language semantics don't match up. I agree that the safe concurrency is nice, but it is frustrating that it does not allow common use cases like two write pointers to non-overlapping sub-regions of the same region. I would like to see algorithms like quick-sort accepted as safe. I am reasonably sure that there are some identities missing from rusts analysis. If I was going to take on Rust I would want to have solutions to the above problems before doing so. I have a feeling all of these problems are solvable, but not without breaking changes, so the question is, will Rust make them, are they even looking at this? How different from Rust would a language designed around getting the above type-theory correct would such a language look.
Again, for me Go's lack of generics makes it a non-starter. It's like going back to 'C' from 'C++', at first you appreciate the simplicity, and straightforwardness, but by the time you write your third linked list implementation for a different type, you are over it. They are adding generics to Go, but it's going to have added complexity because it's not in the original design, and they have to work around certain things. For me lack of interfaces for operators adds needless complexity to generics.
The thing is that neither of these languages are really a "target". They all tackle different aspects of the same problem space. The language I am looking at could be used for some problems you would use Go for but not all, and some problems you would use Rust for but not all.
I guess I the end I want to design the language I want, that fixes the issues I have with all the other languages I have programmed in. Designing a language is a big task, so I keep hoping someone else will do it for me. When I try a new language, or a new language is created, I get excited that this might be the one, so I start trying to implement solutions to common problems from my experience. I have written software in Assembly, C, C++, Logo, Java, Pascal, Haskell, Ada, Perl, Python, JavaScript, TypeScript, Prolog, Go, Rust, and maybe some I have forgotten. All of these have some parts I like , and some I dislike. The work in Stepanov's "Elements of Programming" is the best treatment of generics I have come across, but I find the use of C and pointers problematic. Ada does well without pointers and the generics are better than C++ templates, but it has some difficult restrictions that make efficient programs hard to write, like the inability to return a writable reference to an array cell, even if you are sure the array is still in scope.

@Ichoran and @keean I have continued the tangential discussion about Rust in the WD-40 issues thread #35 where it belongs.
I rebutted @Ichoran in the aforelined reply.

What happened to Issue 35 (WD-40: Reducing Rust...), they say its deleted...
@thickAsABrick
Sorry, to mention you again, but the original thread seems gone, here you can block mentions from other users: Link

Thanks, @sighoya


Initial swagger manifest for Intune

Hi @vrmurthy01, I'm your friendly neighborhood Azure Pull Request Bot (You can call me AZPRBOT). Thanks for your contribution!

It looks like you're working at Microsoft (vrmurthy). If you're full-time, we DON'T require a contribution license agreement.

If you are a vendor, or work for Microsoft Open Technologies, DO please sign the electronic contribution license agreement. It will take 2 minutes and there's no faxing! https://cla.azure.com.

TTYL, AZPRBOT;

@vrmurthy01 - Please take a look at this line for an example of how to define Resource.
https://github.com/Azure/azure-rest-api-specs/blob/master/arm-compute/2015-06-15/swagger/compute.json#L2674
You need to add this extension "x-ms-azure-resource": true to the Resource definition.

Thanks Amar. I added the azure resource extension tag now.


Use constants for error handling in C FFI

The C FFI should #define constants for error codes, and use them instead of relying random values.
This would allow to:

check directly for error if (chfl_trajectory_open(...) != CHFL_SUCCESS);
add the failure causes in documentation;
propagate errors to the bindings. In the Rust one, we could remove a lot of Result using this;

The C FFI should #define constants for error codes, and use them instead of relying random values.

Done in 87000e90043bec6b7c283b24d03ee5e8dc837be7

Documenting all the possible failures could be nice, but we will never eliminate all the failures from a function, because getting an exception from the STL is always possible, and checking all the code path would be too hard to do.


Action takes 5-6 seconds to download

It takes 5-6 seconds for workflows to download this repository as an action. I believe it's because the node modules directory is 300+mb. It includes at least two copies of typescript.
@aibaars suggests:

I think they could remove node-modules and compile the typescript code to a few minified scripts

Hi @jsoref,
Thanks for your suggestion. I will forward it to the team responsible for the Action and provide an update when I receive more information.


Unable to access VSCode behind inverse proxy

Web Browser: Chrome 87 or Firefox
Local OS: MacOS
Remote OS: Ubuntu 1804
Remote Architecture: Google Cloud
code-server --version:  3.8.0 c4610f7829701aadb045d450013b84491c30580d

Problem description:
When I try to access VSCode behind an inverse Proxy, I get a blank page. If I select "View source" in the blank page, I do see HTML. Not sure if its related to websockets or any other configuration.
[2021-01-19T09:27:24.443Z] info  Using user-data-dir /var/lib/code-server
[2021-01-19T09:27:24.464Z] info  Using config file ~/.config/code-server/config.yaml
[2021-01-19T09:27:24.464Z] info  HTTP server listening on http://<IP_ADDRESS>:8081
[2021-01-19T09:27:24.464Z] info    - Authentication is disabled
[2021-01-19T09:27:24.464Z] info    - Not serving HTTPS
[2021-01-19T09:27:48.587Z] debug forking vs code...
[2021-01-19T09:27:49.041Z] debug setting up vs code...
[2021-01-19T09:27:49.043Z] debug vscode got message from code-server {"type":"init"}
[2021-01-19T09:28:17.487Z] debug setting up vs code...
[2021-01-19T09:28:17.489Z] debug vscode got message from code-server {"type":"init"}
[2021-01-19T09:28:18.448Z] debug vscode got message from code-server {"type":"socket"}
[2021-01-19T09:28:18.548Z] debug vscode New connection {"token":"8fc9eda5-401e-4bda-b67b-90c649b132b6"}
[2021-01-19T09:28:18.676Z] warn  vscode Cannot read property '0' of undefined
[2021-01-19T09:28:18.680Z] warn  vscode Cannot read property '0' of undefined

Topology:
My URL is something like this: https://dc49045da149f3f-x.y.z.com
HTTPS -> HTTP
Browser <---> HTTPS Proxy <---> [ Proxy Agent Docker <---> VM with Vscode 3.8 ]
Tested:
Without Proxy:  Browser <---> [ VM with Vscode 3.8 ] Works
Without Proxy Agent:  Browser <---> Proxy <---> [ VM with Vscode 3.8 ] Fails
Proxy:
https://github.com/google/inverting-proxy
In Browser:
INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] waiting for 5 seconds before reconnecting...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] resolving connection...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] connecting to dc49045da149f3f-x.y.z.com:80...
log.ts:185  INFO [remote-connection][Management   ][8fc9e…][reconnect] reconnected!

Should I configure an extra setting in VSCode with my external URL ?
Any pointers are appreciated.
In View Source:
<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
<!DOCTYPE html>
<html>
  <head>
    <script>
      globalThis.MonacoPerformanceMarks = globalThis.MonacoPerformanceMarks || []
      globalThis.MonacoPerformanceMarks.push("renderer/started", Date.now())
    </script>

    <meta charset="utf-8" />

    <!-- Disable pinch zooming -->
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"
    />

    <!-- Workbench Configuration -->
    <meta id="vscode-workbench-web-configuration" data-settings='{"remoteAuthority":"dc49045da149f3f-x.y.z.com","logLevel":1,"workspaceProvider":{"payload":[["userDataPath","/var/lib/code-server"],["enableProposedApi","[]"]]},"homeIndicator":{"href":"https://github.com/cdr/code-server","icon":"code","title":"Home"}}' />

    <!-- Workarounds/Hacks (remote user data uri) -->
    <meta id="vscode-remote-user-data-uri" data-settings='{"$mid":1,"path":"/var/lib/code-server","scheme":"vscode-remote","authority":"dc49045da149f3f-x.y.z.com"}' />
    <meta id="vscode-remote-product-configuration" data-settings='{"nameShort":"code-server","nameLong":"code-server","applicationName":"code-oss","dataFolderName":".vscode-oss","win32MutexName":"vscodeoss","licenseName":"MIT","licenseUrl":"https://github.com/microsoft/vscode/blob/master/LICENSE.txt","win32DirName":"Microsoft Code OSS","win32NameVersion":"Microsoft Code OSS","win32RegValueName":"CodeOSS","win32AppId":"{{E34003BB-9E10-4501-8C11-BE3FAA83F23F}","win32x64AppId":"{{D77B7E06-80BA-4137-BCF4-654B95CCEBC5}","win32arm64AppId":"{{D1ACE434-89C5-48D1-88D3-E2991DF85475}","win32UserAppId":"{{C6065F05-9603-4FC4-8101-B9781A25D88E}","win32x64UserAppId":"{{CC6B787D-37A0-49E8-AE24-8559A032BE0C}","win32arm64UserAppId":"{{3AEBF0C8-F733-4AD4-BADE-FDB816D53D7B}","win32AppUserModelId":"Microsoft.CodeOSS","win32ShellNameShort":"C&ode - OSS","darwinBundleIdentifier":"com.visualstudio.code.oss","linuxIconName":"com.visualstudio.code.oss","licenseFileName":"LICENSE.txt","reportIssueUrl":"https://github.com/cdr/code-server/issues/new","urlProtocol":"code-oss","extensionAllowedProposedApi":["ms-vscode.vscode-js-profile-flame","ms-vscode.vscode-js-profile-table","ms-vscode.references-view","ms-vscode.github-browser"],"builtInExtensions":[{"name":"ms-vscode.node-debug","version":"1.44.14","repo":"https://github.com/microsoft/vscode-node-debug","metadata":{"id":"b6ded8fb-a0a0-4c1c-acbd-ab2a3bc995a6","publisherId":{"publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherName":"ms-vscode","displayName":"Microsoft","flags":"verified"},"publisherDisplayName":"Microsoft"}},{"name":"ms-vscode.node-debug2","version":"1.42.5","repo":"https://github.com/microsoft/vscode-node-debug2","metadata":{"id":"36d19e17-7569-4841-a001-947eb18602b2","publisherId":{"publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherName":"ms-vscode","displayName":"Microsoft","flags":"verified"},"publisherDisplayName":"Microsoft"}},{"name":"ms-vscode.references-view","version":"0.0.71","repo":"https://github.com/microsoft/vscode-reference-view","metadata":{"id":"dc489f46-520d-4556-ae85-1f9eab3c412d","publisherId":{"publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherName":"ms-vscode","displayName":"Microsoft","flags":"verified"},"publisherDisplayName":"Microsoft"}},{"name":"ms-vscode.js-debug-companion","version":"1.0.8","repo":"https://github.com/microsoft/vscode-js-debug-companion","metadata":{"id":"99cb0b7f-7354-4278-b8da-6cc79972169d","publisherId":{"publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherName":"ms-vscode","displayName":"Microsoft","flags":"verified"},"publisherDisplayName":"Microsoft"}},{"name":"ms-vscode.js-debug","version":"1.51.0","repo":"https://github.com/microsoft/vscode-js-debug","metadata":{"id":"25629058-ddac-4e17-abba-74678e126c5d","publisherId":{"publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherName":"ms-vscode","displayName":"Microsoft","flags":"verified"},"publisherDisplayName":"Microsoft"}},{"name":"ms-vscode.vscode-js-profile-table","version":"0.0.11","repo":"https://github.com/microsoft/vscode-js-debug","metadata":{"id":"7e52b41b-71ad-457b-ab7e-0620f1fc4feb","publisherId":{"publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherName":"ms-vscode","displayName":"Microsoft","flags":"verified"},"publisherDisplayName":"Microsoft"}}],"webBuiltInExtensions":[{"name":"ms-vscode.github-browser","version":"0.0.13","repo":"https://github.com/microsoft/vscode-github-browser","metadata":{"id":"c1bcff4b-4ecb-466e-b8f6-b02788b5fb5a","publisherId":{"publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherName":"ms-vscode","displayName":"Microsoft","flags":"verified"},"publisherDisplayName":"Microsoft"}}],"//":"https://github.com/VSCodium/vscodium/pull/155/files","documentationUrl":"https://go.microsoft.com/fwlink/?LinkID=533484#vscode","keyboardShortcutsUrlMac":"https://go.microsoft.com/fwlink/?linkid=832143","keyboardShortcutsUrlLinux":"https://go.microsoft.com/fwlink/?linkid=832144","keyboardShortcutsUrlWin":"https://go.microsoft.com/fwlink/?linkid=832145","introductoryVideosUrl":"https://go.microsoft.com/fwlink/?linkid=832146","tipsAndTricksUrl":"https://go.microsoft.com/fwlink/?linkid=852118","newsletterSignupUrl":"https://www.research.net/r/vsc-newsletter","commit":"c4610f7829701aadb045d450013b84491c30580d","date":"2020-12-18T20:25:37Z","version":"1.51.1","extensionsGallery":{"serviceUrl":"https://extensions.coder.com/api","itemUrl":"","controlUrl":"","recommendationsUrl":""},"codeServerVersion":"3.8.0"}' />
    <meta id="vscode-remote-nls-configuration" data-settings='{"locale":"en","availableLanguages":{}}' />

    <!-- Workbench Icon/Manifest/CSS -->
    <link rel="icon" href="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/src/browser/media/favicon.svg" />
    <link rel="alternate icon" href="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/src/browser/media/favicon.ico" />
    <link rel="manifest" href="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/src/browser/media/manifest.json" crossorigin="use-credentials" />

    <link data-name="vs/workbench/workbench.web.api" rel="stylesheet" href="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/lib/vscode/out/vs/workbench/workbench.web.api.css">

    <link rel="apple-touch-icon" sizes="192x192" href="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/src/browser/media/pwa-icon-192.png" />
    <link rel="apple-touch-icon" sizes="512x512" href="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/src/browser/media/pwa-icon-512.png" />
    <meta name="apple-mobile-web-app-capable" content="yes" />

    <meta id="coder-options" data-settings='{"base":".","csStaticBase":"./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server","logLevel":1,"disableTelemetry":false,"disableUpdateCheck":false}' />
  </head>

  <body aria-label=""></body>

  <!-- Startup (do not modify order of script tags!) -->
  <script data-cfasync="false" src="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/dist/pages/vscode.js"></script>
  <script data-cfasync="false" src="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/dist/register.js"></script>
  <script data-cfasync="false" src="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/lib/vscode/out/vs/loader.js"></script>
  <script>
    globalThis.MonacoPerformanceMarks.push("willLoadWorkbenchMain", Date.now())
  </script>

  <script data-cfasync="false" src="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/lib/vscode/out/vs/workbench/workbench.web.api.nls.js"></script>
  <script data-cfasync="false" src="./static/c4610f7829701aadb045d450013b84491c30580d/usr/lib/code-server/lib/vscode/out/vs/workbench/workbench.web.api.js"></script>

  <script>
    require(["vs/code/browser/workbench/workbench"], function () {})
  </script>
</html>

If you can I'd recommend using code-server --link. That uses our own
"inverting proxy" and handles everything for you.
As for the issue here, it looks like it's having trouble with
websockets. Are you using App Engine? The proxy readme says there are
extra steps to get websockets working there:
https://github.com/google/inverting-proxy#limitations

If you can I'd recommend using code-server --link. That uses our own
"inverting proxy" and handles everything for you.
As for the issue here, it looks like it's having trouble with
websockets. Are you using App Engine? The proxy readme says there are
extra steps to get websockets working there:
https://github.com/google/inverting-proxy#limitations

Thanks for replying, I'm using a Google internal version of the inverting Proxy. This version provides a shim.
I was curious if the Code Server is expecting some specific headers or require additional configuration if its behind a Proxy:
For example remoteAuthority and authority fields.
<!-- Workbench Configuration -->
    <meta id="vscode-workbench-web-configuration" data-settings='{"remoteAuthority":"dc49045da149f3f-x.y.z.com","logLevel":1,"workspaceProvider":{"payload":[["userDataPath","/var/lib/code-server"],["enableProposedApi","[]"]]},"homeIndicator":{"href":"https://github.com/cdr/code-server","icon":"code","title":"Home"}}' />

or
<meta id="vscode-remote-user-data-uri" data-settings='{"$mid":1,"path":"/var/lib/code-server","scheme":"vscode-remote","authority":"dc49045da149f3f-x.y.z.com"}' />

Thanks for replying, I'm using a Google internal version of the inverting Proxy. This version provides a shim.
I was curious if the Code Server is expecting some specific headers or require additional configuration if its behind a Proxy:
For example remoteAuthority and authority fields.
<!-- Workbench Configuration -->
    <meta id="vscode-workbench-web-configuration" data-settings='{"remoteAuthority":"dc49045da149f3f-x.y.z.com","logLevel":1,"workspaceProvider":{"payload":[["userDataPath","/var/lib/code-server"],["enableProposedApi","[]"]]},"homeIndicator":{"href":"https://github.com/cdr/code-server","icon":"code","title":"Home"}}' />

or
<meta id="vscode-remote-user-data-uri" data-settings='{"$mid":1,"path":"/var/lib/code-server","scheme":"vscode-remote","authority":"dc49045da149f3f-x.y.z.com"}' />


[Request]  Option to turn off the tooltip text on the hud

The reason why is that if you combine this mod with the dead and bored mod (which lets you talk as the enemies), you can pull pranks on your friends by letting them think that the Skinwalkers mod is scarily accurate with its responses. But with the tooltip text in the spectate hud, they can kinda get a suspicion that another mod is in play.
I share my Lethal Company mod via a profile file from r2modman and tell them not to look at the mods (so they shouldn't know that another mod is in play), so it would be funny if the illusion of amazing responses of the enemies would last longer.

This is now a config option as of v2.3, simply open the .cfg file and change Hide Controls to true.


Add the Substrate Service Tasks dashboard

Exports the Grafana dashboard that we use to monitor the CPU-related concerns of the node.
Screenshots:

I don't think anyone else is going to review this, so:

bot merge


Can you add support for open ai realtime api?

Your issue may already be reported!
Please search on the issue tracker before creating one.
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

Duplicate of #869


⚠ Bofrost.at has degraded performance

In f1d062b, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1328 ms

Resolved: Bofrost.at performance has improved in 8004607 after 20 minutes.


ventoy-full: 1.0.96 -> 1.0.97

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/ventoy/Ventoy/releases.
meta.description for ventoy-full is: A New Bootable USB Solution
meta.homepage for ventoy-full is: https://www.ventoy.net
meta.changelog for ventoy-full is: https://www.ventoy.net/doc_news.html
Updates performed

Version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 1.0.97 with grep in /nix/store/a43g6pmphmgc7f7494xziw2v3g1isf9z-ventoy-1.0.97
found 1.0.97 in filename of file in /nix/store/a43g6pmphmgc7f7494xziw2v3g1isf9z-ventoy-1.0.97

Rebuild report (if merged into master) (click to expand)

2 total rebuild path(s)

2 package rebuild(s)

First fifty rebuilds by attrpath
ventoy
ventoy-full

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/a43g6pmphmgc7f7494xziw2v3g1isf9z-ventoy-1.0.97 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A ventoy-full https://github.com/r-ryantm/nixpkgs/archive/e4b028b085f71a9555c68424fa5eb7c8de59fa1b.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/e4b028b085f71a9555c68424fa5eb7c8de59fa1b#ventoy-full

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/a43g6pmphmgc7f7494xziw2v3g1isf9z-ventoy-1.0.97
ls -la /nix/store/a43g6pmphmgc7f7494xziw2v3g1isf9z-ventoy-1.0.97/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

2 packages built:

ventoy
ventoy-full

Maintainer pings
cc @AndersonTorres for testing.

Will be closed by https://github.com/NixOS/nixpkgs/pull/283508


CARDS-1851: Add Cancel button to all single-configuration admin screens

Includes:

CARDS-1851 - Add Cancel button to all single-configuration admin screens
Refactoring of all single-config admin screens with the introduction of a new component AdminConfigScreen that handles loading, saving, displaying buttons
fetchWithReLogin is now used in these screens for loading and saving the configuration instead of simple fetch
The Save button is now disabled when there are no pending changes instead of having the label Saved

Testing:

Start in proms mode
Navigate to Administration
Test the entire functionality (loading the config, changing and saving the config, using the config) of these admin sections:

Quick search
Downtime warning
Patient Portal Welcome Message
Patient Portal Terms of Use

Reviewing:

Ignoring whitespace changes might help see better what parts of the affected admin section components have been moved to AdminConfigScreen.

Question:

[Usability] Should the Save button "close" the current admin screen and direct the user to the admin dashboard?

There is one inconsistency. On the Quick search page, SAVE button is enable once changes are made. The other 3 do not have this feature.
I personally prefer the behavior in the Quick search.

@marta On a second though, CLOSE should behave same way as SAVE ---> action, disable button and no closing. Enable button again once changes are made.

Re-implemented as a Reset button in c148983:

Restores the settings first loaded on the page
When clicked, a confirmation dialog appears informing the user about the consequences of resetting and presenting possible next steps (reset, drop unsaved changes, cancel)

After clicking on YES, RESET the dialog should close.

Here is a really weird thing that sometimes happens. In the attached video, everything seems to work as expected until the very end when action of clicking on the YES, RESET button, would not disable RESET TO INITIAL SETTINGS button. The button gets disabled after second click on YES, RESET.
https://user-images.githubusercontent.com/23243244/177916994-7ef69717-570b-40ec-88df-d095dbefd6bf.mp4

After clicking on YES, RESET button, the Confirm configuration reset dialog should close.

Added forgotten line to close the dialog in 895e206.
Probably outside of the scope, I would make SAVE and RESET to INITIAL SETTINGS buttons disabled when the page initially open.
I had them disabled for a while and thought it looked broken with all bittons disabled.

@sdumitriu Updated the documentation for AdminConfigScreen in 7e6f8bf.
@sashaandjic The latest changes are comments and proptypes and don't really need retesting.


Direct from thingverse upload to Manyfold

Has anyone looked at adding a feature that allows pasting of a model ID from thingiverse (or any of the other model libraries) for downloading directly to Manyfold?
Thinking of either a set of inputs on the upload page, or its own dedicated upload page, that shows something like :
Upload from Thingiverse : xxxxxx
Upload from Printables : xxxxxx

When you find a model on thingiverse, you note the ID, goto Manyfold, enter the ID number in the upload page, and Manyfold will grab the model files, author/license/tags etc. without having to download zip files, upload, then copy/paste tags/author/license info between 2 pages.

There is an open issue for collection syncing to other sites (#487), but I love the approach of just pasting a URL from a compatible site (no need for finding IDs etc, we can work those out) and having Manyfold slurp it in. This would be a great addition!


Error running initcouch2.sh on Win10

Expected behavior:
All the commands issued by the script shall return: {"ok":true}.
Actual behavior:
At line 18, the following command:
curl -X PUT $SECUREHOST/_users/_security -d '{ "admins": { "names": [], "roles": ["admin"]}, "members": { "names": [], "roles": [admin]}}'
returns this message:
{"error":"bad_request","reason":"invalid UTF-8 JSON"}
Steps to reproduce:
Run .bash -o igncr /scripts/initcouch2.sh in a cygwin environment.
Screenshots (if applicable):
OS and Browser:
Software versions:

Windows 10 x64
CouchDB <IP_ADDRESS>
CYGWIN_NT-10.0 2.3.1(0.291/5/3) x86_64 Cygwin

(Maybe) a solution:
Fixed locally by modifying the command, adding the missing double quotes to the latest admin role:
curl -X PUT $SECUREHOST/_users/_security -d '{ "admins": { "names": [], "roles": ["admin"]}, "members": { "names": [], "roles": ["admin"]}}'
This way it worked fine (at least, an {"ok":true} was returned by issuing the so-fixed command).

I had the same issue and the fix posted here works as well.  I can submit a PR.

@jonathanihm please do and thanks to you and @TBuc

I'm pretty new so I was awaiting feedback before doing anything. Thank you @jonathanihm for submitting the PR, great :-)


must use bootstrap css

this component is dependency on bootstrap css, when someone using element ui css, it is conflict, consider using the component without bootstrap?

In fact this library is not using bootstrap css.
Bootstrap css is used only for the example.
Which class gives conflict with element ui?


FS-2052-set-lang-arg-params

Needs to bump the version number

Needs to bump the version number

done! thanks


Update fetch occurrences method

Update fetch occurrences method in Rode to fetch build occurrences which reference the primary resource URI and compile a list of related resource URIs then fetch and return occurrences for all resource URIs

@alexashley brought up a good point that we should update the ListOccurrencesRequest to accept the resource URI instead of a filter since List Occurrences will need to make multiple calls to grafeas with different filters.


measure_answer.py:23: Перенести классы в отдельные файлы 26

The puzzle 899-4d40aaa2 from #899 has to be resolved:
https://github.com/blablatdinov/tg-quranbot/blob/faf3d14afbd20f44e1eebc1b0ab150628e5ddda5/src/integrations/tg/tg_answers/measure_answer.py#L23-L23
The puzzle was created by Ilaletdinov Almaz on 20-Jun-24.
role: DEV.
If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

The puzzle 899-4d40aaa2 has disappeared from the source code, that's why I closed this issue.


Path is mismatching?

Hi.
I found bug related to uWS.App() methods (get, post)
Code
import uWS from 'uWebSockets.js';

const app = uWS.App();

app.get('/', (res) => {
  res.end('hello world');
});

app.get('/foo/', (res) => {
  res.end('hello at /foo/');
});

app.get('/bar', (res) => {
  res.end('hello at /bar');
});

app.listen(
  4000,
  (token) => token && console.debug('server started at port', 4000)
);

Test

Run the code above
Go-to browsers and try to run these urls

URL
Passing
Error

/foo
No
Yes

/foo/
Yes
No

/bar
Yes
No

/bar/
No
Yes

Question
Is there possible to define path which works both with /foo and /foo/ or /bar and /bar/?
Thanks for best project

ya just do this:
const handler = (res, req) => res.end(`hello at ${req.getUrl()}`)
app.get('/foo', handler)
app.get('/foo/', handler)

can also do this way, I prefer to process the path/method in the js part of any('/*') handler:
app.any('/*', (res, req) => {
  const method = req.getMethod()
  const path = req.getUrl()
  switch(path) {
    case '/foo':
    case '/foo/':
      return res.end(`hello at ${path}`)
  }
  return res.writeStatus('404').end()
})

Also see this issue: https://github.com/uNetworking/uWebSockets/issues/1049#issuecomment-626508774
trailing slash is considered a different URL so it's not a bug, a solution could be to check for trailing slash in your handler and redirect to non-trailing slash url
app.any('/*', (res, req) => {
  const host = req.getHeader('host')
  const path = req.getUrl()
  const query = req.getQuery()
  if(path.endsWith('/')) return res.writeStatus('301').writeHeader('Location','https://'+host+path+query).end()
  // handle rest here
})

@hst-m Thanks for temporarily solution, but it worked before (not remember on which version).
But recently got new bug at here and myself also faced this issue

I fixed it in my project new release with hot-fix temporarily solution.
I'm think will be correct if this behavior fixed, but i may be wrong as i don't have enough experience in HTTP Specs.
Anyway thank you @hst-m for fast reply

ok just to note, they are different urls can read here: https://webmasters.googleblog.com/2010/04/to-slash-or-not-to-slash.html
but looks like you got a fix for your project 👍

As i know, express exposes on both slash and without slash


Cover new build cache access authentication method in wizard and documentation

For example, see here.

This was snuck in with #673 and is available in version 2.7 of the Develocity Build Validation Scripts.
Gradle
https://github.com/gradle/gradle-enterprise-build-validation-scripts/blob/5a22aff39b59b2bc9f2e2422243047f1b234a375/components/scripts/lib/interactive-mode.sh#L99-L113
Maven
https://github.com/gradle/gradle-enterprise-build-validation-scripts/blob/5a22aff39b59b2bc9f2e2422243047f1b234a375/components/scripts/lib/interactive-mode.sh#L140-L155
Closing this issue.


Stop handler write race by failing before content channel is created [run-systemtest]

@baldersheim PTAL


Server-side manager and UI features and functionality

[ ] Allow adding/removing mods by Steam Workshop link (extract the Mod ID from the link) or just the straight Mod ID. Adding or removing a mod should modify the modlist.txt that gets shipped to the user, and it must change the list of mods that are downloaded from Steam Workshop via steamcmd.
[ ] Update all mods or a single mod from Workshop - allow updating the mod binaries (.pak files) from Steam Workshop. This would be a single button that just does it for all mods, or a check list for selecting some but not all mods to update from Workshop. Does not modify modlist.txt.
[ ] Override mod with uploaded .pak file - allow supplying a specific version of a mod superceding the one from Steam Workshop. Allows us to "freeze" on a specific version.
[ ] Users - different levels of access with a password. Doesn't need to be dynamic a la user database; I was thinking a static password per permission level in a JSON file for starters. One level would contain the full suite of things the program can do; another level would be more limited and only allow updating existing mods from Steam Workshop.
[ ] rsyncd process management. The manager should be the parent process for rsyncd and should manage its command line arguments and lifecycle. We should allow the admin to restart rsyncd from the UI as well as view the logs.
[ ] Host a dynamic .zip file containing this server's client json settings file (conanpatcher_config.json) by downloading the latest release .zip from Github and adding this server instance's json to the zip file. Prevents the admin from having to do the zip / FTP upload process manually. Bonus: Allow the admin to either specify "latest" release of the client, or freeze on a specific version.
[ ] Configuration setting needed: Where on the filesystem is modlist.txt (that we can modify)? We need to know, because the server will be hosting modlist.txt over HTTP. I suppose we could use rsync, but the current client tries to grab modlist.txt over HTTP. We might want to revisit that. Also, with a webserver, we have to have the user mess with permissions, e.g. adding www-data group to the user running the server manager.
[ ] Write a systemd unit file for launching the manager on system startup. Devuan or pre-systemd Ubuntu users can write their own init scripts.
[ ] Consider that this may well be run on a Windows Server because the game server process is Windows only for now. "Normal" dedicated servers will probably run the patcher and the game on the same server. As a result, it should be tested on Windows, and maybe have a Windows start script or a way to programmatically add it to startup on Windows.
[ ] Support backing up and versioning builds of the Conan client and server (both). Haven't decided if the best way is to use a binary delta / patch algorithm or if that's too error-prone. This would allow "freezing" on a given version of Conan if a patch breaks it.

We should break this out into separate issues. Also, several of these ideas have an impact on the client.


set default encoding to UTF-8

chinese  content   display  err  because default  encoding is ANSI_X3.4-1968

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

 All committers have signed the CLA.


feat: include proxy configuration

include support for:
system proxy -> proxy configuration on the networking level (host, port)
api proxy -> proxy configuration on the API level (host, port, endpoints)

proxy client


create backend for view only collaborators

Description

Checklist:

[ ] Have you documented your changes in the pull request description?
[ ] Does the change present any security considerations?
[ ] Is any gem functionality overloaded? Eg: Devise controller methods being overloaded.
[ ] Has acceptance criteria been tested by a peer?
[ ] Has the CHANGELOG been updated? (If change is worth telling users about.)

General testing (author)

[ ] Test without JavaScript
[ ] Test on small screen

Accessibility testing (author)

[ ] Works keyboard only
[ ] Tested with one screen reader
[ ] Zoom page to 400% - content still visible
[ ] Disable CSS - does content make sense and appear in a logical order?

 (5) Add view-only case permissions for teams (backend support)

picking up this now, please do not merge until I confirm.


Codecov update on GitHub actions

Update on setup.cfg so that along with build, codecov is run whenever we make a pull request/commit to main branch

Codecov Report

Merging #125 (0aba3f9) into main (cadf09a) will increase coverage by 0.24%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##             main     #125      +/-   ##
==========================================
+ Coverage   95.09%   95.33%   +0.24%
==========================================
  Files           6        6
  Lines         387      407      +20
==========================================
+ Hits          368      388      +20
  Misses         19       19

Impacted Files
Coverage Δ

service/routes.py
95.62% <0.00%> (+0.29%)
:arrow_up:

service/models.py
94.02% <0.00%> (+0.37%)
:arrow_up:

service/error_handler.py
90.62% <0.00%> (+2.16%)
:arrow_up:

Continue to review full report at Codecov.

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


Add rollaxis and moveaxis

Would be nice to have Dask Array implementations of rollaxis and moveaxis. This can probably be done relatively easily by building off of transpose.

These functions already work on dask arrays, since they are defined in terms of the transpose method:
In [1]: import numpy as np

In [2]: import dask.array as da

In [3]: x = da.ones((10, 11, 12), chunks=7)

In [4]: np.rollaxis(x, 0, -1)
Out[4]: dask.array<transpose, shape=(11, 10, 12), dtype=float64, chunksize=(7, 7, 7)>

In [5]: np.moveaxis(x, 0, -1)
Out[5]: dask.array<transpose, shape=(11, 12, 10), dtype=float64, chunksize=(7, 7, 7)>

So we could probably just add appropriate aliases here.

I see. Should we be relying on an implementation detail of these functions though? Not that I'd expect them to change much (if at all). Just being cautious. FWIW it should be equally trivial to write them using Dask alone.

I'm not 100% sure about rollaxis (you should check the numpy test suite),
but certainly this is absolutely intended for moveaxis -- I wrote that test
case myself. If you prefer, you can also copy there implementations
verbatim -- this is why we use compatible licenses.
On Wed, Jul 26, 2017 at 8:17 PM jakirkham<EMAIL_ADDRESS>wrote:

I see. Should we be relying on an implementation detail of these functions
though? Not that I'd expect them to change much (if at all). Just being
cautious. FWIW it should be equally trivial to write them using Dask alone.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/dask/dask/issues/2559#issuecomment-318247246, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABKS1q9yBlWoKPp5CpAUWFOh1w4GN0_Yks5sSAFNgaJpZM4OjdPH
.

Certainly having test cases for it is good. I'm just wondering do the docs spell this out somewhere? Ideally the API description would say this, but I'm not seeing it. Am thinking about this from the perspective of a C/C++ programmer where the docs really are the gold standard about what the library does.
No strong preference as long as these behaviors are documented and tested this way. Sounds like we know moveaxis is tested this way. The doc change should be easy if it is agreeable. rollaxis will take some research and at least a doc addition (if not a test addition as well).

Also this comment is interesting.

I'm just wondering do the docs spell this out somewhere? Ideally the API description would say this, but I'm not seeing it. Am thinking about this from the perspective of a C/C++ programmer where the docs really are the gold standard about what the library does.

Agreed, see https://github.com/numpy/numpy/issues/9476.

I'm labeling this as good first issue.  It sounds like providing an alias like
rollaxis = np.rollaxis

providing some tests and adding this to the api docs in docs/source/array-api.rst would be enough

I could spend some time on this to make a PR in the style @mrocklin proposes, but am somewhat confused by @jakirkham 's work on this. Can I just start a new PR trying the aliassing?
Also, I saw this: https://github.com/numpy/numpy/issues/11658, should I take this into account in any way?


sourcekitd/CMakeLists.txt: Add a flag for building sourcekitdInProc as a static library.

A bit of refactoring too.

@swift-ci Please smoke test

rdar://problem/30413172


Fix grammatical errors

Hi,
I've fixed couple of grammatical errors in the readme. Kindly please check the same and let me know if we can merge those or not.
Thanks!

Thanks for the suggestion! I think the content is fine as-is without the extra commas. Hope that's OK!


How many prototypes are actually set?

Good work!
Several questions:

How many prototypes are actually set?
The SQ is just that with probability 0.3, the question itself will have the next token prediction loss?

Good work!
Several questions:
1. How many prototypes are actually set?

2. The SQ is just that with probability 0.3, the question itself will have the next token prediction loss?

We set the number of prototypes to 256.
We randomly unmask 30% - 50% of all questions to train the LLM with the next token prediction loss.


Updated /asns, /cdns and /divisions to use the CRUD interface

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1035/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1037/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1056/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1059/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1061/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1062/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1076/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1077/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1082/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1083/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/incubator-trafficcontrol-PR/1084/
Test PASSed.

tested all endpoints for compatibility with original Perl versions..


BLAKE3 collision resistance

How collision resistant are BLAKE3 hashes of different length comparing to the following table from Wikipedia?

Hash function
Security claim
Best attack
Publish date
Comment

SHA256
2**128
31 of 64 rounds (2**65.5)
2013-05-28
Two-block collision.[3]

SHA512
2**256
24 of 80 rounds (2**32.5)
2008-11-25
Paper.[4]

SHA-3
Up to 2**512
6 of 24 rounds (2**50)
2017
Paper.[5]

BLAKE2s
2**128
2.5 of 10 rounds (2**112)
2009-05-26
Paper.[6]

BLAKE2b
2**256
2.5 of 12 rounds (2**224)
2009-05-26
Paper.[6]

I am especially interested to compare BLAKE3 128 to BLAKE2s 128 as it is the digest size (#107) I'd like to use.

The collision resistance security claim of BLAKE3 is the same as that of BLAKE2s, i.e., 2**128.

@sneves and if I want to used 128bit hashes.. Does BLAKE3 allows to produce them? What will be their security claim (2**64?) and can they be considered secure for content addressing?

Yes, the collision resistant is min(2**(output_size/2), 2^128) for arbitrary output sizes.

Does BLAKE3 allows to produce them?

Yes, for example the Rust API provides OutputReader::fill, which will produce an output of any size you like. Shorter outputs are prefixes of longer ones, so if you want an output shorter than 256 bits, another way to get the same result is to just truncate the standard output. There's no performance difference between either approach.

One last question to explain the collision resistance. Both BLAKE3-128 and BLAKE2s-128 have a collision resistance of 2**64.
Does that mean that the minimal file size where collisions are possible is 18.4467441 EB (2**64 in exabytes)?

In case you're curious - I am trying to add BLAKE into W3C SRI standard - https://gitcoin.co/grants/3451/add-blake2-into-w3c-sri-spec

@abitrolly No, it's probability, so for any 2 randomly given inputs A and B where A != B, there's a 1/2^64 chance that H(A)==H(B).
So the more inputs you sample the larger the probability that some pair of unequal inputs will have the same hash.
Theoretically it is as probable that 2 single bytes inputs have the same hash as 2 huge files having the same hash.

@elichai and what if I want construct input B (which is != A) with a specific goal of creating a collision? Is it possible to convert probability into the minimal size of data that needed to be generated to generate a collisions?
Can we take a file as a coin, throw as a comparision to another unique file, and flip as a collision between these files to explain the probability? Then we need to throw it 2^64 times to ensure we've a got flip, right? Each file with unique content is a throw. So there are 256  (2^8) unique files with a size of 1, then 2^16 (65536) unique files with the size of 2, 4 bytes give 2^32 combinations, and bruteforcing 8 bytes file generates 2^64 throws that are necessary to generate a flip. I feel like there is some substantial flaw in my thinking, but I don't know where.

@abitrolly If you mean by "minimal size of data that needed to be generated to generate a collisions"  to be guaranteed collision, then you need to match the output size + 1 (here that will be 2^128+1) - This is from the pigeonhole principle.
Now when people speak about the collision resistance of something, they take into account the Birthday Bound, Which roughly means, that if you have some function f(x) that randomly maps x to an output space of 2^n, then by sampling 2^(n/2) there's ~50% probability that 2 inputs you've sampled will produce the same output.
As for your examples, if your application doesn't allow inputs with more than X bits, then you've restricted the input space of the hash function, but you've also made it much easier to break preimage resistance as the attacker can just brute forcefully exhaust the input space.
Especially as you've shown that even if you allow 8 bytes input then that is enough to get 2^64 inputs which have 50% probability of containing a collision in the output (note that this assumes that if your input is incremental the output is still uniformly distributed)
If you want to learn more about the birthday bound Dan Boneh has a great video about the mathematics of it: https://www.youtube.com/watch?v=5VY2KEh9WrE.

Does that mean that the minimal file size where collisions are possible is 18.4467441 EB (2**64 in exabytes)?

"Minimal file size" isn't usually how we think about these things, but it would be much more accurate to say that the minimal file size is 64 bits. Much smaller than you were thinking.
Saying that you have 64 bits of collision resistance implies that you'd need to try 264 inputs to have a ~50% chance of finding a collision. One way to generate that many inputs is to try all the integers from 0 to 264. Those all fit in 64 bits, which is why you don't need any large files like you were imagining. In short, exponential growth is very fast.

Thanks for the explanation. That's not what I expected, indeed.

Having 64 bits of collision resistance means that you need to try 264 inputs to have a ~50% chance of finding a collision.

So given the average hashrate of BLAKE3 as 6.866 GiB/s (2^30 bits) the time to find a BLAKE3 collision would be (2^64/(6.866*2^30))/3600/8760=79.34 years. Or 80 c5.metal instances running for a year.

And it will take only 2^64/((10^12)12210^6)=0.1512 seconds to find a collision using Bitcoin network, which a hash rate of about 122M TH/s (https://ycharts.com/indicators/bitcoin_network_hash_rate).
And the total number of bits passed though the hasher to get a ~50% of collision will still be 2^64 or 18.4467441 EB.

(2^64/(6.866*2^30))/3600/8760

There are some subtleties here, because the block size of BLAKE3 (and BLAKE2s) is 64 bytes, and you have to be hashing full blocks to get the full value of that GB/s figure. In our case we're only hashing 64 bits = 8 bytes out of 64, so real throughput will be lower by at least a factor of 8. (In a sense, 7/8ths of our work gets wasted hashing padding.) This also assumes that you get to take full advantage of our parallelism optimizations, and in theory that's equally possible for "many small inputs" as it is for "one big input". But in practice our implementations don't provide any way to access those optimizations in the "many small inputs case", so you'd have to write a lot of custom code to make this work. (Notably, my BLAKE2 implementations do provide these APIs, but probably no one actually uses them.)
On the other hand, each of those c5.metal instances has ~46 physical cores, so there's a big speedup that you should include in the math :)

And the total number of bits passed though the hasher to get a ~50% of collision will still be 2^64 or 18.4467441 EB.

I think since each int is 64 bits, it's more like 264 * 64 = 270. But then again, because these aren't full blocks, the majority of compression function input is actually block padding null bytes, and it's not clear whether we should count those as "real input" or not.
But yes long story short, 64 bits of security is not a lot, and you can brute force it with a budget that's big by individual standards but small by tech company or government standards. And those numbers will keep going down over time.

But yes long story short, 64 bits of security is not a lot, and you can brute force it with a budget that's big by individual standards but small by tech company or government standards. And those numbers will keep going down over time.

That answers my question if a hash with 2^64 collision resistance is enough for content addressing, and the answer is unfortunately - no. Because it would be too easy for a government or a tech company to produce a collision, so some additional checks are needed.. I hoped 128-bit hashes could be used, because they double save the space for indexes.
An example of the real world collision would still be welcome. Maybe it is still possible to create a content addressing network design that protects against collision attacks or warns about them without relying solely on a single hash size.

Thanks for the answers. Maybe not for content addressing, but I would still consider using 128-bit hashes as a checksum in applications that are not that critical that some government would be interested in breaking them.


[FFmpeg] Add support for VP8/VP9 codecs

Added vpx feature to ffmpeg to support WebM VP8/VP9  codecs.
Resolves #6449.

Same errors again (see https://github.com/microsoft/vcpkg/pull/6729#issuecomment-498871549):
error: failed to update mingw32 (unable to lock database)
error: failed to update mingw64 (unable to lock database)
error: failed to update msys (unable to lock database)
error: failed to synchronize all databases

Sorry about those database locking errors, we're working on ironing them out. I just want to make sure that this PR is only meant to enable VP8/VP9 on Windows right?

Yes, enabling VP8/VP9 on Windows only. Should work for other platforms too, though libvpx port currently supports Windows only.

I'm going to allow this for now because it works for you and doesn't break anything else but the mechanism you are using to detect whether or not we're compiling a debug library will only work on windows. A better fix would have been to work on the upstream port. I'm going to be doing just that for BZip2 to get it to work with ffmpeg without the kind of patching you did so I might revisit this then.


Updating to use public apt

Description
i was trying to get debs to build on CircleCI but was getting:
cp: cannot stat ‘vendor/src/github.com/connectedventures/f8-pkg/world’: No such file or directory
dpkg-deb: building package `f8-connection-gateway' in `deb_gateway.deb'.
Produced f8-gateway_0.0.0--_amd64.deb
curl: (7) Failed to connect to internal.apt.fresh8.tech port 80: Connection timed out
curl: (7) Failed to connect to internal.apt.fresh8.tech port 80: Connection timed out
curl: (7) Failed to connect to internal.apt.fresh8.tech port 80: Connection timed out
curl: (7) Failed to connect to internal.apt.fresh8.tech port 80: Connection timed out```

So I've updated to use apt.fresh8.tech instead of the internal which will only work for drone.

This would break most of our services as they are relying on aptly being available on that address. Circle CI support is being added on the feature/support-circle branch.


Make ECR handle filename that contains quotation marks

resolves #12928
This is just an attempt to solve the problem; I don't personally know if this approach has any issues, so I leave this mostly as a draft.
There might be a need for more of a rework to make the system more robust, this is mostly just intended as a quick fix.

I don't think this works as a solution. It just narrows down the conditions, but doesn't really solve the problem. It would still break on a file called ",foo.ecr.
A proper fix should employ escaping when writing and reading the file name, as mentioned in the OP:

This happens because ECR.append_loc does not escape the filename for the loc pragma. But also Crystal's lexer doesn't support escape sequences there in the first place:

Yeah that seems like more of  a rework


Using flyway java(groovy) migrations for sql compatibility with diff DBs

E.g. MySQL and H2 sql commands are different. Using flyway's java (i.e. groovy in our case)
migrations, instead of sql migrations, we can have tailormade sql commands for each db.
Also fixed the stubAppRunner (i.e. cucumber tests) to read and apply the database/flyway
config from yaml file (instead of hardcoding it)
References #103

This is a good cut; I like reading code on the weekends :D
There is a lot of duplicated code between the statement preparation and the "h2" connector checking. Can you put a Groovy class in the db.migration package which would be DeployDBMigration or something like that which implements JdbcMigration and allows us to consolidate some of these common behaviors between our migrations?
We also need to implement getChecksum for checksumkming and validation to make sure we can use Flyway's change detection. I think that getChecksum can just be implemented in every class to return the migration number (e.g. "3", "4", etc)
I would suggest making the API something like the following to make our migrations easier, I've not tested this code so YMMV :):
@TypeChecked
abstract class DeployDBMigration implements JdbcMigration, MigrationChecksumProvider {
    protected Logger logger = LoggerFactory.getLogger(DeployDBMigration.class)

    /** Implementing classes responsible for providing a list of String commands */
    abstract List<String> prepareCommands(DatabaseMetadata metadata)

    @Override
    void migrate(Connection connection) {
        executeCommands(connection, prepareCommands(connection.metaData))
    }

    /** Tell me if I'm executing this migration on this driver */
    Boolean isH2(String driverName) {
        return driverName.matches("(?i)H2")
    }

    /** Execute the commands after preparing all the statements */
    private void executeCommands(Connection connection, List<String> commands) {
        commands.each { String -> command
            logger.info("Preparing statement for: ${command}")
            PreparedStatement statement = connection.prepareStatement(command)

            try {
                statement.execute()
            finally {
                statement.close()
            }
        }
    }
}

class TylersFirstMigration extends DeployDBMigration {
    List<String> prepareCommands(DatabaseMetadata metadata) {
        if (isH2(metadata.driverName)) {
            return ["Some H2 Query"]
        }
        return []
    }
}


Does pusher_channels support pusher private channel?

Hello there,
Thanks very much for creating such an easy package for Pusher integration. I am currently using it as public channel with my flutter app. Is this support private channel too? I couldn't find doc related to it.

The support for private channels are not implemented yet. But we should implement it in the future. Contribution are welcome.