Your browser does not support HTML5

ABOUT ME

Hi ๐Ÿ‘‹, I'm Fernando! I like playing around with Kotlin, C++, Computer Graphics, Games and Android.
Here you'll find my latest projects and blogposts.
You can reach me on Twitter, Instagram or by email: fernandoraviola@gmail.com.

You can find my resume here.

Learning WebGL

I haven't posted anything in a while but recently I've been playing around with WebGL and made the slimy animation that you see on the left of this website (Desktop version only). And it's interactive! Drag your mouse around it to see what I mean. I built this in shadertoy first. The code is available here.

Building a Raytracer in Kotlin

Trying to make the most of the Christmas break, I started reading @Peter_shirley's book on Ray tracing: "Ray Tracing in one weekend". I had a rough understanding of how raytracers worked, but this book gave a more intuitive grasp on the subject.


I was plasently surprised to learn that images like the one above can be generated without using any graphics library. I am using OpenGL but just to render a texture, I could have instead outputted a image file and then open it with an image viewer (this is in fact what the author does in this book). The code for the project is available on Github and I've documented some of my takeways on twitter.

Writing Super Mario Bros in C++

I decided to learn C++ as step towards understanding more about the fundamentals of computer science, programming languages and graphics programming in general. Read more about the development process here.


Find a video demo + the source code for this project on Github.

Building a multi-purpose 16-bit computer

My curiosity to understand how programming really works and what a computer is actually doing led me into a rabbit hole. It was time to understand how a CPU operates, how does it interact with the RAM, the peripherals, the operating system and utimately how I, as a programmer, can interact with the OS to access the hardware (CPU, IO, ect).


I found and excelent course on Coursera called Build a Modern Computer from First Principles: Nand to Tetris.

The instructor guides you in building a fully functional multi porpuse 16-bit computer starting from logical NAND gates. This virtual computer incldues a virtual machine and a compiler for a simple, Java-like programming language, and a basic operating system that closes gaps between the high-level language and the underlying hardware platform.

You can find my code for this project in github here.


Walpy (Image processing app)

I believe this is the project I am most proud of to date. Walpy is a Wallpaper changer application I made on my free time, it has over +500.000 downloads on the playstore, 40k daily active users and a 4.7/5.0 user rating average from more than +9k users. Download here

I keep iterating over this app to learn new frameworks, the current version was re-written using Kotlin coroutines, OpenGL ES, Sqldelight, and Kotlin-multiplatform features.


Learning 3D graphics with OpenGL

For the long est time I thought I wanted to make video games, but every time I set out to build one I would almost immediatelly get bored. This happened multiple times. I would spend hours researching the best game engine, downloading it, playing around with it, starting a new project only to abandon it a few weeks later. I thought by making a game, I would understand how they work under the hood.

In practice, that's not true. Game Engines do most of the heavy lifting for you, some go as far as providing a drag and drop interface that will allow you to make your game a reality in record time. That's what game engines are supposed to do! And that doesnโ€™t mean making games using a game engine is easy, there's plenty of challenges (both technical and artistic) that go into making a good game. Those are just not the challenges I'm most interested in.


Graphics are a huge part of games so I decided to learn OpenGL for the sake of understanding how graphics API works and how computers draw things on the screen. It's been a rewarding experience so far! This is what I have to show for. a very rudimentary Phong-blinn renderer that suppors model loading via the Assimp library. As always the code is available on Github.

Neuralnetworks and deeplearning

I can't recomend this book enough, it's a great introduction to neural networks.

Asteroids

I remade this classic game in #Kotlin using a very simple OpenGL wrapper to draw pixelated artwork. I'm not using sprites at all! all the asteroids are generated procedurally and drawn as wireframes. Find the code here.

My notes on learning Kotlin Coroutines [Medium]

I want to shed some light into the difficulties I had learning Kotlin Coroutines while working on my personal apps. Iโ€™m writing this first article as a quick go-to reference for myself and anyone else that might find getting started with coroutines a bit unintuitive. Disclaimer: I am learning this as I go so if you notice something wrong with this article please do let me know in the comments.

Letโ€™s say we want to perform an asynchronous operation using Coroutines. To make things even simpler, weโ€™ll assume this operation doesnโ€™t even return anything back to us. This is simple enough using coroutines...

[Keep reding on medium]

Nanodegree on Deep Learning

I did not like the Udacity experience that much. Shared some comments on twitter about it.

Tiny Architect

I build this game with the goal of understanding how physics engines worked. I had a lot fun learning how tiled based collision detection works. The game was built using ActionScript 3.0 and Adobe Air (Adobe runtime for mobile phones). I believe this is not supported anymore, I can't get the game to run on a modern device but you can give it a try, it's available on the playstore.