935 karma · joined September 23, 2016
Echo cancellation typically can't be application layer. The APIs I've seen (Android, iOS, WebRTC), require low level latency and works best as close to hardware as possible.
{ echoCancellation: true } as a track constraint in getUserMedia works.
Trying to provide an alternative to zoom/google.
I wrote the UI and my friend did the backend. One key point for me personally is doing privacy right. No identifiable data in logs etc. Tricky cause there will always be an element of "trust us".
Next weekend I hope to implement the experimental e2ee feature in WebRTC. Only for chrome so far, but maybe it'll take off for all browsers.
We share it for free now and we hope it will take off. If it is successful, we will think about bandwidth costs and monetization later. One thing this does give us already now is "free testing" of our Live server infra. The idea is an old one, that any meeting room can be created on the fly like https://goteam.video/whatever-you-want Performance wise we regularly have meetings with 20+ people, how this scales out is yet to be determined (please tell me if you find a limit!). If it takes off, we also plan to build native mobile clients (no cross platform frameworks).
Details: It's a full mesh network built on AWS where we put a server in every available AWS region. It's not using WebRTC peer-to-peer but instead opts for client-server. This obviously has privacy drawbacks, but recall our main business is _recording_ live sessions, so even if we don't (yet) allow recording of meetings, the solution is mainly for that scenario. However our experience is that client-server typically works better for meetings spread out over the globe because AWS internal transits are much faster than the open internet.
We're trying to do privacy right, I wrote some about it here: https://tinyurl.com/y9mv9jgm
Happy to answer any questions about the tech or otherwise!
WebRTC is a collection of underlying protocols, SDP, STUN, DTLS, RTP, SCTP. A superficial glance it seems to make sense, each of these RFCs provide some aspect needed in WebRTC.
However. These standards are from a naive happy time when the internet was open and routable, which means it's only some subset of said standards needed. The main WebRTC RFC fails at pinning down which, so it's down to the implementations to find some happy subset that works.
Trying to implement it is so frustrating. At every corner you follow links to some underlying RFC, start reading and coding only to realize "is this even used?!"
SDP is maybe the single worst thing in this mess. It's a terrible flat file description of structured data organized differently depending on "plan-b" or "unified". It would be super easy to convey what SDP tries to convey in any purpose built format.
On a conceptual level there are too many abstractions in the API. MediaStream and RTPTransceiver are my two pet peeves. MediaStream is maybe nice in client code to group some tracks together into a player, but the abstraction should stay on that level. RTPTransceiver is just beyond me. Why do I want it? How does this help?
once the ice candidates are exchanged each side starts spraying the other with STUN messages to addresses ranked by "candidate pairs" that potentially could make a connection until one is found.
this is simplified. there are mechanics like "trickle ice" and fallbacks to proxying via TURN servers.
then there's the alleged idea this is all part of a webrtc "standard", which is laughable cause no browser follows the wild collection of RFCs that supposedly makes up the standard and the only reason any of it works is because there's a non written down general consensus of what's required.
Your half right about the devils.
Beef however is per definition a cow killed to be eaten.
Tokio is a lot about IO. The resources the scheduler is waiting for will almost exclusively be network and file operations.
There is a risk that a task does some long running CPU work on the back of a future or uses sync network/file operations. Maybe a preemptive scheduler could help then, but I'm not convinced by your argument that tokio needs to optimize for this.
No. That's actually very different, I struggle to see any parallel.
> What you're doing is being deliberately vague to get away with blaming/accusing someone of something you wouldn't be able to get away with accusing them of directly.
Of course not. I'm deliberately using words that leave wiggle room, but not for the reasons you think. I believe in processes, not essences, I might sloppily say "Stallman is a misogynist", but I mean "Stallman's actions are misogynistic".
In a similar way, when trying to describe someone else's perspective I would not use absolute language. I can't presume to completely understand another person's experience. In order to be inclusive, I relay my general understanding with language that deliberately doesn't make hard borders for inclusion or exclusion.
Specifically, you suggest fixes to my language that change my meaning:
>> ...encounter a whole bunch of people (women) who feel the misogynistic air around him actively drove them away from engaging in fsf style open source.
> You don't say "Stallman is a misogynist" or "Stallman drove women away from contributing to fsf…"
I specifically didn't mean Stallman exactly, but him in the center of actions/reactions and whoever supports his ways (in mailing lists, meetups etc), hence "misogynistic air around…" (as earlier stated, I don't believe anyone IS anything). I also didn't mean contributing to the FSF only, but that this air around him has affected GNU and related software.
I try to use precise language, but you seem to argue I should reduce my views down to absolutes, which is not how I think about anything.
Let's not dwell on the irony of how you are sort of saying "dangerous" without not actually saying it. Instead let me be clear.
You don't have to research Stallman for long to encounter a whole bunch of people (women) who feel the misgonistic air around him actively drove them away from engaging in fsf style open source.
As someone who experienced very similar things in other (typically white straight male dominated) areas, be it the locker room or upper echelons of power, I used a slightly generalized word "context". Was that the problem? One level of abstraction?
And no. That doesn't define all such contexts and no, that doesn't define all white straight males. We're arguing one single statement here – that why can't we let the "genius" Stallman just be the genius and only judge him for his work. Which is exactly what I was arguing. No one exists in a vacuum. The total sum of output of a person matters.
These people not only normalize abusive behavior, they push people away by poisoning the context making it impossible to interact unless you "tolerate" their behavior.
It's not uncommon to see arguments that start in disagreement around technical details escalate into full blown ad hominem attacks.
This happened also in the olden days (linux kernel dev comes to mind), and it was never ok.
Wonder if one could train a ML model to recognize "quality fibres" using close up photography?
A simpler variant would be to focus on stitching. Photographs of how fabrics are joined and the stitches in key places.
With AWS you already have a virtualization, why do we need another layer?
We packaged a super slim Linux with an init that just has some minimal code reading out of AWS EC2 user info the conf. Downloads docker hub image and runs it as a process.
No virtual networking or ssh access. No magic. Just a process on an aws ec2 instance.
However every protocol doing this must have fallback from UDP to TCP because there are a surprising amount of corporate firewalls out there that arbitrarily limits the use of UDP.
We worked extensively with webrtc, but are recently switching to our own protocol. The main reason is that webrtc is very complex and generic. You can make a better user experience if you adapt the protocol to target your use case.
Another reason is that we can more easily detect firewalls and give the user feedback about it.
There is a long history of alternative shells csh, tcsh, zsh, fish, etc. All with various level of abstraction and various amounts of "programming language type constructs" (for lack of a better term).
At the end of the day, long arguments have been had over which is the better shell. It's all just personal preference. Hence it can be set in /etc/passwd per user.
You prefer python? chsh is there to change it.