Skip to content

Instantly share code, notes, and snippets.

View mtbarr's full-sized avatar
🏠
Working from home

Matheus Barreto mtbarr

🏠
Working from home
  • Fortaleza, Ceará
  • 05:02 (UTC -03:00)
  • X @mtbarrx
View GitHub Profile
Dificuldade Nº de Desafios Npcs
Fácil 4 Raditz, Saibamen, Nappa, Guldo
Médio 5 Vegeta, Capitão Ginyu, Freeza (Forma 1-3), Freeza (Forma Final), Androides 17/18
Difícil 5 Cell Imperfeito, Cell Semi-Perfeito, Cell Perfeito, Dabura, Majin Buu
Épico 6 Super Buu, Kid Buu, Beerus, Frost, Hit, Goku Black
Divino 7 Whis, Zamasu, Goku Black Rosé, Zamasu Fundido, Toppo, Jiren

Javismo Cultural: Quando a Herança Pesa Mais que a Linguagem

Esses dias estava ouvindo o podcast Papinho Tech e, em um dado momento, o convidado — um dev bem conhecido da comunidade Java — soltou uma fala que me fez parar pra pensar:

“Me perguntaram se eu entendia do Garbage Collector do Java. Eu falei: pra quê? Ele é automático, já limpa a memória sozinho.”

Achei engraçado na hora, mas depois fiquei refletindo sobre o que essa frase realmente significa. Não é sobre a resposta em si, mas sobre como ela reflete um pensamento que ainda está muito presente em parte da comunidade Java.

Tem uma galera que parece acreditar que, no Java, “tudo é resolvido pela JVM”. A abstração de tudo, a confiança na magia por trás da linguagem, o uso de frameworks que nunca se questiona... Essa mentalidade, por mais prática que tenha sido no passado, acabou criando uma espécie de Javismo Cultural — uma forma de pensar que, muitas vezes, complica mais do que resolve.

Kotlin Code:

suspend fun fetchForUserStatus(uniqueId: UUID): UserStatus? { 
  return repository.findOne(uniqueId);
}

Java Code:

public CompletableFuture<@Nullable UserStautus> fetchForUserStatus(UUID uniqueId) { 

Ou como evitar que dados ruins entrem e piorem seu código

Recentemente, me deparei com um bug causado por um valor inesperado que passou despercebido na entrada de um sistema. Nada muito grave, mas o suficiente para causar uma dor de cabeça. Foi um daqueles momentos em que pensei: "Eu já devia ter validado isso na borda."

Essa situação reforça algo que considero essencial em qualquer projeto: validar os dados desde a entrada. Pode parecer uma prática simples, mas ela evita problemas muito maiores lá na frente.

O que são as bordas?

Chamamos de "borda" qualquer ponto de entrada de dados no seu sistema. Pode ser um endpoint de API, um formulário da web, uma fila de mensagens, um arquivo de configuração, ou até mesmo o construtor de uma classe. Sempre que você recebe algo de fora — ou até de outra parte do seu próprio sistema — está lidando com uma borda.

package parser
import "regexp"
var (
onlyDigits = regexp.MustCompile(`^\d+$`)
onlyZeroOrOne = regexp.MustCompile(`^[01]$`)
signedInteger = regexp.MustCompile(`^-?\d+$`)
floatNumber = regexp.MustCompile(`^-?\d+(\.\d+)?$`)
@mtbarr
mtbarr / idea-gcg1.vmoptions
Created March 7, 2025 14:59 — forked from mahmoudimus/idea-gcg1.vmoptions
A running timeline of my IntelliJ on Steroids with GC tuning
-ea
-server
-Xss256k
-Xms4G
-Xmx4G
-XX:+IgnoreUnrecognizedVMOptions
-XX:+UnlockExperimentalVMOptions
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:-UseSerialGC
{
"status": "ABLE_TO_VOTE"
}
{
"result": "success",
"documentation": "https://www.exchangerate-api.com/docs",
"terms_of_use": "https://www.exchangerate-api.com/terms",
"time_last_update_unix": 1737331202,
"time_last_update_utc": "Mon, 20 Jan 2025 00:00:02 +0000",
"time_next_update_unix": 1737417602,
"time_next_update_utc": "Tue, 21 Jan 2025 00:00:02 +0000",
"base_code": "USD",
"conversion_rates": {
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.5.0
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.bukkit;
public enum Sound {
AMBIENCE_CAVE,
AMBIENCE_RAIN,