2021

mrc-em-gnome-thumbnailer

First published: 2021-12-22
Github: github.com/the-lay/mrc-em-gnome-thumbnailer
Blog post: Developing a custom thumbnailer for Nautilus
Python NumPy GNOME Linux

.MRC and .EM thumbnailer for GNOME desktop environments. The generator loads central slice (or just uses the image if it is a single 2D image) and applies contrast stretching. There is also a Makefile that automatically registers the generator for all .mrc and .em files. Just a small quality-of-life improvement utility.

2020

tiler

First published: 2020-09-30
Github: github.com/the-lay/tiler
Python NumPy N-dimensional

Fast N-dimensional numpy array tiling and merging, with overlapping, padding, and tapering support. During my PhD project, I worked on semantic segmentation of 3D data that is often too big for GPU memory. After reusing same tiling (patching) functions for multiple projects, I decided to write a separate library.

ulauncher-spotify-api

First published: 2020-08-29
Github: github.com/the-lay/ulauncher-spotify-api
Python Ulauncher Spotify API

Extension for Ulauncher, application launcher for Linux. The extension provides access to all Spotify WebAPI endpoints, allowing users to control Spotify playback on all connected devices, e.g. smartphones, smart speakers or computers. Moreover, the extension allows convenient search in Spotify catalogue of tracks, albums, artists and playlists. Two months after publishing the extension on github (at the moment of writing this, Oct 18 2020), it has ~100 monthly users from all over the world.

2019

voltools

First published: 2019-01-12
Github: github.com/the-lay/voltools
Python NumPy CUDA PyCUDA CuPy

NumPy CUDA-accelerated texture memory 3D affine transformations. Applying affine transformations to big 3D arrays on CPU is extremely slow. During my PhD project, I have worked with 3D template matching, where the template must be rotated hundreds of times, per each voxel of the search volume. To optimize this obvious bottleneck, I wrote a simple CUDA kernel and together with PyCUDA connections, the template matching time was reduced in the number of magnitudes (2 hours on 16-core CPU vs 6 minutes on GTX 1080Ti). Since then, the project was move to CuPy and optimized even further.