On the absolute happy path what you do above is the same I do, where jj shines is when you het out of the happy path.
On the absolute happy path what you do above is the same I do, where jj shines is when you het out of the happy path.
What we want to express here is an object with a map of properties (name to type):
string Type map
For the OOP minded: Map<string, Type>
And also compose those: type Foo = { "_foo", int }
type Bar = { "_bar", string }
type FooBar = mergeMaps Foo Bar
But at compile-time, of course.Have any languages achieved this? I know TypeScript can do some of these things, but it's clunky.
type foo_bar = < _foo : int; _bar : string >
For a family of types matching any object with those methods, I think you can write something like type 'a has_foo_bar = < _foo : int; _bar : string; .. > as 'aIt seems to me like "operated differently" is doing a lot of heavy lifting that often involves those same frameworks or dev/testing environments. If a monolith used to communicate between workloads in-process, now there needs to be some way for those workloads to communicate between processes, and it has to continue to work in dev. The example in the article mentions roundtripping through something like Redis or Postgres, but now doesn't your dev environment need to spin up a database? What if the communication pattern isn't a shared cache, but instead a direct function call that, say, spins up a new goroutine to process some work asynchronously? Now you need to operate and maintain either an RPC protocol or an event queue, and make sure those things can be started up and discoverable during testing and local development.
But it didn't work out.
One of the reasons is LogFire allows the users to fetch the service data with arbitrary SQL queries.
So they had to build their own backend in rust, on top of DataFusion.
I used ClickHouse myself and it's been nice, but it's easy when you get to decide what schema you need yourself. For small to medium needs, this plus Grafana works well.
But I must admit that the plug and play aspect of great services like Sentry or LogFire make it so easy to setup it's tempting to skip the whole self hosting. They are not that expensive (unlike datadog), and maintaining your observability code is not free.