Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

Oleksandr Balyshyn

Java/Scala software engineer. Nine years of fault-tolerant distributed systems on the JVM — telecom data platforms, stream processing, cloud infrastructure. Kyiv, Ukraine.

Off the clock: air-quality sensors, ESP32 cameras, OBS Studio tooling and Scala 3 libraries.

Site Streaming tools StandWithUkraine


Day job

Distributed systems that have to stay up. Most recently four years on a platform team building the data infrastructure behind cloud-native SaaS for telecom operators.

Before that: Spring Boot microservices handling 100M+ patient records for a top-3 US healthcare provider, and the core algorithms for a cross-border energy exchange connecting grid operators across six countries.

Scala (cats, cats-effect, FS2, akka, akka-streams-kafka (alpakka-kafka), akka-http, http4s, Monix) · Java 8-25 · Kafka · Kubernetes · Cassandra · Redis · AWS / Azure / GCP


Everything else

None of what follows is commercial. It is unpaid engineering on problems I actually have — which is why most of it carries a real README, a CI pipeline and release binaries rather than a weekend of commits.

📡 Streaming tooling

Control surfaces for OBS Studio, the open-source live-streaming program. Everything below drives it over obs-websocket 5.x, its built-in remote control protocol. The map at obs.worxbend.com shows how the pieces fit together.

Project What it is
scenedeck Linux desktop controller — Rust, GTK4, libadwaita. Scenes, an audio mixer with live meters, scene-dependency inspection. On the Snap Store.
obsctl-rs Terminal dashboard and scriptable CLI in one Rust binary. A daemon owns the OBS connection; the UI and CLI are thin clients over a Unix socket. 29 themes.
obs-stats btop-style live dashboard that answers which stage dropped frames — renderer, encoder or network — rather than only that some were lost.
obsctl The Crystal implementation of the same idea. One-line installer, static binaries.
multistream-manager Set up a Twitch stream and a YouTube broadcast from one terminal form, then press Start Streaming.
twi Keyboard-first Twitch chat in the terminal. Go, 57 themes, OAuth tokens that never reach the logs.
yc YouTube live chat in the terminal, paced so the 10,000-unit daily API quota lasts until reset instead of running dry in three hours.
obs-effects GPU-accelerated PixiJS 8 overlays and animated screens for OBS browser sources.
twitch-voxer Self-hosted text-to-speech bot. Announces chat in the detected language, each chatter keeping a persistent voice.

🌬️ AirGradient & IoT

AirGradient makes open-source indoor air-quality monitors that expose their readings on the local network. I wanted those readings everywhere I look, and none of it going through a cloud account — so the same local endpoint now drives five different clients.

Project Platform
airgradient-cli Rust CLI and live terminal dashboard
airgradient-desktop GTK 4 + libadwaita desktop app
airgradient-gnome-extension GNOME Shell panel indicator
airgradient-android Kotlin + Jetpack Compose
airgradient-papr ESP32 driving a LILYGO T5 4.7" e-paper display — air, weather, forecast
airgradient-observability vmagent → VictoriaMetrics → Grafana, self-hosted

They share one config file, so the CLI, the desktop app and the GNOME extension all point at the same device.

📷 ESP32 cameras and a TCP server

A camera pipeline built from the wire protocol up, because HTTP and WebSocket framing are more overhead than a microcontroller pushing JPEG frames needs.

  • spycam — ESP32-CAM firmware. A camera task fills a single latest-frame slot; a sender task owns all network I/O and reconnects forever with exponential backoff. When the network falls behind, stale frames are dropped rather than queued.
  • spycam-s3 — the same client for ESP32-S3 boards.
  • instachron — the server side. A Go workspace of eight deployable services: the raw TCP receiver that republishes frames on a Unix socket, an HTTP API and web UI, restream proxies with image enhancement, upscaling and YOLOv8 object detection, an H.264 timelapse recorder, and an ffmpeg RTMP streamer.

The protocol is a long-lived raw TCP connection carrying repeated frames — a 16-byte big-endian header (magic, sequence number, payload length, camera timestamp) followed by exactly that many JPEG bytes. No HTTP, no delimiters, no text framing. It is documented precisely enough to write a receiver from scratch.

Also: led-matrix-controller (ESP8266 Wi-Fi TCP firmware driving a WS2812B 8×8 matrix), echo (a Go proxy turning webhooks into light shows on it), echoctl (Scala 3 CLI for that proxy), and deskctl (GTK4 controller for an ESP32-driven standing desk).

🐧 Linux tooling

One YAML profile describing the machine you want, a plan you read before anything happens, then the parts that still need doing.

  • fluxion — Java 25, GraalVM-native. Packages, Flatpaks, scripts, dotfiles, shell tooling, fonts and prebuilt binaries from one profile, with state recorded so reruns skip finished work.
  • fluxion.cr — the Crystal implementation. CLI or TUI.
  • binstaller — binary distributions from a declarative profile, with dry-run plans, SHA-256 verification and a lock file.
  • nerd-fonts-installer — Go, checksum-verified downloads, interactive picker. On the Snap Store.
  • dotbot-scala · dotbot-go — two implementations of the Dotbot dotfiles workflow, both shipping as single native binaries.
  • system-bootstrap — multi-distro dotfiles and workstation setup for Fedora, Arch and openSUSE.

🔺 Scala, JVM & libraries

  • scalacv — a Scala 3 API over OpenCV 4.13. Typed constants instead of magic integers (ColorConversion.BgrToGray, not 6); a Managed[A] that releases native handles exactly once and throws on use-after-release in Scala, before JNI turns the same mistake into a SIGSEGV with no stack trace; genuinely headless, so continuous integration needs no GUI toolkit.
  • glyphora — a terminal UI toolkit written the way Scala wants to be written. Reactive signals, 50+ widgets, composable motion, headless tests, GraalVM native-image builds.
  • gitea-scala-client — Scala 3 client for the Gitea API. ZIO 2, sttp client4, zio-json, with the endpoint surface audited against the Gitea 1.26.2 OpenAPI contract.
  • codeberg4s — Codeberg/Forgejo client with a Future-based API that leaks no effect system onto your classpath, two error rails (exceptions or typed Either), and validated types that make an illegal request path unrepresentable.
  • worxbend — the Mill monorepo the smaller libraries get cut from. Applications, shared libraries, deployment recipes and notes.
  • data-engineering — Kafka, Kafka Connect and Apache Flink experiments, including a custom S3 sink partitioner.

Elsewhere

Account What lives there
@w0rxbend This one. The broadest range — firmware, overlays, libraries, ports.
@worxbend The finished tools. Release binaries, install scripts, docs sites.
@oleksandr-balyshyn Under my own name, kept small.

All 80 projects, searchable, in one place → w0rxbend.github.io/personal-page

📧 oleksandr.balyshyn@gmail.com · 💬 @oleksandr_balyshyn

About

Profile README

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors