More #rstats + OpenTelemetry news: @schloerke.com finally got all of the async issues in {ellmer} and {shiny} sorted out and tracing now works!
Here's what combining {shiny} + {ellmer} + {httr2} + {mirai} + {otel} looks like today.
(All credit for the screenshots to @schloerke.com.)
This was a colossal amount of work but I could not be happier that #rstats has a serious OpenTelemetry story now.
In the last few months I've worked a fair bit in Typescript building "VS Code" extensions for #Positron. It's my first time using that language or the extension APIs, and I have to say that the teams at Microsoft have done some incredible work on both.
More #rstats OpenTelemetry tidbits: I've revived the PR that adds instrumentation to the {httr2} package.
Here is what is looks like to run {httr2}'s own test suite while looked up to Logfire:
Somehow, for the third time in my life, I'm wondering if I need to write a #linux NSS module to solve my problems...
This release has some nice ergonomic improvements for #rstats users querying Snowflake or Databricks. I'm excited about the potential of the workload identity functionality in particular.
The internals of {ellmer} are like the final boss of modern #rstats package codebases: S7, httr2, promises, and coro *everywhere*. It really shows how to push the limit of what can be done with R.
{otel} + #rstats is becoming a crazy partnership.
This project has driven me to use/write {promises} in ways that makes my 🧠ache 😅. The reward is worth it!
See you at #PositConf2025 where I'll talk about this in more detail
There's been a big push at Posit this summer to get high-quality OpenTelemetry support out to the #rstats community (a longstanding dream of mine).
I think {mirai} is the first package release to showcase this work, and as per usual with @shikokuchuo.net, it was done in record time!
The other VS Code forks (Cursor, etc.) don't really seem to have leaned into this extensibility by adding APIs of their own, but #Positron has, and it's been a ton of fun to build #rstats tooling in Typescript because of this.