Lisp Adventures #2 - One, Two, Three... Infinity

Imagine you want to count the sum of the numbers from 1 to 1,000,000,000 (one billion). If you come from an imperative programming background, you might be already thinking on a loop and what number type to hold that value. You might come up with something similar to this if you’re writing C: uint64_t sum = 0; for (int i = 1; i <= 1000000000; i++) sum += i; printf("%lu\n", sum); Good, it runs quite fast and we get the solution.

Investigating a touch screen issue on the Steam Deck

Last year I bought a Steam Deck to play the long list of games in my Steam library, most of which I got from indie bundles. The idea of being able to play even the ones targeting mouse and keyboard in the comfort of my bed with very ergonomic controls sounded amazing. Another reason was to explore a bit the technology behind this miraculous mobile device that can play Elden Ring in solid 30fps, on Linux!

Retrospective 2022

For the last few years I’ve been writing a tweet in the end of the year with some of my life achievements, projects and professional changes. This year, based on other blogs I read, I decided to make a more complete post and include also other interesting things like some of the book I read and events that happened this year. — Bruno Croci (@CrociDB) January 15, 2023 Projects Blog This is, of course, one of the most important project and achievement of this year: I finally decided to write more to this blog.

Lisp Adventures #1 - Racket: A brainfuck interpreter

Lisp is the second oldest programming language and is considered one of the most powerful, despite the fact that it is absolutely the most simple. I’ve always had admiration for it, but never quite got into it because it seems that, except for Clojure, there was no other popular version of lisp with real-world use. And I really don’t like anything related to Java–which is a shame because I think Scala is also a fantastic language, but that’s subject for another text.

One Year of Film Photography

Photography has been in my life forever. Probably started with my dad, who had an old film camera to take photos of our family. I remember the camera sitting there, on the highest possible shelf in the living room, so the kids wouldn’t try to take it. And I also remember how often I did that when nobody was looking just so I could trigger the flash and pretend I’m a photographer.

Rendering Doom With Emojis

It seems that creating a doom port, or hacking doom in general, is a common place for programmers. If you search for “doom port” on github, it’s inspiring how diverse projects you can find. The fact that the source code for the game is completely open and self-contained (meaning it doesn’t require dependencies) contributes a lot for this. Back in 2020, I had an idea of a simple project to render doom using emojis because of some other doom renderer I saw on Twitter.

A story about a mobile game's economy and git blame

Years ago, back when people still used personal computers, Social Games were a thing. You would log into Facebook on your desktop to play video games. Mostly farm management or bejeweled-like puzzle games. You’d have to log in multiple times a day because you didn’t want to miss the perfect moment to harvest your pumpkins or let the cool presents that your friends sent you rotten. You open the game, and the browser stutters a bit, after all, the Flash Plugin is a bit heavy for this computer, huh?

Music identity in the digital era

I loved the discussions about bands as a kid. Everyone in school seemed to know a lot about their favorite music. The year such album was out, the lineup changes from the last release, they would know all the best and the worst songs, the conflicts between band members, etc. And I was fascinated by how people were interested in these subjects. Some days, it was hours of talk about the same band because everyone at least knew these bands.

Annileen Devlog #1 - Asset Management

One of the first things to note once you pick BGFX as an abstraction to your graphics APIs, is that it has a set of tools for asset conversion. And that is because it has importers for a few specific texture and mesh types and also a shader compiler that will generate shader for all the platforms supported, such as OpenGL, DirectX and Metal. Since the main point of using BGFX is portability, not using these tools, especially the shader compiler, is stupid.

Annileen Devlog #0 - Introduction

Back in 2018, I was writing shaders more often than ever and an interest in graphics programming sparked. Everybody was talking about Vulkan or DirectX12, but I didn’t even know OpenGL, or the difference between all of them. On my first years of game programing, I remember the always-recommended NeHe OpenGL Tutorials, that I could never do because I couldn’t understand much English. That was definitely time to learn some OpenGL, and I was presented with the more cohesive and modern LearnOpenGL, which I couldn’t recommend more, with the acessible language and lot of content, it will not only teach you OpenGL but several of the most important techniques to build a fully featured 3d renderer.