About me ^
I develop software and hardware, and offer consulting. My creative expertise ranges from simple tools to complete turnkey solutions.
Software development. As far as programming languages go, I am fluent in C, C++, Python, LaTeX, SQL, and the UNIX shell. I am currently learning Go and Rust. Previously, I had also worked in Fortran, Scheme, and various dialects of assembly (MIPS, x86, ARM, 68000, PDP-11). I am familiar with various frameworks and toolkits, including but not limited to: OpenMP, OpenCL, pthreads, LLVM, OpenGL, GLUT, SDL, FLTK, FUSE, Flask, SQLite, … On occasion, I have also written my own programming languages (and domain-specific languages) to improve various projects. I enjoy system programming and optimizing code.
System administration. Over the years, I have also gained experience in administrating various operating systems. My favorite is IRIX (a UNIX variant for Silicon Graphics machines), which I had used extensively as my daily operating system for over 5 years. Nowadays, I use Xubuntu on the desktop, and Debian Linux on my server. I can perform various sysadmin tasks, such as setting-up services (Nginx, HAProxy, Courier MTA, OpenVPN, PostgreSQL, …), automatic tape backups, software RAID, tuning a system for a particular task (this includes recompiling the kernel if necessary), etc. I've also set-up and maintained cloud infrastructure on Amazon Web Services, both manually, as well as using Terraform and Ansible.
Hardware development. On the hardware side, I am mostly self-taught and can produce prototypes to solve specific problems. I am most familiar with designing low-speed (sub-40MHz) digital logic circuits, either with discrete 7400-series integrated circuits or with microcontrollers. I own a small CNC machine, which enables me to produce prototype circuit boards quickly. I've written and maintained a buildroot-like set of shell scripts for building fully-custom Linux distributions from scratch for specific embedded systems. I like writing lower-level software, such as firmware and drivers. I've also put together custom embedded turnkey systems for customers.
Combining my other skills, I can also design and prototype a complete custom-made IoT platform, which involves making a simple hardware prototype, writing the software for it, writing the back-end server for it, and handling the server's deployment on AWS or another cloud provider.
Education. I have a BSc in Computer Science (ISCED level 7) from the University of Ljubljana, Slovenia. My BSc thesis received a faculty award.
Hobbies. In my spare time I enjoy reading books, disassembling hardware to see how it works (as well as repairing hardware at the electronics level), collecting interesting hardware, and gardening.
You can see an overview of my recent personal projects in the section below. More information about each project will be added soon.
Overview of recent personal projects ^
Software
pt
Multi-threaded Monte Carlo path tracer with anti-aliasing (via super- and sub-sampling), tone mapping, environment mapping, emitter sampling, spatial indexing (kd-tree, BIH, BVH), support for loading .OBJ models and generating scenes with custom Scheme scripts.
C++ OpenMP Scheme
bench_pt
Small multi-threaded path tracer intended for benchmarking. It can only render spheres, but supports anti-aliasing and tone mapping.
C++ OpenMP
cl_pt
Port of bench_pt to OpenCL.
C++ OpenCL
mux
Operating system (inspired by UNIX V6) for multi-processor 64-bit x86 computers.
C Assembly
scsimon
Utility that shows temperature and self-test history of SCSI hard drives (for the IRIX operating system). Also works with certain SATA/SAS drives on machines that have a SATA controller.
C IRIX SCSI
minq
Minimal background task queue for Python-based web apps, supports time and memory limiting of tasks.
Python Redis
minič
Tiny in-memory compiler for a subset of C. Consists of about 1000 lines of code, runs on 32-bit x86 machines and requires no external dependencies.
C x86 machine code
hpglplot
Tiny Python script that can plot a HPGL file over a simple serial port (by doing manual handshaking with the plotter).
Python HPGL RS232
Hardware
5V voltage reference
Based on the Analog Devices AD586MN chip.
Decorative copper tree
The LEDs on the ends of branches light up only when it's dark and vary their intensity according to how dark it is.
VFD alarm clock
Alarm clock based on the ИЛЦ5-4/7М vacuum fluorescent display and КР1016ВИ1 clock chip.
Not yet assembled.
HP-48SX 128kB RAM card
A static RAM card for the HP-48 series graphing calculators.
WiFi sensors
Using the ESP-12F WiFi module (based on the ESP8266 microcontroller) to provide real-time sensor readings (temperature, humidity, pressure, and CO2 concentration). The readings are sent to a central server, which generates graphs.
I have made dozens of these and they have been happily working for the past few years.
68000 single-board computer
Currently in the planning stage.
The final goal is to create a multi-processor system out of these boards.
8086 single-board computer
Currently in the planning stage.
I will be using a clone of the Intel 8086 processor (КР1810ВМ86). Haven't decided yet whether to make it PC-compatible or not.
Processor made from 7400-series logic
Currently in the early planning stage.
Services
Antikvariati.si
Search engine for finding books in antiquarian bookshops in Slovenia, as well as a platform for promoting reading culture.
Includes a cool ISBN barcode scanner in JavaScript for faster book search and entry via the webcam.
Finished, but sadly on hold, as this project is financially unsustainable to operate in the current book market climate in Slovenia.
Python Flask PostgreSQL Redis JavaScript
Articles ^
Title | Description | Published | Updated |
---|---|---|---|
IRIX and Jumbo Frames | Describes how to enable jumbo frames on IRIX and gives a few performance measurements as well. | 2010-01-03 | 2017-04-10 |
IRIX Easter Eggs | Shows fun easter eggs hidden in IRIX software. | 2015-12-26 | 2020-12-31 |
IRIX XLV Plexing (RAID1) | Describes how to modify the IRIX XLV binaries to ignore licence checks and enable software RAID-1. | 2015-12-26 | 2017-01-21 |