About
A self-taught full-stack developer based in Sri Lanka.

A developer's job is to bring someone's vision to life but for me simply doing just that, the bare minimum, is not satisfying. During development I attempt to do the following things;
- Present all the choices when making a non-trivial decision, revealing their tradeoffs in depth,
- Explain technical details in an easy to understand manner to ensure mutual understanding of what's being built,
- Suggest changes or new features,
- Challenge ideas that go against the vision and / or user experience,
- Give attention to all the easy to miss smaller details,
- Be not afraid to learn new technologies,
- Understand the what, how and why of the decisions being made,
- Take responsibility for and take steps to prevent mistakes, etc.
Only when I follow through the things mentioned above, among others, do I feel satisfied, knowing that I have delivered the best I could have.
Origin

A screenshot of one of my first Processing programs. It is a bouncing rectangle being traced with a color that is changing over time.
It all started in 2018 when I came across Processing. Whilst I have attempted programming a few times earlier it never really "clicked" for me, but this time was different. The visual nature of Processing and the low barrier to entry (thanks to the amazing tutorials by Daniel Shiffman) was an addicting combo. P5JS then was a natural stepping stone from Processing to the whole frontend world.
The largest project I worked on in Processing. Something to note is that everything is drawn with primitives such as rectangles, circles and text.
A few months later I came across tutorials for building Discord bots using the Discord.js library. With my previous (little) experience with JavaScript this was, once again, a natural stepping stone to Node.js and the backend world.
I ended up learning a lot since then. I have made;
- Interpreted (in TypeScript) and compiled (in Rust with LLVM) programming languages,
- Basic Minecraft clones (in C with OpenGL and in Rust with Vulkan),
- A basic GPU accelerated program which renders the mandelbrot set (in C with CUDA),
- A fun program which listens to you (with a keybind), runs it through Whisper and finally runs the transcription back through a TTS to be able to "change the accent / voice" in "realtime",
- A desktop application (with Flutter) that can play sounds through a Discord bot when a keybind is triggered,
- Impossible looking visual effects in Minecraft using core shaders (in GLSL) and plugins (in Java with Spigot),
- Many websites with varying levels of complexity,
- Few Discord bots (with Discord.js),
- A desktop application (with Electron) for messaging (had text formatting, image attachments, automatic updates),
- A basic neural network that can classify handwritten digits without any libraries (in Rust with the MNIST database)
- Many small P5JS programs, generating some interesting looking procedural art, etc.
What's exciting is that there's still so so much left to learn. Just need the time, patience and curiosity!
Interests
Outside of programming I enjoy quite a few things, though some very niche;
- Video games, mostly hero shooters but occasionally sandbox games such as Minecraft,
- Debating, love to try understand why other people have different opinions from me,
- Video essays, perhaps about why a movie succeeded or failed,
- Educational content, usually related to mathematics or physics,
- Connecting with new people, especially if they are quite different from me,
- Introspection, continuously re-evaluate what I'm doing right and wrong in life and figure out the next steps,
- Video editing, making gaming montages is a fun, creative process (especially if the game provides tools for it such as replays)

