A web tool for creating crosswords. Although there already exists a ton of software for building crosswords, none of them support writing the clues in the cells themselves, which is a hallmark of the swedish-style crosswords that are popular here in Brazil.
It isn't very sophisticated but fits my purposes very well, and I've made dozens of crosswords using this tool. To take a look at some of them, click here!
A simple Python script to extract "good" screenshots from videos. It basically uses OpenCV to extract a high number of frames and then clusters them by color using K-Means. Finally, the closest screenshot to each centroid is returned.
This idea was born out of necessity: I wanted to add screenshots to my old brazilian CD-ROMs projects, but dreaded the thought of doing it manually. While the core idea of this script is not very sophisticated, I was pleasantly surprised by the results, and they definitely solved my problem.
A visualization of the popular Simulated Annealing (SA) algorithm, using the clustering problem as example. The user can tweak parameters, test different configurations, and watch the pseudo-code respond in real-time. Intended as an educational tool to complement other texts.
This was done as a "spiritual sequel" to my Perceptron visualization (see below). This one is more sophisticated, and served to get me more comfortable with D3.js. I'm proud of how it turned out!
A fun online tool for translating korean names into brazilian portuguese, and vice-versa. Of course there's no real way to translate a name from a language to another, so I use the popularity of each name to make a pairing between them. I also made a cool visualization aid so that the user can see the pairing happening in real-time.
This took all my free time during a month, and I'm extremely proud of the end result. Not only I improved my knowledge of D3.js, I also think the visualization turned out pretty cool. I also detailed my process with a write-up (in portuguese) which I think is well-written.
A visualization of the Perceptron Learning Algorithm, one of the simplest models in machine learning. The user can step over different iterations of the algorithm and watch the linear model slowly converging. This tool was made to accompany a post-graduate course which I served as TA in the Summer of 2022.
The initial version was made using p5.js, but I realized that it would be a great opportunity to finally learn D3.js, so I remade it.
An analysis of the best starting word for the web-game Term.ooo, AKA the brazilian portuguese version of Wordle.
I used some basic statistics to calculate each word's average number of possible solutions, which I then used to rank possible guesses and find out the best one. This was mostly born out of discussions with a friend of mine (@BrunoOgava).
You know what they say: the only thing more fun than playing a game, is removing the fun by optimizing the game!
My graduate research involves a type of model known as "decision tree". After spending countless hours drawing these finnicky fellas, I finally decided to bite the bullet and automate the drawing procedure. The result is a general web tool for drawing not only decision trees, but any tree-like structure.
Drawing a tree is not as straightforward as it may seem, but I'd already learned the hoops from the MCTS visualization project (see below), so it wasn't as hard as the first time.
I made a script to find every single portuguese word that can be written in 1337speak using brazilian license plates. Since vanity plates do not exist in Brazil, this is the closest one can get.
You will never look at a license plate the same way again.
A youtube-powered internet radio for personal websites. The idea is that everyone checking the page will be playing the same video at the same timestamp - if you hide the player, it's basically a radio. The target audience is small, personal pages.
Although the code for playing videos is simple, this took a while to make because I included an interface for arranging the radio playlist. There are many possible improvements, but I am happy with the result.
I annotated every single cameo and verbal mention made in the musical webseries "Epic Rap Battles of History", and then made an interactive graph out of the data. The result is best shown than explained.
This is probably one of the most labor-intensive projects I've ever done, and I'm very satisfied with how it turned out.
The Kindle e-reader allows you to make highlights and annotations (called "clippings"), however the device offers no easy-to-use interface to read them. This page offers such an interface - you just have to upload the "My Clippings.txt" file located in the root of every Kindle device.
Disclaimer: there are many other projects like this one on the web, but this is the only one that focuses on devices in brazilian portuguese (the clippings file is a little different).
A team effort from the past, brought to light once again. In this page you can find the lost Brazilian translation of Pokémon's 1st and 2nd generation of creatures, as well as a web tool for you to create your own translation with your friends.
Although the origin is dubious, this page got quite popular with streamers during the first few weeks, with react videos by cellbit and felps. Truly!
During the '90s and early '00s, hundreds of CD-ROM videogames were sold in Brazilian magazines, leaving permanent marks in the hippocampi of many a child. But although these games were quite popular, today there is little to no information about them on the internet, and digital versions are still scarce.
In this context, I try to contribute to the overall community by finding these games, making them publically available, cataloguing what is known, and publishing recorded longplays of them. It's a gigantic task, but with the help and collaborative effort of many people, almost two hundred once-lost games have been found!
Monte Carlo Tree Search (MCTS) is a very popular algorithm in reinforcement learning, however it can be quite tricky to understand. In this page I offer a dynamic step-by-step visualization of how the algorithm works in a very intuitive environment: tic-tac-toe.
The visualization was done using p5js. Did you know that it is not trivial to dynamically determine the position of every node in an unbalanced tree, such as the one in the left? Well, I sure didn't!