Information Technology

NanoPi M4 mini-NAS

A cheap, low-power, low-profile NAS solution based on FriendlyArm’s NanoPi M4 SBC. It has a SATA hat that is connected to the board via PCI-e, allowing up to four HDDs to be connected to the NAS via standard SATA III interface.

Read more

A chácara microserver

The microserver is composed of an HP Proliant Microserver Gen8 running Openmediavault and a Dell Optiplex 3060 micro running Proxmox. Both machines are used mostly for security-related things (surveillance cameras, location tracking) and Plex and Plex-related programs (PMS, Tautulli, Sonarr, Radarr, etc.). Other uses have to do with a universal desktop folder (Syncthing) and data analysis (R server).

pfSense white-box

A cheap, customizable pfSense box based on the ASRock J3355b-itx mobo. It features an Intel dual-core processor capable of running IPS/IDS software, multiple VPNs, and more. A passively cooled, low-power, and low-profile firewall that fits the demands of most home users.

Read more

Simple RPi GPIO buttons

Schematic and a simple python script to run customized commands using three push buttons connected to a Raspberry Pi 3B’s general purpose input/output (GPIO) pins. Compatible with RPi 3B+ and any other RPi that has the same GPIO version as the 3B.

Github Repo




Youtube4tvh is a Python CLI program for TVHeadend servers that uses either the Youtube API or a custom-built web content parser to find live-streams and create (or update) m3u playlists. The m3u file follows IPTV conventions that allow a TVH server to automatically create an IPTV network with them, and each stream is piped into TVH via a Streamlink shell script.

Github Repo

PWM fan controller

A fan controller written in bash for the 12v fan connector of the NanoPi M4 SATA hat. By default, the script uses a bounded logistic model with a moving mid-point (based on the distance between the average temperature over time and a critical temperature threshold) to set the fan speed dynamically.

Github Repo

Audio diagnostic tool

This is a CLI diagnostic tool for audio files written in GNU Bash that extends my previous bash-flac-diag tool to mp3 and other audio formats. In brief, it tests a single or multiple audio files and generates logs with good files (no errors found) and bad ones (at least one error found). Tests are performed by codec-specific tools. There are two post-processing modes for bad files: fix or delete.

Github Repo

Logistic function in Bash

An implementation of the logistic function written in GNU bash and GNU basic calculator (bc).

Github Repo

Bash FLAC diag

A CLI tool written in bash that tests FLAC audio files recursively and generates logs with good and corrupted files. The script tests flac files with the help of the flac cli encoder/decoder. It’s meant to be used to identify corrupted FLAC files that should be deleted from an audio library, for example. It has an accompanying script (/tools/ to delete files listed in logs of corrupted FLACs.

Github Repo

Multi-trial data count

A VBA macro for MS Excel that counts patterns of correct responses (C) and errors (E) across multiple trials (e.g., CCC, CCE, CEC, …, EEE). It was initially developed as a tool to help with the data analysis of multi-trial memory experiments in which subjects provide boolean-type responses (yes/no, correct/error) for multiple items across multiple tests. In such designs, each item generates a pattern of C-E responses across tests. This VBA macro counts all such patterns across subjects and items.

Github Repo

Webgrab EPG parser

A Python CLI program that converts the WebGrab+Plus siteini.pack/ folder data into a SQLite db and runs various tasks that optimize extraction of EPG data from the available sources. (This project’s repo is private and under construction.)


Academic (latest)

Multinomial modeling

Distribution of educational materials to researchers and students about the use of multinomial modeling in psychological research.

Bivariate recollection

A psychological theory that assumes that memory probes can provoke conscious awareness of either target items (target recollection) or their context (context recollection) or both.