Everlag

Joined 13 years ago

Karma
655
Submissions
182
Member since
Apr 12
There is an art to the creation and maintenance of suspense.

Engineer at Cloudflare doing video things.

Email is at github.com/Everlag/

ExcessiveLag on twitter

topcolor: dfcdfc

[Disclaimer: opinions expressed in comments are my own and do not necessarily reflect my employer's stance or non-stance on any specific issue.]

View on Hacker News

Recent submissions

Comment · 3 years ago
Comment · 3 years ago
Comment · 4 years ago
That's such a different approach than I've grown used to, but different platforms encourage different flows.

I've been using bitbucket (not the shiny nice new bitbucket) at work for years and its PR search is so abysmally bad that anything in the PR message but not in the commit message may as well not exist once its merged. `git log` is forever, bitbucket search is /dev/null

I'm curious what other affordances or lack of affordances encourage what git behavior.

Comment · 4 years ago
Honestly, RTMP is a workhorse that powers most live video ingest today; its not bad, its just mostly frozen in time. Some issues that came immediately to mind are:

- It was developed to support flash; if anyone is sending metadata about the data streams are probably serializing flash objects, which is truly an experience when writing go.

- The supported codecs are limited and the spec provides no generic way to extend it. If you want h264 and aac, RTMP is great. If you want any codec developed after that, you need to either reach for another protocol or use a non-standard extension to RTMP whose support across different providers is flaky.

- Its TCP under the hood and that locks you to a fixed reliability/performance tradeoff.

- The 'spec' is a document released by Adobe which is not particularly great, falling pretty far short of what we'd expect out of the IETF or similar. Its overly detailed in some areas and woefully under detailed in others.

- RTMP isn't particularly tune-able; if you want to tradeoff latency for quality or similar, you're exploring the dark depths of the protocol.

None of these are damning but, as an aggregate, they go a long way to encouraging new protocols to be developed which avoid these issues.

  > What problems do you have with "maintaining an RTMP stack" does any of these newer protocols alleviate? What do you mean exactly by RTMP stack so I can be sure I understand you correctly?
Maintaining an RTMP stack, at least for me, means making sure your implementation of underspecified RTMP works with other, third party implementations of underspecified RTMP. Some implementations are great(ffmpeg and OBS) whereas some will send you timestamps that oscillate between the correct time and 3 billion seconds in the future; or, they'll send you exactly 3 packets at the start of the connection with timestamps far off in the future. More subtly, some providers want you to send a packet when you're closing the connection and others just want to go away and get angry if you send them a 'goodbye' packet.
Comment · 4 years ago
The current state of media ingest protocols is actually getting interesting. For quite some time its been a situation of 'everyone supports RTMP so you support RTMP' plus 'vendor X does not support $FANCY_NEW_PROTOCOL but they do support RTMP'.

Now we've got this fun competition between various protocols at different stages of their lifecycle. Some are SRT where one vendor is pushing them quite hard and support is flakily available but not everywhere. Others, like WHIP, are much earlier in their lifecycle.

Most new protocols support carrying more codecs without gross hacks and generally are much nicer than an early 2000s protocol which hasn't really ever had a canonical specification; beating RTMP is a somewhat low bar. Each one also has their own shiny ribbons like using QUIC/webtransport or very-low latency.

The next few years will be interesting to see which gets adoption and which get dropped at the wayside. Could be any of the current contenders; I'm just hoping I can stop maintaining an RTMP stack sometime before 2040 without suffering from extreme fragmentation.

Comment · 5 years ago
I would be surprised and saddened if `?` as described in the blog was added to go. Error wrapping is critical for operating a service and staying sane; an operator encouraging `if err != nil { return nil, err }` is a step backwards.

Consider this situation(it may sound familiar): you get paged at 4am for 500s from a service, check the logs, see 'file does not exist'. go doesn't attach stacktraces to errors by default. go doesn't enforce that you wrap errors with human context by default. How do you debug this? Pray you have metrics or extra logging enabled by log level that can give some degree of observability.

This error could have been 'opening config: file does not exist' or 'initializing storage: opening WAL: file does not exist' or even just decorated with a stacktrace. Any of those are immediately actionable.

Now, if go decided to make error wrapping a first class citizen with a fancy '?' operator, I'd be excited. However, I doubt that will happen because go is definitely not rust-like in its design.

Comment · 5 years ago
Heads up for anyone reading this on chrome, the examples may not render with a `Cannot read property '_gl' of null` exception; firefox worked fine when I tried it.
Comment · 5 years ago
Stream currently supports VOD delivered over HLS/DASH. We'd like to explore live in the future.
Comment · 5 years ago
Comment · 5 years ago
Comment · 5 years ago
Comment · 6 years ago
Comment · 6 years ago
Comment · 6 years ago
I am curious how many people mock their SQL queries and how they decide to mock vs not mock at that level.

From the perspective of the services I'm knee deep in at the moment, SQL feels like the wrong layer to mock at. Instead, when we do want to mock, we usually pass around mocked out data access objects. That way we work at the application layer of `GetN` rather than `SELECT a, b, c FROM N`.

It feels like a lot of the value of the tests we write that do execute sql is a result of them actually running it. Granted, it is slower than mocking, requires synchronous rather than parallel tests, and we need to wipe the impacted tables for every test. However, the value we get is that we know that a query actually has the intended semantic.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton