pyeffects: A curated collection of creative photo effects
A curated collection of creative photo effects — preview them live, run them from the CLI, or animate them into video.
Check here: https://github.com/smyrgeorge/pyeffects
A curated collection of creative photo effects — preview them live, run them from the CLI, or animate them into video.
Check here: https://github.com/smyrgeorge/pyeffects
log4k is a coroutine/channel-based logging + tracing + metering library for Kotlin Multiplatform (JVM, Android, iOS, macOS, Linux, Windows, JS, wasmJs, wasmWasi), aligned with the OpenTelemetry model.
The recent addition is log4k-compiler-plugin — a Kotlin IR compiler plugin that rewrites annotated functions at compile time, so the instrumentation boilerplate disappears from your source. It runs on common IR before backend lowering, so the same annotations work on every KMP target — not just the JVM (no AspectJ, no bytecode agent, no reflection).
Setup — one Gradle plugin, no extra config:
plugins {
id("io.github.smyrgeorge.log4k") version "2.3.0"
}
dependencies {
implementation("io.github.smyrgeorge:log4k-classic:2.3.0")
}
@Traced — wraps the body in a span (started, ended, marked failed on throw):
@Traced
context(_: TracingContext)
suspend fun loadUser(id: Long): User {
// ...
} // span "UserService.loadUser"
The parent span is resolved from what's in scope: a TracingContext param/receiver → nests under its current span; else a TracingEvent.Span in scope → used as parent; else a trace: Tracer member (reused, or synthesized) → new root span.
@Logged — entry/exit/failure logging:
@Logged
fun compute(x: Int): Int = x * x
// → UserService.compute(x = 5)
// ← UserService.compute = 25(12.5 us)
Throwing logs ✗ UserService.compute failed (…) at ERROR with the throwable, then rethrows. If a span is in scope it's attached to every emitted line.
@Timed — call/error counters + a duration histogram:
@Timed(tags = [Tag("tier", "gold")])
suspend fun placeOrder(id: Long): Order {
// ...
}
Records OrderService.placeOrder.calls, .errors and .duration (ms histogram) — exportable in OpenMetrics line format via SimpleMeteringCollectorAppender.
Details that mattered while building it:
inline helpers ( Logger.logged, Meter.Timed.measure, TracingContext.traced), so there's no per-call lambda allocation.private val _log_ = Logger.of( this::class) under a distinct name,so it never clashes with e.g. an existing SLF4J log.@NoLog / @NoTime / @NoTrace opt out a single function or the whole class.The plugin is marked experimental — behavior and API may still change.
Repo: https://github.com/smyrgeorge/log4k
Compiler Plugin: https://github.com/smyrgeorge/log4k#compiler-plugin
Docs: https://smyrgeorge.github.io/log4k/
Feedback welcome, especially on the annotation surface and on cases where thon't pick what you'd expect.
Hey everyone!
I'm excited to share the latest update for sqlx4k (v1.9.0), a Kotlin Multiplatform library for SQL databases.
The big news in this release is the official support for SQLCipher! You can now easily implement encrypted SQLite databases across Android, JVM, and Native targets with a unified API.
What’s new?
Quick Example:
val db = sqliteCipher(
context = androidContext, // for Android
url = "sqlite:/path/to/secure.db",
password = "your-secret-passphrase",
options = ConnectionPool.Options.builder().maxConnections(5).build()
)
// Use it just like standard SQLx4K
val rows = db.select("SELECT * FROM users WHERE id = ?").bind(1).fetch()
Check it out on GitHub: io.github.smyrgeorge/sqlx4k
Would love to hear your feedback or if you have any questions about the implementation!
I started building a new kind of social network that heavily depends on p2p communication.
Take a look if you like: https://github.com/smyrgeorge/freepath
This project explores data transfer using a screen-to-camera approach. The idea is simple: encode information into a sequence of QR codes, display them as a video on a screen, and then use a camera to capture and decode the video frames to retrieve the original data.