Old-School demo effects with Crystal

Nostalgia time! Today I decided to play with Raylib and the Crystal Programming Language. Technically speaking, the “plasma” effect is just a two variables noise function. Some used Perlin Noise, others the Diamond-square algorithm. A more interesting pattern can be obtained with trigonometrical functions, as explained here. The interesting part here is the easyness of graphics programming in a Linux environment with a high level, yet performant and statically typed programming language. The code is straightforward and a simple port of the original ‘C’ source, I got surprised how the Crystal Language is easy to use and produces a quite fast native binary. If you want to check it out, you can find on my github account; in the meantime enjoy the mandatory video/screenshot :) ...

May 18, 2023 · Andrea Manzini

Benchmarking a Rust function

Once in a while I like to play with Advent Of Code problems 🎄. Today I decided to tackle an easy one and, since the answer was almost trivial to find, I wanted to go deeper and understand how to measure and improve the performance of the solution. ...

April 2, 2023 · Andrea Manzini

web components with Nim and Karax

Inspired by a tweet from a fellow developer, I decided to take a look at Karax, a nifty framework for developing single page applications in Nim. After following the basic tutorials and examples, I searched for something more complex and found very sparse documentation, so I’ll write my findings here. As usual, the complete source code is on my github repo, where you can find also a working live demo. In this example I wanted to experiment with the component pattern, and create a stateful module that can be reused. So I modeled a nim clock object, here the source: ...

July 7, 2022 · Andrea Manzini

integration between Python and Rust - Part 2

In this post we are going to write a new module for python: a very simple function exported from Rust that we can consume in the Python interpreter. We’ll leverage the PyO3 Rust bindings for the Python interpreter. Let’s start with a new Cargo project: $ cargo init --lib demo_rust_lib and insert the required settings in Cargo.toml: [package] name = "rusty" version = "0.1.0" edition = "2021" [lib] name="rusty" crate-type = ["cdylib"] [dependencies.pyo3] version = "*" [features] extension-module = ["pyo3/extension-module"] default = ["extension-module"] now it’s a matter to write our library; luckily the PyO3 library exposes a lot of useful types for python interop; the only thing we need to add is an extra fn named as our module that “exports” the functions we want to make available in the Python layer: ...

January 7, 2022 · Andrea Manzini

This site does not use cookies or collect any personal data. © 2026 Andrea Manzini.