"Let it go. We have bigger fights."
- Reacher (2022)
Ramunas Girdziusas, aabbtree77 at gmail.com
CV (React show-off), resume.pdf, cv.pdf
I studied electrical engineering in Lithuania from 1994 to 1999, researched machine learning in Finland from 2000 to 2008, completed three postdoc projects, and returned in 2014. Living off my savings, considering a career in software engineering. Take a look at some of my work.
This a rather simple business-oriented CRUD web app (without U and D), i.e. a message store, running on Hetzner 24/7 at initials.dev. The repo includes code and infrastructure needed to host it. There are five or six Makefiles, each for a different environment: build, debug, dev, prod, vps, including Dockerfiles, and even docker-compose.yml, but the latter is probably too much and Makefiles would have done it all just fine.
A VPS gives 20x more bandwidth while costing 4x less than serverless, not to mention better sleep at night due to DDoS and cold starts. Go is absolutely better than Node, but React is perpetually a question, and the right way is also verbose.
This a solid Go JSON API backend based on SQLite and sqlc, with session cookies-based user authentication, rate limiters, and user management cli. The idea was to add React later and turn this into a framework/web app, but two problems made it a no go.
SQLite is great, but not really web-ready. Postgres is only slightly more complex to setup, but AI will generate codes just as easily and you get so much there out of the box that SQLite is just history now, for me. Another moment to note is that at some point tests began to take much more code than the actual app, leading to a stalemate. After all, we are building the web, not Ariane rockets, it does not make sense to spend too much time on "generic what ifs" when so many basic features are still missing.
A setup to test an IP camera with Motion to store videos on Ubuntu 22.04 with motion detected in them. LAN-based tests, would need AnyDesk, RustDesk, or anywherelan/awl (P2P) for remote surveillance.
A tiny demo backend and frontend for a 3rd party-free username/password authentication. It includes a memo how to set up browser cookies locally and with the HTTPS. Before, I have tried Astro + Lucia. The problem is still there as most of the Js/Ts metaframeworks do not provide authentication out of the box, and everybody does it differently. Eventually, I have dropped Node in favour of Go + React.
This was a multilingual website which I built for a lawyer who spoke nine languages: lawtrust.eu which was itself a rewrite of www.lawlt.eu. Tailwind CSS, gomarkdown, porkbun.com, and github pages, and a lot of tedious translation work with DeepL. This project was an eye opener about the SEO and online visibility. After about a year I have been contacted by one London law firm to put it down as apparently the name "lawtrust" has been trademarked. The lawyer moved to a minimal generic template website which, however, connected him to his Facebook Messenger.
A MERN app to record geolocation of the last 50 visitors of aabbtree77.github.io. MongoDB Atlas, Compass, render.com, github pages, ipify.org, and geoip-lite API for the GeoLite data from MaxMind.
A joint work with Saulius Rakauskas (Infovega). We have been maintaining a real factory machine since February 2020 (last update: February 2024). I wrote microcontroller code in C (avr-gcc).
A joint work with Saulius Rakauskas (Infovega): A remote plant watering system with ESP32, MicroPython, Mosquitto MQTT, Ubuntu and awl with golibp2p. Numerous tests of hole punching through layers of routers with the use of the P2P network other than torrents, to control an ESP32 device globally, without obscure 3rd party services.
A rewrite of twinpeekz in Nim. Nim is a beautiful low level language, among very few (along with D?) which are actually succinct. It is too big to be good, but one can always grab a decent subset and it will come up as a much better Go/Rust. The problem is, Nim only works as a personal marvelous constructor. The libs are nonexisting or are very hard to decipher due to macros. Horrible debugging experience in VS Code, though one should probably drop the debugger as some inessential luxury, esp. when it comes to the newer languages.
The problem of "better C" is hopeless. We do get Ada, Rust, Zig, Odin... Jai at some point, but they all lack a punch and fracture the domain. What we need is what Ts did to Js: embrace and extinguish. That means building a superset of C with all the UB of C, which nobody wants in a new language.
Volumetric lighting in Go (forward rendering, shadow mapping, PBR, 3D ray marching, OpenGL) following Balázs Tóth, Tamás Umenhoffer (2009), and Tomas Öhberg (2017). The code is a complete rendering pipeline which may serve someone who wants to start building a 3D project while being lost at downscaling any existing ones.
Verified tensor algebras of Donn G. Shankland (1970). Après la montagne, il y a la montagne...
Confirmed Jonas Matuzas' CNN model. It closes the MNIST digit recognition saga.
PostDoc Chronicles 3: Lugano, 2013-2014. The second encounter with quadratically-constrained quadratic cost optimization where I have mapped the "Swiss Roll" problem to the fast multipole method-based electrostatics with an approximate distance constraint handling (simple projections ala Karmarkar and Cimmino in linear algebra). Davide Boscaini implemented the constraint gradient exactly and pushed the error rates.
PostDoc Chronicles 2: Saint-Étienne, 2012-2013. Optimization of the fluid flow which was implemented before me with OpenFOAM, CATIA, STAR CCM+ and ParaView, running on the ProActive PACA Grid cloud (INRIA) via the Scilab-to-Java bridge managed by Fabien Viale. The optimization involved kriging and the CMA-ES as a meta-optimizer of the expected multi-point improvement whose integration I sped up with a specialized unscented transform. See the slides. David Ginsbourger approached the integral differently, reducing it to Fortran routines which needed to compute multivariate Gaussian quadratures.
PostDoc Chronicles 1: Los Angeles, 2008-2009. The modified Thomson problem is a quadratically-constrained quadratic cost optimization. I performed linearization and spectral analysis leading to a few definite statements. They did not become a larger research program.
My DSc (PhD) thesis, Espoo 2002-2008. Added a layer of model selection to discontinuity-preserving filtering. Guided by Dr. Jorma Laaksonen and Prof. Erkki Oja.
Daffertshofer-Haken-1994 as a strategically wrong, but inspiring paper, E.T. Jaynes, machine learning in 2000s, my great nine years in Finland: Suomenlinna, Serena... Vaida Rutkauskaitė, Alexander Ilin, Vitaliy Nevdacha, Mykola Ivanchenko, Elia Liitiäinen, Jan-Hendrik Schleimer, Jarrod Creado, Leo Michael, Jaakko Martti Johannes Miettinen, Ville Rantamaula, Dexter He, Mikko Katajamaa, Petteri Räisänen, Jaakko Peltonen, Petri Hyötylä, Matthieu Molinier, Jagdeesh Rajani, Sandro Grech, Ivan Ore, Giedrius Zavadskis, Anita Bisi, Sergej Doudorov, Maxim Govtva, Paola Huaynate... I remember you.
My first job, at the CIS Lab, Helsinki University of Technology (TKK), guided by Dr. Jorma Laaksonen. During the first two weeks I wrote a parser which loaded UNIPEN to Matlab.